Rename TOSCA Control Loop to ACM 57/127057/8
authorliamfallon <liam.fallon@est.tech>
Tue, 25 Jan 2022 19:55:43 +0000 (19:55 +0000)
committerliamfallon <liam.fallon@est.tech>
Fri, 18 Feb 2022 15:54:40 +0000 (15:54 +0000)
This commit renames the TOSCA Control Loop functionality in CLAMP to
Automation Composition Management.

This review is a direct renaming review and, as everything is renamed
together it is large.

Issue-ID: POLICY-3939
Change-Id: I28f0a6dd889bf3570a4c1365ae9e71fc58db6d6c
Signed-off-by: liamfallon <liam.fallon@est.tech>
459 files changed:
common/src/main/java/org/onap/policy/clamp/common/acm/exception/AutomationCompositionException.java [moved from common/src/main/java/org/onap/policy/clamp/controlloop/common/exception/ControlLoopException.java with 75% similarity]
common/src/main/java/org/onap/policy/clamp/common/acm/exception/AutomationCompositionRuntimeException.java [moved from common/src/main/java/org/onap/policy/clamp/controlloop/common/exception/ControlLoopRuntimeException.java with 64% similarity]
common/src/main/java/org/onap/policy/clamp/common/acm/rest/CoderHttpMesageConverter.java [moved from common/src/main/java/org/onap/policy/clamp/controlloop/common/rest/CoderHttpMesageConverter.java with 88% similarity]
common/src/main/java/org/onap/policy/clamp/common/acm/rest/RequestResponseLoggingFilter.java [moved from common/src/main/java/org/onap/policy/clamp/controlloop/common/rest/RequestResponseLoggingFilter.java with 98% similarity]
common/src/main/java/org/onap/policy/clamp/common/acm/startstop/CommonCommandLineArguments.java [moved from common/src/main/java/org/onap/policy/clamp/controlloop/common/startstop/CommonCommandLineArguments.java with 77% similarity]
common/src/main/resources/tosca/ApplicationServiceDescriptorTypes.yaml [deleted file]
common/src/main/resources/tosca/AutomationCompositionTOSCAServiceTemplateTypes.yaml [moved from common/src/main/resources/tosca/ControlLoopTOSCAServiceTemplateTypes.yaml with 81% similarity]
common/src/main/resources/tosca/CdsAutomationCompositionElementType.yaml [moved from common/src/main/resources/tosca/CdsControlLoopElementType.yaml with 78% similarity]
common/src/main/resources/tosca/DcaeControlLoopElementType.yaml [deleted file]
common/src/main/resources/tosca/HttpAutomationCompositionElementType.yaml [moved from common/src/main/resources/tosca/HttpControlLoopElementType.yaml with 77% similarity]
common/src/main/resources/tosca/KubernetesAutomationCompositionElementType.yaml [moved from common/src/main/resources/tosca/KubernetesControlLoopElementType.yaml with 86% similarity]
common/src/main/resources/tosca/PolicyAutomationCompositionElementType.yaml [moved from common/src/main/resources/tosca/PolicyControlLoopElementType.yaml with 68% similarity]
common/src/test/java/org/onap/policy/clamp/common/acm/exception/ExceptionsTest.java [moved from common/src/test/java/org/onap/policy/clamp/controlloop/common/exception/ExceptionsTest.java with 51% similarity]
common/src/test/java/org/onap/policy/clamp/common/acm/rest/CoderHttpMessageConverterTest.java [moved from common/src/test/java/org/onap/policy/clamp/controlloop/common/rest/CoderHttpMessageConverterTest.java with 82% similarity]
common/src/test/java/org/onap/policy/clamp/common/acm/rest/RequestResponseLoggingFilterTest.java [moved from common/src/test/java/org/onap/policy/clamp/controlloop/common/rest/RequestResponseLoggingFilterTest.java with 97% similarity]
common/src/test/java/org/onap/policy/clamp/common/acm/startstop/CommonCommandLineArgumentsTest.java [moved from common/src/test/java/org/onap/policy/clamp/controlloop/common/startstop/CommonCommandLineArgumentsTest.java with 97% similarity]
common/src/test/resources/asd/MyDomainASDDefintion.yaml [deleted file]
common/src/test/resources/demo/Notes.txt
common/src/test/resources/demo/config/DEMO.postman_collection.json
common/src/test/resources/demo/config/PolicyParticipantConfig.json
common/src/test/resources/demo/config/RuntimeConfig.json
common/src/test/resources/examples/acm/KubernetesHelm.yaml [moved from common/src/test/resources/examples/controlloop/KubernetesHelm.yaml with 100% similarity]
common/src/test/resources/examples/acm/PMSH/consul_call_body.json [moved from common/src/test/resources/examples/controlloop/PMSH/consul_call_body.json with 100% similarity]
common/src/test/resources/examples/acm/PMSH/consul_url.txt [moved from common/src/test/resources/examples/controlloop/PMSH/consul_url.txt with 100% similarity]
common/src/test/resources/examples/acm/PMSH/pmsh.postman2.0_collection.json [moved from common/src/test/resources/examples/controlloop/PMSH/pmsh.postman2.0_collection.json with 100% similarity]
common/src/test/resources/examples/acm/PMSH/pmsh_cloudify_blueprint.yaml [moved from common/src/test/resources/examples/controlloop/PMSH/pmsh_cloudify_blueprint.yaml with 100% similarity]
common/src/test/resources/examples/acm/PMSH/pmsh_monitoring_policy.json [moved from common/src/test/resources/examples/controlloop/PMSH/pmsh_monitoring_policy.json with 100% similarity]
common/src/test/resources/examples/acm/PMSH/pmsh_monitoring_policy.yaml [moved from common/src/test/resources/examples/controlloop/PMSH/pmsh_monitoring_policy.yaml with 100% similarity]
common/src/test/resources/examples/acm/PMSH/pmsh_monitoring_policy_type.yaml [moved from common/src/test/resources/examples/controlloop/PMSH/pmsh_monitoring_policy_type.yaml with 100% similarity]
common/src/test/resources/examples/acm/PMSH/pmsh_operational_policy.json [moved from common/src/test/resources/examples/controlloop/PMSH/pmsh_operational_policy.json with 100% similarity]
common/src/test/resources/examples/acm/PMSH/pmsh_operational_policy.yaml [moved from common/src/test/resources/examples/controlloop/PMSH/pmsh_operational_policy.yaml with 100% similarity]
common/src/test/resources/examples/acm/PMSubscriptionHandling.yaml [moved from common/src/test/resources/examples/controlloop/PMSubscriptionHandling.yaml with 100% similarity]
common/src/test/resources/examples/acm/PMSubscriptionHandling_GuilinFormat.yaml [moved from common/src/test/resources/examples/controlloop/PMSubscriptionHandling_GuilinFormat.yaml with 100% similarity]
common/src/test/resources/examples/acm/http-participant/http.postman2.0_collection.json [moved from common/src/test/resources/examples/controlloop/http-participant/http.postman2.0_collection.json with 100% similarity]
common/src/test/resources/examples/acm/k8s-participant/k8s.postman2.0_collection.json [moved from common/src/test/resources/examples/controlloop/k8s-participant/k8s.postman2.0_collection.json with 100% similarity]
common/src/test/resources/examples/controlloop/original/cloop_DCAE_VES_TCA_substitution.yaml [deleted file]
common/src/test/resources/examples/controlloop/original/cloop_base_types.yaml [deleted file]
common/src/test/resources/examples/controlloop/original/cloop_dcae_example.yaml [deleted file]
common/src/test/resources/examples/controlloop/original/cloop_dcae_types.yaml [deleted file]
common/src/test/resources/examples/controlloop/original/cloop_other_types.yaml [deleted file]
models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoopState.java [deleted file]
models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ControlLoopProvider.java [deleted file]
models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantMessageType.java [deleted file]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AcElementStatistics.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ClElementStatistics.java with 87% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AcElementStatisticsList.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ClElementStatisticsList.java with 85% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationComposition.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoop.java with 54% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionElement.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoopElement.java with 84% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionElementAck.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoopElementAck.java with 86% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionElementDefinition.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoopElementDefinition.java with 66% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionInfo.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoopInfo.java with 67% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionOrderedState.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoopOrderedState.java with 52% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionState.java [new file with mode: 0644]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionStatistics.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoopStatistics.java with 86% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositions.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoops.java with 73% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/Participant.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/Participant.java with 97% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/ParticipantDefinition.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ParticipantDefinition.java with 79% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/ParticipantHealthStatus.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ParticipantHealthStatus.java with 95% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/ParticipantState.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ParticipantState.java with 55% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/ParticipantStatistics.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ParticipantStatistics.java with 95% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/ParticipantStatisticsList.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ParticipantStatisticsList.java with 94% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/ParticipantUpdates.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ParticipantUpdates.java with 81% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/ParticipantUtils.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ParticipantUtils.java with 72% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/notification/AutomationCompositionNotification.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/notification/ControlLoopNotification.java with 75% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/notification/AutomationCompositionStatus.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/notification/ControlLoopStatus.java with 88% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/AutomationCompositionAck.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ControlLoopAck.java with 58% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/AutomationCompositionStateChange.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ControlLoopStateChange.java with 59% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/AutomationCompositionUpdate.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ControlLoopUpdate.java with 63% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantAckMessage.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantAckMessage.java with 93% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantDeregister.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantDeregister.java with 92% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantDeregisterAck.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantDeregisterAck.java with 92% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantMessage.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantMessage.java with 89% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantMessageType.java [new file with mode: 0644]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantRegister.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantRegister.java with 92% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantRegisterAck.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantRegisterAck.java with 92% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantResponseStatus.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantResponseStatus.java with 94% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantStatus.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantStatus.java with 69% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantStatusReq.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantStatusReq.java with 90% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantUpdate.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantUpdate.java with 83% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantUpdateAck.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantUpdateAck.java with 93% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/rest/GenericNameVersion.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/rest/GenericNameVersion.java with 94% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/rest/SimpleResponse.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/rest/SimpleResponse.java with 94% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/rest/TypedSimpleResponse.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/rest/TypedSimpleResponse.java with 94% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/rest/commissioning/CommissioningResponse.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/rest/commissioning/CommissioningResponse.java with 84% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/rest/instantiation/AutomationCompositionOrderStateResponse.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/rest/instantiation/ControlLoopOrderStateResponse.java with 66% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/rest/instantiation/AutomationCompositionPrimed.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/rest/instantiation/ControlLoopPrimed.java with 90% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/rest/instantiation/AutomationCompositionPrimedResponse.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/rest/instantiation/ControlLoopPrimedResponse.java with 74% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/rest/instantiation/InstancePropertiesResponse.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/rest/instantiation/InstancePropertiesResponse.java with 89% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/rest/instantiation/InstantiationCommand.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/rest/instantiation/InstantiationCommand.java with 70% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/rest/instantiation/InstantiationOrderStateResponse.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/rest/instantiation/InstantiationOrderStateResponse.java with 81% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/messages/rest/instantiation/InstantiationResponse.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/rest/instantiation/InstantiationResponse.java with 85% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAcElementStatistics.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/JpaClElementStatistics.java with 67% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationComposition.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/JpaControlLoop.java with 56% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationCompositionElement.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/JpaControlLoopElement.java with 76% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipant.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/JpaParticipant.java with 95% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipantStatistics.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/JpaParticipantStatistics.java with 94% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AcElementStatisticsProvider.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ClElementStatisticsProvider.java with 51% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java [new file with mode: 0644]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/ParticipantProvider.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantProvider.java with 94% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/ParticipantStatisticsProvider.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantStatisticsProvider.java with 92% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/ProviderUtils.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ProviderUtils.java with 95% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/ServiceTemplateProvider.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ServiceTemplateProvider.java with 95% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/AcElementStatisticsRepository.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/ClElementStatisticsRepository.java with 78% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/AutomationCompositionRepository.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/ControlLoopRepository.java with 78% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/FilterRepository.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/FilterRepository.java with 96% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/FilterRepositoryImpl.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/FilterRepositoryImpl.java with 95% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/ParticipantRepository.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/ParticipantRepository.java with 86% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/ParticipantStatisticsRepository.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/ParticipantStatisticsRepository.java with 86% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/ToscaNodeTemplateRepository.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/ToscaNodeTemplateRepository.java with 93% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/ToscaNodeTemplatesRepository.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/ToscaNodeTemplatesRepository.java with 93% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/ToscaServiceTemplateRepository.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/ToscaServiceTemplateRepository.java with 93% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/rest/RestUtils.java [moved from models/src/main/java/org/onap/policy/clamp/controlloop/models/rest/RestUtils.java with 92% similarity]
models/src/main/java/org/onap/policy/clamp/models/acm/utils/AcmUtils.java [moved from common/src/main/java/org/onap/policy/clamp/controlloop/common/utils/CommonUtils.java with 58% similarity]
models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoopElementTest.java [deleted file]
models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoopTest.java [deleted file]
models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/JpaClElementStatisticsTest.java [deleted file]
models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/JpaControlLoopElementTest.java [deleted file]
models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/JpaControlLoopTest.java [deleted file]
models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ClElementStatisticsProviderTest.java [deleted file]
models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ControlLoopProviderTest.java [deleted file]
models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/notification/ControlLoopNotificationTest.java [deleted file]
models/src/test/java/org/onap/policy/clamp/models/acm/concepts/AcElementStatisticsTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ClElementStatisticsTest.java with 56% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionConceptPojosTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoopConceptPojosTest.java with 91% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionElementTest.java [new file with mode: 0644]
models/src/test/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionTest.java [new file with mode: 0644]
models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantStatisticsTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ParticipantStatisticsTest.java with 97% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ParticipantTest.java with 97% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantUtilsTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ParticipantUtilsTest.java with 56% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/notification/AutomationCompositionNotificationTest.java [new file with mode: 0644]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/notification/AutomationCompositionStatusTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/notification/ControlLoopStatusTest.java with 61% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/notification/NotificationPojosTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/notification/NotificationPojosTest.java with 96% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/AutomationCompositionAckTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ControlLoopAckTest.java with 55% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/AutomationCompositionStateChangeTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ControlLoopStateChangeTest.java with 60% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/AutomationCompositionUpdateTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ControlLoopUpdateTest.java with 57% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantAckMessageTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantAckMessageTest.java with 95% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantDeregisterAckTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantDeregisterAckTest.java with 87% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantDeregisterTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantDeregisterTest.java with 85% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantMessageTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantMessageTest.java with 95% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantMessageUtils.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantMessageUtils.java with 96% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantPojosTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantPojosTest.java with 90% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantRegisterAckTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantRegisterAckTest.java with 87% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantRegisterTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantRegisterTest.java with 85% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantStatusReqTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantStatusReqTest.java with 84% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantStatusTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantStatusTest.java with 53% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantUpdateAckTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantUpdateAckTest.java with 87% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantUpdateTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantUpdateTest.java with 76% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/rest/MessagesRestPojosTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/rest/MessagesRestPojosTest.java with 97% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/messages/rest/instantiation/InstantiationCommandTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/rest/instantiation/InstantiationCommandTest.java with 86% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/DummyJpaAcElementStatisticsChild.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/DummyJpaControlLoopChild.java with 83% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/DummyJpaAutomationCompositionChild.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/DummyJpaControlLoopElementChild.java with 82% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/DummyJpaAutomationCompositionElementChild.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/DummyJpaClElementStatisticsChild.java with 81% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/DummyJpaParticipantChild.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/DummyJpaParticipantChild.java with 92% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/DummyJpaParticipantStatisticsChild.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/DummyJpaParticipantStatisticsChild.java with 93% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAcElementStatisticsTest.java [new file with mode: 0644]
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationCompositionElementTest.java [new file with mode: 0644]
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationCompositionTest.java [new file with mode: 0644]
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipantStatisticsTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/JpaParticipantStatisticsTest.java with 89% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaParticipantTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/JpaParticipantTest.java with 96% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/PojosTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/PojosTest.java with 96% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AcElementStatisticsProviderTest.java [new file with mode: 0644]
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java [new file with mode: 0644]
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/ParticipantProviderTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantProviderTest.java with 92% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/ParticipantStatisticsProviderTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantStatisticsProviderTest.java with 90% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/ServiceTemplateProviderTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ServiceTemplateProviderTest.java with 96% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/repository/FilterRepositoryImplTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/FilterRepositoryImplTest.java with 68% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/rest/RestUtilsTest.java [moved from models/src/test/java/org/onap/policy/clamp/controlloop/models/rest/RestUtilsTest.java with 97% similarity]
models/src/test/java/org/onap/policy/clamp/models/acm/utils/AcmUtilsTest.java [moved from common/src/test/java/org/onap/policy/clamp/controlloop/common/utils/CommonUtilsTest.java with 70% similarity]
models/src/test/resources/META-INF/persistence.xml
models/src/test/resources/examples/acm/PMSubscriptionHandling.yaml [moved from models/src/test/resources/examples/controlloop/PMSubscriptionHandling.yaml with 97% similarity]
models/src/test/resources/json/AutomationCompositionElementNoOrderedState.json [moved from models/src/test/resources/json/ControlLoopElementNoOrderedState.json with 90% similarity]
models/src/test/resources/json/AutomationCompositionNoOrderedState.json [moved from models/src/test/resources/json/ControlLoopNoOrderedState.json with 63% similarity]
models/src/test/resources/providers/TestAcElementStatistics.json [moved from models/src/test/resources/providers/TestClElementStatistics.json with 70% similarity]
models/src/test/resources/providers/TestAutomationCompositions.json [moved from models/src/test/resources/providers/TestControlLoops.json with 66% similarity]
models/src/test/resources/providers/TestParticipant.json
models/src/test/resources/providers/UpdateAutomationCompositions.json [moved from models/src/test/resources/providers/UpdateControlLoops.json with 65% similarity]
packages/policy-clamp-docker/pom.xml
packages/policy-clamp-docker/src/main/docker/AcmRuntimeDockerfile [moved from packages/policy-clamp-docker/src/main/docker/ClRuntimeDockerfile with 81% similarity]
packages/policy-clamp-docker/src/main/docker/HttpParticipantDockerfile
packages/policy-clamp-docker/src/main/docker/KubernetesParticipantDockerfile
packages/policy-clamp-docker/src/main/docker/PolicyParticipantDockerfile
packages/policy-clamp-docker/src/main/docker/acm-runtime.sh [moved from packages/policy-clamp-docker/src/main/docker/controlloop-runtime.sh with 92% similarity]
packages/policy-clamp-tarball/pom.xml
packages/policy-clamp-tarball/src/main/resources/etc/AcRuntimeParameters.yaml [moved from packages/policy-clamp-tarball/src/main/resources/etc/ClRuntimeParameters.yaml with 91% similarity]
packages/policy-clamp-tarball/src/main/resources/etc/HttpParticipantParameters.yaml
packages/policy-clamp-tarball/src/main/resources/etc/KubernetesParticipantParameters.yaml
packages/policy-clamp-tarball/src/main/resources/etc/PolicyParticipantParameters.yaml
participant/participant-impl/participant-impl-cds/pom.xml
participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/acm/participant/http/Application.java [moved from participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/controlloop/participant/http/Application.java with 82% similarity]
participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/acm/participant/http/config/ParticipantConfig.java [moved from participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/config/ParticipantConfig.java with 62% similarity]
participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/acm/participant/http/config/SecurityConfig.java [moved from participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/controlloop/participant/http/config/SecurityConfig.java with 96% similarity]
participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/acm/participant/http/main/exception/HttpWebClientException.java [moved from participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/controlloop/participant/http/main/exception/HttpWebClientException.java with 94% similarity]
participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/acm/participant/http/main/handler/AutomationCompositionElementHandler.java [moved from participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/controlloop/participant/http/main/handler/ControlLoopElementHandler.java with 57% similarity]
participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/acm/participant/http/main/models/ConfigRequest.java [moved from participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/controlloop/participant/http/main/models/ConfigRequest.java with 95% similarity]
participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/acm/participant/http/main/models/ConfigurationEntity.java [moved from participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/controlloop/participant/http/main/models/ConfigurationEntity.java with 94% similarity]
participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/acm/participant/http/main/models/RestParams.java [moved from participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/controlloop/participant/http/main/models/RestParams.java with 95% similarity]
participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/acm/participant/http/main/webclient/AcHttpClient.java [moved from participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/controlloop/participant/http/main/webclient/ClHttpClient.java with 90% similarity]
participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/acm/participant/http/parameters/ParticipantHttpParameters.java [moved from participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/controlloop/participant/http/parameters/ParticipantHttpParameters.java with 84% similarity]
participant/participant-impl/participant-impl-http/src/main/resources/config/application.yaml
participant/participant-impl/participant-impl-http/src/test/java/org/onap/policy/clamp/acm/participant/http/handler/AcElementHandlerTest.java [new file with mode: 0644]
participant/participant-impl/participant-impl-http/src/test/java/org/onap/policy/clamp/acm/participant/http/rest/ActuatorControllerTest.java [moved from participant/participant-impl/participant-impl-http/src/test/java/org/onap/policy/clamp/controlloop/participant/http/rest/ActuatorControllerTest.java with 95% similarity]
participant/participant-impl/participant-impl-http/src/test/java/org/onap/policy/clamp/acm/participant/http/utils/CommonActuatorController.java [moved from participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/controlloop/participant/kubernetes/utils/CommonActuatorController.java with 96% similarity]
participant/participant-impl/participant-impl-http/src/test/java/org/onap/policy/clamp/acm/participant/http/utils/CommonTestData.java [moved from participant/participant-impl/participant-impl-http/src/test/java/org/onap/policy/clamp/controlloop/participant/http/utils/CommonTestData.java with 57% similarity]
participant/participant-impl/participant-impl-http/src/test/java/org/onap/policy/clamp/acm/participant/http/utils/ToscaUtils.java [moved from participant/participant-impl/participant-impl-http/src/test/java/org/onap/policy/clamp/controlloop/participant/http/utils/ToscaUtils.java with 74% similarity]
participant/participant-impl/participant-impl-http/src/test/java/org/onap/policy/clamp/acm/participant/http/webclient/AcHttpClientTest.java [moved from participant/participant-impl/participant-impl-http/src/test/java/org/onap/policy/clamp/controlloop/participant/http/webclient/ClHttpClientTest.java with 89% similarity]
participant/participant-impl/participant-impl-http/src/test/java/org/onap/policy/clamp/controlloop/participant/http/handler/ClElementHandlerTest.java [deleted file]
participant/participant-impl/participant-impl-http/src/test/resources/HttpParticipantConfig.yaml
participant/participant-impl/participant-impl-http/src/test/resources/application_test.properties
participant/participant-impl/participant-impl-kubernetes/pom.xml
participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/Application.java [moved from participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/Application.java with 81% similarity]
participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/configurations/ParticipantConfig.java [moved from participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/configurations/ParticipantConfig.java with 95% similarity]
participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/configurations/ParticipantIntermediaryConfig.java [moved from participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/configurations/ParticipantIntermediaryConfig.java with 62% similarity]
participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/configurations/SecurityConfig.java [moved from participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/configurations/SecurityConfig.java with 95% similarity]
participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/configurations/SpringFoxConfig.java [moved from participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/configurations/SpringFoxConfig.java with 90% similarity]
participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/controller/ChartController.java [moved from participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/controller/ChartController.java with 92% similarity]
participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/exception/ServiceException.java [moved from participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/exception/ServiceException.java with 93% similarity]
participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/handler/AutomationCompositionElementHandler.java [moved from participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/handler/ControlLoopElementHandler.java with 53% similarity]
participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/HelmClient.java [moved from participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/helm/HelmClient.java with 96% similarity]
participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/PodStatusValidator.java [moved from participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/helm/PodStatusValidator.java with 88% similarity]
participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/models/ChartInfo.java [moved from participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/models/ChartInfo.java with 94% similarity]
participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/models/ChartList.java [moved from participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/models/ChartList.java with 93% similarity]
participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/models/HelmRepository.java [moved from participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/models/HelmRepository.java with 93% similarity]
participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/models/InstallationInfo.java [moved from participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/models/InstallationInfo.java with 93% similarity]
participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/parameters/ParticipantK8sParameters.java [moved from participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/parameters/ParticipantK8sParameters.java with 84% similarity]
participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/service/ChartService.java [moved from participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/service/ChartService.java with 91% similarity]
participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/acm/participant/kubernetes/service/ChartStore.java [moved from participant/participant-impl/participant-impl-kubernetes/src/main/java/org/onap/policy/clamp/controlloop/participant/kubernetes/service/ChartStore.java with 95% similarity]
participant/participant-impl/participant-impl-kubernetes/src/main/resources/config/application.yaml
participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/handler/AutomationCompositionElementHandlerTest.java [new file with mode: 0644]
participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/HelmClientTest.java [moved from participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/controlloop/participant/kubernetes/helm/HelmClientTest.java with 92% similarity]
participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/helm/PodStatusValidatorTest.java [moved from participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/controlloop/participant/kubernetes/helm/PodStatusValidatorTest.java with 81% similarity]
participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/parameters/CommonTestData.java [moved from participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/controlloop/participant/kubernetes/parameters/CommonTestData.java with 91% similarity]
participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/parameters/ParticipantK8sParametersTest.java [moved from participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/controlloop/participant/kubernetes/parameters/ParticipantK8sParametersTest.java with 95% similarity]
participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/rest/ActuatorControllerTest.java [moved from participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/controlloop/participant/kubernetes/rest/ActuatorControllerTest.java with 95% similarity]
participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/rest/ChartControllerTest.java [moved from participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/controlloop/participant/kubernetes/rest/ChartControllerTest.java with 95% similarity]
participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/service/ChartServiceTest.java [moved from participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/controlloop/participant/kubernetes/service/ChartServiceTest.java with 93% similarity]
participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/service/ChartStoreTest.java [moved from participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/controlloop/participant/kubernetes/service/ChartStoreTest.java with 94% similarity]
participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/utils/CommonActuatorController.java [moved from participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/utils/CommonActuatorController.java with 96% similarity]
participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/utils/TestUtils.java [moved from participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/controlloop/participant/kubernetes/utils/TestUtils.java with 72% similarity]
participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/controlloop/participant/kubernetes/handler/ControlLoopElementHandlerTest.java [deleted file]
participant/participant-impl/participant-impl-kubernetes/src/test/resources/application_test.properties
participant/participant-impl/participant-impl-kubernetes/src/test/resources/servicetemplates/KubernetesHelm.yaml
participant/participant-impl/participant-impl-policy/pom.xml
participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/acm/participant/policy/PolicyParticipantApplication.java [moved from participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/PolicyParticipantApplication.java with 82% similarity]
participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/acm/participant/policy/client/AbstractHttpClient.java [moved from participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/client/AbstractHttpClient.java with 88% similarity]
participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/acm/participant/policy/client/PolicyApiHttpClient.java [moved from participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/client/PolicyApiHttpClient.java with 94% similarity]
participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/acm/participant/policy/client/PolicyPapHttpClient.java [moved from participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/client/PolicyPapHttpClient.java with 95% similarity]
participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/acm/participant/policy/config/ParticipantConfig.java [moved from participant/participant-impl/participant-impl-http/src/main/java/org/onap/policy/clamp/controlloop/participant/http/config/ParticipantConfig.java with 62% similarity]
participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/acm/participant/policy/config/SecurityConfig.java [moved from participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/config/SecurityConfig.java with 96% similarity]
participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/acm/participant/policy/main/handler/AutomationCompositionElementHandler.java [new file with mode: 0644]
participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/acm/participant/policy/main/parameters/ParticipantPolicyParameters.java [moved from participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/main/parameters/ParticipantPolicyParameters.java with 87% similarity]
participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/main/handler/ControlLoopElementHandler.java [deleted file]
participant/participant-impl/participant-impl-policy/src/main/resources/META-INF/persistence.xml
participant/participant-impl/participant-impl-policy/src/main/resources/config/application.yaml
participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/acm/participant/policy/endtoend/ParticipantMessagesTest.java [moved from participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/endtoend/ParticipantMessagesTest.java with 83% similarity]
participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/acm/participant/policy/main/handler/AutomationCompositionElementHandlerTest.java [new file with mode: 0644]
participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/acm/participant/policy/main/parameters/CommonTestData.java [moved from participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/parameters/CommonTestData.java with 93% similarity]
participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/acm/participant/policy/main/parameters/ParticipantPolicyParametersTest.java [moved from participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/parameters/ParticipantPolicyParametersTest.java with 86% similarity]
participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/acm/participant/policy/main/rest/ActuatorControllerTest.java [moved from participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/rest/ActuatorControllerTest.java with 95% similarity]
participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/acm/participant/policy/main/utils/CommonActuatorController.java [moved from participant/participant-impl/participant-impl-http/src/test/java/org/onap/policy/clamp/controlloop/participant/http/utils/CommonActuatorController.java with 96% similarity]
participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/acm/participant/policy/main/utils/TestListenerUtils.java [new file with mode: 0644]
participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/handler/ControlLoopElementHandlerTest.java [deleted file]
participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/utils/TestListenerUtils.java [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/application_test.properties
participant/participant-impl/participant-impl-policy/src/test/resources/parameters/TestACParams.yaml [new file with mode: 0644]
participant/participant-impl/participant-impl-policy/src/test/resources/parameters/TestCLParams.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/parameters/logback-test.xml
participant/participant-impl/participant-impl-policy/src/test/resources/policies/vCPE.policies.optimization.input.tosca.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.Match.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.Naming.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.Optimization.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.guard.Common.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.guard.common.Blacklist.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.guard.common.Filter.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.guard.common.FrequencyLimiter.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.guard.common.MinMax.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.guard.coordination.FirstBlocksSecond.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.operational.Common.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.operational.common.Apex.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.operational.common.Drools.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.monitoring.dcae-pm-mapper.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.monitoring.dcae-pm-subscription-handler.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.monitoring.dcae-restconfcollector.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.monitoring.tcagen2.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.native.Apex.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.native.Drools.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.native.Xacml.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.Resource.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.Service.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.AffinityPolicy.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.DistancePolicy.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.HpaPolicy.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.OptimizationPolicy.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.PciPolicy.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.Vim_fit.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.VnfPolicy.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.service.QueryPolicy.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.service.SubscriberPolicy.yaml [deleted file]
participant/participant-impl/participant-impl-policy/src/test/resources/utils/servicetemplates/pm_automation_composition_tosca.yaml [moved from participant/participant-impl/participant-impl-policy/src/test/resources/utils/servicetemplates/pm_control_loop_tosca.yaml with 52% similarity]
participant/participant-impl/participant-impl-simulator/pom.xml
participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/simulator/ParticipantSimulatorApplication.java [moved from participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/ParticipantSimulatorApplication.java with 78% similarity]
participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/simulator/config/AafConfiguration.java [moved from participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/config/AafConfiguration.java with 89% similarity]
participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/simulator/config/ParticipantConfig.java [moved from participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/config/ParticipantConfig.java with 69% similarity]
participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/simulator/config/SecurityConfig.java [moved from participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/config/SecurityConfig.java with 95% similarity]
participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/simulator/config/SpringFoxConfig.java [moved from participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/config/SpringFoxConfig.java with 90% similarity]
participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/simulator/config/YamlConfiguration.java [moved from participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/config/YamlConfiguration.java with 92% similarity]
participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/simulator/main/handler/AutomationCompositionElementHandler.java [new file with mode: 0644]
participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/simulator/main/parameters/ParticipantSimulatorParameters.java [moved from participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/main/parameters/ParticipantSimulatorParameters.java with 83% similarity]
participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/simulator/main/rest/AbstractRestController.java [moved from participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/main/rest/AbstractRestController.java with 78% similarity]
participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/simulator/main/rest/GlobalControllerExceptionHandler.java [moved from participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/main/rest/GlobalControllerExceptionHandler.java with 73% similarity]
participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/simulator/main/rest/ParticipantErrorController.java [moved from participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/main/rest/ParticipantErrorController.java with 93% similarity]
participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/simulator/main/rest/ParticipantSimulatorAafFilter.java [moved from participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/main/rest/ParticipantSimulatorAafFilter.java with 95% similarity]
participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/simulator/simulation/SimulationProvider.java [moved from participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/simulation/SimulationProvider.java with 50% similarity]
participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/simulator/simulation/rest/SimulationElementController.java [moved from participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/simulation/rest/SimulationElementController.java with 66% similarity]
participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/simulator/simulation/rest/SimulationParticipantController.java [moved from participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/simulation/rest/SimulationParticipantController.java with 88% similarity]
participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/main/handler/ControlLoopElementHandler.java [deleted file]
participant/participant-impl/participant-impl-simulator/src/main/resources/config/application.yaml
participant/participant-impl/participant-impl-simulator/src/main/resources/version.txt
participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/acm/participant/simulator/endtoend/ParticipantSimulatorTest.java [moved from participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/controlloop/participant/simulator/endtoend/ParticipantSimulatorTest.java with 74% similarity]
participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/acm/participant/simulator/main/handler/AutomationCompositionElementHandlerTest.java [new file with mode: 0644]
participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/acm/participant/simulator/main/parameters/CommonTestData.java [moved from participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/controlloop/participant/simulator/main/parameters/CommonTestData.java with 94% similarity]
participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/acm/participant/simulator/main/parameters/TestParticipantSimulatorParameters.java [moved from participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/controlloop/participant/simulator/main/parameters/TestParticipantSimulatorParameters.java with 93% similarity]
participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/acm/participant/simulator/main/rest/TestListenerUtils.java [new file with mode: 0644]
participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/controlloop/participant/simulator/main/handler/ControlLoopElementHandlerTest.java [deleted file]
participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/controlloop/participant/simulator/main/rest/TestListenerUtils.java [deleted file]
participant/participant-impl/participant-impl-simulator/src/test/resources/application_test.properties
participant/participant-impl/participant-impl-simulator/src/test/resources/rest/servicetemplates/pm_automation_composition_tosca.yaml [moved from participant/participant-impl/participant-impl-simulator/src/test/resources/rest/servicetemplates/pm_control_loop_tosca.yaml with 53% similarity]
participant/participant-intermediary/pom.xml
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/api/AutomationCompositionElementListener.java [new file with mode: 0644]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/api/ParticipantIntermediaryApi.java [new file with mode: 0644]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/ParticipantIntermediaryApiImpl.java [new file with mode: 0644]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/comm/AutomationCompositionStateChangeListener.java [moved from participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ControlLoopStateChangeListener.java with 60% similarity]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/comm/AutomationCompositionUpdateListener.java [moved from participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ControlLoopUpdateListener.java with 58% similarity]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/comm/MessageSender.java [moved from participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/MessageSender.java with 90% similarity]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/comm/ParticipantAckListener.java [moved from participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ParticipantAckListener.java with 87% similarity]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/comm/ParticipantDeregisterAckListener.java [moved from participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ParticipantDeregisterAckListener.java with 81% similarity]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/comm/ParticipantListener.java [moved from participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ParticipantListener.java with 86% similarity]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/comm/ParticipantMessagePublisher.java [moved from participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ParticipantMessagePublisher.java with 71% similarity]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/comm/ParticipantRegisterAckListener.java [moved from participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ParticipantRegisterAckListener.java with 81% similarity]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/comm/ParticipantStatusReqListener.java [moved from participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ParticipantStatusReqListener.java with 81% similarity]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/comm/ParticipantUpdateListener.java [moved from participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ParticipantUpdateListener.java with 81% similarity]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionHandler.java [new file with mode: 0644]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/IntermediaryActivator.java [moved from participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/IntermediaryActivator.java with 88% similarity]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/Listener.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/config/messaging/Listener.java with 95% similarity]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/ParticipantHandler.java [moved from participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ParticipantHandler.java with 62% similarity]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/Publisher.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/config/messaging/Publisher.java with 94% similarity]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/parameters/ParticipantIntermediaryParameters.java [moved from participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/parameters/ParticipantIntermediaryParameters.java with 92% similarity]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/parameters/ParticipantParameters.java [moved from participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/parameters/ParticipantParameters.java with 92% similarity]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/api/ControlLoopElementListener.java [deleted file]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/api/ParticipantIntermediaryApi.java [deleted file]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/api/impl/ParticipantIntermediaryApiImpl.java [deleted file]
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ControlLoopHandler.java [deleted file]
participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/ParticipantIntermediaryApiImplTest.java [moved from participant/participant-intermediary/src/test/java/org/onap/policy/clamp/controlloop/participant/intermediary/api/impl/ParticipantIntermediaryApiImplTest.java with 55% similarity]
participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/comm/ParticipantCommTest.java [moved from participant/participant-intermediary/src/test/java/org/onap/policy/clamp/controlloop/participant/intermediary/comm/ParticipantCommTest.java with 64% similarity]
participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionHandlerTest.java [new file with mode: 0644]
participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/DummyParticipantParameters.java [moved from participant/participant-intermediary/src/test/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/DummyParticipantParameters.java with 80% similarity]
participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/IntermediaryActivatorTest.java [moved from participant/participant-intermediary/src/test/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/IntermediaryActivatorTest.java with 90% similarity]
participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/ParticipantHandlerTest.java [moved from participant/participant-intermediary/src/test/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ParticipantHandlerTest.java with 81% similarity]
participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/main/parameters/CommonTestData.java [moved from participant/participant-intermediary/src/test/java/org/onap/policy/clamp/controlloop/participant/intermediary/main/parameters/CommonTestData.java with 60% similarity]
participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/main/parameters/TestParticipantIntermediaryParameters.java [moved from participant/participant-intermediary/src/test/java/org/onap/policy/clamp/controlloop/participant/intermediary/main/parameters/TestParticipantIntermediaryParameters.java with 85% similarity]
participant/participant-intermediary/src/test/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ControlLoopHandlerTest.java [deleted file]
participant/participant-intermediary/src/test/resources/providers/TestAutomationCompositions.json [moved from participant/participant-intermediary/src/test/resources/providers/TestControlLoops.json with 65% similarity]
pom.xml
runtime-acm/pom.xml [moved from runtime-controlloop/pom.xml with 98% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/Application.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/Application.java with 72% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/commissioning/CommissioningProvider.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/commissioning/CommissioningProvider.java with 70% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/config/AafConfiguration.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/config/AafConfiguration.java with 74% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/config/ConverterConfiguration.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/config/ConverterConfiguration.java with 92% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/config/FilterConfig.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/config/FilterConfig.java with 88% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/config/SecurityConfig.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/config/SecurityConfig.java with 96% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/config/SpringFoxConfig.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/config/SpringFoxConfig.java with 91% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/config/messaging/Listener.java [moved from participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/Listener.java with 94% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/config/messaging/MessageDispatcherActivator.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/config/messaging/MessageDispatcherActivator.java with 87% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/config/messaging/Publisher.java [moved from participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/Publisher.java with 93% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProvider.java [new file with mode: 0644]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/parameters/AcRuntimeParameterGroup.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/parameters/ClRuntimeParameterGroup.java with 89% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/parameters/ParticipantParameters.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/parameters/ParticipantParameters.java with 95% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/parameters/ParticipantUpdateParameters.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/parameters/ParticipantUpdateParameters.java with 95% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/CommissioningController.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/rest/CommissioningController.java with 72% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/InstantiationController.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/rest/InstantiationController.java with 67% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/MonitoringQueryController.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/rest/MonitoringQueryController.java with 62% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/web/AbstractRestController.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/web/AbstractRestController.java with 90% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/web/AutomationConfiguraitonAafFilter.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/web/ControlLoopAafFilter.java with 86% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/web/GlobalControllerExceptionHandler.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/web/GlobalControllerExceptionHandler.java with 79% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/web/RuntimeErrorController.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/main/web/RuntimeErrorController.java with 94% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/monitoring/MonitoringProvider.java [new file with mode: 0644]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/HandleCounter.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/HandleCounter.java with 97% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/MessageIntercept.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/MessageIntercept.java with 94% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionAspect.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionAspect.java with 92% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandler.java [new file with mode: 0644]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScanner.java [new file with mode: 0644]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/AbstractParticipantAckPublisher.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/AbstractParticipantAckPublisher.java with 82% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/AbstractParticipantPublisher.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/AbstractParticipantPublisher.java with 82% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/AutomationCompositionStateChangeAckListener.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ControlLoopUpdateAckListener.java with 57% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/AutomationCompositionStateChangePublisher.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ControlLoopStateChangePublisher.java with 51% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/AutomationCompositionUpdateAckListener.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ControlLoopStateChangeAckListener.java with 57% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/AutomationCompositionUpdatePublisher.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ControlLoopUpdatePublisher.java with 50% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantDeregisterAckPublisher.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ParticipantDeregisterAckPublisher.java with 90% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantDeregisterListener.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ParticipantDeregisterListener.java with 85% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantRegisterAckPublisher.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ParticipantRegisterAckPublisher.java with 92% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantRegisterListener.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ParticipantRegisterListener.java with 85% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantStatusListener.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ParticipantStatusListener.java with 85% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantStatusReqPublisher.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ParticipantStatusReqPublisher.java with 91% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantUpdateAckListener.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ParticipantUpdateAckListener.java with 85% similarity]
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/ParticipantUpdatePublisher.java [moved from runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/ParticipantUpdatePublisher.java with 85% similarity]
runtime-acm/src/main/resources/application.yaml [moved from runtime-controlloop/src/main/resources/application.yaml with 90% similarity]
runtime-acm/src/main/resources/version.txt [moved from runtime-controlloop/src/main/resources/version.txt with 68% similarity]
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/CommissioningProviderTest.java [moved from runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/commissioning/CommissioningProviderTest.java with 67% similarity]
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/CommissioningControllerTest.java [moved from runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/commissioning/rest/CommissioningControllerTest.java with 88% similarity]
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/config/messaging/MessageDispatcherActivatorTest.java [moved from runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/config/messaging/MessageDispatcherActivatorTest.java with 89% similarity]
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProviderTest.java [new file with mode: 0644]
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/InstantiationUtils.java [moved from runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/instantiation/InstantiationUtils.java with 56% similarity]
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/InstantiationControllerTest.java [moved from runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/instantiation/rest/InstantiationControllerTest.java with 56% similarity]
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/main/rest/ActuatorControllerTest.java [moved from runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/main/rest/ActuatorControllerTest.java with 96% similarity]
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/monitoring/TestMonitoringProvider.java [new file with mode: 0644]
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/monitoring/rest/MonitoringQueryControllerTest.java [moved from runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/monitoring/rest/MonitoringQueryControllerTest.java with 64% similarity]
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/HandleCounterTest.java [moved from runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/HandleCounterTest.java with 97% similarity]
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionAspectTest.java [moved from runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionAspectTest.java with 94% similarity]
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandlerTest.java [new file with mode: 0644]
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScannerTest.java [new file with mode: 0644]
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/comm/SupervisionMessagesTest.java [moved from runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/comm/SupervisionMessagesTest.java with 67% similarity]
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/util/CommonTestData.java [moved from runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/util/CommonTestData.java with 66% similarity]
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/util/rest/CommonRestController.java [moved from runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/util/rest/CommonRestController.java with 98% similarity]
runtime-acm/src/test/resources/application_test.properties [moved from runtime-controlloop/src/test/resources/application_test.properties with 89% similarity]
runtime-acm/src/test/resources/parameters/TestParameters.json [moved from runtime-controlloop/src/test/resources/parameters/TestParameters.json with 81% similarity]
runtime-acm/src/test/resources/parameters/logback-test.xml [moved from runtime-controlloop/src/test/resources/parameters/logback-test.xml with 94% similarity]
runtime-acm/src/test/resources/rest/acm/AutomationCompositionElementsNotFound.json [moved from runtime-controlloop/src/test/resources/rest/controlloops/ControlLoopElementsNotFound.json with 64% similarity]
runtime-acm/src/test/resources/rest/acm/AutomationCompositionVersionNotMatches.json [moved from runtime-controlloop/src/test/resources/rest/controlloops/ControlLoopsVersionNotMatches.json with 65% similarity]
runtime-acm/src/test/resources/rest/acm/AutomationCompositions.json [moved from runtime-controlloop/src/test/resources/rest/controlloops/ControlLoops.json with 62% similarity]
runtime-acm/src/test/resources/rest/acm/AutomationCompositionsNotFound.json [moved from runtime-controlloop/src/test/resources/rest/controlloops/ControlLoopsNotFound.json with 65% similarity]
runtime-acm/src/test/resources/rest/acm/AutomationCompositionsSmoke.json [moved from runtime-controlloop/src/test/resources/rest/controlloops/ControlLoopsSmoke.json with 62% similarity]
runtime-acm/src/test/resources/rest/acm/AutomationCompositionsUpdate.json [moved from runtime-controlloop/src/test/resources/rest/controlloops/ControlLoopsUpdate.json with 62% similarity]
runtime-acm/src/test/resources/rest/acm/PassiveCommand.json [moved from runtime-controlloop/src/test/resources/rest/controlloops/PassiveCommand.json with 82% similarity]
runtime-acm/src/test/resources/rest/monitoring/TestAcElementStatistics.json [moved from runtime-controlloop/src/test/resources/rest/monitoring/TestClElementStatistics.json with 71% similarity]
runtime-acm/src/test/resources/rest/monitoring/TestAcElementStatistics_Invalid.json [moved from runtime-controlloop/src/test/resources/rest/monitoring/TestClElementStatistics_Invalid.json with 60% similarity]
runtime-acm/src/test/resources/rest/monitoring/TestParticipantStatistics.json [moved from runtime-controlloop/src/test/resources/rest/monitoring/TestParticipantStatistics.json with 100% similarity]
runtime-acm/src/test/resources/rest/monitoring/TestParticipantStatistics_Invalid.json [moved from runtime-controlloop/src/test/resources/rest/monitoring/TestParticipantStatistics_Invalid.json with 100% similarity]
runtime-acm/src/test/resources/rest/servicetemplates/PMSHMultipleACTosca.yaml [new file with mode: 0644]
runtime-acm/src/test/resources/rest/servicetemplates/full-tosca-with-common-properties.yaml [moved from runtime-controlloop/src/test/resources/rest/servicetemplates/full-tosca-with-common-properties.yaml with 97% similarity]
runtime-acm/src/test/resources/rest/servicetemplates/pm_automation_composition_tosca.yaml [moved from runtime-controlloop/src/test/resources/rest/servicetemplates/pm_control_loop_tosca.yaml with 99% similarity]
runtime-acm/src/test/resources/rest/servicetemplates/pmsh_multiple_ac_tosca.yaml [moved from runtime-controlloop/src/test/resources/rest/servicetemplates/pmsh_multiple_cl_tosca.yaml with 50% similarity]
runtime-acm/src/test/resources/rest/servicetemplates/tosca-for-smoke-testing.yaml [moved from runtime-controlloop/src/test/resources/rest/servicetemplates/tosca-for-smoke-testing.yaml with 97% similarity]
runtime-acm/src/test/resources/testscripts/listenOnTopic.sh [moved from runtime-controlloop/src/test/resources/testscripts/listenOnTopic.sh with 100% similarity]
runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/instantiation/ControlLoopInstantiationProvider.java [deleted file]
runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/monitoring/MonitoringProvider.java [deleted file]
runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionHandler.java [deleted file]
runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionScanner.java [deleted file]
runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/instantiation/ControlLoopInstantiationProviderTest.java [deleted file]
runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/monitoring/TestMonitoringProvider.java [deleted file]
runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionHandlerTest.java [deleted file]
runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionScannerTest.java [deleted file]
runtime-controlloop/src/test/resources/rest/servicetemplates/PMSHMultipleCLTosca.yaml [deleted file]
runtime/src/main/java/org/onap/policy/clamp/clds/config/AafConfiguration.java
runtime/src/main/resources/application-noaaf.properties
runtime/src/main/resources/application.properties
runtime/src/main/resources/clds/camel/rest/clamp-api-v2.xml
runtime/src/main/resources/clds/camel/routes/acm-flows.xml [moved from runtime/src/main/resources/clds/camel/routes/controlloop-flows.xml with 65% similarity]
runtime/src/test/java/org/onap/policy/clamp/runtime/RuntimeCommissioningResponseItTestCase.java
runtime/src/test/java/org/onap/policy/clamp/runtime/RuntimeInstantiationResponseItTestCase.java
runtime/src/test/resources/application.properties
runtime/src/test/resources/http-cache/third_party_proxy.py

@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.common.exception;
+package org.onap.policy.clamp.common.acm.exception;
 
 import javax.ws.rs.core.Response;
 import lombok.Getter;
@@ -28,11 +28,11 @@ import org.onap.policy.models.errors.concepts.ErrorResponseInfo;
 import org.onap.policy.models.errors.concepts.ErrorResponseUtils;
 
 /**
- * This class is a base exception from which all control loop exceptions are sub classes.
+ * This class is a base exception from which all automation composition exceptions are sub classes.
  */
 @Getter
 @ToString
-public class ControlLoopException extends Exception implements ErrorResponseInfo {
+public class AutomationCompositionException extends Exception implements ErrorResponseInfo {
     private static final long serialVersionUID = -8507246953751956974L;
 
     // The error response of the exception
@@ -42,23 +42,23 @@ public class ControlLoopException extends Exception implements ErrorResponseInfo
     private final transient Object object;
 
     /**
-     * Instantiates a new control loop exception.
+     * Instantiates a new automation composition exception.
      *
      * @param statusCode the status code for the response as a HTTP status code
      * @param message the message on the exception
      */
-    public ControlLoopException(final Response.Status statusCode, final String message) {
+    public AutomationCompositionException(final Response.Status statusCode, final String message) {
         this(statusCode, message, null);
     }
 
     /**
-     * Instantiates a new control loop exception.
+     * Instantiates a new automation composition exception.
      *
      * @param statusCode the return code for the exception
      * @param message the message on the exception
      * @param object the object that the exception was thrown on
      */
-    public ControlLoopException(final Response.Status statusCode, final String message, final Object object) {
+    public AutomationCompositionException(final Response.Status statusCode, final String message, final Object object) {
         super(message);
         errorResponse.setResponseCode(statusCode);
         ErrorResponseUtils.getExceptionMessages(errorResponse, this);
@@ -66,13 +66,14 @@ public class ControlLoopException extends Exception implements ErrorResponseInfo
     }
 
     /**
-     * Instantiates a new control loop exception.
+     * Instantiates a new automation composition exception.
      *
      * @param statusCode the return code for the exception
      * @param message the message on the exception
      * @param exception the exception that caused this exception
      */
-    public ControlLoopException(final Response.Status statusCode, final String message, final Exception exception) {
+    public AutomationCompositionException(final Response.Status statusCode, final String message,
+        final Exception exception) {
         this(statusCode, message, exception, null);
     }
 
@@ -84,8 +85,8 @@ public class ControlLoopException extends Exception implements ErrorResponseInfo
      * @param exception the exception that caused this exception
      * @param object the object that the exception was thrown on
      */
-    public ControlLoopException(final Response.Status statusCode, final String message, final Exception exception,
-            final Object object) {
+    public AutomationCompositionException(final Response.Status statusCode, final String message,
+        final Exception exception, final Object object) {
         super(message, exception);
         errorResponse.setResponseCode(statusCode);
         ErrorResponseUtils.getExceptionMessages(errorResponse, this);
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.common.exception;
+package org.onap.policy.clamp.common.acm.exception;
 
 import javax.ws.rs.core.Response;
 import lombok.Getter;
@@ -28,11 +28,12 @@ import org.onap.policy.models.errors.concepts.ErrorResponseInfo;
 import org.onap.policy.models.errors.concepts.ErrorResponseUtils;
 
 /**
- * This class is a base control loop run time exception from which all control loop run time exceptions are sub classes.
+ * This class is a base automation composition run time exception from which all automation composition run time
+ * exceptions are sub classes.
  */
 @Getter
 @ToString
-public class ControlLoopRuntimeException extends RuntimeException implements ErrorResponseInfo {
+public class AutomationCompositionRuntimeException extends RuntimeException implements ErrorResponseInfo {
     private static final long serialVersionUID = -8507246953751956974L;
 
     // The error response of the exception
@@ -42,23 +43,24 @@ public class ControlLoopRuntimeException extends RuntimeException implements Err
     private final transient Object object;
 
     /**
-     * Instantiates a new control loop runtime exception.
+     * Instantiates a new automation composition runtime exception.
      *
      * @param statusCode the return code for the exception
      * @param message the message on the exception
      */
-    public ControlLoopRuntimeException(final Response.Status statusCode, final String message) {
+    public AutomationCompositionRuntimeException(final Response.Status statusCode, final String message) {
         this(statusCode, message, null);
     }
 
     /**
-     * Instantiates a new control loop runtime exception.
+     * Instantiates a new automation composition runtime exception.
      *
      * @param statusCode the return code for the exception
      * @param message the message on the exception
      * @param object the object that the exception was thrown on
      */
-    public ControlLoopRuntimeException(final Response.Status statusCode, final String message, final Object object) {
+    public AutomationCompositionRuntimeException(final Response.Status statusCode, final String message,
+        final Object object) {
         super(message);
         this.object = object;
         errorResponse.setResponseCode(statusCode);
@@ -66,23 +68,23 @@ public class ControlLoopRuntimeException extends RuntimeException implements Err
     }
 
     /**
-     * Instantiates a new control loop runtime exception.
+     * Instantiates a new automation composition runtime exception.
      *
      * @param statusCode the return code for the exception
      * @param message the message on the exception
-     * @param exception the exception that caused this control loop exception
+     * @param exception the exception that caused this automation composition exception
      */
-    public ControlLoopRuntimeException(final Response.Status statusCode, final String message,
-            final Exception exception) {
+    public AutomationCompositionRuntimeException(final Response.Status statusCode, final String message,
+        final Exception exception) {
         this(statusCode, message, exception, null);
     }
 
     /**
-     * Instantiates a new model runtime exception from a ControlLoopException instance.
+     * Instantiates a new model runtime exception from an AutomationCompositionException instance.
      *
-     * @param exception the exception that caused this control loop exception
+     * @param exception the exception that caused this automation composition exception
      */
-    public ControlLoopRuntimeException(final ControlLoopException exception) {
+    public AutomationCompositionRuntimeException(final AutomationCompositionException exception) {
         super(exception.getMessage(), exception);
         this.object = exception.getObject();
         errorResponse.setResponseCode(exception.getErrorResponse().getResponseCode());
@@ -90,15 +92,15 @@ public class ControlLoopRuntimeException extends RuntimeException implements Err
     }
 
     /**
-     * Instantiates a new control loop runtime exception.
+     * Instantiates a new automation composition runtime exception.
      *
      * @param statusCode the return code for the exception
      * @param message the message on the exception
-     * @param exception the exception that caused this control loop exception
+     * @param exception the exception that caused this automation composition exception
      * @param object the object that the exception was thrown on
      */
-    public ControlLoopRuntimeException(final Response.Status statusCode, final String message,
-            final Exception exception, final Object object) {
+    public AutomationCompositionRuntimeException(final Response.Status statusCode, final String message,
+        final Exception exception, final Object object) {
         super(message, exception);
         this.object = object;
         errorResponse.setResponseCode(statusCode);
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.common.rest;
+package org.onap.policy.clamp.common.acm.rest;
 
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
 import java.nio.charset.StandardCharsets;
 import javax.ws.rs.core.Response;
-import org.onap.policy.clamp.controlloop.common.exception.ControlLoopRuntimeException;
+import org.onap.policy.clamp.common.acm.exception.AutomationCompositionRuntimeException;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
@@ -57,7 +57,7 @@ public class CoderHttpMesageConverter<T> extends AbstractHttpMessageConverter<T>
         try (var is = new InputStreamReader(inputMessage.getBody(), StandardCharsets.UTF_8)) {
             return coder.decode(is, clazz);
         } catch (CoderException e) {
-            throw new ControlLoopRuntimeException(Response.Status.BAD_REQUEST, e.getMessage(), e);
+            throw new AutomationCompositionRuntimeException(Response.Status.BAD_REQUEST, e.getMessage(), e);
         }
     }
 
@@ -67,7 +67,7 @@ public class CoderHttpMesageConverter<T> extends AbstractHttpMessageConverter<T>
         try (var writer = new OutputStreamWriter(outputMessage.getBody(), StandardCharsets.UTF_8)) {
             coder.encode(writer, t);
         } catch (CoderException e) {
-            throw new ControlLoopRuntimeException(Response.Status.BAD_REQUEST, e.getMessage(), e);
+            throw new AutomationCompositionRuntimeException(Response.Status.BAD_REQUEST, e.getMessage(), e);
         }
     }
 
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.common.startstop;
+package org.onap.policy.clamp.common.acm.startstop;
 
 import java.io.File;
 import java.io.PrintWriter;
@@ -28,7 +28,7 @@ import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.lang3.StringUtils;
-import org.onap.policy.clamp.controlloop.common.exception.ControlLoopException;
+import org.onap.policy.clamp.common.acm.exception.AutomationCompositionException;
 import org.onap.policy.common.utils.resources.ResourceUtils;
 
 /**
@@ -75,9 +75,9 @@ public class CommonCommandLineArguments {
      * Validate the command line options.
      *
      * @param configurationFilePath the path to the configuration file
-     * @throws ControlLoopException on command argument validation errors
+     * @throws AutomationCompositionException on command argument validation errors
      */
-    public void validate(final String configurationFilePath) throws ControlLoopException {
+    public void validate(final String configurationFilePath) throws AutomationCompositionException {
         validateReadableFile("policy participant configuration", configurationFilePath);
     }
 
@@ -103,7 +103,7 @@ public class CommonCommandLineArguments {
         final var printWriter = new PrintWriter(stringWriter);
 
         helpFormatter.printHelp(printWriter, HELP_LINE_LENGTH, mainClassName + " [options...]", "options", options, 0,
-                0, "");
+            0, "");
 
         return stringWriter.toString();
     }
@@ -113,33 +113,34 @@ public class CommonCommandLineArguments {
      *
      * @param fileTag the file tag
      * @param fileName the file name
-     * @throws ControlLoopException on the file name passed as a parameter
+     * @throws AutomationCompositionException on the file name passed as a parameter
      */
-    private void validateReadableFile(final String fileTag, final String fileName) throws ControlLoopException {
+    private void validateReadableFile(final String fileTag, final String fileName)
+        throws AutomationCompositionException {
         if (StringUtils.isEmpty(fileName)) {
-            throw new ControlLoopException(Response.Status.NOT_ACCEPTABLE,
-                    fileTag + " file was not specified as an argument");
+            throw new AutomationCompositionException(Response.Status.NOT_ACCEPTABLE,
+                fileTag + " file was not specified as an argument");
         }
 
         // The file name refers to a resource on the local file system
         final var fileUrl = ResourceUtils.getUrl4Resource(fileName);
         if (fileUrl == null) {
-            throw new ControlLoopException(Response.Status.NOT_ACCEPTABLE,
-                    fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" does not exist");
+            throw new AutomationCompositionException(Response.Status.NOT_ACCEPTABLE,
+                fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" does not exist");
         }
 
         final var theFile = new File(fileUrl.getPath());
         if (!theFile.exists()) {
-            throw new ControlLoopException(Response.Status.NOT_ACCEPTABLE,
-                    fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" does not exist");
+            throw new AutomationCompositionException(Response.Status.NOT_ACCEPTABLE,
+                fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" does not exist");
         }
         if (!theFile.isFile()) {
-            throw new ControlLoopException(Response.Status.NOT_ACCEPTABLE,
-                    fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" is not a normal file");
+            throw new AutomationCompositionException(Response.Status.NOT_ACCEPTABLE,
+                fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" is not a normal file");
         }
         if (!theFile.canRead()) {
-            throw new ControlLoopException(Response.Status.NOT_ACCEPTABLE,
-                    fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" is unreadable");
+            throw new AutomationCompositionException(Response.Status.NOT_ACCEPTABLE,
+                fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" is unreadable");
         }
     }
 }
diff --git a/common/src/main/resources/tosca/ApplicationServiceDescriptorTypes.yaml b/common/src/main/resources/tosca/ApplicationServiceDescriptorTypes.yaml
deleted file mode 100644 (file)
index ad16173..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-# ============LICENSE_START=======================================================
-# Copyright (C) 2021 Nordix Foundation.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# SPDX-License-Identifier: Apache-2.0
-# ============LICENSE_END=========================================================
-tosca_definitions_version: tosca_simple_yaml_1_3
-node_types:
-  org.oran.asd.DeploymentItem:
-    version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.KubernetesControlLoopElement
-    properties:
-      deployemntItemId:
-        type: onap.datatypes.ToscaConceptIdentifier
-        required: true
-        description: The identifier of this deployment item
-      artifactId:
-        type: onap.datatypes.ToscaConceptIdentifier
-        required: true
-        description: Reference to a DeploymentArtifact
-      lifecycleParameters:
-        type: string
-        required: false
-        description: List of parameters that can be overridden at deployment time
-                     (e.g. values for values.yaml in the chart this item references)
-  org.oran.asd.ASD:
-    version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoop
-    properties:
-      asdId:
-        type: onap.datatypes.ToscaConceptIdentifier
-        required: true
-        description: The identifier of this deployment item
-      asdSchemaVersion:
-        type: onap.datatypes.ToscaConceptIdentifier
-        required: true
-        description: Reference to a DeploymentArtifact
-      asdApplication:
-        type: onap.datatypes.ToscaConceptIdentifier
-        required: true
-        description: Reference to a DeploymentArtifact
-      asdApplicationInfoName:
-        type: string
-        required: false
-        description: Human readable name for the Application service. Can change during the AS lifetime. 
-      asdExtCpd:
-        type: string
-        required: false
-        description: Describes external interface(s) exposed by this AS enabling connection with a VL.
-                     (Similar to VnfExtCpd on VNF-D, but only describing L3 and above interfaces, since
-                     K8S can’t do <L3)
-      enhancedClusterCapabilities:
-        type: string
-        required: false
-        description: Describes expected capabilities of the target Kubernetes cluster to aid placement of the
-                     application service on a suitable cluster. Examples of capabilities are; required networking
-                     characteristics, Kubernetes API extensions or quantifiable node specific resources. This attribute
-                     can contain information complementing information provided in the referenced DeploymentArtifacts.
-                     Note; Modeling of enhancedClusterCapabilities is subject to standardization but is ffs. Alignment
-                     between O2-IMS and O2-DMS of these values is required.
-
-
-
@@ -1,5 +1,5 @@
 # ============LICENSE_START=======================================================
-# Copyright (C) 2021 Nordix Foundation.
+# Copyright (C) 2021-2022 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,7 +27,7 @@ data_types:
         type: string
         required: true
 node_types:
-  org.onap.policy.clamp.controlloop.ControlLoopElement:
+  org.onap.policy.clamp.acm.AutomationCompositionElement:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
@@ -36,13 +36,13 @@ node_types:
         required: false
         metadata:
             common: true
-        description: Specifies the organization that provides the control loop element
+        description: Specifies the organization that provides the automation composition element
       participantType:
         type: onap.datatypes.ToscaConceptIdentifier
         required: true
         metadata:
             common: true
-        description: The identity of the participant type that hosts this type of Control Loop Element
+        description: The identity of the participant type that hosts this type of automation composition Element
       startPhase:
         type: integer
         required: false
@@ -50,10 +50,10 @@ node_types:
         - greater_or_equal: 0
         metadata:
             common: true
-        description: A value indicating the start phase in which this control loop element will be started, the
-                     first start phase is zero. Control Loop Elements are started in their start_phase order and stopped
-                     in reverse start phase order. Control Loop Elements with the same start phase are started and
-                     stopped simultaneously
+        description: A value indicating the start phase in which this automation composition element will be started,
+                     the first start phase is zero. automation composition Elements are started in their start_phase
+                     order and stopped in reverse start phase order. automation composition Elements with the same start
+                     phase are started and stopped simultaneously
       uninitializedToPassiveTimeout:
         type: integer
         required: false
@@ -98,8 +98,8 @@ node_types:
         default: 0
         metadata:
             common: true
-        description: The number of milliseconds that the start of this control loop element should be delayed
-  org.onap.policy.clamp.controlloop.ControlLoop:
+        description: The number of milliseconds that the start of this automation composition element should be delayed
+  org.onap.policy.clamp.acm.AutomationComposition:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
@@ -108,7 +108,7 @@ node_types:
         required: false
         metadata:
             common: true
-        description: Specifies the organization that provides the control loop element
+        description: Specifies the organization that provides the automation composition element
       elements:
         type: list
         required: true
@@ -116,5 +116,5 @@ node_types:
             common: true
         entry_schema:
           type: onap.datatypes.ToscaConceptIdentifier
-        description: Specifies a list of control loop element definitions that make up this control loop definition
+        description: Specifies a list of automation composition element definitions that make up this automation composition definition
 
@@ -1,5 +1,5 @@
 # ============LICENSE_START=======================================================
-# Copyright (C) 2021 Nordix Foundation.
+# Copyright (C) 2021-2022 Nordix Foundation.
 # ================================================================================
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # ============LICENSE_END=========================================================
 tosca_definitions_version: tosca_simple_yaml_1_3
 node_types:
-  org.onap.policy.clamp.controlloop.CDSControlLoopElement:
+  org.onap.policy.clamp.acm.CDSAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       cdsBlueprint:
         type: string
         required: true
-        description: The CDS blueprint that this control loop element is managing.
+        description: The CDS blueprint that this automation composition element is managing.
diff --git a/common/src/main/resources/tosca/DcaeControlLoopElementType.yaml b/common/src/main/resources/tosca/DcaeControlLoopElementType.yaml
deleted file mode 100644 (file)
index acf91bb..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-# ============LICENSE_START=======================================================
-# Copyright (C) 2021 Nordix Foundation.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# SPDX-License-Identifier: Apache-2.0
-# ============LICENSE_END=========================================================
-tosca_definitions_version: tosca_simple_yaml_1_3
-
-data_types:
-  org.onap.datatypes.policy.clamp.controlloop.DCAEControlLoopElementConsulInfo:
-    version: 1.0.0
-    derived_from: tosca.datatypes.Root
-    properties:
-      consulUrl:
-        name: consulUrl
-        type: string
-        typeVersion: 0.0.0
-        required: true
-        description: Consul url for this entry
-      consulBody:
-        name: consulBody
-        type: string
-        typeVersion: 0.0.0
-        required: true
-        description: Body of Consul entry
-node_types:
-  org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement:
-    version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
-    properties:
-      dcaeBlueprint:
-        type: string
-        required: true
-        description: The DCAE blueprint for the DCAE microservice this control loop element is managing.
-      consulInfo:
-        type: list
-        required: false
-        entry_schema:
-          type: org.onap.datatypes.policy.clamp.controlloop.DCAEControlLoopElementConsulInfo
-        description: The information to be sent to Consul for the microservice this control loop element is managing.
@@ -1,5 +1,5 @@
 # ============LICENSE_START=======================================================
-# Copyright (C) 2021 Nordix Foundation.
+# Copyright (C) 2021-2022 Nordix Foundation.
 # ================================================================================
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -17,7 +17,7 @@
 # ============LICENSE_END=========================================================
 tosca_definitions_version: tosca_simple_yaml_1_3
 data_types:
-  org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.RestRequest:
+  org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.RestRequest:
     version: 1.0.0
     derived_from: tosca.datatypes.Root
     properties:
@@ -46,7 +46,7 @@ data_types:
         constraints:
           - in_range: [100, 599]
         description: THe expected HTTP status code for the REST request
-  org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.ConfigurationEntity:
+  org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity:
     version: 1.0.0
     derived_from: tosca.datatypes.Root
     properties:
@@ -54,17 +54,18 @@ data_types:
         type:  onap.datatypes.ToscaConceptIdentifier
         typeVersion: 1.0.0
         required: true
-        description: The name and version of a Configuration Entity to be handled by the HTTP Control Loop Element
+        description: The name and version of a Configuration Entity to be handled by the HTTP Automation Composition
+                     Element
       restSequence:
         type: list
         entry_schema:
-          type: org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.RestRequest
+          type: org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.RestRequest
           typeVersion: 1.0.0
         description: A sequence of REST commands to send to the REST endpoint
 node_types:
-  org.onap.policy.clamp.controlloop.HttpControlLoopElement:
+  org.onap.policy.clamp.acm.HttpAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       baseUrl:
         type: string
@@ -80,6 +81,7 @@ node_types:
         type: map
         required: true
         entry_schema:
-          type: org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.ConfigurationEntity
+          type: org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity
           typeVersion: 1.0.0
-        description: The connfiguration entities the Control Loop Element is managing and their associated REST requests
+        description: The connfiguration entities the Automation Composition Element is managing and their associated
+                     REST requests
@@ -1,5 +1,5 @@
 # ============LICENSE_START=======================================================
-# Copyright (C) 2021 Nordix Foundation.
+# Copyright (C) 2021-2022 Nordix Foundation.
 # ================================================================================
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -17,7 +17,7 @@
 # ============LICENSE_END=========================================================
 tosca_definitions_version: tosca_simple_yaml_1_3
 data_types:
-  org.onap.datatypes.policy.clamp.controlloop.kubernetesControlLoopElement.Chart:
+  org.onap.datatypes.policy.clamp.acm.kubernetesAutomationCompositionElement.Chart:
     version: 1.0.0
     derived_from: tosca.datatypes.Root
     properties:
@@ -45,12 +45,12 @@ data_types:
           type: string
         description: A map of override settings for parameters in the chart
 node_types:
-  org.onap.policy.clamp.controlloop.KubernetesControlLoopElement:
+  org.onap.policy.clamp.acm.KubernetesAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       chart:
-        type: org.onap.datatypes.policy.clamp.controlloop.kubernetesControlLoopElement.Chart
+        type: org.onap.datatypes.policy.clamp.acm.kubernetesAutomationCompositionElement.Chart
         typeVersion: 1.0.0
         required: true
         description: The helm chart for the microservice
@@ -1,5 +1,5 @@
 # ============LICENSE_START=======================================================
-# Copyright (C) 2021 Nordix Foundation.
+# Copyright (C) 2021-2022 Nordix Foundation.
 # ================================================================================
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # ============LICENSE_END=========================================================
 tosca_definitions_version: tosca_simple_yaml_1_3
 node_types:
-  org.onap.policy.clamp.controlloop.PolicyControlLoopElement:
+  org.onap.policy.clamp.acm.PolicyAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       policyType:
         type: onap.datatypes.ToscaConceptIdentifier
         required: true
-        description: The policy type of the policy that this control loop element is managing
+        description: The policy type of the policy that this automation composition element is managing
       policyId:
         type: onap.datatypes.ToscaConceptIdentifier
         required: false
-        description: The policy that this control loop element is managing, if the policy ID is specified, the policy
-                     is either already in the Policy Framework database or is specified in the "policies" part of the
-                     TOSCA service template of the Control Loop definition
+        description: The policy that this automation composition element is managing, if the policy ID is specified, the
+                     policy is either already in the Policy Framework database or is specified in the "policies" part of
+                     the TOSCA service template of the Automation Composition definition
       pdpGroup:
         type: string
         required: false
@@ -40,4 +40,5 @@ node_types:
       pdpType:
         type: string
         required: true
-        description: The PDP type to which the policy will run on. This parameter is used when the policy is deployed to PAP.
\ No newline at end of file
+        description: The PDP type to which the policy will run on. This parameter is used when the policy is deployed to
+                     PAP.
\ No newline at end of file
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.common.exception;
+package org.onap.policy.clamp.common.acm.exception;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
@@ -37,45 +37,46 @@ class ExceptionsTest {
 
     @Test
     void testExceptions() {
-        assertNotNull(new ControlLoopException(Response.Status.OK, MESSAGE));
-        assertNotNull(new ControlLoopException(Response.Status.OK, MESSAGE, STRING_TEXT));
-        assertNotNull(new ControlLoopException(Response.Status.OK, MESSAGE, new IOException()));
-        assertNotNull(new ControlLoopException(Response.Status.OK, MESSAGE, new IOException(), STRING_TEXT));
+        assertNotNull(new AutomationCompositionException(Response.Status.OK, MESSAGE));
+        assertNotNull(new AutomationCompositionException(Response.Status.OK, MESSAGE, STRING_TEXT));
+        assertNotNull(new AutomationCompositionException(Response.Status.OK, MESSAGE, new IOException()));
+        assertNotNull(new AutomationCompositionException(Response.Status.OK, MESSAGE, new IOException(), STRING_TEXT));
 
         String key = "A String";
-        ControlLoopException ae =
-                new ControlLoopException(Response.Status.OK, MESSAGE, new IOException("IO exception message"), key);
+        AutomationCompositionException ae = new AutomationCompositionException(Response.Status.OK, MESSAGE,
+            new IOException("IO exception message"), key);
         ErrorResponse errorResponse = ae.getErrorResponse();
         assertEquals("Message\nIO exception message", String.join("\n", errorResponse.getErrorDetails()));
         assertEquals(key, ae.getObject());
 
-        assertNotNull(new ControlLoopRuntimeException(Response.Status.OK, MESSAGE));
-        assertNotNull(new ControlLoopRuntimeException(Response.Status.OK, MESSAGE, STRING_TEXT));
-        assertNotNull(new ControlLoopRuntimeException(Response.Status.OK, MESSAGE, new IOException()));
-        assertNotNull(new ControlLoopRuntimeException(Response.Status.OK, MESSAGE, new IOException(), STRING_TEXT));
+        assertNotNull(new AutomationCompositionRuntimeException(Response.Status.OK, MESSAGE));
+        assertNotNull(new AutomationCompositionRuntimeException(Response.Status.OK, MESSAGE, STRING_TEXT));
+        assertNotNull(new AutomationCompositionRuntimeException(Response.Status.OK, MESSAGE, new IOException()));
+        assertNotNull(
+            new AutomationCompositionRuntimeException(Response.Status.OK, MESSAGE, new IOException(), STRING_TEXT));
 
         String rkey = "A String";
-        ControlLoopRuntimeException re = new ControlLoopRuntimeException(Response.Status.OK, "Runtime Message",
-                new IOException("IO runtime exception message"), rkey);
+        AutomationCompositionRuntimeException re = new AutomationCompositionRuntimeException(Response.Status.OK,
+            "Runtime Message", new IOException("IO runtime exception message"), rkey);
         errorResponse = re.getErrorResponse();
         assertEquals("Runtime Message\nIO runtime exception message",
-                String.join("\n", errorResponse.getErrorDetails()));
+            String.join("\n", errorResponse.getErrorDetails()));
         assertEquals(key, re.getObject());
 
-        ControlLoopRuntimeException clre = new ControlLoopRuntimeException(ae);
-        assertEquals(ae.getErrorResponse().getResponseCode(), clre.getErrorResponse().getResponseCode());
-        assertEquals(ae.getMessage(), clre.getMessage());
+        AutomationCompositionRuntimeException acre = new AutomationCompositionRuntimeException(ae);
+        assertEquals(ae.getErrorResponse().getResponseCode(), acre.getErrorResponse().getResponseCode());
+        assertEquals(ae.getMessage(), acre.getMessage());
 
         try {
             try {
-                throw new ControlLoopException(Status.BAD_GATEWAY, "An Exception");
-            } catch (ControlLoopException cle) {
-                throw new ControlLoopRuntimeException(cle);
+                throw new AutomationCompositionException(Status.BAD_GATEWAY, "An Exception");
+            } catch (AutomationCompositionException ace) {
+                throw new AutomationCompositionRuntimeException(ace);
             }
-        } catch (ControlLoopRuntimeException clred) {
-            assertEquals(Status.BAD_GATEWAY, clred.getErrorResponse().getResponseCode());
-            assertEquals("An Exception", clred.getMessage());
-            assertEquals(ControlLoopException.class.getName(), clred.getCause().getClass().getName());
+        } catch (AutomationCompositionRuntimeException acred) {
+            assertEquals(Status.BAD_GATEWAY, acred.getErrorResponse().getResponseCode());
+            assertEquals("An Exception", acred.getMessage());
+            assertEquals(AutomationCompositionException.class.getName(), acred.getCause().getClass().getName());
         }
 
         assertThat(ae.toString()).contains("A String");
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.common.rest;
+package org.onap.policy.clamp.common.acm.rest;
 
 import static org.junit.Assert.assertTrue;
 import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -28,8 +28,8 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
-import org.onap.policy.clamp.controlloop.common.exception.ControlLoopRuntimeException;
-import org.onap.policy.clamp.controlloop.common.startstop.CommonCommandLineArguments;
+import org.onap.policy.clamp.common.acm.exception.AutomationCompositionRuntimeException;
+import org.onap.policy.clamp.common.acm.startstop.CommonCommandLineArguments;
 import org.springframework.http.HttpInputMessage;
 import org.springframework.http.HttpOutputMessage;
 
@@ -37,7 +37,7 @@ class CoderHttpMessageConverterTest {
 
 
     @Test
-    void coderHttpMesageConverterTest() throws ControlLoopRuntimeException, IOException {
+    void coderHttpMesageConverterTest() throws AutomationCompositionRuntimeException, IOException {
         var y = new CoderHttpMesageConverter<>("yaml");
         var j = new CoderHttpMesageConverter<>("json");
 
@@ -46,14 +46,14 @@ class CoderHttpMessageConverterTest {
         var testInputStream = new ByteArrayInputStream("testdata".getBytes());
         HttpInputMessage input = Mockito.mock(HttpInputMessage.class);
         Mockito.when(input.getBody()).thenReturn(testInputStream);
-        assertThrows(ControlLoopRuntimeException.class, () -> {
+        assertThrows(AutomationCompositionRuntimeException.class, () -> {
             y.readInternal(RequestResponseLoggingFilterTest.class, input);
         });
 
         var testOutputStream = new ByteArrayOutputStream();
         HttpOutputMessage output = Mockito.mock(HttpOutputMessage.class);
         Mockito.when(output.getBody()).thenReturn(testOutputStream);
-        assertThrows(ControlLoopRuntimeException.class, () -> {
+        assertThrows(AutomationCompositionRuntimeException.class, () -> {
             j.writeInternal(String.class, output);
         });
     }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.common.startstop;
+package org.onap.policy.clamp.common.acm.startstop;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatCode;
diff --git a/common/src/test/resources/asd/MyDomainASDDefintion.yaml b/common/src/test/resources/asd/MyDomainASDDefintion.yaml
deleted file mode 100644 (file)
index f354ea0..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-# ============LICENSE_START=======================================================
-# Copyright (C) 2021 Nordix Foundation.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# SPDX-License-Identifier: Apache-2.0
-# ============LICENSE_END=========================================================
-tosca_definitions_version: tosca_simple_yaml_1_3
-topology_template:
-  node_templates:
-    org.oran.asd.MyApplicationServiceDeploymentItem0:
-      version: 1.0.0
-      type: org.oran.asd.DeploymentItem
-      type_version: 1.0.1
-      description: The first Deployment Item in our Application Service
-      properties:
-        deployemntItemId: org.oran.asd.MyApplicationServiceDeploymentItem0:1.0.0
-        artifactId: org.oran.asd.MyApplicationServiceDeploymentArtifact0:1.0.0
-        lifecycleParameters: To be defined
-        provider: Ericsson
-        participantType: org.onap.policy.controlloop.participant.Kubernetes:1.0.0
-        startPhase: 2
-        uninitializedToPassiveTimeout: 180
-        chart:
-            chartId: MyApplicationServiceDeploymentItem0Chart:1.0.0
-            releaseName: SomeRelease
-            namespace: org.oran.asd.MyApplicationService
-    org.oran.asd.MyApplicationServiceDeploymentItem1:
-      version: 1.0.0
-      type: org.oran.asd.DeploymentItem
-      type_version: 1.0.1
-      description: The second Deployment Item in our Application Service
-      properties:
-        deployemntItemId: org.oran.asd.MyApplicationServiceDeploymentItem1:1.0.0
-        artifactId: org.oran.asd.MyApplicationServiceDeploymentArtifact1:1.0.0
-        lifecycleParameters: To be defined
-        provider: Ericsson
-        participantType: org.onap.policy.controlloop.participant.Kubernetes:1.0.0
-        startPhase: 4
-        uninitializedToPassiveTimeout: 10
-        chart:
-            chartId: MyApplicationServiceDeploymentItem1Chart:1.0.0
-            releaseName: SomeRelease
-            namespace: org.oran.asd.MyApplicationService
-    org.oran.asd.MyApplicationRestConfig:
-      version: 1.0.0
-      type: org.onap.policy.clamp.controlloop.HttpControlLoopElement
-      type_version: 1.0.1
-      description: The REST configuration for My Application
-      properties:
-        provider: Ericsson
-        participantType: org.onap.policy.controlloop.participant.Http:1.0.0
-        startPhase: 1
-        baseUrl: https://10.10.10.10:12345/MyApplicationServiceDeploymentItem0RestEndpoint
-        httpHeaders:
-          "Content-Type": "application/json"
-          "Accept": "application/json"
-        configurationEntities:
-          org.onap.policy.controlloop.gentleguidance.setDomainConfig:1.0.0:
-            configurationEntityId: org.onap.policy.controlloop.gentleguidance.setDomainConfig:1.0.0
-            restSequence:
-            - restRequestId: org.oran.asd.myapplication.setDomainConfig.CreateConfig:1.0.0
-              httpMethd: POST
-              path: "gentle/create"
-              body:
-                gentleLevel: veryGentle
-                gentleType: softAndFurry
-              expectedResponse: 200
-            - restRequestId: org.oran.asd.myapplication.setDomainConfig.CreateConfig:1.0.0
-              httpMethd: POST
-              path: "guidance/create"
-              body:
-                guidanceLevel: high
-                guidanceType: subtle
-              expectedResponse: 200
-          org.oran.asd.myapplication.updateDomainConfig:1.0.0:
-            configurationEntityId: org.oran.asd.myapplication.updateDomainConfig:1.0.0
-            restSequence:
-            - restRequestId: org.oran.asd.myapplication.updateDomainConfig.UpdateConfig:1.0.0
-              httpMethd: PUT
-              path: "gentle/update]"
-              body:
-                gentleLevel: robust
-                gentleType: hardAndGritty
-              expectedResponse: 200
-            - restRequestId: org.oran.asd.myapplication.updateDomainConfig.UpdateConfig:1.0.0
-              httpMethd: PUT
-              path: "guidance/update"
-              body:
-                guidanceLevel: low
-                guidanceType: terse
-              expectedResponse: 200
-    org.oran.asd.MyApplicationPolicy:
-      version: 1.0.0
-      type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
-      type_version: 1.0.1
-      description: My Application Operational Policy
-      properties:
-        provider: Ericsson
-        participantType: org.onap.policy.controlloop.participant.Policy:1.0.0
-        startPhase: 0
-        policyType: onap.policies.controlloop.operational.common.Apex:1.0.0
-        policyId: org.oran.asd.myapplication.ServiceControlPolicy:1.0.0
-    org.org.oran.asd.MyApplicationService:
-      version: 1.0.0
-      type: org.oran.asd.ASD
-      type_version: 1.0.1
-      description: ASD Definition of the My Application Service
-      properties:
-        asdId: org.org.oran.asd.MyApplicationService:1.0.0
-        asdSchemaVersion: 2.3.2
-        provider: Ericsson
-        asdApplication: org.oran.asd.MyWonderfulApplicationService:1.2.1
-        asdApplicationInfoName: The wonderful ASD service that does everything imaginable
-        asdExtCpd: To be defined
-        enhancedCludterCapabilities: To be defined
-        elements:
-        - org.oran.asd.MyApplicationServiceDeploymentItem0:1.0.0
-        - org.oran.asd.MyApplicationServiceDeploymentItem1:1.0.0
-        - org.oran.asd.MyApplicationRestConfig:1.0.0
-        - org.oran.asd.MyApplicationPolicy:1.0.0
index f937e09..5cd981d 100644 (file)
@@ -10,7 +10,7 @@ Go to policy/models/models-sim/policy-models-simulators
 mvn exec:java  -Dexec.mainClass=org.onap.policy.models.simulators.Main -Dexec.args="src/test/resources/simParameters.json"
 
 Run CL from command line
-Go to clamp/runtime-controlloop
+Go to clamp/runtime-acm
 mvn spring-boot:run -Dspring-boot.run.arguments="--topicServer=localhost --mariadb.host=localhost"
 
 Run Participant from command line using Maven
@@ -26,15 +26,15 @@ java -jar target/policy-clamp-participant-impl-kubernetes-6.1.2-SNAPSHOT.jar
 Config of DB
 
 Prompt > mysql
-MariaDB [(none)]> create database controlloop;
+MariaDB [(none)]> create database acm;
 MariaDB [(none)]> CREATE USER 'policy'@localhost IDENTIFIED BY 'P01icY';
-MariaDB [(none)]> GRANT ALL PRIVILEGES ON controlloop.* TO 'policy'@'localhost';\
+MariaDB [(none)]> GRANT ALL PRIVILEGES ON acm.* TO 'policy'@'localhost';\
 MariaDB [(none)]> SHOW GRANTS for 'policy'@localhost;
 +---------------------------------------------------------------------------------------------------------------+
 | Grants for policy@localhost                                                                                   |
 +---------------------------------------------------------------------------------------------------------------+
 | GRANT USAGE ON *.* TO `policy`@`localhost` IDENTIFIED BY PASSWORD '*D0574A541C5DEDF11838FB41CA04E256FD5A04CC' |
-| GRANT ALL PRIVILEGES ON `controlloop`.* TO `policy`@`localhost`                                               |
+| GRANT ALL PRIVILEGES ON `acm`.* TO `policy`@`localhost`                                               |
 +---------------------------------------------------------------------------------------------------------------+
 2 rows in set (0.000 sec)
 
@@ -46,16 +46,16 @@ cd docker/csit
 //the keystore generated: /docker/csit/config/ks.jks
 
 Run Participant from command line using Docker
-docker run --add-host=message-router:<ip-router> -p 6969:6969 --mount type=bind,source=<path-keystore-file>,target=/opt/app/policy/clamp/etc/ssl/policy-keystore onap/policy-clamp-cl-runtime
-docker run --add-host=message-router:<ip-router> -p 8083:8083 --mount type=bind,source=<path-keystore-file>,target=/opt/app/policy/clamp/etc/ssl/policy-keystore onap/policy-clamp-cl-k8s-ppnt
-docker run --add-host=message-router:<ip-router> --mount type=bind,source=<path-keystore-file>,target=/opt/app/policy/clamp/etc/ssl/policy-keystore onap/policy-clamp-cl-http-ppnt
-docker run --add-host=message-router:<ip-router> --mount type=bind,source=<path-keystore-file>,target=/opt/app/policy/clamp/etc/ssl/policy-keystore onap/policy-clamp-cl-pf-ppnt
+docker run --add-host=message-router:<ip-router> -p 6969:6969 --mount type=bind,source=<path-keystore-file>,target=/opt/app/policy/clamp/etc/ssl/policy-keystore onap/policy-clamp-runtime-acm
+docker run --add-host=message-router:<ip-router> -p 8083:8083 --mount type=bind,source=<path-keystore-file>,target=/opt/app/policy/clamp/etc/ssl/policy-keystore onap/policy-clamp-ac-k8s-ppnt
+docker run --add-host=message-router:<ip-router> --mount type=bind,source=<path-keystore-file>,target=/opt/app/policy/clamp/etc/ssl/policy-keystore onap/policy-clamp-ac-http-ppnt
+docker run --add-host=message-router:<ip-router> --mount type=bind,source=<path-keystore-file>,target=/opt/app/policy/clamp/etc/ssl/policy-keystore onap/policy-clamp-ac-pf-ppnt
 
 Note:
 /policy-clamp-tarball/src/main/resources/etc/ssl/policy-truststore is the truststore for DMaap of oom project
 Participant-k8 swagger: https://localhost:8083/onap/k8sparticipant/swagger-ui/
-CL-Runtime swagger: https://localhost:6969/onap/controlloop/swagger-ui/
+CL-Runtime swagger: https://localhost:6969/onap/acm/swagger-ui/
 
 
 Run Policy API:
-mvn exec:java -Dexec.mainClass=org.onap.policy.api.main.startstop.Main -Dexec.args="-c ../../clamp-tpn/tosca-controlloop/common/src/test/resources/demo/policy-api/PolicyAPIConfig.json"
+mvn exec:java -Dexec.mainClass=org.onap.policy.api.main.startstop.Main -Dexec.args="-c common/src/test/resources/demo/config/RuntimeConfig.json"
index 31c12bf..8e85422 100644 (file)
@@ -6,7 +6,7 @@
        },
        "item": [
                {
-                       "name": "Demo: Comission control loop definition Multiple Copy",
+                       "name": "Demo: Comission automation composition definition Multiple Copy",
                        "protocolProfileBehavior": {
                                "disabledSystemHeaders": {
                                        "content-type": true
@@ -43,7 +43,7 @@
                                ],
                                "body": {
                                        "mode": "raw",
-                                       "raw": "tosca_definitions_version: tosca_simple_yaml_1_1_0\ndata_types:\n  onap.datatypes.ToscaConceptIdentifier:\n    derived_from: tosca.datatypes.Root\n    properties:\n      name:\n        type: string\n        required: true\n      version:\n        type: string\n        required: true\n  org.onap.datatypes.policy.clamp.controlloop.DCAEMicroserviceControlLoopElementConsulInfo:\n    name: org.onap.datatypes.policy.clamp.controlloop.DCAEMicroserviceControlLoopElementConsulInfo\n    version: 0.0.0\n    derived_from: tosca.datatypes.Root\n    properties:\n      consulUrl:\n        name: consulUrl\n        type: string\n        typeVersion: 0.0.0\n        description: Consul url for this entry\n        required: true\n      consul_body:\n        name: consulBody\n        type: string\n        typeVersion: 0.0.0\n        description: Body of Consul entry\n        required: true\n  onap.datatype.controlloop.Target:\n    derived_from: tosca.datatypes.Root\n    description: Definition for a entity in A&AI to perform a control loop operation on\n    properties:\n      targetType:\n        type: string\n        description: Category for the target type\n        required: true\n        constraints:\n        - valid_values:\n          - VNF\n          - VM\n          - VFMODULE\n          - PNF\n      entityIds:\n        type: map\n        description: |\n          Map of values that identify the resource. If none are provided, it is assumed that the\n          entity that generated the ONSET event will be the target.\n        required: false\n        metadata:\n          clamp_possible_values: ClampExecution:CSAR_RESOURCES\n        entry_schema:\n          type: string\n  onap.datatype.controlloop.Actor:\n    derived_from: tosca.datatypes.Root\n    description: An actor/operation/target definition\n    properties:\n      actor:\n        type: string\n        description: The actor performing the operation.\n        required: true\n        metadata:\n          clamp_possible_values: Dictionary:DefaultActors,ClampExecution:CDS/actor\n      operation:\n        type: string\n        description: The operation the actor is performing.\n        metadata:\n          clamp_possible_values: Dictionary:DefaultOperations,ClampExecution:CDS/operation\n        required: true\n      target:\n        type: onap.datatype.controlloop.Target\n        description: The resource the operation should be performed on.\n        required: true\n      payload:\n        type: map\n        description: Name/value pairs of payload information passed by Policy to the actor\n        required: false\n        metadata:\n          clamp_possible_values: ClampExecution:CDS/payload\n        entry_schema:\n          type: string\n  onap.datatype.controlloop.Operation:\n    derived_from: tosca.datatypes.Root\n    description: An operation supported by an actor\n    properties:\n      id:\n        type: string\n        description: Unique identifier for the operation\n        required: true\n      description:\n        type: string\n        description: A user-friendly description of the intent for the operation\n        required: false\n      operation:\n        type: onap.datatype.controlloop.Actor\n        description: The definition of the operation to be performed.\n        required: true\n      timeout:\n        type: integer\n        description: The amount of time for the actor to perform the operation.\n        required: true\n      retries:\n        type: integer\n        description: The number of retries the actor should attempt to perform the operation.\n        required: true\n        default: 0\n      success:\n        type: string\n        description: Points to the operation to invoke on success. A value of \"final_success\" indicates and end to the operation.\n        required: false\n        default: final_success\n      failure:\n        type: string\n        description: Points to the operation to invoke on Actor operation failure.\n        required: false\n        default: final_failure\n      failure_timeout:\n        type: string\n        description: Points to the operation to invoke when the time out for the operation occurs.\n        required: false\n        default: final_failure_timeout\n      failure_retries:\n        type: string\n        description: Points to the operation to invoke when the current operation has exceeded its max retries.\n        required: false\n        default: final_failure_retries\n      failure_exception:\n        type: string\n        description: Points to the operation to invoke when the current operation causes an exception.\n        required: false\n        default: final_failure_exception\n      failure_guard:\n        type: string\n        description: Points to the operation to invoke when the current operation is blocked due to guard policy enforcement.\n        required: false\n        default: final_failure_guard\n  onap.datatypes.monitoring.managedObjectDNsBasic:\n    constraints: []\n    properties:\n      DN:\n        name: DN\n        type: string\n        typeVersion: 0.0.0\n        description: Managed object distinguished name\n        required: true\n        constraints: []\n        metadata: {}\n    name: onap.datatypes.monitoring.managedObjectDNsBasic\n    version: 0.0.0\n    derived_from: tosca.datatypes.Root\n    metadata: {}\n  onap.datatypes.monitoring.managedObjectDNsBasics:\n    constraints: []\n    properties:\n      managedObjectDNsBasic:\n        name: managedObjectDNsBasic\n        type: map\n        typeVersion: 0.0.0\n        description: Managed object distinguished name object\n        required: true\n        constraints: []\n        entry_schema:\n          type: onap.datatypes.monitoring.managedObjectDNsBasic\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n    name: onap.datatypes.monitoring.managedObjectDNsBasics\n    version: 0.0.0\n    derived_from: tosca.datatypes.Root\n    metadata: {}\n  onap.datatypes.monitoring.measurementGroup:\n    constraints: []\n    properties:\n      measurementTypes:\n        name: measurementTypes\n        type: list\n        typeVersion: 0.0.0\n        description: List of measurement types\n        required: true\n        constraints: []\n        entry_schema:\n          type: onap.datatypes.monitoring.measurementTypes\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n      managedObjectDNsBasic:\n        name: managedObjectDNsBasic\n        type: list\n        typeVersion: 0.0.0\n        description: List of managed object distinguished names\n        required: true\n        constraints: []\n        entry_schema:\n          type: onap.datatypes.monitoring.managedObjectDNsBasics\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n    name: onap.datatypes.monitoring.measurementGroup\n    version: 0.0.0\n    derived_from: tosca.datatypes.Root\n    metadata: {}\n  onap.datatypes.monitoring.measurementGroups:\n    constraints: []\n    properties:\n      measurementGroup:\n        name: measurementGroup\n        type: map\n        typeVersion: 0.0.0\n        description: Measurement Group\n        required: true\n        constraints: []\n        entry_schema:\n          type: onap.datatypes.monitoring.measurementGroup\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n    name: onap.datatypes.monitoring.measurementGroups\n    version: 0.0.0\n    derived_from: tosca.datatypes.Root\n    metadata: {}\n  onap.datatypes.monitoring.measurementType:\n    constraints: []\n    properties:\n      measurementType:\n        name: measurementType\n        type: string\n        typeVersion: 0.0.0\n        description: Measurement type\n        required: true\n        constraints: []\n        metadata: {}\n    name: onap.datatypes.monitoring.measurementType\n    version: 0.0.0\n    derived_from: tosca.datatypes.Root\n    metadata: {}\n  onap.datatypes.monitoring.measurementTypes:\n    constraints: []\n    properties:\n      measurementType:\n        name: measurementType\n        type: map\n        typeVersion: 0.0.0\n        description: Measurement type object\n        required: true\n        constraints: []\n        entry_schema:\n          type: onap.datatypes.monitoring.measurementType\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n    name: onap.datatypes.monitoring.measurementTypes\n    version: 0.0.0\n    derived_from: tosca.datatypes.Root\n    metadata: {}\n  onap.datatypes.monitoring.nfFilter:\n    constraints: []\n    properties:\n      modelNames:\n        name: modelNames\n        type: list\n        typeVersion: 0.0.0\n        description: List of model names\n        required: true\n        constraints: []\n        entry_schema:\n          type: string\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n      modelInvariantIDs:\n        name: modelInvariantIDs\n        type: list\n        typeVersion: 0.0.0\n        description: List of model invariant IDs\n        required: true\n        constraints: []\n        entry_schema:\n          type: string\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n      modelVersionIDs:\n        name: modelVersionIDs\n        type: list\n        typeVersion: 0.0.0\n        description: List of model version IDs\n        required: true\n        constraints: []\n        entry_schema:\n          type: string\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n      nfNames:\n        name: nfNames\n        type: list\n        typeVersion: 0.0.0\n        description: List of network functions\n        required: true\n        constraints: []\n        entry_schema:\n          type: string\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n    name: onap.datatypes.monitoring.nfFilter\n    version: 0.0.0\n    derived_from: tosca.datatypes.Root\n    metadata: {}\n  onap.datatypes.monitoring.subscription:\n    constraints: []\n    properties:\n      measurementGroups:\n        name: measurementGroups\n        type: list\n        typeVersion: 0.0.0\n        description: Measurement Groups\n        required: true\n        constraints: []\n        entry_schema:\n          type: onap.datatypes.monitoring.measurementGroups\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n      fileBasedGP:\n        name: fileBasedGP\n        type: integer\n        typeVersion: 0.0.0\n        description: File based granularity period\n        required: true\n        constraints: []\n        metadata: {}\n      fileLocation:\n        name: fileLocation\n        type: string\n        typeVersion: 0.0.0\n        description: ROP file location\n        required: true\n        constraints: []\n        metadata: {}\n      subscriptionName:\n        name: subscriptionName\n        type: string\n        typeVersion: 0.0.0\n        description: Name of the subscription\n        required: true\n        constraints: []\n        metadata: {}\n      administrativeState:\n        name: administrativeState\n        type: string\n        typeVersion: 0.0.0\n        description: State of the subscription\n        required: true\n        constraints:\n        - valid_values:\n          - LOCKED\n          - UNLOCKED\n        metadata: {}\n      nfFilter:\n        name: nfFilter\n        type: map\n        typeVersion: 0.0.0\n        description: Network function filter\n        required: true\n        constraints: []\n        entry_schema:\n          type: onap.datatypes.monitoring.nfFilter\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n    name: onap.datatypes.monitoring.subscription\n    version: 0.0.0\n    derived_from: tosca.datatypes.Root\n    metadata: {}\npolicy_types:\n  onap.policies.Monitoring:\n    derived_from: tosca.policies.Root\n    description: a base policy type for all policies that govern monitoring provisioning\n    version: 1.0.0\n    name: onap.policies.Monitoring\n  onap.policies.Sirisha:\n    derived_from: tosca.policies.Root\n    description: a base policy type for all policies that govern monitoring provisioning\n    version: 1.0.0\n    name: onap.policies.Sirisha\n  onap.policies.monitoring.dcae-pm-subscription-handler:\n    properties:\n      pmsh_policy:\n        name: pmsh_policy\n        type: onap.datatypes.monitoring.subscription\n        typeVersion: 0.0.0\n        description: PMSH Policy JSON\n        required: false\n        constraints: []\n        metadata: {}\n    name: onap.policies.monitoring.dcae-pm-subscription-handler\n    version: 1.0.0\n    derived_from: onap.policies.Monitoring\n    metadata: {}\n  onap.policies.controlloop.operational.Common:\n    derived_from: tosca.policies.Root\n    version: 1.0.0\n    name: onap.policies.controlloop.operational.Common\n    description: |\n      Operational Policy for Control Loop execution. Originated in Frankfurt to support TOSCA Compliant\n      Policy Types. This does NOT support the legacy Policy YAML policy type.\n    properties:\n      id:\n        type: string\n        description: The unique control loop id.\n        required: true\n      timeout:\n        type: integer\n        description: |\n          Overall timeout for executing all the operations. This timeout should equal or exceed the total\n          timeout for each operation listed.\n        required: true\n      abatement:\n        type: boolean\n        description: Whether an abatement event message will be expected for the control loop from DCAE.\n        required: true\n        default: false\n      trigger:\n        type: string\n        description: Initial operation to execute upon receiving an Onset event message for the Control Loop.\n        required: true\n      operations:\n        type: list\n        description: List of operations to be performed when Control Loop is triggered.\n        required: true\n        entry_schema:\n          type: onap.datatype.controlloop.Operation\n  onap.policies.controlloop.operational.common.Apex:\n    derived_from: onap.policies.controlloop.operational.Common\n    type_version: 1.0.0\n    version: 1.0.0\n    name: onap.policies.controlloop.operational.common.Apex\n    description: Operational policies for Apex PDP\n    properties:\n      engineServiceParameters:\n        type: string\n        description: The engine parameters like name, instanceCount, policy implementation, parameters etc.\n        required: true\n      eventInputParameters:\n        type: string\n        description: The event input parameters.\n        required: true\n      eventOutputParameters:\n        type: string\n        description: The event output parameters.\n        required: true\n      javaProperties:\n        type: string\n        description: Name/value pairs of properties to be set for APEX if needed.\n        required: false\nnode_types:\n  org.onap.policy.clamp.controlloop.Participant:\n    version: 1.0.1\n    derived_from: tosca.nodetypes.Root\n    properties:\n      provider:\n        type: string\n        requred: false\n  org.onap.policy.clamp.controlloop.ControlLoopElement:\n    version: 1.0.1\n    derived_from: tosca.nodetypes.Root\n    properties:\n      provider:\n        type: string\n        required: false\n        metadata:\n            common: true\n        description: Specifies the organization that provides the control loop element\n      participantType:\n        type: onap.datatypes.ToscaConceptIdentifier\n        required: true\n        metadata:\n            common: true\n        description: The identity of the participant type that hosts this type of Control Loop Element\n      startPhase:\n        type: integer\n        required: false\n        constraints:\n        - greater-or-equal: 0\n        metadata:\n            common: true\n        description: A value indicating the start phase in which this control loop element will be started, the\n                     first start phase is zero. Control Loop Elements are started in their start_phase order and stopped\n                     in reverse start phase order. Control Loop Elements with the same start phase are started and\n                     stopped simultaneously\n      uninitializedToPassiveTimeout:\n        type: integer\n        required: false\n        constraints:\n        - greater-or-equal: 0\n        default: 60\n        metadata:\n            common: true\n        description: The maximum time in seconds to wait for a state chage from uninitialized to passive\n      passiveToRunningTimeout:\n        type: integer\n        required: false\n        constraints:\n        - greater-or-equal: 0\n        default: 60\n        metadata:\n            common: true\n        description: The maximum time in seconds to wait for a state chage from passive to running\n      runningToPassiveTimeout:\n        type: integer\n        required: false\n        constraints:\n        - greater-or-equal: 0\n        default: 60\n        metadata:\n            common: true\n        description: The maximum time in seconds to wait for a state chage from running to passive\n      passiveToUninitializedTimeout:\n        type: integer\n        required: false\n        constraints:\n        - greater-or-equal: 0\n        default: 60\n        metadata:\n            common: true\n        description: The maximum time in seconds to wait for a state chage from passive to uninitialized\n\n  org.onap.policy.clamp.controlloop.ControlLoop:\n    version: 1.0.1\n    derived_from: tosca.nodetypes.Root\n    properties:\n      provider:\n        type: string\n        requred: false\n      elements:\n        type: list\n        required: true\n        entry_schema:\n          type: onap.datatypes.ToscaConceptIdentifier\n  org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement:\n    version: 1.0.1\n    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement\n    properties:\n      dcae_blueprint_id:\n        type: onap.datatypes.ToscaConceptIdentifier\n        requred: false\n      dcae_blueprint:\n        type: onap.dcae.cloudify_blueprint\n        requred: false\n      consul_info:\n        type: list\n        required: false\n        entry_schema:\n          type: org.onap.datatypes.policy.clamp.controlloop.DCAEMicroserviceControlLoopElementConsulInfo\n  org.onap.policy.clamp.controlloop.PolicyControlLoopElement:\n    version: 1.0.1\n    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement\n    properties:\n      policy_type_id:\n        type: onap.datatypes.ToscaConceptIdentifier\n        requred: true\n      policy_id:\n        type: onap.datatypes.ToscaConceptIdentifier\n        requred: false\n  org.onap.policy.clamp.controlloop.CDSControlLoopElement:\n    version: 1.0.1\n    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement\n    properties:\n      cds_blueprint_id:\n        type: onap.datatypes.ToscaConceptIdentifier\n        requred: true\ntopology_template:\n  inputs:\n    pmsh_monitoring_policy:\n      type: onap.datatypes.ToscaConceptIdentifier\n      description: The ID of the PMSH monitoring policy to use\n      default:\n        name: MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test\n        version: 1.0.0\n    pmsh_operational_policy:\n      type: onap.datatypes.ToscaConceptIdentifier\n      description: The ID of the PMSH operational policy to use\n      default:\n        name: operational.apex.pmcontrol\n        version: 1.0.0\n  node_templates:\n    org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant:\n      version: 2.3.4\n      type: org.onap.policy.clamp.controlloop.Participant\n      type_version: 1.0.1\n      description: Participant for DCAE microservices\n      properties:\n        provider: ONAP\n    org.onap.policy.controlloop.PolicyControlLoopParticipant:\n      version: 2.3.1\n      type: org.onap.policy.clamp.controlloop.Participant\n      type_version: 1.0.1\n      description: Participant for DCAE microservices\n      properties:\n        provider: ONAP\n    org.onap.domain.pmsh.PMSH_DCAEMicroservice:\n      version: 1.2.3\n      type: org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement\n      type_version: 1.0.0\n      description: Control loop element for the DCAE microservice for Performance Management Subscription Handling\n      properties:\n        provider: Ericsson\n        participantType:\n          name: org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant\n          version: 2.3.4\n        startPhase: 0\n        dcae_blueprint:\n          tosca_definitions_version: cloudify_dsl_1_3\n          imports:\n          - https://www.getcloudify.org/spec/cloudify/4.5.5/types.yaml\n          - plugin:k8splugin?version=3.7.0\n          - plugin:pgaas?version=1.3.0\n          - plugin:clamppolicyplugin?version=1.1.0\n          inputs:\n            tag_version:\n              type: string\n              description: Docker image to be used\n              default: nexus3.onap.org:10001/onap/org.onap.dcaegen2.services.pmsh:1.1.2\n            replicas:\n              type: integer\n              description: Number of instances\n              default: 1\n            operational_policy_name:\n              type: string\n              default: operational.apex.pmcontrol\n            control_loop_name:\n              type: string\n              default: pmsh-control-loop\n            pmsh_publish_topic_name:\n              type: string\n              default: unauthenticated.DCAE_CL_OUTPUT\n            policy_feedback_topic_name:\n              type: string\n              default: unauthenticated.PMSH_CL_INPUT\n            aai_notification_topic_name:\n              type: string\n              default: AAI-EVENT\n            publisher_client_role:\n              type: string\n              description: Client role to request secure access to topic\n              default: org.onap.dcae.pmPublisher\n            subscriber_client_role:\n              type: string\n              description: Client role to request secure access to topic\n              default: org.onap.dcae.pmSubscriber\n            dcae_location:\n              type: string\n              description: DCAE location for the subscriber, used to set up routing\n              default: san-francisco\n            cpu_limit:\n              type: string\n              default: 1000m\n            cpu_request:\n              type: string\n              default: 1000m\n            memory_limit:\n              type: string\n              default: 1024Mi\n            memory_request:\n              type: string\n              default: 1024Mi\n            pgaas_cluster_name:\n              type: string\n              default: dcae-pg-primary.onap\n            enable_tls:\n              type: boolean\n              default: true\n            protocol:\n              type: string\n              description: PMSH protocol. If enable_tls is false, set to http\n              default: https\n            policy_model_id:\n              type: string\n              default: onap.policies.monitoring.dcae-pm-subscription-handler\n            policy_id:\n              type: string\n              default: MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test\n          node_templates:\n            pgaasvm:\n              type: dcae.nodes.pgaas.database\n              properties:\n                writerfqdn:\n                  get_input: pgaas_cluster_name\n                name: pmsh\n            pmsh:\n              type: dcae.nodes.ContainerizedServiceComponentUsingDmaap\n              interfaces:\n                cloudify.interfaces.lifecycle:\n                  create:\n                    inputs:\n                      ports:\n                      - '8443:0'\n                      envs:\n                        PMSH_PG_URL:\n                          get_attribute:\n                          - pgaasvm\n                          - admin\n                          - host\n                        PMSH_PG_PASSWORD:\n                          get_attribute:\n                          - pgaasvm\n                          - admin\n                          - password\n                        PMSH_PG_USERNAME:\n                          get_attribute:\n                          - pgaasvm\n                          - admin\n                          - user\n                        PMSH_DB_NAME:\n                          get_attribute:\n                          - pgaasvm\n                          - admin\n                          - database\n              relationships:\n              - target: pmsh-policy\n                type: cloudify.relationships.depends_on\n              properties:\n                service_component_type: dcae-pmsh\n                service_component_name_override: dcae-pmsh\n                application_config:\n                  enable_tls:\n                    get_input: enable_tls\n                  aaf_identity: dcae@dcae.onap.org\n                  aaf_password: demo123456!\n                  operational_policy_name:\n                    get_input: operational_policy_name\n                  control_loop_name:\n                    get_input: control_loop_name\n                  cert_path: /opt/app/pmsh/etc/certs/cert.pem\n                  key_path: /opt/app/pmsh/etc/certs/key.pem\n                  ca_cert_path: /opt/app/pmsh/etc/certs/cacert.pem\n                  streams_publishes:\n                    policy_pm_publisher:\n                      type: message_router\n                      dmaap_info:\n                        topic_url:\n                          concat:\n                          - http://message-router:3904/events/\n                          - get_input: pmsh_publish_topic_name\n                  streams_subscribes:\n                    policy_pm_subscriber:\n                      type: message_router\n                      dmaap_info:\n                        topic_url:\n                          concat:\n                          - http://message-router:3904/events/\n                          - get_input: policy_feedback_topic_name\n                    aai_subscriber:\n                      type: message_router\n                      dmaap_info:\n                        topic_url:\n                          concat:\n                          - http://message-router:3904/events/\n                          - get_input: aai_notification_topic_name\n                resource_config:\n                  limits:\n                    cpu:\n                      get_input: cpu_limit\n                    memory:\n                      get_input: memory_limit\n                  requests:\n                    cpu:\n                      get_input: cpu_request\n                    memory:\n                      get_input: memory_request\n                docker_config:\n                  healthcheck:\n                    endpoint: /healthcheck\n                    interval: 15s\n                    timeout: 1s\n                    type:\n                      get_input: protocol\n                image:\n                  get_input: tag_version\n                replicas:\n                  get_input: replicas\n                log_info:\n                  log_directory: /var/log/ONAP/dcaegen2/services/pmsh\n                tls_info:\n                  cert_directory: /opt/app/pmsh/etc/certs\n                  use_tls:\n                    get_input: enable_tls\n            pmsh-policy:\n              type: clamp.nodes.policy\n              properties:\n                policy_model_id:\n                  get_input: policy_model_id\n                policy_id:\n                  get_input: policy_id\n        consul_info:\n        - consulUrl: http://consul:31321/v1/kv/dcae-pmsh:policy\n          consulBody:\n            subscription:\n              subscriptionName: subscriptiona\n              administrativeState: UNLOCKED\n              fileBasedGP: 15\n              fileLocation: /pm/pm.xml\n              nfFilter:\n                nfNames:\n                - ^pnf1.*\n                modelInvariantIDs:\n                - 5845y423-g654-6fju-po78-8n53154532k6\n                - 7129e420-d396-4efb-af02-6b83499b12f8\n                modelVersionIDs:\n                - e80a6ae3-cafd-4d24-850d-e14c084a5ca9\n              measurementGroups:\n              - measurementGroup:\n                  measurementTypes:\n                  - measurementType: countera\n                  - measurementType: counterb\n                  managedObjectDNsBasic:\n                  - DN: dna\n                  - DN: dnb\n              - measurementGroup:\n                  measurementTypes:\n                  - measurementType: counterc\n                  - measurementType: counterd\n                  managedObjectDNsBasic:\n                  - DN: dnc\n                  - DN: dnd\n    org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement:\n      version: 1.2.3\n      type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement\n      type_version: 1.0.0\n      description: Control loop element for the monitoring policy for Performance Management Subscription Handling\n      properties:\n        provider: Ericsson\n        participantType:\n          name: org.onap.policy.controlloop.PolicyControlLoopParticipant\n          version: 2.3.1\n        startPhase: 0\n        policy_type_id:\n          name: onap.policies.monitoring.pm-subscription-handler\n          version: 1.0.0\n        policy_id:\n          get_input: pmsh_monitoring_policy\n    org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement:\n      version: 1.2.3\n      type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement\n      type_version: 1.0.0\n      description: Control loop element for the operational policy for Performance Management Subscription Handling\n      properties:\n        provider: Ericsson\n        participantType:\n          name: org.onap.policy.controlloop.PolicyControlLoopParticipant\n          version: 2.3.1\n        startPhase: 0\n        policy_type_id:\n          name: onap.policies.operational.pm-subscription-handler\n          version: 1.0.0\n        policy_id:\n          get_input: pmsh_operational_policy\n    org.onap.domain.pmsh.PMSHControlLoopDefinition:\n      version: 1.2.3\n      type: org.onap.policy.clamp.controlloop.ControlLoop\n      type_version: 1.0.0\n      description: Control loop for Performance Management Subscription Handling\n      properties:\n        provider: Ericsson\n        elements:\n        - name: org.onap.domain.pmsh.PMSH_DCAEMicroservice\n          version: 1.2.3\n        - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement\n          version: 1.2.3\n        - name: org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement\n          version: 1.2.3\n  policies:\n  - MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test:\n      type: onap.policies.monitoring.dcae-pm-subscription-handler\n      type_version: 1.0.0\n      name: MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test\n      version: 1.0.0\n      metadata:\n        policy-id: MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test\n        policy-version: 1.0.0\n      properties:\n        pmsh_policy:\n          fileBasedGP: 15\n          fileLocation: /pm/pm.xml\n          subscriptionName: subscriptiona\n          administrativeState: UNLOCKED\n          nfFilter:\n            onap.datatypes.monitoring.nfFilter:\n              modelVersionIDs:\n              - e80a6ae3-cafd-4d24-850d-e14c084a5ca9\n              modelInvariantIDs:\n              - 5845y423-g654-6fju-po78-8n53154532k6\n              - 7129e420-d396-4efb-af02-6b83499b12f8\n              modelNames: []\n              nfNames:\n              - '\"^pnf1.*\"'\n          measurementGroups:\n          - measurementGroup:\n              onap.datatypes.monitoring.measurementGroup:\n                measurementTypes:\n                - measurementType:\n                    onap.datatypes.monitoring.measurementType:\n                      measurementType: countera\n                - measurementType:\n                    onap.datatypes.monitoring.measurementType:\n                      measurementType: counterb\n                managedObjectDNsBasic:\n                - managedObjectDNsBasic:\n                    onap.datatypes.monitoring.managedObjectDNsBasic:\n                      DN: dna\n                - managedObjectDNsBasic:\n                    onap.datatypes.monitoring.managedObjectDNsBasic:\n                      DN: dnb\n          - measurementGroup:\n              onap.datatypes.monitoring.measurementGroup:\n                measurementTypes:\n                - measurementType:\n                    onap.datatypes.monitoring.measurementType:\n                      measurementType: counterc\n                - measurementType:\n                    onap.datatypes.monitoring.measurementType:\n                      measurementType: counterd\n                managedObjectDNsBasic:\n                - managedObjectDNsBasic:\n                    onap.datatypes.monitoring.managedObjectDNsBasic:\n                      DN: dnc\n                - managedObjectDNsBasic:\n                    onap.datatypes.monitoring.managedObjectDNsBasic:\n                      DN: dnd\n  - operational.apex.pmcontrol:\n      type: onap.policies.controlloop.operational.common.Apex\n      type_version: 1.0.0\n      version: 1.0.0\n      metadata:\n        policy-id: operational.apex.pmcontrol\n        policy-version: 1\n      properties:\n        engineServiceParameters:\n          name: MyApexEngine\n          version: 0.0.1\n          id: 45\n          instanceCount: 2\n          deploymentPort: 12561\n          policy_type_impl:\n            apexPolicyModel:\n              key:\n                name: PMControlPolicy\n                version: 0.0.1\n              keyInformation:\n                key:\n                  name: PMControlPolicy_KeyInfo\n                  version: 0.0.1\n                keyInfoMap:\n                  entry:\n                  - key:\n                      name: CDSActionIdentifiersType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSActionIdentifiersType\n                        version: 0.0.1\n                      UUID: 6e5fa19b-14df-37e3-a4ae-8c537e861a82\n                      description: Generated description for concept referred to by key \"CDSActionIdentifiersType:0.0.1\"\n                  - key:\n                      name: CDSCreateResponseEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateResponseEvent\n                        version: 0.0.1\n                      UUID: 14b29e38-ac75-3273-aa4e-8583c0aa7dad\n                      description: Generated description for concept referred to by key \"CDSCreateResponseEvent:0.0.1\"\n                  - key:\n                      name: CDSCreateResponsePayloadType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateResponsePayloadType\n                        version: 0.0.1\n                      UUID: 04573f8f-e772-30a5-b1d9-d7318d4a1e13\n                      description: Generated description for concept referred to by key \"CDSCreateResponsePayloadType:0.0.1\"\n                  - key:\n                      name: CDSCreateResponsePolicy\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateResponsePolicy\n                        version: 0.0.1\n                      UUID: e126c965-fc09-3bfe-8f55-70f380a4a49c\n                      description: Generated description for concept referred to by key \"CDSCreateResponsePolicy:0.0.1\"\n                  - key:\n                      name: CDSCreateResponseTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateResponseTask\n                        version: 0.0.1\n                      UUID: 6165ee82-afd2-3aab-a517-f00b3f2461d2\n                      description: Generated description for concept referred to by key \"CDSCreateResponseTask:0.0.1\"\n                  - key:\n                      name: CDSCreateSubscriptionPayloadType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateSubscriptionPayloadType\n                        version: 0.0.1\n                      UUID: 8350ac5e-c157-38b9-9614-a0f93a830e60\n                      description: Generated description for concept referred to by key \"CDSCreateSubscriptionPayloadType:0.0.1\"\n                  - key:\n                      name: CDSCreateSubscriptionRequestEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateSubscriptionRequestEvent\n                        version: 0.0.1\n                      UUID: cfa325ba-226b-3a31-9183-ec43e2b6e9a2\n                      description: Generated description for concept referred to by key \"CDSCreateSubscriptionRequestEvent:0.0.1\"\n                  - key:\n                      name: CDSDeleteResponseEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteResponseEvent\n                        version: 0.0.1\n                      UUID: 8be9c0fa-7437-3841-aff2-b3cec6ae3bd8\n                      description: Generated description for concept referred to by key \"CDSDeleteResponseEvent:0.0.1\"\n                  - key:\n                      name: CDSDeleteResponsePayloadType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteResponsePayloadType\n                        version: 0.0.1\n                      UUID: 3fbfe0c9-152e-34d3-a504-09cd13c058d0\n                      description: Generated description for concept referred to by key \"CDSDeleteResponsePayloadType:0.0.1\"\n                  - key:\n                      name: CDSDeleteResponsePolicy\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteResponsePolicy\n                        version: 0.0.1\n                      UUID: a780251c-edd5-3132-b865-04313246b43c\n                      description: Generated description for concept referred to by key \"CDSDeleteResponsePolicy:0.0.1\"\n                  - key:\n                      name: CDSDeleteResponseTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteResponseTask\n                        version: 0.0.1\n                      UUID: afce4555-3aa3-3521-a7d8-ee8cdf0d3efc\n                      description: Generated description for concept referred to by key \"CDSDeleteResponseTask:0.0.1\"\n                  - key:\n                      name: CDSDeleteSubscriptionPayloadType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteSubscriptionPayloadType\n                        version: 0.0.1\n                      UUID: 12658406-9147-3c9d-a38c-5ad5e30b092b\n                      description: Generated description for concept referred to by key \"CDSDeleteSubscriptionPayloadType:0.0.1\"\n                  - key:\n                      name: CDSDeleteSubscriptionRequestEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteSubscriptionRequestEvent\n                        version: 0.0.1\n                      UUID: 24380c95-9289-36e6-8cbf-0edefa15ccd9\n                      description: Generated description for concept referred to by key \"CDSDeleteSubscriptionRequestEvent:0.0.1\"\n                  - key:\n                      name: CDSRequestCommonHeaderType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSRequestCommonHeaderType\n                        version: 0.0.1\n                      UUID: 35590ac0-062c-39f1-8786-b4ff716e30b1\n                      description: Generated description for concept referred to by key \"CDSRequestCommonHeaderType:0.0.1\"\n                  - key:\n                      name: CDSResponseCommonHeaderType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSResponseCommonHeaderType\n                        version: 0.0.1\n                      UUID: dd7e1805-885a-350b-aaf9-ed541321ae3c\n                      description: Generated description for concept referred to by key \"CDSResponseCommonHeaderType:0.0.1\"\n                  - key:\n                      name: CDSResponseStatusEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSResponseStatusEvent\n                        version: 0.0.1\n                      UUID: 7986e21b-32f7-302e-9554-31f21b673493\n                      description: Generated description for concept referred to by key \"CDSResponseStatusEvent:0.0.1\"\n                  - key:\n                      name: CDSResponseStatusType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSResponseStatusType\n                        version: 0.0.1\n                      UUID: 92b8a2cf-344e-3ce1-8cc0-2b7d3cb695fa\n                      description: Generated description for concept referred to by key \"CDSResponseStatusType:0.0.1\"\n                  - key:\n                      name: CreateSubscriptionPayloadEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CreateSubscriptionPayloadEvent\n                        version: 0.0.1\n                      UUID: 92162397-1a8e-3a3f-a469-d2af7700af4a\n                      description: Generated description for concept referred to by key \"CreateSubscriptionPayloadEvent:0.0.1\"\n                  - key:\n                      name: CreateSubscriptionPayloadTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CreateSubscriptionPayloadTask\n                        version: 0.0.1\n                      UUID: bc0c69f0-52ed-38ea-b468-ae4a6fd1730d\n                      description: Generated description for concept referred to by key \"CreateSubscriptionPayloadTask:0.0.1\"\n                  - key:\n                      name: CreateSubscriptionRequestTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CreateSubscriptionRequestTask\n                        version: 0.0.1\n                      UUID: 89cb75e9-f06c-30d3-b4ff-698d45f63869\n                      description: Generated description for concept referred to by key \"CreateSubscriptionRequestTask:0.0.1\"\n                  - key:\n                      name: DeleteSubscriptionPayloadEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: DeleteSubscriptionPayloadEvent\n                        version: 0.0.1\n                      UUID: 994fa441-04ab-33bb-832d-1cd12ab5d074\n                      description: Generated description for concept referred to by key \"DeleteSubscriptionPayloadEvent:0.0.1\"\n                  - key:\n                      name: DeleteSubscriptionPayloadTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: DeleteSubscriptionPayloadTask\n                        version: 0.0.1\n                      UUID: 0f519117-5fea-3e4b-941f-8f778100465f\n                      description: Generated description for concept referred to by key \"DeleteSubscriptionPayloadTask:0.0.1\"\n                  - key:\n                      name: DeleteSubscriptionRequestTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: DeleteSubscriptionRequestTask\n                        version: 0.0.1\n                      UUID: acb772fe-d442-39e3-98f9-b1080caf4150\n                      description: Generated description for concept referred to by key \"DeleteSubscriptionRequestTask:0.0.1\"\n                  - key:\n                      name: MRResponseEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: MRResponseEvent\n                        version: 0.0.1\n                      UUID: 13c747a3-6bae-3bcf-9c80-b152e01dc194\n                      description: Generated description for concept referred to by key \"MRResponseEvent:0.0.1\"\n                  - key:\n                      name: PMControlPolicy\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMControlPolicy\n                        version: 0.0.1\n                      UUID: acf1e55c-7bc5-3bd5-975a-0ca54afcd8a4\n                      description: Generated description for concept referred to by key \"PMControlPolicy:0.0.1\"\n                  - key:\n                      name: PMControlPolicy_Albums\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMControlPolicy_Albums\n                        version: 0.0.1\n                      UUID: b38ad204-c2c8-32f4-9b5a-dda0aeb0145b\n                      description: Generated description for concept referred to by key \"PMControlPolicy_Albums:0.0.1\"\n                  - key:\n                      name: PMControlPolicy_Events\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMControlPolicy_Events\n                        version: 0.0.1\n                      UUID: be3871a0-c42a-3113-a066-82d192840eca\n                      description: Generated description for concept referred to by key \"PMControlPolicy_Events:0.0.1\"\n                  - key:\n                      name: PMControlPolicy_KeyInfo\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMControlPolicy_KeyInfo\n                        version: 0.0.1\n                      UUID: ced37634-28a4-3178-b7f6-2980794927b0\n                      description: Generated description for concept referred to by key \"PMControlPolicy_KeyInfo:0.0.1\"\n                  - key:\n                      name: PMControlPolicy_Policies\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMControlPolicy_Policies\n                        version: 0.0.1\n                      UUID: be3d180d-ef9c-3a75-8e9c-84271a038bed\n                      description: Generated description for concept referred to by key \"PMControlPolicy_Policies:0.0.1\"\n                  - key:\n                      name: PMControlPolicy_Schemas\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMControlPolicy_Schemas\n                        version: 0.0.1\n                      UUID: e61973f1-189c-39e5-82f6-0d3afe298a20\n                      description: Generated description for concept referred to by key \"PMControlPolicy_Schemas:0.0.1\"\n                  - key:\n                      name: PMControlPolicy_Tasks\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMControlPolicy_Tasks\n                        version: 0.0.1\n                      UUID: 5658adb3-2962-30a3-a241-fae75bb8eb4a\n                      description: Generated description for concept referred to by key \"PMControlPolicy_Tasks:0.0.1\"\n                  - key:\n                      name: PMSubscriptionAlbum\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMSubscriptionAlbum\n                        version: 0.0.1\n                      UUID: c2bd6f0d-6854-317a-9be2-97c08338428c\n                      description: Generated description for concept referred to by key \"PMSubscriptionAlbum:0.0.1\"\n                  - key:\n                      name: PMSubscriptionOutputEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMSubscriptionOutputEvent\n                        version: 0.0.1\n                      UUID: 992b7819-9f69-3aa0-bb0f-6e45ea15ce05\n                      description: Generated description for concept referred to by key \"PMSubscriptionOutputEvent:0.0.1\"\n                  - key:\n                      name: PMSubscriptionType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMSubscriptionType\n                        version: 0.0.1\n                      UUID: 73c1c397-4fc3-357f-93b6-a8ad707fbaae\n                      description: Generated description for concept referred to by key \"PMSubscriptionType:0.0.1\"\n                  - key:\n                      name: ReceiveEventPolicy\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: ReceiveEventPolicy\n                        version: 0.0.1\n                      UUID: 568b7345-9de1-36d3-b6a3-9b857e6809a1\n                      description: Generated description for concept referred to by key \"ReceiveEventPolicy:0.0.1\"\n                  - key:\n                      name: ReceiveSubscriptionTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: ReceiveSubscriptionTask\n                        version: 0.0.1\n                      UUID: f596afc8-100c-35eb-92c8-352355ea457d\n                      description: Generated description for concept referred to by key \"ReceiveSubscriptionTask:0.0.1\"\n                  - key:\n                      name: SimpleIntType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: SimpleIntType\n                        version: 0.0.1\n                      UUID: 153791fd-ae0a-36a7-88a5-309a7936415d\n                      description: Generated description for concept referred to by key \"SimpleIntType:0.0.1\"\n                  - key:\n                      name: SimpleStringType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: SimpleStringType\n                        version: 0.0.1\n                      UUID: 8a4957cf-9493-3a76-8c22-a208e23259af\n                      description: Generated description for concept referred to by key \"SimpleStringType:0.0.1\"\n                  - key:\n                      name: SubscriptionStatusType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: SubscriptionStatusType\n                        version: 0.0.1\n                      UUID: 597643b1-9db1-31ce-85d0-e1c63c43b30b\n                      description: Generated description for concept referred to by key \"SubscriptionStatusType:0.0.1\"\n                  - key:\n                      name: SubscriptionType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: SubscriptionType\n                        version: 0.0.1\n                      UUID: 184547bb-7d64-3cb2-a273-d7185102c5ce\n                      description: Generated description for concept referred to by key \"SubscriptionType:0.0.1\"\n                  - key:\n                      name: UUIDType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: UUIDType\n                        version: 0.0.1\n                      UUID: 6a8cc68e-dfc8-3403-9c6d-071c886b319c\n                      description: Generated description for concept referred to by key \"UUIDType:0.0.1\"\n                  - key:\n                      name: pmsh-operational-policy\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: pmsh-operational-policy\n                        version: 0.0.1\n                      UUID: fdf2c9ff-6422-3ea6-b6b6-49b12116265d\n                      description: Generated description for concept referred to by key \"pmsh-operational-policy:0.0.1\"\n              policies:\n                key:\n                  name: PMControlPolicy_Policies\n                  version: 0.0.1\n                policyMap:\n                  entry:\n                  - key:\n                      name: CDSCreateResponsePolicy\n                      version: 0.0.1\n                    value:\n                      policyKey:\n                        name: CDSCreateResponsePolicy\n                        version: 0.0.1\n                      template: Freestyle\n                      state:\n                        entry:\n                        - key: CDSCreateResponseState\n                          value:\n                            stateKey:\n                              parentKeyName: CDSCreateResponsePolicy\n                              parentKeyVersion: 0.0.1\n                              parentLocalName: 'NULL'\n                              localName: CDSCreateResponseState\n                            trigger:\n                              name: CDSCreateResponseEvent\n                              version: 0.0.1\n                            stateOutputs:\n                              entry:\n                              - key: ResponseOutput\n                                value:\n                                  key:\n                                    parentKeyName: CDSCreateResponsePolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CDSCreateResponseState\n                                    localName: ResponseOutput\n                                  outgoingEvent:\n                                    name: CDSResponseStatusEvent\n                                    version: 0.0.1\n                                  nextState:\n                                    parentKeyName: 'NULL'\n                                    parentKeyVersion: 0.0.0\n                                    parentLocalName: 'NULL'\n                                    localName: 'NULL'\n                            contextAlbumReference: []\n                            taskSelectionLogic:\n                              key: 'NULL'\n                              logicFlavour: UNDEFINED\n                              logic: ''\n                            stateFinalizerLogicMap:\n                              entry: []\n                            defaultTask:\n                              name: CDSCreateResponseTask\n                              version: 0.0.1\n                            taskReferences:\n                              entry:\n                              - key:\n                                  name: CDSCreateResponseTask\n                                  version: 0.0.1\n                                value:\n                                  key:\n                                    parentKeyName: CDSCreateResponsePolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CDSCreateResponseState\n                                    localName: CDSCreateResponsePolicy\n                                  outputType: DIRECT\n                                  output:\n                                    parentKeyName: CDSCreateResponsePolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CDSCreateResponseState\n                                    localName: ResponseOutput\n                      firstState: CDSCreateResponseState\n                  - key:\n                      name: CDSDeleteResponsePolicy\n                      version: 0.0.1\n                    value:\n                      policyKey:\n                        name: CDSDeleteResponsePolicy\n                        version: 0.0.1\n                      template: Freestyle\n                      state:\n                        entry:\n                        - key: CDSDeleteResponseState\n                          value:\n                            stateKey:\n                              parentKeyName: CDSDeleteResponsePolicy\n                              parentKeyVersion: 0.0.1\n                              parentLocalName: 'NULL'\n                              localName: CDSDeleteResponseState\n                            trigger:\n                              name: CDSDeleteResponseEvent\n                              version: 0.0.1\n                            stateOutputs:\n                              entry:\n                              - key: ResponseOutput\n                                value:\n                                  key:\n                                    parentKeyName: CDSDeleteResponsePolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CDSDeleteResponseState\n                                    localName: ResponseOutput\n                                  outgoingEvent:\n                                    name: CDSResponseStatusEvent\n                                    version: 0.0.1\n                                  nextState:\n                                    parentKeyName: 'NULL'\n                                    parentKeyVersion: 0.0.0\n                                    parentLocalName: 'NULL'\n                                    localName: 'NULL'\n                            contextAlbumReference: []\n                            taskSelectionLogic:\n                              key: 'NULL'\n                              logicFlavour: UNDEFINED\n                              logic: ''\n                            stateFinalizerLogicMap:\n                              entry: []\n                            defaultTask:\n                              name: CDSDeleteResponseTask\n                              version: 0.0.1\n                            taskReferences:\n                              entry:\n                              - key:\n                                  name: CDSDeleteResponseTask\n                                  version: 0.0.1\n                                value:\n                                  key:\n                                    parentKeyName: CDSDeleteResponsePolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CDSDeleteResponseState\n                                    localName: CDSDeleteResponsePolicy\n                                  outputType: DIRECT\n                                  output:\n                                    parentKeyName: CDSDeleteResponsePolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CDSDeleteResponseState\n                                    localName: ResponseOutput\n                      firstState: CDSDeleteResponseState\n                  - key:\n                      name: ReceiveEventPolicy\n                      version: 0.0.1\n                    value:\n                      policyKey:\n                        name: ReceiveEventPolicy\n                        version: 0.0.1\n                      template: Freestyle\n                      state:\n                        entry:\n                        - key: CreateOrDeleteState\n                          value:\n                            stateKey:\n                              parentKeyName: ReceiveEventPolicy\n                              parentKeyVersion: 0.0.1\n                              parentLocalName: 'NULL'\n                              localName: CreateOrDeleteState\n                            trigger:\n                              name: PMSubscriptionOutputEvent\n                              version: 0.0.1\n                            stateOutputs:\n                              entry:\n                              - key: CreateSubscriptionPayload\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CreateOrDeleteState\n                                    localName: CreateSubscriptionPayload\n                                  outgoingEvent:\n                                    name: CreateSubscriptionPayloadEvent\n                                    version: 0.0.1\n                                  nextState:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: 'NULL'\n                                    localName: CreateSubscription\n                              - key: DeleteSubscriptionPayload\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CreateOrDeleteState\n                                    localName: DeleteSubscriptionPayload\n                                  outgoingEvent:\n                                    name: DeleteSubscriptionPayloadEvent\n                                    version: 0.0.1\n                                  nextState:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: 'NULL'\n                                    localName: DeleteSubscription\n                            contextAlbumReference:\n                            - name: PMSubscriptionAlbum\n                              version: 0.0.1\n                            taskSelectionLogic:\n                              key: TaskSelectionLogic\n                              logicFlavour: JAVASCRIPT\n                              logic: |-\n                                /*\n                                 * ============LICENSE_START=======================================================\n                                 *  Copyright (C) 2020 Nordix. All rights reserved.\n                                 * ================================================================================\n                                 * Licensed under the Apache License, Version 2.0 (the \"License\");\n                                 * you may not use this file except in compliance with the License.\n                                 * You may obtain a copy of the License at\n                                 *\n                                 *      http://www.apache.org/licenses/LICENSE-2.0\n                                 *\n                                 * Unless required by applicable law or agreed to in writing, software\n                                 * distributed under the License is distributed on an \"AS IS\" BASIS,\n                                 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n                                 * See the License for the specific language governing permissions and\n                                 * limitations under the License.\n                                 *\n                                 * SPDX-License-Identifier: Apache-2.0\n                                 * ============LICENSE_END=========================================================\n                                 */\n\n                                executor.logger.info(executor.subject.id);\n\n                                var pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\n                                var changeType = pmSubscriptionInfo.get(\"changeType\").toString()\n\n                                executor.logger.info(\"Change Type is \" + changeType)\n\n                                if (\"CREATE\".equals(changeType)) {\n                                    executor.logger.info(\"Choosing to create a subscription\")\n                                    executor.subject.getTaskKey(\"CreateSubscriptionPayloadTask\").copyTo(executor.selectedTask);\n                                }\n                                else if (\"DELETE\".equals(changeType)) {\n                                    executor.logger.info(\"Choosing to delete a subscription\")\n                                    executor.subject.getTaskKey(\"DeleteSubscriptionPayloadTask\").copyTo(executor.selectedTask);\n                                }\n\n                                //var returnValue = executor.isTrue;\n                                true;\n                            stateFinalizerLogicMap:\n                              entry: []\n                            defaultTask:\n                              name: CreateSubscriptionPayloadTask\n                              version: 0.0.1\n                            taskReferences:\n                              entry:\n                              - key:\n                                  name: CreateSubscriptionPayloadTask\n                                  version: 0.0.1\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CreateOrDeleteState\n                                    localName: ReceiveEventPolicy\n                                  outputType: DIRECT\n                                  output:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CreateOrDeleteState\n                                    localName: CreateSubscriptionPayload\n                              - key:\n                                  name: DeleteSubscriptionPayloadTask\n                                  version: 0.0.1\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CreateOrDeleteState\n                                    localName: ReceiveEventPolicy\n                                  outputType: DIRECT\n                                  output:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CreateOrDeleteState\n                                    localName: DeleteSubscriptionPayload\n                        - key: CreateSubscription\n                          value:\n                            stateKey:\n                              parentKeyName: ReceiveEventPolicy\n                              parentKeyVersion: 0.0.1\n                              parentLocalName: 'NULL'\n                              localName: CreateSubscription\n                            trigger:\n                              name: CreateSubscriptionPayloadEvent\n                              version: 0.0.1\n                            stateOutputs:\n                              entry:\n                              - key: IssueCreateSubscriptionRequestOutput\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CreateSubscription\n                                    localName: IssueCreateSubscriptionRequestOutput\n                                  outgoingEvent:\n                                    name: CDSCreateSubscriptionRequestEvent\n                                    version: 0.0.1\n                                  nextState:\n                                    parentKeyName: 'NULL'\n                                    parentKeyVersion: 0.0.0\n                                    parentLocalName: 'NULL'\n                                    localName: 'NULL'\n                            contextAlbumReference:\n                            - name: PMSubscriptionAlbum\n                              version: 0.0.1\n                            taskSelectionLogic:\n                              key: 'NULL'\n                              logicFlavour: UNDEFINED\n                              logic: ''\n                            stateFinalizerLogicMap:\n                              entry: []\n                            defaultTask:\n                              name: CreateSubscriptionRequestTask\n                              version: 0.0.1\n                            taskReferences:\n                              entry:\n                              - key:\n                                  name: CreateSubscriptionRequestTask\n                                  version: 0.0.1\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CreateSubscription\n                                    localName: ReceiveEventPolicy\n                                  outputType: DIRECT\n                                  output:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CreateSubscription\n                                    localName: IssueCreateSubscriptionRequestOutput\n                        - key: DeleteSubscription\n                          value:\n                            stateKey:\n                              parentKeyName: ReceiveEventPolicy\n                              parentKeyVersion: 0.0.1\n                              parentLocalName: 'NULL'\n                              localName: DeleteSubscription\n                            trigger:\n                              name: DeleteSubscriptionPayloadEvent\n                              version: 0.0.1\n                            stateOutputs:\n                              entry:\n                              - key: IssueDeleteSubscriptionRequestOutput\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: DeleteSubscription\n                                    localName: IssueDeleteSubscriptionRequestOutput\n                                  outgoingEvent:\n                                    name: CDSDeleteSubscriptionRequestEvent\n                                    version: 0.0.1\n                                  nextState:\n                                    parentKeyName: 'NULL'\n                                    parentKeyVersion: 0.0.0\n                                    parentLocalName: 'NULL'\n                                    localName: 'NULL'\n                            contextAlbumReference:\n                            - name: PMSubscriptionAlbum\n                              version: 0.0.1\n                            taskSelectionLogic:\n                              key: 'NULL'\n                              logicFlavour: UNDEFINED\n                              logic: ''\n                            stateFinalizerLogicMap:\n                              entry: []\n                            defaultTask:\n                              name: DeleteSubscriptionRequestTask\n                              version: 0.0.1\n                            taskReferences:\n                              entry:\n                              - key:\n                                  name: DeleteSubscriptionRequestTask\n                                  version: 0.0.1\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: DeleteSubscription\n                                    localName: ReceiveEventPolicy\n                                  outputType: DIRECT\n                                  output:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: DeleteSubscription\n                                    localName: IssueDeleteSubscriptionRequestOutput\n                        - key: ReceiveSubscriptionState\n                          value:\n                            stateKey:\n                              parentKeyName: ReceiveEventPolicy\n                              parentKeyVersion: 0.0.1\n                              parentLocalName: 'NULL'\n                              localName: ReceiveSubscriptionState\n                            trigger:\n                              name: pmsh-operational-policy\n                              version: 0.0.1\n                            stateOutputs:\n                              entry:\n                              - key: ReceivePMSubscriptionOutput\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: ReceiveSubscriptionState\n                                    localName: ReceivePMSubscriptionOutput\n                                  outgoingEvent:\n                                    name: PMSubscriptionOutputEvent\n                                    version: 0.0.1\n                                  nextState:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: 'NULL'\n                                    localName: CreateOrDeleteState\n                            contextAlbumReference:\n                            - name: PMSubscriptionAlbum\n                              version: 0.0.1\n                            taskSelectionLogic:\n                              key: 'NULL'\n                              logicFlavour: UNDEFINED\n                              logic: ''\n                            stateFinalizerLogicMap:\n                              entry: []\n                            defaultTask:\n                              name: ReceiveSubscriptionTask\n                              version: 0.0.1\n                            taskReferences:\n                              entry:\n                              - key:\n                                  name: ReceiveSubscriptionTask\n                                  version: 0.0.1\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: ReceiveSubscriptionState\n                                    localName: ReceiveEventPolicy\n                                  outputType: DIRECT\n                                  output:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: ReceiveSubscriptionState\n                                    localName: ReceivePMSubscriptionOutput\n                      firstState: ReceiveSubscriptionState\n              tasks:\n                key:\n                  name: PMControlPolicy_Tasks\n                  version: 0.0.1\n                taskMap:\n                  entry:\n                  - key:\n                      name: CDSCreateResponseTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateResponseTask\n                        version: 0.0.1\n                      inputFields:\n                        entry:\n                        - key: actionIdentifiers\n                          value:\n                            key: actionIdentifiers\n                            fieldSchemaKey:\n                              name: CDSActionIdentifiersType\n                              version: 0.0.1\n                            optional: false\n                        - key: commonHeader\n                          value:\n                            key: commonHeader\n                            fieldSchemaKey:\n                              name: CDSResponseCommonHeaderType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSCreateResponsePayloadType\n                              version: 0.0.1\n                            optional: false\n                        - key: status\n                          value:\n                            key: status\n                            fieldSchemaKey:\n                              name: CDSResponseStatusType\n                              version: 0.0.1\n                            optional: false\n                      outputFields:\n                        entry:\n                        - key: status\n                          value:\n                            key: status\n                            fieldSchemaKey:\n                              name: SubscriptionStatusType\n                              version: 0.0.1\n                            optional: false\n                      taskParameters:\n                        entry: []\n                      contextAlbumReference:\n                      - name: PMSubscriptionAlbum\n                        version: 0.0.1\n                      taskLogic:\n                        key: TaskLogic\n                        logicFlavour: JAVASCRIPT\n                        logic: |-\n                          /*\n                           * ============LICENSE_START=======================================================\n                           *  Copyright (C) 2020 Nordix. All rights reserved.\n                           * ================================================================================\n                           * Licensed under the Apache License, Version 2.0 (the \"License\");\n                           * you may not use this file except in compliance with the License.\n                           * You may obtain a copy of the License at\n                           *\n                           *      http://www.apache.org/licenses/LICENSE-2.0\n                           *\n                           * Unless required by applicable law or agreed to in writing, software\n                           * distributed under the License is distributed on an \"AS IS\" BASIS,\n                           * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n                           * See the License for the specific language governing permissions and\n                           * limitations under the License.\n                           *\n                           * SPDX-License-Identifier: Apache-2.0\n                           * ============LICENSE_END=========================================================\n                           */\n\n                          executor.logger.info(executor.subject.id);\n\n                          var commonHeader = executor.inFields.get(\"commonHeader\")\n                          var response = executor.inFields.get(\"payload\")\n                          var albumID = commonHeader.get(\"requestId\")\n\n                          var pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(albumID.toString());\n                          var responseStatus = executor.subject.getOutFieldSchemaHelper(\"status\").createNewInstance();\n\n                          responseStatus.put(\"subscriptionName\", pmSubscriptionInfo.get(\"subscription\").get(\"subscriptionName\"))\n                          responseStatus.put(\"nfName\", pmSubscriptionInfo.get(\"nfName\"))\n                          responseStatus.put(\"changeType\", pmSubscriptionInfo.get(\"changeType\"))\n\n                          var status = response.get(pmSubscriptionInfo.get(\"changeType\").toLowerCase() + \"_DasH_subscription_DasH_response\").get(\"odl_DasH_response\").get(\"status\")\n\n                          executor.logger.info(\"RESPONSE STATUS = \" + status)\n\n                          if(status == \"success\") {\n                              responseStatus.put(\"message\", \"success\")\n                          } else {\n                              responseStatus.put(\"message\", \"failed\")\n                          }\n\n                          executor.outFields.put(\"status\", responseStatus)\n\n                          //var returnValue = executor.isTrue;\n                          true;\n                  - key:\n                      name: CDSDeleteResponseTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteResponseTask\n                        version: 0.0.1\n                      inputFields:\n                        entry:\n                        - key: actionIdentifiers\n                          value:\n                            key: actionIdentifiers\n                            fieldSchemaKey:\n                              name: CDSActionIdentifiersType\n                              version: 0.0.1\n                            optional: false\n                        - key: commonHeader\n                          value:\n                            key: commonHeader\n                            fieldSchemaKey:\n                              name: CDSResponseCommonHeaderType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSDeleteResponsePayloadType\n                              version: 0.0.1\n                            optional: false\n                        - key: status\n                          value:\n                            key: status\n                            fieldSchemaKey:\n                              name: CDSResponseStatusType\n                              version: 0.0.1\n                            optional: false\n                      outputFields:\n                        entry:\n                        - key: status\n                          value:\n                            key: status\n                            fieldSchemaKey:\n                              name: SubscriptionStatusType\n                              version: 0.0.1\n                            optional: false\n                      taskParameters:\n                        entry: []\n                      contextAlbumReference:\n                      - name: PMSubscriptionAlbum\n                        version: 0.0.1\n                      taskLogic:\n                        key: TaskLogic\n                        logicFlavour: JAVASCRIPT\n                        logic: |-\n                          /*\n                           * ============LICENSE_START=======================================================\n                           *  Copyright (C) 2020 Nordix. All rights reserved.\n                           * ================================================================================\n                           * Licensed under the Apache License, Version 2.0 (the \"License\");\n                           * you may not use this file except in compliance with the License.\n                           * You may obtain a copy of the License at\n                           *\n                           *      http://www.apache.org/licenses/LICENSE-2.0\n                           *\n                           * Unless required by applicable law or agreed to in writing, software\n                           * distributed under the License is distributed on an \"AS IS\" BASIS,\n                           * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n                           * See the License for the specific language governing permissions and\n                           * limitations under the License.\n                           *\n                           * SPDX-License-Identifier: Apache-2.0\n                           * ============LICENSE_END=========================================================\n                           */\n\n                          executor.logger.info(executor.subject.id);\n\n                          var commonHeader = executor.inFields.get(\"commonHeader\")\n                          var response = executor.inFields.get(\"payload\")\n                          var albumID = commonHeader.get(\"requestId\")\n\n                          var pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(albumID.toString());\n                          var responseStatus = executor.subject.getOutFieldSchemaHelper(\"status\").createNewInstance();\n\n                          responseStatus.put(\"subscriptionName\", pmSubscriptionInfo.get(\"subscription\").get(\"subscriptionName\"))\n                          responseStatus.put(\"nfName\", pmSubscriptionInfo.get(\"nfName\"))\n                          responseStatus.put(\"changeType\", pmSubscriptionInfo.get(\"changeType\"))\n\n                          var status = response.get(pmSubscriptionInfo.get(\"changeType\").toLowerCase() + \"_DasH_subscription_DasH_response\").get(\"odl_DasH_response\").get(\"status\")\n\n                          executor.logger.info(\"RESPONSE STATUS = \" + status)\n\n                          if(status == \"success\") {\n                              responseStatus.put(\"message\", \"success\")\n                          } else {\n                              responseStatus.put(\"message\", \"failed\")\n                          }\n\n                          executor.outFields.put(\"status\", responseStatus)\n\n                          //var returnValue = executor.isTrue;\n                          true;\n                  - key:\n                      name: CreateSubscriptionPayloadTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CreateSubscriptionPayloadTask\n                        version: 0.0.1\n                      inputFields:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                      outputFields:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSCreateSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                      taskParameters:\n                        entry: []\n                      contextAlbumReference:\n                      - name: PMSubscriptionAlbum\n                        version: 0.0.1\n                      taskLogic:\n                        key: TaskLogic\n                        logicFlavour: JAVASCRIPT\n                        logic: |-\n                          /*\n                           * ============LICENSE_START=======================================================\n                           *  Copyright (C) 2020 Nordix. All rights reserved.\n                           * ================================================================================\n                           * Licensed under the Apache License, Version 2.0 (the \"License\");\n                           * you may not use this file except in compliance with the License.\n                           * You may obtain a copy of the License at\n                           *\n                           *      http://www.apache.org/licenses/LICENSE-2.0\n                           *\n                           * Unless required by applicable law or agreed to in writing, software\n                           * distributed under the License is distributed on an \"AS IS\" BASIS,\n                           * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n                           * See the License for the specific language governing permissions and\n                           * limitations under the License.\n                           *\n                           * SPDX-License-Identifier: Apache-2.0\n                           * ============LICENSE_END=========================================================\n                           */\n\n                          executor.logger.info(executor.subject.id);\n\n                          var pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\n\n                          var changeType = pmSubscriptionInfo.get(\"changeType\").toLowerCase()\n\n                          var payloadProperties = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(changeType + \"_DasH_subscription_DasH_properties_record\");\n\n                          payloadProperties.put(\"nfName\",  pmSubscriptionInfo.get(\"nfName\"))\n                          payloadProperties.put(\"subscriptionName\",  pmSubscriptionInfo.get(\"subscription\").get(\"subscriptionName\"))\n                          payloadProperties.put(\"administrativeState\", pmSubscriptionInfo.get(\"subscription\").get(\"administrativeState\"))\n                          payloadProperties.put(\"fileBasedGP\",  pmSubscriptionInfo.get(\"subscription\").get(\"fileBasedGP\").toString())\n                          payloadProperties.put(\"fileLocation\", pmSubscriptionInfo.get(\"subscription\").get(\"fileLocation\"))\n                          payloadProperties.put(\"measurementGroups\", pmSubscriptionInfo.get(\"subscription\").get(\"measurementGroups\"))\n\n                          var payloadEntry = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(\"CDSRequestPayloadEntry\");\n                          payloadEntry.put(changeType + \"_DasH_subscription_DasH_properties\", payloadProperties)\n\n                          var payload = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewInstance();\n                          payload.put(changeType + \"_DasH_subscription_DasH_request\", payloadEntry);\n\n                          executor.outFields.put(\"albumID\", executor.inFields.get(\"albumID\"))\n                          executor.outFields.put(\"payload\", payload);\n\n                          //var returnValue = executor.isTrue;\n                          true;\n                  - key:\n                      name: CreateSubscriptionRequestTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CreateSubscriptionRequestTask\n                        version: 0.0.1\n                      inputFields:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSCreateSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                      outputFields:\n                        entry:\n                        - key: actionIdentifiers\n                          value:\n                            key: actionIdentifiers\n                            fieldSchemaKey:\n                              name: CDSActionIdentifiersType\n                              version: 0.0.1\n                            optional: false\n                        - key: commonHeader\n                          value:\n                            key: commonHeader\n                            fieldSchemaKey:\n                              name: CDSRequestCommonHeaderType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSCreateSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                      taskParameters:\n                        entry: []\n                      contextAlbumReference:\n                      - name: PMSubscriptionAlbum\n                        version: 0.0.1\n                      taskLogic:\n                        key: TaskLogic\n                        logicFlavour: JAVASCRIPT\n                        logic: |-\n                          /*\n                           * ============LICENSE_START=======================================================\n                           *  Copyright (C) 2020 Nordix. All rights reserved.\n                           * ================================================================================\n                           * Licensed under the Apache License, Version 2.0 (the \"License\");\n                           * you may not use this file except in compliance with the License.\n                           * You may obtain a copy of the License at\n                           *\n                           *      http://www.apache.org/licenses/LICENSE-2.0\n                           *\n                           * Unless required by applicable law or agreed to in writing, software\n                           * distributed under the License is distributed on an \"AS IS\" BASIS,\n                           * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n                           * See the License for the specific language governing permissions and\n                           * limitations under the License.\n                           *\n                           * SPDX-License-Identifier: Apache-2.0\n                           * ============LICENSE_END=========================================================\n                           */\n\n                          executor.logger.info(executor.subject.id);\n\n                          var pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\n\n                          var changeType = pmSubscriptionInfo.get(\"changeType\").toLowerCase()\n                          var blueprintName = pmSubscriptionInfo.get(\"blueprintName\").toLowerCase()\n                          var blueprintVersion = pmSubscriptionInfo.get(\"blueprintVersion\").toLowerCase()\n                          var payload = executor.inFields.get(\"payload\")\n                          var actionName = changeType + \"-subscription\"\n\n                          var commonHeader = executor.subject.getOutFieldSchemaHelper(\"commonHeader\").createNewInstance();\n                          commonHeader.put(\"originatorId\", \"sdnc\");\n                          commonHeader.put(\"requestId\", executor.inFields.get(\"albumID\").toString());\n                          commonHeader.put(\"subRequestId\", \"sub-123456-1000\");\n\n                          var actionIdentifiers = executor.subject.getOutFieldSchemaHelper(\"actionIdentifiers\").createNewInstance();\n                          actionIdentifiers.put(\"actionName\", actionName);\n                          actionIdentifiers.put(\"blueprintName\", blueprintName);\n                          actionIdentifiers.put(\"blueprintVersion\", blueprintVersion);\n                          actionIdentifiers.put(\"mode\", \"sync\");\n\n                          executor.outFields.put(\"commonHeader\", commonHeader);\n                          executor.outFields.put(\"actionIdentifiers\", actionIdentifiers);\n                          executor.outFields.put(\"payload\", payload);\n\n                          //var returnValue = executor.isTrue;\n                          true;\n                  - key:\n                      name: DeleteSubscriptionPayloadTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: DeleteSubscriptionPayloadTask\n                        version: 0.0.1\n                      inputFields:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                      outputFields:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSDeleteSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                      taskParameters:\n                        entry: []\n                      contextAlbumReference:\n                      - name: PMSubscriptionAlbum\n                        version: 0.0.1\n                      taskLogic:\n                        key: TaskLogic\n                        logicFlavour: JAVASCRIPT\n                        logic: |-\n                          /*\n                           * ============LICENSE_START=======================================================\n                           *  Copyright (C) 2020 Nordix. All rights reserved.\n                           * ================================================================================\n                           * Licensed under the Apache License, Version 2.0 (the \"License\");\n                           * you may not use this file except in compliance with the License.\n                           * You may obtain a copy of the License at\n                           *\n                           *      http://www.apache.org/licenses/LICENSE-2.0\n                           *\n                           * Unless required by applicable law or agreed to in writing, software\n                           * distributed under the License is distributed on an \"AS IS\" BASIS,\n                           * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n                           * See the License for the specific language governing permissions and\n                           * limitations under the License.\n                           *\n                           * SPDX-License-Identifier: Apache-2.0\n                           * ============LICENSE_END=========================================================\n                           */\n\n                          executor.logger.info(executor.subject.id);\n\n                          var pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\n\n                          var changeType = pmSubscriptionInfo.get(\"changeType\").toLowerCase()\n\n                          var payloadProperties = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(changeType + \"_DasH_subscription_DasH_properties_record\");\n\n                          payloadProperties.put(\"nfName\",  pmSubscriptionInfo.get(\"nfName\"))\n                          payloadProperties.put(\"subscriptionName\",  pmSubscriptionInfo.get(\"subscription\").get(\"subscriptionName\"))\n                          payloadProperties.put(\"administrativeState\", pmSubscriptionInfo.get(\"subscription\").get(\"administrativeState\"))\n                          payloadProperties.put(\"fileBasedGP\",  pmSubscriptionInfo.get(\"subscription\").get(\"fileBasedGP\").toString())\n                          payloadProperties.put(\"fileLocation\", pmSubscriptionInfo.get(\"subscription\").get(\"fileLocation\"))\n                          payloadProperties.put(\"measurementGroups\", pmSubscriptionInfo.get(\"subscription\").get(\"measurementGroups\"))\n\n                          var payloadEntry = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(\"CDSRequestPayloadEntry\");\n                          payloadEntry.put(changeType + \"_DasH_subscription_DasH_properties\", payloadProperties)\n\n                          var payload = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewInstance();\n                          payload.put(changeType + \"_DasH_subscription_DasH_request\", payloadEntry);\n\n                          executor.outFields.put(\"albumID\", executor.inFields.get(\"albumID\"))\n                          executor.outFields.put(\"payload\", payload);\n\n                          //var returnValue = executor.isTrue;\n                          true;\n                  - key:\n                      name: DeleteSubscriptionRequestTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: DeleteSubscriptionRequestTask\n                        version: 0.0.1\n                      inputFields:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSDeleteSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                      outputFields:\n                        entry:\n                        - key: actionIdentifiers\n                          value:\n                            key: actionIdentifiers\n                            fieldSchemaKey:\n                              name: CDSActionIdentifiersType\n                              version: 0.0.1\n                            optional: false\n                        - key: commonHeader\n                          value:\n                            key: commonHeader\n                            fieldSchemaKey:\n                              name: CDSRequestCommonHeaderType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSDeleteSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                      taskParameters:\n                        entry: []\n                      contextAlbumReference:\n                      - name: PMSubscriptionAlbum\n                        version: 0.0.1\n                      taskLogic:\n                        key: TaskLogic\n                        logicFlavour: JAVASCRIPT\n                        logic: |-\n                          /*\n                           * ============LICENSE_START=======================================================\n                           *  Copyright (C) 2020 Nordix. All rights reserved.\n                           * ================================================================================\n                           * Licensed under the Apache License, Version 2.0 (the \"License\");\n                           * you may not use this file except in compliance with the License.\n                           * You may obtain a copy of the License at\n                           *\n                           *      http://www.apache.org/licenses/LICENSE-2.0\n                           *\n                           * Unless required by applicable law or agreed to in writing, software\n                           * distributed under the License is distributed on an \"AS IS\" BASIS,\n                           * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n                           * See the License for the specific language governing permissions and\n                           * limitations under the License.\n                           *\n                           * SPDX-License-Identifier: Apache-2.0\n                           * ============LICENSE_END=========================================================\n                           */\n\n                          executor.logger.info(executor.subject.id);\n\n                          var pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\n\n                          var changeType = pmSubscriptionInfo.get(\"changeType\").toLowerCase()\n                          var blueprintName = pmSubscriptionInfo.get(\"blueprintName\").toLowerCase()\n                          var blueprintVersion = pmSubscriptionInfo.get(\"blueprintVersion\").toLowerCase()\n                          var payload = executor.inFields.get(\"payload\")\n                          var actionName = changeType + \"-subscription\"\n\n                          var commonHeader = executor.subject.getOutFieldSchemaHelper(\"commonHeader\").createNewInstance();\n                          commonHeader.put(\"originatorId\", \"sdnc\");\n                          commonHeader.put(\"requestId\", executor.inFields.get(\"albumID\").toString());\n                          commonHeader.put(\"subRequestId\", \"sub-123456-1000\");\n\n                          var actionIdentifiers = executor.subject.getOutFieldSchemaHelper(\"actionIdentifiers\").createNewInstance();\n                          actionIdentifiers.put(\"actionName\", actionName);\n                          actionIdentifiers.put(\"blueprintName\", blueprintName);\n                          actionIdentifiers.put(\"blueprintVersion\", blueprintVersion);\n                          actionIdentifiers.put(\"mode\", \"sync\");\n\n                          executor.outFields.put(\"commonHeader\", commonHeader);\n                          executor.outFields.put(\"actionIdentifiers\", actionIdentifiers);\n                          executor.outFields.put(\"payload\", payload);\n\n                          //var returnValue = executor.isTrue;\n                          true;\n                  - key:\n                      name: ReceiveSubscriptionTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: ReceiveSubscriptionTask\n                        version: 0.0.1\n                      inputFields:\n                        entry:\n                        - key: blueprintName\n                          value:\n                            key: blueprintName\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: blueprintVersion\n                          value:\n                            key: blueprintVersion\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: changeType\n                          value:\n                            key: changeType\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: closedLoopControlName\n                          value:\n                            key: closedLoopControlName\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: nfName\n                          value:\n                            key: nfName\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: policyName\n                          value:\n                            key: policyName\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: subscription\n                          value:\n                            key: subscription\n                            fieldSchemaKey:\n                              name: SubscriptionType\n                              version: 0.0.1\n                            optional: false\n                      outputFields:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                      taskParameters:\n                        entry: []\n                      contextAlbumReference:\n                      - name: PMSubscriptionAlbum\n                        version: 0.0.1\n                      taskLogic:\n                        key: TaskLogic\n                        logicFlavour: JAVASCRIPT\n                        logic: |-\n                          /*\n                           * ============LICENSE_START=======================================================\n                           *  Copyright (C) 2020 Nordix. All rights reserved.\n                           * ================================================================================\n                           * Licensed under the Apache License, Version 2.0 (the \"License\");\n                           * you may not use this file except in compliance with the License.\n                           * You may obtain a copy of the License at\n                           *\n                           *      http://www.apache.org/licenses/LICENSE-2.0\n                           *\n                           * Unless required by applicable law or agreed to in writing, software\n                           * distributed under the License is distributed on an \"AS IS\" BASIS,\n                           * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n                           * See the License for the specific language governing permissions and\n                           * limitations under the License.\n                           *\n                           * SPDX-License-Identifier: Apache-2.0\n                           * ============LICENSE_END=========================================================\n                           */\n                          var uuidType = java.util.UUID;\n\n                          executor.logger.info(executor.subject.id);\n\n                          //albumID will be used to fetch info from our album later\n                          var albumID = uuidType.randomUUID();\n                          var pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").getSchemaHelper().createNewInstance();\n                          var returnValue = true;\n\n                          if(executor.inFields.get(\"policyName\") != null) {\n                              executor.logger.info(\"nfName in receive sub event \" + executor.inFields.get(\"nfName\"));\n\n                              var changeType = executor.inFields.get(\"changeType\")\n                              var nfName = executor.inFields.get(\"nfName\")\n                              var policyName = executor.inFields.get(\"policyName\")\n                              var closedLoopControlName = executor.inFields.get(\"closedLoopControlName\")\n                              var subscription = executor.inFields.get(\"subscription\")\n                              var blueprintName = executor.inFields.get(\"blueprintName\")\n                              var blueprintVersion = executor.inFields.get(\"blueprintVersion\")\n\n                              pmSubscriptionInfo.put(\"nfName\", executor.inFields.get(\"nfName\"));\n                              pmSubscriptionInfo.put(\"changeType\", executor.inFields.get(\"changeType\"))\n                              pmSubscriptionInfo.put(\"policyName\", executor.inFields.get(\"policyName\"))\n                              pmSubscriptionInfo.put(\"closedLoopControlName\", executor.inFields.get(\"closedLoopControlName\"))\n                              pmSubscriptionInfo.put(\"subscription\", subscription)\n                              pmSubscriptionInfo.put(\"blueprintName\", blueprintName)\n                              pmSubscriptionInfo.put(\"blueprintVersion\", blueprintVersion)\n\n\n                              executor.getContextAlbum(\"PMSubscriptionAlbum\").put(albumID.toString(), pmSubscriptionInfo);\n\n                              executor.outFields.put(\"albumID\", albumID)\n                          } else {\n                              executor.message = \"Received invalid event\"\n                              returnValue = false;\n                          }\n\n                          returnValue;\n              events:\n                key:\n                  name: PMControlPolicy_Events\n                  version: 0.0.1\n                eventMap:\n                  entry:\n                  - key:\n                      name: CDSCreateResponseEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateResponseEvent\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: CDS\n                      target: APEX\n                      parameter:\n                        entry:\n                        - key: actionIdentifiers\n                          value:\n                            key: actionIdentifiers\n                            fieldSchemaKey:\n                              name: CDSActionIdentifiersType\n                              version: 0.0.1\n                            optional: false\n                        - key: commonHeader\n                          value:\n                            key: commonHeader\n                            fieldSchemaKey:\n                              name: CDSResponseCommonHeaderType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSCreateResponsePayloadType\n                              version: 0.0.1\n                            optional: false\n                        - key: status\n                          value:\n                            key: status\n                            fieldSchemaKey:\n                              name: CDSResponseStatusType\n                              version: 0.0.1\n                            optional: false\n                  - key:\n                      name: CDSCreateSubscriptionRequestEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateSubscriptionRequestEvent\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: APEX\n                      target: APEX\n                      parameter:\n                        entry:\n                        - key: actionIdentifiers\n                          value:\n                            key: actionIdentifiers\n                            fieldSchemaKey:\n                              name: CDSActionIdentifiersType\n                              version: 0.0.1\n                            optional: false\n                        - key: commonHeader\n                          value:\n                            key: commonHeader\n                            fieldSchemaKey:\n                              name: CDSRequestCommonHeaderType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSCreateSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                  - key:\n                      name: CDSDeleteResponseEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteResponseEvent\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: CDS\n                      target: APEX\n                      parameter:\n                        entry:\n                        - key: actionIdentifiers\n                          value:\n                            key: actionIdentifiers\n                            fieldSchemaKey:\n                              name: CDSActionIdentifiersType\n                              version: 0.0.1\n                            optional: false\n                        - key: commonHeader\n                          value:\n                            key: commonHeader\n                            fieldSchemaKey:\n                              name: CDSResponseCommonHeaderType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSDeleteResponsePayloadType\n                              version: 0.0.1\n                            optional: false\n                        - key: status\n                          value:\n                            key: status\n                            fieldSchemaKey:\n                              name: CDSResponseStatusType\n                              version: 0.0.1\n                            optional: false\n                  - key:\n                      name: CDSDeleteSubscriptionRequestEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteSubscriptionRequestEvent\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: APEX\n                      target: APEX\n                      parameter:\n                        entry:\n                        - key: actionIdentifiers\n                          value:\n                            key: actionIdentifiers\n                            fieldSchemaKey:\n                              name: CDSActionIdentifiersType\n                              version: 0.0.1\n                            optional: false\n                        - key: commonHeader\n                          value:\n                            key: commonHeader\n                            fieldSchemaKey:\n                              name: CDSRequestCommonHeaderType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSDeleteSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                  - key:\n                      name: CDSResponseStatusEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSResponseStatusEvent\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: APEX\n                      target: DCAE\n                      parameter:\n                        entry:\n                        - key: status\n                          value:\n                            key: status\n                            fieldSchemaKey:\n                              name: SubscriptionStatusType\n                              version: 0.0.1\n                            optional: false\n                  - key:\n                      name: CreateSubscriptionPayloadEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CreateSubscriptionPayloadEvent\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: APEX\n                      target: APEX\n                      parameter:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSCreateSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                  - key:\n                      name: DeleteSubscriptionPayloadEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: DeleteSubscriptionPayloadEvent\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: APEX\n                      target: APEX\n                      parameter:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSDeleteSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                  - key:\n                      name: MRResponseEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: MRResponseEvent\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: DCAE\n                      target: APEX\n                      parameter:\n                        entry:\n                        - key: count\n                          value:\n                            key: count\n                            fieldSchemaKey:\n                              name: SimpleIntType\n                              version: 0.0.1\n                            optional: false\n                        - key: serverTimeMs\n                          value:\n                            key: serverTimeMs\n                            fieldSchemaKey:\n                              name: SimpleIntType\n                              version: 0.0.1\n                            optional: false\n                  - key:\n                      name: PMSubscriptionOutputEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMSubscriptionOutputEvent\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: APEX\n                      target: APEX\n                      parameter:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                  - key:\n                      name: pmsh-operational-policy\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: pmsh-operational-policy\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: DCAE\n                      target: APEX\n                      parameter:\n                        entry:\n                        - key: blueprintName\n                          value:\n                            key: blueprintName\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: blueprintVersion\n                          value:\n                            key: blueprintVersion\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: changeType\n                          value:\n                            key: changeType\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: closedLoopControlName\n                          value:\n                            key: closedLoopControlName\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: nfName\n                          value:\n                            key: nfName\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: policyName\n                          value:\n                            key: policyName\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: subscription\n                          value:\n                            key: subscription\n                            fieldSchemaKey:\n                              name: SubscriptionType\n                              version: 0.0.1\n                            optional: false\n              albums:\n                key:\n                  name: PMControlPolicy_Albums\n                  version: 0.0.1\n                albums:\n                  entry:\n                  - key:\n                      name: PMSubscriptionAlbum\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMSubscriptionAlbum\n                        version: 0.0.1\n                      scope: policy\n                      isWritable: true\n                      itemSchema:\n                        name: PMSubscriptionType\n                        version: 0.0.1\n              schemas:\n                key:\n                  name: PMControlPolicy_Schemas\n                  version: 0.0.1\n                schemas:\n                  entry:\n                  - key:\n                      name: CDSActionIdentifiersType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSActionIdentifiersType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: |-\n                        {\n                            \"type\": \"record\",\n                            \"name\": \"ActionIdentifiers_Type\",\n                            \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n                            \"fields\": [\n                                {\n                                    \"name\": \"actionName\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"blueprintName\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"blueprintVersion\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"mode\",\n                                    \"type\": \"string\"\n                                }\n                            ]\n                        }\n                  - key:\n                      name: CDSCreateResponsePayloadType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateResponsePayloadType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: |-\n                        {\n                          \"name\": \"CreateResponsePayloadEntry\",\n                          \"type\": \"record\",\n                          \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n                          \"fields\": [\n                            {\n                              \"name\": \"create_DasH_subscription_DasH_response\",\n                              \"type\": {\n                                \"name\": \"create_DasH_subscription_DasH_response\",\n                                \"type\": \"record\",\n                                \"fields\": [\n                                  {\n                                    \"name\": \"odl_DasH_response\",\n                                    \"type\": {\n                                      \"name\": \"odl_DasH_response\",\n                                      \"type\": \"record\",\n                                      \"fields\": [\n                                          {\n                                            \"name\": \"status\",\n                                            \"type\": \"string\"\n                                          }\n                                      ]\n                                    }\n                                  }\n                                ]\n                              }\n                            }\n                          ]\n                        }\n                  - key:\n                      name: CDSCreateSubscriptionPayloadType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateSubscriptionPayloadType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: |-\n                        {\n                          \"type\": \"map\",\n                          \"values\": {\n                            \"type\": \"record\",\n                            \"name\": \"CDSRequestPayloadEntry\",\n                            \"fields\": [\n                              {\n                                \"name\": \"create_DasH_subscription_DasH_properties\",\n                                \"type\": {\n                                  \"name\": \"create_DasH_subscription_DasH_properties_record\",\n                                  \"type\": \"record\",\n                                  \"fields\": [\n                                    {\n                                      \"name\": \"nfName\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"subscriptionName\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"administrativeState\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"fileBasedGP\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"fileLocation\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"measurementGroups\",\n                                      \"type\": {\n                                        \"type\": \"array\",\n                                        \"items\": {\n                                          \"name\": \"measurementGroups_record\",\n                                          \"type\": \"record\",\n                                          \"fields\": [\n                                            {\n                                              \"name\": \"measurementGroup\",\n                                              \"type\": {\n                                                \"name\": \"measurementGroup\",\n                                                \"type\": \"record\",\n                                                \"fields\": [\n                                                  {\n                                                    \"name\": \"measurementTypes\",\n                                                    \"type\": {\n                                                      \"type\": \"array\",\n                                                      \"items\": {\n                                                        \"name\": \"measurementTypes_record\",\n                                                        \"type\": \"record\",\n                                                        \"fields\": [\n                                                          {\n                                                            \"name\": \"measurementType\",\n                                                            \"type\": \"string\"\n                                                          }\n                                                        ]\n                                                      }\n                                                    }\n                                                  },\n                                                  {\n                                                    \"name\": \"managedObjectDNsBasic\",\n                                                    \"type\": {\n                                                      \"type\": \"array\",\n                                                      \"items\": {\n                                                        \"name\": \"managedObjectDNsBasic_record\",\n                                                        \"type\": \"record\",\n                                                        \"fields\": [\n                                                          {\n                                                            \"name\": \"DN\",\n                                                            \"type\": \"string\"\n                                                          }\n                                                        ]\n                                                      }\n                                                    }\n                                                  }\n                                                ]\n                                              }\n                                            }\n                                          ]\n                                        }\n                                      }\n                                    }\n                                  ]\n                                }\n                              }\n                            ]\n                          }\n                        }\n                  - key:\n                      name: CDSDeleteResponsePayloadType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteResponsePayloadType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: |-\n                        {\n                          \"name\": \"DeleteResponsePayloadEntry\",\n                          \"type\": \"record\",\n                          \"namespace\": \"com.acme.avro\",\n                          \"fields\": [\n                            {\n                              \"name\": \"delete_DasH_subscription_DasH_response\",\n                              \"type\": {\n                                \"name\": \"delete_DasH_subscription_DasH_response\",\n                                \"type\": \"record\",\n                                \"fields\": [\n                                  {\n                                    \"name\": \"odl_DasH_response\",\n                                    \"type\": {\n                                      \"name\": \"odl_DasH_response\",\n                                      \"type\": \"record\",\n                                      \"fields\": [\n                                          {\n                                            \"name\": \"status\",\n                                            \"type\": \"string\"\n                                          }\n                                      ]\n                                    }\n                                  }\n                                ]\n                              }\n                            }\n                          ]\n                        }\n                  - key:\n                      name: CDSDeleteSubscriptionPayloadType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteSubscriptionPayloadType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: |-\n                        {\n                          \"type\": \"map\",\n                          \"values\": {\n                            \"type\": \"record\",\n                            \"name\": \"CDSRequestPayloadEntry\",\n                            \"fields\": [\n                              {\n                                \"name\": \"delete_DasH_subscription_DasH_properties\",\n                                \"type\": {\n                                  \"name\": \"delete_DasH_subscription_DasH_properties_record\",\n                                  \"type\": \"record\",\n                                  \"fields\": [\n                                    {\n                                      \"name\": \"nfName\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"subscriptionName\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"administrativeState\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"fileBasedGP\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"fileLocation\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"measurementGroups\",\n                                      \"type\": {\n                                        \"type\": \"array\",\n                                        \"items\": {\n                                          \"name\": \"measurementGroups_record\",\n                                          \"type\": \"record\",\n                                          \"fields\": [\n                                            {\n                                              \"name\": \"measurementGroup\",\n                                              \"type\": {\n                                                \"name\": \"measurementGroup\",\n                                                \"type\": \"record\",\n                                                \"fields\": [\n                                                  {\n                                                    \"name\": \"measurementTypes\",\n                                                    \"type\": {\n                                                      \"type\": \"array\",\n                                                      \"items\": {\n                                                        \"name\": \"measurementTypes_record\",\n                                                        \"type\": \"record\",\n                                                        \"fields\": [\n                                                          {\n                                                            \"name\": \"measurementType\",\n                                                            \"type\": \"string\"\n                                                          }\n                                                        ]\n                                                      }\n                                                    }\n                                                  },\n                                                  {\n                                                    \"name\": \"managedObjectDNsBasic\",\n                                                    \"type\": {\n                                                      \"type\": \"array\",\n                                                      \"items\": {\n                                                        \"name\": \"managedObjectDNsBasic_record\",\n                                                        \"type\": \"record\",\n                                                        \"fields\": [\n                                                          {\n                                                            \"name\": \"DN\",\n                                                            \"type\": \"string\"\n                                                          }\n                                                        ]\n                                                      }\n                                                    }\n                                                  }\n                                                ]\n                                              }\n                                            }\n                                          ]\n                                        }\n                                      }\n                                    }\n                                  ]\n                                }\n                              }\n                            ]\n                          }\n                        }\n                  - key:\n                      name: CDSRequestCommonHeaderType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSRequestCommonHeaderType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: |-\n                        {\n                            \"type\": \"record\",\n                            \"name\": \"RequestCommonHeader_Type\",\n                            \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n                            \"fields\": [\n                                {\n                                    \"name\": \"originatorId\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"requestId\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"subRequestId\",\n                                    \"type\": \"string\"\n                                }\n                            ]\n                        }\n                  - key:\n                      name: CDSResponseCommonHeaderType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSResponseCommonHeaderType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: |-\n                        {\n                            \"type\": \"record\",\n                            \"name\": \"ResponseCommonHeader_Type\",\n                            \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n                            \"fields\": [\n                                {\n                                    \"name\": \"originatorId\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"requestId\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"subRequestId\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"timestamp\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"flags\",\n                                    \"type\": [\"null\", \"string\"]\n                                }\n                            ]\n                        }\n                  - key:\n                      name: CDSResponseStatusType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSResponseStatusType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: |-\n                        {\n                            \"type\": \"record\",\n                            \"name\": \"ResponseStatus_Type\",\n                            \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n                            \"fields\": [\n                                {\n                                    \"name\": \"code\",\n                                    \"type\": \"int\"\n                                },\n                                {\n                                    \"name\": \"eventType\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"timestamp\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"message\",\n                                    \"type\": \"string\"\n                                }\n                            ]\n                        }\n                  - key:\n                      name: PMSubscriptionType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMSubscriptionType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: \"{\\n\\t\\\"name\\\": \\\"PMSubscription\\\",\\n\\t\\\"type\\\": \\\"record\\\",\\n\\t\\\"namespace\\\": \\\"\\\n                        org.onap.policy.apex.onap.pmcontrol\\\",\\n\\t\\\"fields\\\": [\\n        {\\n            \\\"name\\\": \\\"nfName\\\"\\\n                        ,\\n            \\\"type\\\": \\\"string\\\"\\n        },\\n\\t    {\\n\\t\\t\\t\\\"name\\\": \\\"changeType\\\",\\n\\t\\t\\t\\\"\\\n                        type\\\": \\\"string\\\"\\n\\t\\t},\\n\\t\\t{\\n\\t\\t\\t\\\"name\\\": \\\"closedLoopControlName\\\",\\n\\t\\t\\t\\\"type\\\": \\\"\\\n                        string\\\"\\n\\t\\t},\\n\\t\\t{\\n\\t\\t\\t\\\"name\\\": \\\"policyName\\\",\\n\\t\\t\\t\\\"type\\\": \\\"string\\\"\\n\\t\\t},\\n\\t\\t\\\n                        {\\n\\t\\t    \\\"name\\\": \\\"blueprintName\\\",\\n\\t\\t    \\\"type\\\": \\\"string\\\"\\n\\t\\t},\\n\\t\\t{\\n\\t\\t    \\\"name\\\"\\\n                        : \\\"blueprintVersion\\\",\\n\\t\\t    \\\"type\\\": \\\"string\\\"\\n\\t\\t},\\n\\t\\t{\\n\\t\\t\\t\\\"name\\\": \\\"subscription\\\"\\\n                        ,\\n\\t\\t\\t\\\"type\\\": {\\n\\t\\t\\t\\t\\\"name\\\": \\\"subscription\\\",\\n\\t\\t\\t\\t\\\"type\\\": \\\"record\\\",\\n\\t\\t\\t\\t\\\n                        \\\"fields\\\": [{\\n\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"subscriptionName\\\",\\n\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"string\\\"\\n\\t\\t\\\n                        \\t\\t\\t},\\n\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"administrativeState\\\",\\n\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"string\\\"\\\n                        \\n\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"fileBasedGP\\\",\\n\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"int\\\"\\\n                        \\n\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"fileLocation\\\",\\n\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"string\\\"\\\n                        \\n\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"measurementGroups\\\",\\n\\t\\t\\t\\t\\t\\t\\\"type\\\": {\\n\\\n                        \\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"array\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\\"items\\\": {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"Measurement_Groups_Type\\\"\\\n                        ,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"record\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\\"fields\\\": [{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\"\\\n                        : \\\"measurementGroup\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"Measurement_Group_Type\\\"\\\n                        ,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"record\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"fields\\\": [{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t\\\"name\\\": \\\"measurementTypes\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\n                        \\t\\t\\t\\\"type\\\": \\\"array\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"items\\\": {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"\\\n                        name\\\": \\\"Measurement_Types_Type\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"record\\\",\\n\\t\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"fields\\\": [{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"measurementType\\\",\\n\\t\\\n                        \\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"string\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}]\\n\\t\\t\\t\\t\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"managedObjectDNsBasic\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": {\\n\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"array\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"items\\\": {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t\\t\\\"name\\\": \\\"Managed_Object_Dns_Basic_Type\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"record\\\"\\\n                        ,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"fields\\\": [{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"DN\\\",\\n\\t\\\n                        \\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"string\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}]\\n\\t\\t\\t\\t\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t]\\n\\t\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t}]\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t]\\n\\t\\t\\t}\\n\\t\\\n                        \\t}\\n\\t]\\n}\"\n                  - key:\n                      name: SimpleIntType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: SimpleIntType\n                        version: 0.0.1\n                      schemaFlavour: Java\n                      schemaDefinition: java.lang.Integer\n                  - key:\n                      name: SimpleStringType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: SimpleStringType\n                        version: 0.0.1\n                      schemaFlavour: Java\n                      schemaDefinition: java.lang.String\n                  - key:\n                      name: SubscriptionStatusType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: SubscriptionStatusType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: |-\n                        {\n                            \"type\": \"record\",\n                            \"name\": \"ActivateSubscriptionStatus_Type\",\n                            \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n                            \"fields\": [\n                                {\n                                    \"name\": \"subscriptionName\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"nfName\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"changeType\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"message\",\n                                    \"type\": \"string\"\n                                }\n                            ]\n                        }\n                  - key:\n                      name: SubscriptionType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: SubscriptionType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: \"{\\n\\t\\\"name\\\": \\\"subscription\\\",\\n\\t\\\"type\\\": \\\"record\\\",\\n\\t\\\"fields\\\": [{\\n\\t\\t\\\n                        \\t\\\"name\\\": \\\"subscriptionName\\\",\\n\\t\\t\\t\\\"type\\\": \\\"string\\\"\\n\\t\\t},\\n\\t\\t{\\n\\t\\t\\t\\\"name\\\": \\\"administrativeState\\\"\\\n                        ,\\n\\t\\t\\t\\\"type\\\": \\\"string\\\"\\n\\t\\t},\\n\\t\\t{\\n\\t\\t\\t\\\"name\\\": \\\"fileBasedGP\\\",\\n\\t\\t\\t\\\"type\\\": \\\"\\\n                        int\\\"\\n\\t\\t},\\n\\t\\t{\\n\\t\\t\\t\\\"name\\\": \\\"fileLocation\\\",\\n\\t\\t\\t\\\"type\\\": \\\"string\\\"\\n\\t\\t},\\n\\t\\t\\\n                        {\\n\\t\\t\\t\\\"name\\\": \\\"measurementGroups\\\",\\n\\t\\t\\t\\\"type\\\": {\\n\\t\\t\\t\\t\\\"type\\\": \\\"array\\\",\\n\\t\\t\\t\\\n                        \\t\\\"items\\\": {\\n\\t\\t\\t\\t\\t\\\"name\\\": \\\"Measurement_Groups_Type\\\",\\n\\t\\t\\t\\t\\t\\\"type\\\": \\\"record\\\",\\n\\\n                        \\t\\t\\t\\t\\t\\\"fields\\\": [{\\n\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"measurementGroup\\\",\\n\\t\\t\\t\\t\\t\\t\\\"type\\\": {\\n\\t\\\n                        \\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"Measurement_Group_Type\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"record\\\",\\n\\t\\t\\t\\t\\t\\\n                        \\t\\t\\\"fields\\\": [{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"measurementTypes\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\"\\\n                        : {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"array\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"items\\\": {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\n                        \\t\\t\\\"name\\\": \\\"Measurement_Types_Type\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"record\\\",\\n\\t\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t\\t\\t\\\"fields\\\": [{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"measurementType\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t\\t\\\"type\\\": \\\"string\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}]\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\n                        }\\n\\t\\t\\t\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"managedObjectDNsBasic\\\",\\n\\\n                        \\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"array\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"items\\\"\\\n                        : {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"Managed_Object_Dns_Basic_Type\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"\\\n                        type\\\": \\\"record\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"fields\\\": [{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"DN\\\"\\\n                        ,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"string\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}]\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\\n                        \\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t]\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}]\\n\\t\\t\\t\\t}\\n\\t\\\n                        \\t\\t}\\n\\t\\t}\\n\\t]\\n}\"\n                  - key:\n                      name: UUIDType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: UUIDType\n                        version: 0.0.1\n                      schemaFlavour: Java\n                      schemaDefinition: java.util.UUID\n          engineParameters:\n            executorParameters:\n              JAVASCRIPT:\n                parameterClassName: org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters\n            contextParameters:\n              parameterClassName: org.onap.policy.apex.context.parameters.ContextParameters\n              schemaParameters:\n                Avro:\n                  parameterClassName: org.onap.policy.apex.plugins.context.schema.avro.AvroSchemaHelperParameters\n                Java:\n                  parameterClassName: org.onap.policy.apex.context.impl.schema.java.JavaSchemaHelperParameters\n                  jsonAdapters:\n                    Instant:\n                      adaptedClass: java.time.Instant\n                      adaptorClass: org.onap.policy.controlloop.util.Serialization$GsonInstantAdapter\n        eventInputParameters:\n          DCAEConsumer:\n            carrierTechnologyParameters:\n              carrierTechnology: RESTCLIENT\n              parameterClassName: org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters\n              parameters:\n                consumerPollTime: '50'\n                url: https://message-router:3905/events/unauthenticated.DCAE_CL_OUTPUT/cg1/sg1\n            eventProtocolParameters:\n              eventProtocol: JSON\n              parameters:\n                nameAlias: policyName\n            eventName: pmsh-operational-policy\n            eventNameFilter: pmsh-operational-policy\n          CDSRequestConsumer:\n            carrierTechnologyParameters:\n              carrierTechnology: RESTREQUESTOR\n              parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters\n              parameters:\n                url: http://10.10.10.184:30254/api/v1/execution-service/process\n                httpMethod: POST\n                restRequestTimeout: 2000\n                httpHeaders:\n                - - Authorization\n                  - Basic Y2NzZGthcHBzOmNjc2RrYXBwcw==\n            eventProtocolParameters:\n              eventProtocol: JSON\n            eventName: CDSCreateResponseEvent\n            eventNameFilter: CDSCreateResponseEvent\n            requestorMode: true\n            requestorPeer: CDSRequestProducer\n            requestorTimeout: 500\n          CDSDeleteRequestConsumer:\n            carrierTechnologyParameters:\n              carrierTechnology: RESTREQUESTOR\n              parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters\n              parameters:\n                url: http://10.10.10.184:30254/api/v1/execution-service/process\n                httpMethod: POST\n                restRequestTimeout: 2000\n                httpHeaders:\n                - - Authorization\n                  - Basic Y2NzZGthcHBzOmNjc2RrYXBwcw==\n            eventProtocolParameters:\n              eventProtocol: JSON\n            eventName: CDSDeleteResponseEvent\n            eventNameFilter: CDSDeleteResponseEvent\n            requestorMode: true\n            requestorPeer: CDSDeleteRequestProducer\n            requestorTimeout: 500\n          CDSReplyConsumer:\n            carrierTechnologyParameters:\n              carrierTechnology: RESTREQUESTOR\n              parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters\n              parameters:\n                url: https://message-router:3905/events/unauthenticated.PMSH_CL_INPUT\n                httpMethod: POST\n                restRequestTimeout: 2000\n            eventProtocolParameters:\n              eventProtocol: JSON\n            eventName: MRResponseEvent\n            eventNameFilter: MRResponseEvent\n            requestorMode: true\n            requestorPeer: CDSReplyProducer\n            requestorTimeout: 500\n        eventOutputParameters:\n          logOutputter:\n            carrierTechnologyParameters:\n              carrierTechnology: FILE\n              parameters:\n                fileName: /tmp/outputevents.log\n            eventProtocolParameters:\n              eventProtocol: JSON\n          StdOutOutputter:\n            carrierTechnologyParameters:\n              carrierTechnology: FILE\n              parameters:\n                standardIo: true\n            eventProtocolParameters:\n              eventProtocol: JSON\n          CDSRequestProducer:\n            carrierTechnologyParameters:\n              carrierTechnology: RESTREQUESTOR\n              parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters\n            eventProtocolParameters:\n              eventProtocol: JSON\n            eventNameFilter: CDSCreateSubscriptionRequestEvent\n            requestorMode: true\n            requestorPeer: CDSRequestConsumer\n            requestorTimeout: 500\n          CDSDeleteRequestProducer:\n            carrierTechnologyParameters:\n              carrierTechnology: RESTREQUESTOR\n              parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters\n            eventProtocolParameters:\n              eventProtocol: JSON\n            eventNameFilter: CDSDeleteSubscriptionRequestEvent\n            requestorMode: true\n            requestorPeer: CDSDeleteRequestConsumer\n            requestorTimeout: 500\n          CDSReplyProducer:\n            carrierTechnologyParameters:\n              carrierTechnology: RESTREQUESTOR\n              parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters\n            eventProtocolParameters:\n              eventProtocol: JSON\n            eventNameFilter: CDSResponseStatusEvent\n            requestorMode: true\n            requestorPeer: CDSReplyConsumer\n            requestorTimeout: 500",
+                                       "raw": "tosca_definitions_version: tosca_simple_yaml_1_1_0\ndata_types:\n  onap.datatypes.ToscaConceptIdentifier:\n    derived_from: tosca.datatypes.Root\n    properties:\n      name:\n        type: string\n        required: true\n      version:\n        type: string\n        required: true\n  org.onap.datatypes.policy.clamp.acm.DCAEMicroserviceControlLoopElementConsulInfo:\n    name: org.onap.datatypes.policy.clamp.acm.DCAEMicroserviceControlLoopElementConsulInfo\n    version: 0.0.0\n    derived_from: tosca.datatypes.Root\n    properties:\n      consulUrl:\n        name: consulUrl\n        type: string\n        typeVersion: 0.0.0\n        description: Consul url for this entry\n        required: true\n      consul_body:\n        name: consulBody\n        type: string\n        typeVersion: 0.0.0\n        description: Body of Consul entry\n        required: true\n  onap.datatype.acm.Target:\n    derived_from: tosca.datatypes.Root\n    description: Definition for a entity in A&AI to perform a automation composition operation on\n    properties:\n      targetType:\n        type: string\n        description: Category for the target type\n        required: true\n        constraints:\n        - valid_values:\n          - VNF\n          - VM\n          - VFMODULE\n          - PNF\n      entityIds:\n        type: map\n        description: |\n          Map of values that identify the resource. If none are provided, it is assumed that the\n          entity that generated the ONSET event will be the target.\n        required: false\n        metadata:\n          clamp_possible_values: ClampExecution:CSAR_RESOURCES\n        entry_schema:\n          type: string\n  onap.datatype.acm.Actor:\n    derived_from: tosca.datatypes.Root\n    description: An actor/operation/target definition\n    properties:\n      actor:\n        type: string\n        description: The actor performing the operation.\n        required: true\n        metadata:\n          clamp_possible_values: Dictionary:DefaultActors,ClampExecution:CDS/actor\n      operation:\n        type: string\n        description: The operation the actor is performing.\n        metadata:\n          clamp_possible_values: Dictionary:DefaultOperations,ClampExecution:CDS/operation\n        required: true\n      target:\n        type: onap.datatype.acm.Target\n        description: The resource the operation should be performed on.\n        required: true\n      payload:\n        type: map\n        description: Name/value pairs of payload information passed by Policy to the actor\n        required: false\n        metadata:\n          clamp_possible_values: ClampExecution:CDS/payload\n        entry_schema:\n          type: string\n  onap.datatype.acm.Operation:\n    derived_from: tosca.datatypes.Root\n    description: An operation supported by an actor\n    properties:\n      id:\n        type: string\n        description: Unique identifier for the operation\n        required: true\n      description:\n        type: string\n        description: A user-friendly description of the intent for the operation\n        required: false\n      operation:\n        type: onap.datatype.acm.Actor\n        description: The definition of the operation to be performed.\n        required: true\n      timeout:\n        type: integer\n        description: The amount of time for the actor to perform the operation.\n        required: true\n      retries:\n        type: integer\n        description: The number of retries the actor should attempt to perform the operation.\n        required: true\n        default: 0\n      success:\n        type: string\n        description: Points to the operation to invoke on success. A value of \"final_success\" indicates and end to the operation.\n        required: false\n        default: final_success\n      failure:\n        type: string\n        description: Points to the operation to invoke on Actor operation failure.\n        required: false\n        default: final_failure\n      failure_timeout:\n        type: string\n        description: Points to the operation to invoke when the time out for the operation occurs.\n        required: false\n        default: final_failure_timeout\n      failure_retries:\n        type: string\n        description: Points to the operation to invoke when the current operation has exceeded its max retries.\n        required: false\n        default: final_failure_retries\n      failure_exception:\n        type: string\n        description: Points to the operation to invoke when the current operation causes an exception.\n        required: false\n        default: final_failure_exception\n      failure_guard:\n        type: string\n        description: Points to the operation to invoke when the current operation is blocked due to guard policy enforcement.\n        required: false\n        default: final_failure_guard\n  onap.datatypes.monitoring.managedObjectDNsBasic:\n    constraints: []\n    properties:\n      DN:\n        name: DN\n        type: string\n        typeVersion: 0.0.0\n        description: Managed object distinguished name\n        required: true\n        constraints: []\n        metadata: {}\n    name: onap.datatypes.monitoring.managedObjectDNsBasic\n    version: 0.0.0\n    derived_from: tosca.datatypes.Root\n    metadata: {}\n  onap.datatypes.monitoring.managedObjectDNsBasics:\n    constraints: []\n    properties:\n      managedObjectDNsBasic:\n        name: managedObjectDNsBasic\n        type: map\n        typeVersion: 0.0.0\n        description: Managed object distinguished name object\n        required: true\n        constraints: []\n        entry_schema:\n          type: onap.datatypes.monitoring.managedObjectDNsBasic\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n    name: onap.datatypes.monitoring.managedObjectDNsBasics\n    version: 0.0.0\n    derived_from: tosca.datatypes.Root\n    metadata: {}\n  onap.datatypes.monitoring.measurementGroup:\n    constraints: []\n    properties:\n      measurementTypes:\n        name: measurementTypes\n        type: list\n        typeVersion: 0.0.0\n        description: List of measurement types\n        required: true\n        constraints: []\n        entry_schema:\n          type: onap.datatypes.monitoring.measurementTypes\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n      managedObjectDNsBasic:\n        name: managedObjectDNsBasic\n        type: list\n        typeVersion: 0.0.0\n        description: List of managed object distinguished names\n        required: true\n        constraints: []\n        entry_schema:\n          type: onap.datatypes.monitoring.managedObjectDNsBasics\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n    name: onap.datatypes.monitoring.measurementGroup\n    version: 0.0.0\n    derived_from: tosca.datatypes.Root\n    metadata: {}\n  onap.datatypes.monitoring.measurementGroups:\n    constraints: []\n    properties:\n      measurementGroup:\n        name: measurementGroup\n        type: map\n        typeVersion: 0.0.0\n        description: Measurement Group\n        required: true\n        constraints: []\n        entry_schema:\n          type: onap.datatypes.monitoring.measurementGroup\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n    name: onap.datatypes.monitoring.measurementGroups\n    version: 0.0.0\n    derived_from: tosca.datatypes.Root\n    metadata: {}\n  onap.datatypes.monitoring.measurementType:\n    constraints: []\n    properties:\n      measurementType:\n        name: measurementType\n        type: string\n        typeVersion: 0.0.0\n        description: Measurement type\n        required: true\n        constraints: []\n        metadata: {}\n    name: onap.datatypes.monitoring.measurementType\n    version: 0.0.0\n    derived_from: tosca.datatypes.Root\n    metadata: {}\n  onap.datatypes.monitoring.measurementTypes:\n    constraints: []\n    properties:\n      measurementType:\n        name: measurementType\n        type: map\n        typeVersion: 0.0.0\n        description: Measurement type object\n        required: true\n        constraints: []\n        entry_schema:\n          type: onap.datatypes.monitoring.measurementType\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n    name: onap.datatypes.monitoring.measurementTypes\n    version: 0.0.0\n    derived_from: tosca.datatypes.Root\n    metadata: {}\n  onap.datatypes.monitoring.nfFilter:\n    constraints: []\n    properties:\n      modelNames:\n        name: modelNames\n        type: list\n        typeVersion: 0.0.0\n        description: List of model names\n        required: true\n        constraints: []\n        entry_schema:\n          type: string\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n      modelInvariantIDs:\n        name: modelInvariantIDs\n        type: list\n        typeVersion: 0.0.0\n        description: List of model invariant IDs\n        required: true\n        constraints: []\n        entry_schema:\n          type: string\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n      modelVersionIDs:\n        name: modelVersionIDs\n        type: list\n        typeVersion: 0.0.0\n        description: List of model version IDs\n        required: true\n        constraints: []\n        entry_schema:\n          type: string\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n      nfNames:\n        name: nfNames\n        type: list\n        typeVersion: 0.0.0\n        description: List of network functions\n        required: true\n        constraints: []\n        entry_schema:\n          type: string\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n    name: onap.datatypes.monitoring.nfFilter\n    version: 0.0.0\n    derived_from: tosca.datatypes.Root\n    metadata: {}\n  onap.datatypes.monitoring.subscription:\n    constraints: []\n    properties:\n      measurementGroups:\n        name: measurementGroups\n        type: list\n        typeVersion: 0.0.0\n        description: Measurement Groups\n        required: true\n        constraints: []\n        entry_schema:\n          type: onap.datatypes.monitoring.measurementGroups\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n      fileBasedGP:\n        name: fileBasedGP\n        type: integer\n        typeVersion: 0.0.0\n        description: File based granularity period\n        required: true\n        constraints: []\n        metadata: {}\n      fileLocation:\n        name: fileLocation\n        type: string\n        typeVersion: 0.0.0\n        description: ROP file location\n        required: true\n        constraints: []\n        metadata: {}\n      subscriptionName:\n        name: subscriptionName\n        type: string\n        typeVersion: 0.0.0\n        description: Name of the subscription\n        required: true\n        constraints: []\n        metadata: {}\n      administrativeState:\n        name: administrativeState\n        type: string\n        typeVersion: 0.0.0\n        description: State of the subscription\n        required: true\n        constraints:\n        - valid_values:\n          - LOCKED\n          - UNLOCKED\n        metadata: {}\n      nfFilter:\n        name: nfFilter\n        type: map\n        typeVersion: 0.0.0\n        description: Network function filter\n        required: true\n        constraints: []\n        entry_schema:\n          type: onap.datatypes.monitoring.nfFilter\n          typeVersion: 0.0.0\n          constraints: []\n        metadata: {}\n    name: onap.datatypes.monitoring.subscription\n    version: 0.0.0\n    derived_from: tosca.datatypes.Root\n    metadata: {}\npolicy_types:\n  onap.policies.Monitoring:\n    derived_from: tosca.policies.Root\n    description: a base policy type for all policies that govern monitoring provisioning\n    version: 1.0.0\n    name: onap.policies.Monitoring\n  onap.policies.Sirisha:\n    derived_from: tosca.policies.Root\n    description: a base policy type for all policies that govern monitoring provisioning\n    version: 1.0.0\n    name: onap.policies.Sirisha\n  onap.policies.monitoring.dcae-pm-subscription-handler:\n    properties:\n      pmsh_policy:\n        name: pmsh_policy\n        type: onap.datatypes.monitoring.subscription\n        typeVersion: 0.0.0\n        description: PMSH Policy JSON\n        required: false\n        constraints: []\n        metadata: {}\n    name: onap.policies.monitoring.dcae-pm-subscription-handler\n    version: 1.0.0\n    derived_from: onap.policies.Monitoring\n    metadata: {}\n  onap.policies.acm.operational.Common:\n    derived_from: tosca.policies.Root\n    version: 1.0.0\n    name: onap.policies.acm.operational.Common\n    description: |\n      Operational Policy for Control Loop execution. Originated in Frankfurt to support TOSCA Compliant\n      Policy Types. This does NOT support the legacy Policy YAML policy type.\n    properties:\n      id:\n        type: string\n        description: The unique automation composition id.\n        required: true\n      timeout:\n        type: integer\n        description: |\n          Overall timeout for executing all the operations. This timeout should equal or exceed the total\n          timeout for each operation listed.\n        required: true\n      abatement:\n        type: boolean\n        description: Whether an abatement event message will be expected for the automation composition from DCAE.\n        required: true\n        default: false\n      trigger:\n        type: string\n        description: Initial operation to execute upon receiving an Onset event message for the Control Loop.\n        required: true\n      operations:\n        type: list\n        description: List of operations to be performed when Control Loop is triggered.\n        required: true\n        entry_schema:\n          type: onap.datatype.acm.Operation\n  onap.policies.acm.operational.common.Apex:\n    derived_from: onap.policies.acm.operational.Common\n    type_version: 1.0.0\n    version: 1.0.0\n    name: onap.policies.acm.operational.common.Apex\n    description: Operational policies for Apex PDP\n    properties:\n      engineServiceParameters:\n        type: string\n        description: The engine parameters like name, instanceCount, policy implementation, parameters etc.\n        required: true\n      eventInputParameters:\n        type: string\n        description: The event input parameters.\n        required: true\n      eventOutputParameters:\n        type: string\n        description: The event output parameters.\n        required: true\n      javaProperties:\n        type: string\n        description: Name/value pairs of properties to be set for APEX if needed.\n        required: false\nnode_types:\n  org.onap.policy.clamp.acm.Participant:\n    version: 1.0.1\n    derived_from: tosca.nodetypes.Root\n    properties:\n      provider:\n        type: string\n        requred: false\n  org.onap.policy.clamp.acm.ControlLoopElement:\n    version: 1.0.1\n    derived_from: tosca.nodetypes.Root\n    properties:\n      provider:\n        type: string\n        required: false\n        metadata:\n            common: true\n        description: Specifies the organization that provides the automation composition element\n      participantType:\n        type: onap.datatypes.ToscaConceptIdentifier\n        required: true\n        metadata:\n            common: true\n        description: The identity of the participant type that hosts this type of Control Loop Element\n      startPhase:\n        type: integer\n        required: false\n        constraints:\n        - greater-or-equal: 0\n        metadata:\n            common: true\n        description: A value indicating the start phase in which this automation composition element will be started, the\n                     first start phase is zero. Control Loop Elements are started in their start_phase order and stopped\n                     in reverse start phase order. Control Loop Elements with the same start phase are started and\n                     stopped simultaneously\n      uninitializedToPassiveTimeout:\n        type: integer\n        required: false\n        constraints:\n        - greater-or-equal: 0\n        default: 60\n        metadata:\n            common: true\n        description: The maximum time in seconds to wait for a state chage from uninitialized to passive\n      passiveToRunningTimeout:\n        type: integer\n        required: false\n        constraints:\n        - greater-or-equal: 0\n        default: 60\n        metadata:\n            common: true\n        description: The maximum time in seconds to wait for a state chage from passive to running\n      runningToPassiveTimeout:\n        type: integer\n        required: false\n        constraints:\n        - greater-or-equal: 0\n        default: 60\n        metadata:\n            common: true\n        description: The maximum time in seconds to wait for a state chage from running to passive\n      passiveToUninitializedTimeout:\n        type: integer\n        required: false\n        constraints:\n        - greater-or-equal: 0\n        default: 60\n        metadata:\n            common: true\n        description: The maximum time in seconds to wait for a state chage from passive to uninitialized\n\n  org.onap.policy.clamp.acm.ControlLoop:\n    version: 1.0.1\n    derived_from: tosca.nodetypes.Root\n    properties:\n      provider:\n        type: string\n        requred: false\n      elements:\n        type: list\n        required: true\n        entry_schema:\n          type: onap.datatypes.ToscaConceptIdentifier\n  org.onap.policy.clamp.acm.DCAEMicroserviceControlLoopElement:\n    version: 1.0.1\n    derived_from: org.onap.policy.clamp.acm.ControlLoopElement\n    properties:\n      dcae_blueprint_id:\n        type: onap.datatypes.ToscaConceptIdentifier\n        requred: false\n      dcae_blueprint:\n        type: onap.dcae.cloudify_blueprint\n        requred: false\n      consul_info:\n        type: list\n        required: false\n        entry_schema:\n          type: org.onap.datatypes.policy.clamp.acm.DCAEMicroserviceControlLoopElementConsulInfo\n  org.onap.policy.clamp.acm.PolicyControlLoopElement:\n    version: 1.0.1\n    derived_from: org.onap.policy.clamp.acm.ControlLoopElement\n    properties:\n      policy_type_id:\n        type: onap.datatypes.ToscaConceptIdentifier\n        requred: true\n      policy_id:\n        type: onap.datatypes.ToscaConceptIdentifier\n        requred: false\n  org.onap.policy.clamp.acm.CDSControlLoopElement:\n    version: 1.0.1\n    derived_from: org.onap.policy.clamp.acm.ControlLoopElement\n    properties:\n      cds_blueprint_id:\n        type: onap.datatypes.ToscaConceptIdentifier\n        requred: true\ntopology_template:\n  inputs:\n    pmsh_monitoring_policy:\n      type: onap.datatypes.ToscaConceptIdentifier\n      description: The ID of the PMSH monitoring policy to use\n      default:\n        name: MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test\n        version: 1.0.0\n    pmsh_operational_policy:\n      type: onap.datatypes.ToscaConceptIdentifier\n      description: The ID of the PMSH operational policy to use\n      default:\n        name: operational.apex.pmcontrol\n        version: 1.0.0\n  node_templates:\n    org.onap.dcae.acm.DCAEMicroserviceControlLoopParticipant:\n      version: 2.3.4\n      type: org.onap.policy.clamp.acm.Participant\n      type_version: 1.0.1\n      description: Participant for DCAE microservices\n      properties:\n        provider: ONAP\n    org.onap.policy.acm.PolicyControlLoopParticipant:\n      version: 2.3.1\n      type: org.onap.policy.clamp.acm.Participant\n      type_version: 1.0.1\n      description: Participant for DCAE microservices\n      properties:\n        provider: ONAP\n    org.onap.domain.pmsh.PMSH_DCAEMicroservice:\n      version: 1.2.3\n      type: org.onap.policy.clamp.acm.DCAEMicroserviceControlLoopElement\n      type_version: 1.0.0\n      description: Control loop element for the DCAE microservice for Performance Management Subscription Handling\n      properties:\n        provider: Ericsson\n        participantType:\n          name: org.onap.dcae.acm.DCAEMicroserviceControlLoopParticipant\n          version: 2.3.4\n        startPhase: 0\n        dcae_blueprint:\n          tosca_definitions_version: cloudify_dsl_1_3\n          imports:\n          - https://www.getcloudify.org/spec/cloudify/4.5.5/types.yaml\n          - plugin:k8splugin?version=3.7.0\n          - plugin:pgaas?version=1.3.0\n          - plugin:clamppolicyplugin?version=1.1.0\n          inputs:\n            tag_version:\n              type: string\n              description: Docker image to be used\n              default: nexus3.onap.org:10001/onap/org.onap.dcaegen2.services.pmsh:1.1.2\n            replicas:\n              type: integer\n              description: Number of instances\n              default: 1\n            operational_policy_name:\n              type: string\n              default: operational.apex.pmcontrol\n            control_loop_name:\n              type: string\n              default: pmsh-control-loop\n            pmsh_publish_topic_name:\n              type: string\n              default: unauthenticated.DCAE_CL_OUTPUT\n            policy_feedback_topic_name:\n              type: string\n              default: unauthenticated.PMSH_CL_INPUT\n            aai_notification_topic_name:\n              type: string\n              default: AAI-EVENT\n            publisher_client_role:\n              type: string\n              description: Client role to request secure access to topic\n              default: org.onap.dcae.pmPublisher\n            subscriber_client_role:\n              type: string\n              description: Client role to request secure access to topic\n              default: org.onap.dcae.pmSubscriber\n            dcae_location:\n              type: string\n              description: DCAE location for the subscriber, used to set up routing\n              default: san-francisco\n            cpu_limit:\n              type: string\n              default: 1000m\n            cpu_request:\n              type: string\n              default: 1000m\n            memory_limit:\n              type: string\n              default: 1024Mi\n            memory_request:\n              type: string\n              default: 1024Mi\n            pgaas_cluster_name:\n              type: string\n              default: dcae-pg-primary.onap\n            enable_tls:\n              type: boolean\n              default: true\n            protocol:\n              type: string\n              description: PMSH protocol. If enable_tls is false, set to http\n              default: https\n            policy_model_id:\n              type: string\n              default: onap.policies.monitoring.dcae-pm-subscription-handler\n            policy_id:\n              type: string\n              default: MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test\n          node_templates:\n            pgaasvm:\n              type: dcae.nodes.pgaas.database\n              properties:\n                writerfqdn:\n                  get_input: pgaas_cluster_name\n                name: pmsh\n            pmsh:\n              type: dcae.nodes.ContainerizedServiceComponentUsingDmaap\n              interfaces:\n                cloudify.interfaces.lifecycle:\n                  create:\n                    inputs:\n                      ports:\n                      - '8443:0'\n                      envs:\n                        PMSH_PG_URL:\n                          get_attribute:\n                          - pgaasvm\n                          - admin\n                          - host\n                        PMSH_PG_PASSWORD:\n                          get_attribute:\n                          - pgaasvm\n                          - admin\n                          - password\n                        PMSH_PG_USERNAME:\n                          get_attribute:\n                          - pgaasvm\n                          - admin\n                          - user\n                        PMSH_DB_NAME:\n                          get_attribute:\n                          - pgaasvm\n                          - admin\n                          - database\n              relationships:\n              - target: pmsh-policy\n                type: cloudify.relationships.depends_on\n              properties:\n                service_component_type: dcae-pmsh\n                service_component_name_override: dcae-pmsh\n                application_config:\n                  enable_tls:\n                    get_input: enable_tls\n                  aaf_identity: dcae@dcae.onap.org\n                  aaf_password: demo123456!\n                  operational_policy_name:\n                    get_input: operational_policy_name\n                  control_loop_name:\n                    get_input: control_loop_name\n                  cert_path: /opt/app/pmsh/etc/certs/cert.pem\n                  key_path: /opt/app/pmsh/etc/certs/key.pem\n                  ca_cert_path: /opt/app/pmsh/etc/certs/cacert.pem\n                  streams_publishes:\n                    policy_pm_publisher:\n                      type: message_router\n                      dmaap_info:\n                        topic_url:\n                          concat:\n                          - http://message-router:3904/events/\n                          - get_input: pmsh_publish_topic_name\n                  streams_subscribes:\n                    policy_pm_subscriber:\n                      type: message_router\n                      dmaap_info:\n                        topic_url:\n                          concat:\n                          - http://message-router:3904/events/\n                          - get_input: policy_feedback_topic_name\n                    aai_subscriber:\n                      type: message_router\n                      dmaap_info:\n                        topic_url:\n                          concat:\n                          - http://message-router:3904/events/\n                          - get_input: aai_notification_topic_name\n                resource_config:\n                  limits:\n                    cpu:\n                      get_input: cpu_limit\n                    memory:\n                      get_input: memory_limit\n                  requests:\n                    cpu:\n                      get_input: cpu_request\n                    memory:\n                      get_input: memory_request\n                docker_config:\n                  healthcheck:\n                    endpoint: /healthcheck\n                    interval: 15s\n                    timeout: 1s\n                    type:\n                      get_input: protocol\n                image:\n                  get_input: tag_version\n                replicas:\n                  get_input: replicas\n                log_info:\n                  log_directory: /var/log/ONAP/dcaegen2/services/pmsh\n                tls_info:\n                  cert_directory: /opt/app/pmsh/etc/certs\n                  use_tls:\n                    get_input: enable_tls\n            pmsh-policy:\n              type: clamp.nodes.policy\n              properties:\n                policy_model_id:\n                  get_input: policy_model_id\n                policy_id:\n                  get_input: policy_id\n        consul_info:\n        - consulUrl: http://consul:31321/v1/kv/dcae-pmsh:policy\n          consulBody:\n            subscription:\n              subscriptionName: subscriptiona\n              administrativeState: UNLOCKED\n              fileBasedGP: 15\n              fileLocation: /pm/pm.xml\n              nfFilter:\n                nfNames:\n                - ^pnf1.*\n                modelInvariantIDs:\n                - 5845y423-g654-6fju-po78-8n53154532k6\n                - 7129e420-d396-4efb-af02-6b83499b12f8\n                modelVersionIDs:\n                - e80a6ae3-cafd-4d24-850d-e14c084a5ca9\n              measurementGroups:\n              - measurementGroup:\n                  measurementTypes:\n                  - measurementType: countera\n                  - measurementType: counterb\n                  managedObjectDNsBasic:\n                  - DN: dna\n                  - DN: dnb\n              - measurementGroup:\n                  measurementTypes:\n                  - measurementType: counterc\n                  - measurementType: counterd\n                  managedObjectDNsBasic:\n                  - DN: dnc\n                  - DN: dnd\n    org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement:\n      version: 1.2.3\n      type: org.onap.policy.clamp.acm.PolicyControlLoopElement\n      type_version: 1.0.0\n      description: Control loop element for the monitoring policy for Performance Management Subscription Handling\n      properties:\n        provider: Ericsson\n        participantType:\n          name: org.onap.policy.acm.PolicyControlLoopParticipant\n          version: 2.3.1\n        startPhase: 0\n        policy_type_id:\n          name: onap.policies.monitoring.pm-subscription-handler\n          version: 1.0.0\n        policy_id:\n          get_input: pmsh_monitoring_policy\n    org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement:\n      version: 1.2.3\n      type: org.onap.policy.clamp.acm.PolicyControlLoopElement\n      type_version: 1.0.0\n      description: Control loop element for the operational policy for Performance Management Subscription Handling\n      properties:\n        provider: Ericsson\n        participantType:\n          name: org.onap.policy.acm.PolicyControlLoopParticipant\n          version: 2.3.1\n        startPhase: 0\n        policy_type_id:\n          name: onap.policies.operational.pm-subscription-handler\n          version: 1.0.0\n        policy_id:\n          get_input: pmsh_operational_policy\n    org.onap.domain.pmsh.PMSHControlLoopDefinition:\n      version: 1.2.3\n      type: org.onap.policy.clamp.acm.ControlLoop\n      type_version: 1.0.0\n      description: Control loop for Performance Management Subscription Handling\n      properties:\n        provider: Ericsson\n        elements:\n        - name: org.onap.domain.pmsh.PMSH_DCAEMicroservice\n          version: 1.2.3\n        - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement\n          version: 1.2.3\n        - name: org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement\n          version: 1.2.3\n  policies:\n  - MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test:\n      type: onap.policies.monitoring.dcae-pm-subscription-handler\n      type_version: 1.0.0\n      name: MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test\n      version: 1.0.0\n      metadata:\n        policy-id: MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test\n        policy-version: 1.0.0\n      properties:\n        pmsh_policy:\n          fileBasedGP: 15\n          fileLocation: /pm/pm.xml\n          subscriptionName: subscriptiona\n          administrativeState: UNLOCKED\n          nfFilter:\n            onap.datatypes.monitoring.nfFilter:\n              modelVersionIDs:\n              - e80a6ae3-cafd-4d24-850d-e14c084a5ca9\n              modelInvariantIDs:\n              - 5845y423-g654-6fju-po78-8n53154532k6\n              - 7129e420-d396-4efb-af02-6b83499b12f8\n              modelNames: []\n              nfNames:\n              - '\"^pnf1.*\"'\n          measurementGroups:\n          - measurementGroup:\n              onap.datatypes.monitoring.measurementGroup:\n                measurementTypes:\n                - measurementType:\n                    onap.datatypes.monitoring.measurementType:\n                      measurementType: countera\n                - measurementType:\n                    onap.datatypes.monitoring.measurementType:\n                      measurementType: counterb\n                managedObjectDNsBasic:\n                - managedObjectDNsBasic:\n                    onap.datatypes.monitoring.managedObjectDNsBasic:\n                      DN: dna\n                - managedObjectDNsBasic:\n                    onap.datatypes.monitoring.managedObjectDNsBasic:\n                      DN: dnb\n          - measurementGroup:\n              onap.datatypes.monitoring.measurementGroup:\n                measurementTypes:\n                - measurementType:\n                    onap.datatypes.monitoring.measurementType:\n                      measurementType: counterc\n                - measurementType:\n                    onap.datatypes.monitoring.measurementType:\n                      measurementType: counterd\n                managedObjectDNsBasic:\n                - managedObjectDNsBasic:\n                    onap.datatypes.monitoring.managedObjectDNsBasic:\n                      DN: dnc\n                - managedObjectDNsBasic:\n                    onap.datatypes.monitoring.managedObjectDNsBasic:\n                      DN: dnd\n  - operational.apex.pmcontrol:\n      type: onap.policies.acm.operational.common.Apex\n      type_version: 1.0.0\n      version: 1.0.0\n      metadata:\n        policy-id: operational.apex.pmcontrol\n        policy-version: 1\n      properties:\n        engineServiceParameters:\n          name: MyApexEngine\n          version: 0.0.1\n          id: 45\n          instanceCount: 2\n          deploymentPort: 12561\n          policy_type_impl:\n            apexPolicyModel:\n              key:\n                name: PMControlPolicy\n                version: 0.0.1\n              keyInformation:\n                key:\n                  name: PMControlPolicy_KeyInfo\n                  version: 0.0.1\n                keyInfoMap:\n                  entry:\n                  - key:\n                      name: CDSActionIdentifiersType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSActionIdentifiersType\n                        version: 0.0.1\n                      UUID: 6e5fa19b-14df-37e3-a4ae-8c537e861a82\n                      description: Generated description for concept referred to by key \"CDSActionIdentifiersType:0.0.1\"\n                  - key:\n                      name: CDSCreateResponseEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateResponseEvent\n                        version: 0.0.1\n                      UUID: 14b29e38-ac75-3273-aa4e-8583c0aa7dad\n                      description: Generated description for concept referred to by key \"CDSCreateResponseEvent:0.0.1\"\n                  - key:\n                      name: CDSCreateResponsePayloadType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateResponsePayloadType\n                        version: 0.0.1\n                      UUID: 04573f8f-e772-30a5-b1d9-d7318d4a1e13\n                      description: Generated description for concept referred to by key \"CDSCreateResponsePayloadType:0.0.1\"\n                  - key:\n                      name: CDSCreateResponsePolicy\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateResponsePolicy\n                        version: 0.0.1\n                      UUID: e126c965-fc09-3bfe-8f55-70f380a4a49c\n                      description: Generated description for concept referred to by key \"CDSCreateResponsePolicy:0.0.1\"\n                  - key:\n                      name: CDSCreateResponseTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateResponseTask\n                        version: 0.0.1\n                      UUID: 6165ee82-afd2-3aab-a517-f00b3f2461d2\n                      description: Generated description for concept referred to by key \"CDSCreateResponseTask:0.0.1\"\n                  - key:\n                      name: CDSCreateSubscriptionPayloadType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateSubscriptionPayloadType\n                        version: 0.0.1\n                      UUID: 8350ac5e-c157-38b9-9614-a0f93a830e60\n                      description: Generated description for concept referred to by key \"CDSCreateSubscriptionPayloadType:0.0.1\"\n                  - key:\n                      name: CDSCreateSubscriptionRequestEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateSubscriptionRequestEvent\n                        version: 0.0.1\n                      UUID: cfa325ba-226b-3a31-9183-ec43e2b6e9a2\n                      description: Generated description for concept referred to by key \"CDSCreateSubscriptionRequestEvent:0.0.1\"\n                  - key:\n                      name: CDSDeleteResponseEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteResponseEvent\n                        version: 0.0.1\n                      UUID: 8be9c0fa-7437-3841-aff2-b3cec6ae3bd8\n                      description: Generated description for concept referred to by key \"CDSDeleteResponseEvent:0.0.1\"\n                  - key:\n                      name: CDSDeleteResponsePayloadType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteResponsePayloadType\n                        version: 0.0.1\n                      UUID: 3fbfe0c9-152e-34d3-a504-09cd13c058d0\n                      description: Generated description for concept referred to by key \"CDSDeleteResponsePayloadType:0.0.1\"\n                  - key:\n                      name: CDSDeleteResponsePolicy\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteResponsePolicy\n                        version: 0.0.1\n                      UUID: a780251c-edd5-3132-b865-04313246b43c\n                      description: Generated description for concept referred to by key \"CDSDeleteResponsePolicy:0.0.1\"\n                  - key:\n                      name: CDSDeleteResponseTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteResponseTask\n                        version: 0.0.1\n                      UUID: afce4555-3aa3-3521-a7d8-ee8cdf0d3efc\n                      description: Generated description for concept referred to by key \"CDSDeleteResponseTask:0.0.1\"\n                  - key:\n                      name: CDSDeleteSubscriptionPayloadType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteSubscriptionPayloadType\n                        version: 0.0.1\n                      UUID: 12658406-9147-3c9d-a38c-5ad5e30b092b\n                      description: Generated description for concept referred to by key \"CDSDeleteSubscriptionPayloadType:0.0.1\"\n                  - key:\n                      name: CDSDeleteSubscriptionRequestEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteSubscriptionRequestEvent\n                        version: 0.0.1\n                      UUID: 24380c95-9289-36e6-8cbf-0edefa15ccd9\n                      description: Generated description for concept referred to by key \"CDSDeleteSubscriptionRequestEvent:0.0.1\"\n                  - key:\n                      name: CDSRequestCommonHeaderType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSRequestCommonHeaderType\n                        version: 0.0.1\n                      UUID: 35590ac0-062c-39f1-8786-b4ff716e30b1\n                      description: Generated description for concept referred to by key \"CDSRequestCommonHeaderType:0.0.1\"\n                  - key:\n                      name: CDSResponseCommonHeaderType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSResponseCommonHeaderType\n                        version: 0.0.1\n                      UUID: dd7e1805-885a-350b-aaf9-ed541321ae3c\n                      description: Generated description for concept referred to by key \"CDSResponseCommonHeaderType:0.0.1\"\n                  - key:\n                      name: CDSResponseStatusEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSResponseStatusEvent\n                        version: 0.0.1\n                      UUID: 7986e21b-32f7-302e-9554-31f21b673493\n                      description: Generated description for concept referred to by key \"CDSResponseStatusEvent:0.0.1\"\n                  - key:\n                      name: CDSResponseStatusType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSResponseStatusType\n                        version: 0.0.1\n                      UUID: 92b8a2cf-344e-3ce1-8cc0-2b7d3cb695fa\n                      description: Generated description for concept referred to by key \"CDSResponseStatusType:0.0.1\"\n                  - key:\n                      name: CreateSubscriptionPayloadEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CreateSubscriptionPayloadEvent\n                        version: 0.0.1\n                      UUID: 92162397-1a8e-3a3f-a469-d2af7700af4a\n                      description: Generated description for concept referred to by key \"CreateSubscriptionPayloadEvent:0.0.1\"\n                  - key:\n                      name: CreateSubscriptionPayloadTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CreateSubscriptionPayloadTask\n                        version: 0.0.1\n                      UUID: bc0c69f0-52ed-38ea-b468-ae4a6fd1730d\n                      description: Generated description for concept referred to by key \"CreateSubscriptionPayloadTask:0.0.1\"\n                  - key:\n                      name: CreateSubscriptionRequestTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CreateSubscriptionRequestTask\n                        version: 0.0.1\n                      UUID: 89cb75e9-f06c-30d3-b4ff-698d45f63869\n                      description: Generated description for concept referred to by key \"CreateSubscriptionRequestTask:0.0.1\"\n                  - key:\n                      name: DeleteSubscriptionPayloadEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: DeleteSubscriptionPayloadEvent\n                        version: 0.0.1\n                      UUID: 994fa441-04ab-33bb-832d-1cd12ab5d074\n                      description: Generated description for concept referred to by key \"DeleteSubscriptionPayloadEvent:0.0.1\"\n                  - key:\n                      name: DeleteSubscriptionPayloadTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: DeleteSubscriptionPayloadTask\n                        version: 0.0.1\n                      UUID: 0f519117-5fea-3e4b-941f-8f778100465f\n                      description: Generated description for concept referred to by key \"DeleteSubscriptionPayloadTask:0.0.1\"\n                  - key:\n                      name: DeleteSubscriptionRequestTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: DeleteSubscriptionRequestTask\n                        version: 0.0.1\n                      UUID: acb772fe-d442-39e3-98f9-b1080caf4150\n                      description: Generated description for concept referred to by key \"DeleteSubscriptionRequestTask:0.0.1\"\n                  - key:\n                      name: MRResponseEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: MRResponseEvent\n                        version: 0.0.1\n                      UUID: 13c747a3-6bae-3bcf-9c80-b152e01dc194\n                      description: Generated description for concept referred to by key \"MRResponseEvent:0.0.1\"\n                  - key:\n                      name: PMControlPolicy\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMControlPolicy\n                        version: 0.0.1\n                      UUID: acf1e55c-7bc5-3bd5-975a-0ca54afcd8a4\n                      description: Generated description for concept referred to by key \"PMControlPolicy:0.0.1\"\n                  - key:\n                      name: PMControlPolicy_Albums\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMControlPolicy_Albums\n                        version: 0.0.1\n                      UUID: b38ad204-c2c8-32f4-9b5a-dda0aeb0145b\n                      description: Generated description for concept referred to by key \"PMControlPolicy_Albums:0.0.1\"\n                  - key:\n                      name: PMControlPolicy_Events\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMControlPolicy_Events\n                        version: 0.0.1\n                      UUID: be3871a0-c42a-3113-a066-82d192840eca\n                      description: Generated description for concept referred to by key \"PMControlPolicy_Events:0.0.1\"\n                  - key:\n                      name: PMControlPolicy_KeyInfo\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMControlPolicy_KeyInfo\n                        version: 0.0.1\n                      UUID: ced37634-28a4-3178-b7f6-2980794927b0\n                      description: Generated description for concept referred to by key \"PMControlPolicy_KeyInfo:0.0.1\"\n                  - key:\n                      name: PMControlPolicy_Policies\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMControlPolicy_Policies\n                        version: 0.0.1\n                      UUID: be3d180d-ef9c-3a75-8e9c-84271a038bed\n                      description: Generated description for concept referred to by key \"PMControlPolicy_Policies:0.0.1\"\n                  - key:\n                      name: PMControlPolicy_Schemas\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMControlPolicy_Schemas\n                        version: 0.0.1\n                      UUID: e61973f1-189c-39e5-82f6-0d3afe298a20\n                      description: Generated description for concept referred to by key \"PMControlPolicy_Schemas:0.0.1\"\n                  - key:\n                      name: PMControlPolicy_Tasks\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMControlPolicy_Tasks\n                        version: 0.0.1\n                      UUID: 5658adb3-2962-30a3-a241-fae75bb8eb4a\n                      description: Generated description for concept referred to by key \"PMControlPolicy_Tasks:0.0.1\"\n                  - key:\n                      name: PMSubscriptionAlbum\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMSubscriptionAlbum\n                        version: 0.0.1\n                      UUID: c2bd6f0d-6854-317a-9be2-97c08338428c\n                      description: Generated description for concept referred to by key \"PMSubscriptionAlbum:0.0.1\"\n                  - key:\n                      name: PMSubscriptionOutputEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMSubscriptionOutputEvent\n                        version: 0.0.1\n                      UUID: 992b7819-9f69-3aa0-bb0f-6e45ea15ce05\n                      description: Generated description for concept referred to by key \"PMSubscriptionOutputEvent:0.0.1\"\n                  - key:\n                      name: PMSubscriptionType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMSubscriptionType\n                        version: 0.0.1\n                      UUID: 73c1c397-4fc3-357f-93b6-a8ad707fbaae\n                      description: Generated description for concept referred to by key \"PMSubscriptionType:0.0.1\"\n                  - key:\n                      name: ReceiveEventPolicy\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: ReceiveEventPolicy\n                        version: 0.0.1\n                      UUID: 568b7345-9de1-36d3-b6a3-9b857e6809a1\n                      description: Generated description for concept referred to by key \"ReceiveEventPolicy:0.0.1\"\n                  - key:\n                      name: ReceiveSubscriptionTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: ReceiveSubscriptionTask\n                        version: 0.0.1\n                      UUID: f596afc8-100c-35eb-92c8-352355ea457d\n                      description: Generated description for concept referred to by key \"ReceiveSubscriptionTask:0.0.1\"\n                  - key:\n                      name: SimpleIntType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: SimpleIntType\n                        version: 0.0.1\n                      UUID: 153791fd-ae0a-36a7-88a5-309a7936415d\n                      description: Generated description for concept referred to by key \"SimpleIntType:0.0.1\"\n                  - key:\n                      name: SimpleStringType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: SimpleStringType\n                        version: 0.0.1\n                      UUID: 8a4957cf-9493-3a76-8c22-a208e23259af\n                      description: Generated description for concept referred to by key \"SimpleStringType:0.0.1\"\n                  - key:\n                      name: SubscriptionStatusType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: SubscriptionStatusType\n                        version: 0.0.1\n                      UUID: 597643b1-9db1-31ce-85d0-e1c63c43b30b\n                      description: Generated description for concept referred to by key \"SubscriptionStatusType:0.0.1\"\n                  - key:\n                      name: SubscriptionType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: SubscriptionType\n                        version: 0.0.1\n                      UUID: 184547bb-7d64-3cb2-a273-d7185102c5ce\n                      description: Generated description for concept referred to by key \"SubscriptionType:0.0.1\"\n                  - key:\n                      name: UUIDType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: UUIDType\n                        version: 0.0.1\n                      UUID: 6a8cc68e-dfc8-3403-9c6d-071c886b319c\n                      description: Generated description for concept referred to by key \"UUIDType:0.0.1\"\n                  - key:\n                      name: pmsh-operational-policy\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: pmsh-operational-policy\n                        version: 0.0.1\n                      UUID: fdf2c9ff-6422-3ea6-b6b6-49b12116265d\n                      description: Generated description for concept referred to by key \"pmsh-operational-policy:0.0.1\"\n              policies:\n                key:\n                  name: PMControlPolicy_Policies\n                  version: 0.0.1\n                policyMap:\n                  entry:\n                  - key:\n                      name: CDSCreateResponsePolicy\n                      version: 0.0.1\n                    value:\n                      policyKey:\n                        name: CDSCreateResponsePolicy\n                        version: 0.0.1\n                      template: Freestyle\n                      state:\n                        entry:\n                        - key: CDSCreateResponseState\n                          value:\n                            stateKey:\n                              parentKeyName: CDSCreateResponsePolicy\n                              parentKeyVersion: 0.0.1\n                              parentLocalName: 'NULL'\n                              localName: CDSCreateResponseState\n                            trigger:\n                              name: CDSCreateResponseEvent\n                              version: 0.0.1\n                            stateOutputs:\n                              entry:\n                              - key: ResponseOutput\n                                value:\n                                  key:\n                                    parentKeyName: CDSCreateResponsePolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CDSCreateResponseState\n                                    localName: ResponseOutput\n                                  outgoingEvent:\n                                    name: CDSResponseStatusEvent\n                                    version: 0.0.1\n                                  nextState:\n                                    parentKeyName: 'NULL'\n                                    parentKeyVersion: 0.0.0\n                                    parentLocalName: 'NULL'\n                                    localName: 'NULL'\n                            contextAlbumReference: []\n                            taskSelectionLogic:\n                              key: 'NULL'\n                              logicFlavour: UNDEFINED\n                              logic: ''\n                            stateFinalizerLogicMap:\n                              entry: []\n                            defaultTask:\n                              name: CDSCreateResponseTask\n                              version: 0.0.1\n                            taskReferences:\n                              entry:\n                              - key:\n                                  name: CDSCreateResponseTask\n                                  version: 0.0.1\n                                value:\n                                  key:\n                                    parentKeyName: CDSCreateResponsePolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CDSCreateResponseState\n                                    localName: CDSCreateResponsePolicy\n                                  outputType: DIRECT\n                                  output:\n                                    parentKeyName: CDSCreateResponsePolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CDSCreateResponseState\n                                    localName: ResponseOutput\n                      firstState: CDSCreateResponseState\n                  - key:\n                      name: CDSDeleteResponsePolicy\n                      version: 0.0.1\n                    value:\n                      policyKey:\n                        name: CDSDeleteResponsePolicy\n                        version: 0.0.1\n                      template: Freestyle\n                      state:\n                        entry:\n                        - key: CDSDeleteResponseState\n                          value:\n                            stateKey:\n                              parentKeyName: CDSDeleteResponsePolicy\n                              parentKeyVersion: 0.0.1\n                              parentLocalName: 'NULL'\n                              localName: CDSDeleteResponseState\n                            trigger:\n                              name: CDSDeleteResponseEvent\n                              version: 0.0.1\n                            stateOutputs:\n                              entry:\n                              - key: ResponseOutput\n                                value:\n                                  key:\n                                    parentKeyName: CDSDeleteResponsePolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CDSDeleteResponseState\n                                    localName: ResponseOutput\n                                  outgoingEvent:\n                                    name: CDSResponseStatusEvent\n                                    version: 0.0.1\n                                  nextState:\n                                    parentKeyName: 'NULL'\n                                    parentKeyVersion: 0.0.0\n                                    parentLocalName: 'NULL'\n                                    localName: 'NULL'\n                            contextAlbumReference: []\n                            taskSelectionLogic:\n                              key: 'NULL'\n                              logicFlavour: UNDEFINED\n                              logic: ''\n                            stateFinalizerLogicMap:\n                              entry: []\n                            defaultTask:\n                              name: CDSDeleteResponseTask\n                              version: 0.0.1\n                            taskReferences:\n                              entry:\n                              - key:\n                                  name: CDSDeleteResponseTask\n                                  version: 0.0.1\n                                value:\n                                  key:\n                                    parentKeyName: CDSDeleteResponsePolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CDSDeleteResponseState\n                                    localName: CDSDeleteResponsePolicy\n                                  outputType: DIRECT\n                                  output:\n                                    parentKeyName: CDSDeleteResponsePolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CDSDeleteResponseState\n                                    localName: ResponseOutput\n                      firstState: CDSDeleteResponseState\n                  - key:\n                      name: ReceiveEventPolicy\n                      version: 0.0.1\n                    value:\n                      policyKey:\n                        name: ReceiveEventPolicy\n                        version: 0.0.1\n                      template: Freestyle\n                      state:\n                        entry:\n                        - key: CreateOrDeleteState\n                          value:\n                            stateKey:\n                              parentKeyName: ReceiveEventPolicy\n                              parentKeyVersion: 0.0.1\n                              parentLocalName: 'NULL'\n                              localName: CreateOrDeleteState\n                            trigger:\n                              name: PMSubscriptionOutputEvent\n                              version: 0.0.1\n                            stateOutputs:\n                              entry:\n                              - key: CreateSubscriptionPayload\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CreateOrDeleteState\n                                    localName: CreateSubscriptionPayload\n                                  outgoingEvent:\n                                    name: CreateSubscriptionPayloadEvent\n                                    version: 0.0.1\n                                  nextState:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: 'NULL'\n                                    localName: CreateSubscription\n                              - key: DeleteSubscriptionPayload\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CreateOrDeleteState\n                                    localName: DeleteSubscriptionPayload\n                                  outgoingEvent:\n                                    name: DeleteSubscriptionPayloadEvent\n                                    version: 0.0.1\n                                  nextState:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: 'NULL'\n                                    localName: DeleteSubscription\n                            contextAlbumReference:\n                            - name: PMSubscriptionAlbum\n                              version: 0.0.1\n                            taskSelectionLogic:\n                              key: TaskSelectionLogic\n                              logicFlavour: JAVASCRIPT\n                              logic: |-\n                                /*\n                                 * ============LICENSE_START=======================================================\n                                 *  Copyright (C) 2020 Nordix. All rights reserved.\n                                 * ================================================================================\n                                 * Licensed under the Apache License, Version 2.0 (the \"License\");\n                                 * you may not use this file except in compliance with the License.\n                                 * You may obtain a copy of the License at\n                                 *\n                                 *      http://www.apache.org/licenses/LICENSE-2.0\n                                 *\n                                 * Unless required by applicable law or agreed to in writing, software\n                                 * distributed under the License is distributed on an \"AS IS\" BASIS,\n                                 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n                                 * See the License for the specific language governing permissions and\n                                 * limitations under the License.\n                                 *\n                                 * SPDX-License-Identifier: Apache-2.0\n                                 * ============LICENSE_END=========================================================\n                                 */\n\n                                executor.logger.info(executor.subject.id);\n\n                                var pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\n                                var changeType = pmSubscriptionInfo.get(\"changeType\").toString()\n\n                                executor.logger.info(\"Change Type is \" + changeType)\n\n                                if (\"CREATE\".equals(changeType)) {\n                                    executor.logger.info(\"Choosing to create a subscription\")\n                                    executor.subject.getTaskKey(\"CreateSubscriptionPayloadTask\").copyTo(executor.selectedTask);\n                                }\n                                else if (\"DELETE\".equals(changeType)) {\n                                    executor.logger.info(\"Choosing to delete a subscription\")\n                                    executor.subject.getTaskKey(\"DeleteSubscriptionPayloadTask\").copyTo(executor.selectedTask);\n                                }\n\n                                //var returnValue = executor.isTrue;\n                                true;\n                            stateFinalizerLogicMap:\n                              entry: []\n                            defaultTask:\n                              name: CreateSubscriptionPayloadTask\n                              version: 0.0.1\n                            taskReferences:\n                              entry:\n                              - key:\n                                  name: CreateSubscriptionPayloadTask\n                                  version: 0.0.1\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CreateOrDeleteState\n                                    localName: ReceiveEventPolicy\n                                  outputType: DIRECT\n                                  output:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CreateOrDeleteState\n                                    localName: CreateSubscriptionPayload\n                              - key:\n                                  name: DeleteSubscriptionPayloadTask\n                                  version: 0.0.1\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CreateOrDeleteState\n                                    localName: ReceiveEventPolicy\n                                  outputType: DIRECT\n                                  output:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CreateOrDeleteState\n                                    localName: DeleteSubscriptionPayload\n                        - key: CreateSubscription\n                          value:\n                            stateKey:\n                              parentKeyName: ReceiveEventPolicy\n                              parentKeyVersion: 0.0.1\n                              parentLocalName: 'NULL'\n                              localName: CreateSubscription\n                            trigger:\n                              name: CreateSubscriptionPayloadEvent\n                              version: 0.0.1\n                            stateOutputs:\n                              entry:\n                              - key: IssueCreateSubscriptionRequestOutput\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CreateSubscription\n                                    localName: IssueCreateSubscriptionRequestOutput\n                                  outgoingEvent:\n                                    name: CDSCreateSubscriptionRequestEvent\n                                    version: 0.0.1\n                                  nextState:\n                                    parentKeyName: 'NULL'\n                                    parentKeyVersion: 0.0.0\n                                    parentLocalName: 'NULL'\n                                    localName: 'NULL'\n                            contextAlbumReference:\n                            - name: PMSubscriptionAlbum\n                              version: 0.0.1\n                            taskSelectionLogic:\n                              key: 'NULL'\n                              logicFlavour: UNDEFINED\n                              logic: ''\n                            stateFinalizerLogicMap:\n                              entry: []\n                            defaultTask:\n                              name: CreateSubscriptionRequestTask\n                              version: 0.0.1\n                            taskReferences:\n                              entry:\n                              - key:\n                                  name: CreateSubscriptionRequestTask\n                                  version: 0.0.1\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CreateSubscription\n                                    localName: ReceiveEventPolicy\n                                  outputType: DIRECT\n                                  output:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: CreateSubscription\n                                    localName: IssueCreateSubscriptionRequestOutput\n                        - key: DeleteSubscription\n                          value:\n                            stateKey:\n                              parentKeyName: ReceiveEventPolicy\n                              parentKeyVersion: 0.0.1\n                              parentLocalName: 'NULL'\n                              localName: DeleteSubscription\n                            trigger:\n                              name: DeleteSubscriptionPayloadEvent\n                              version: 0.0.1\n                            stateOutputs:\n                              entry:\n                              - key: IssueDeleteSubscriptionRequestOutput\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: DeleteSubscription\n                                    localName: IssueDeleteSubscriptionRequestOutput\n                                  outgoingEvent:\n                                    name: CDSDeleteSubscriptionRequestEvent\n                                    version: 0.0.1\n                                  nextState:\n                                    parentKeyName: 'NULL'\n                                    parentKeyVersion: 0.0.0\n                                    parentLocalName: 'NULL'\n                                    localName: 'NULL'\n                            contextAlbumReference:\n                            - name: PMSubscriptionAlbum\n                              version: 0.0.1\n                            taskSelectionLogic:\n                              key: 'NULL'\n                              logicFlavour: UNDEFINED\n                              logic: ''\n                            stateFinalizerLogicMap:\n                              entry: []\n                            defaultTask:\n                              name: DeleteSubscriptionRequestTask\n                              version: 0.0.1\n                            taskReferences:\n                              entry:\n                              - key:\n                                  name: DeleteSubscriptionRequestTask\n                                  version: 0.0.1\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: DeleteSubscription\n                                    localName: ReceiveEventPolicy\n                                  outputType: DIRECT\n                                  output:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: DeleteSubscription\n                                    localName: IssueDeleteSubscriptionRequestOutput\n                        - key: ReceiveSubscriptionState\n                          value:\n                            stateKey:\n                              parentKeyName: ReceiveEventPolicy\n                              parentKeyVersion: 0.0.1\n                              parentLocalName: 'NULL'\n                              localName: ReceiveSubscriptionState\n                            trigger:\n                              name: pmsh-operational-policy\n                              version: 0.0.1\n                            stateOutputs:\n                              entry:\n                              - key: ReceivePMSubscriptionOutput\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: ReceiveSubscriptionState\n                                    localName: ReceivePMSubscriptionOutput\n                                  outgoingEvent:\n                                    name: PMSubscriptionOutputEvent\n                                    version: 0.0.1\n                                  nextState:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: 'NULL'\n                                    localName: CreateOrDeleteState\n                            contextAlbumReference:\n                            - name: PMSubscriptionAlbum\n                              version: 0.0.1\n                            taskSelectionLogic:\n                              key: 'NULL'\n                              logicFlavour: UNDEFINED\n                              logic: ''\n                            stateFinalizerLogicMap:\n                              entry: []\n                            defaultTask:\n                              name: ReceiveSubscriptionTask\n                              version: 0.0.1\n                            taskReferences:\n                              entry:\n                              - key:\n                                  name: ReceiveSubscriptionTask\n                                  version: 0.0.1\n                                value:\n                                  key:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: ReceiveSubscriptionState\n                                    localName: ReceiveEventPolicy\n                                  outputType: DIRECT\n                                  output:\n                                    parentKeyName: ReceiveEventPolicy\n                                    parentKeyVersion: 0.0.1\n                                    parentLocalName: ReceiveSubscriptionState\n                                    localName: ReceivePMSubscriptionOutput\n                      firstState: ReceiveSubscriptionState\n              tasks:\n                key:\n                  name: PMControlPolicy_Tasks\n                  version: 0.0.1\n                taskMap:\n                  entry:\n                  - key:\n                      name: CDSCreateResponseTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateResponseTask\n                        version: 0.0.1\n                      inputFields:\n                        entry:\n                        - key: actionIdentifiers\n                          value:\n                            key: actionIdentifiers\n                            fieldSchemaKey:\n                              name: CDSActionIdentifiersType\n                              version: 0.0.1\n                            optional: false\n                        - key: commonHeader\n                          value:\n                            key: commonHeader\n                            fieldSchemaKey:\n                              name: CDSResponseCommonHeaderType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSCreateResponsePayloadType\n                              version: 0.0.1\n                            optional: false\n                        - key: status\n                          value:\n                            key: status\n                            fieldSchemaKey:\n                              name: CDSResponseStatusType\n                              version: 0.0.1\n                            optional: false\n                      outputFields:\n                        entry:\n                        - key: status\n                          value:\n                            key: status\n                            fieldSchemaKey:\n                              name: SubscriptionStatusType\n                              version: 0.0.1\n                            optional: false\n                      taskParameters:\n                        entry: []\n                      contextAlbumReference:\n                      - name: PMSubscriptionAlbum\n                        version: 0.0.1\n                      taskLogic:\n                        key: TaskLogic\n                        logicFlavour: JAVASCRIPT\n                        logic: |-\n                          /*\n                           * ============LICENSE_START=======================================================\n                           *  Copyright (C) 2020 Nordix. All rights reserved.\n                           * ================================================================================\n                           * Licensed under the Apache License, Version 2.0 (the \"License\");\n                           * you may not use this file except in compliance with the License.\n                           * You may obtain a copy of the License at\n                           *\n                           *      http://www.apache.org/licenses/LICENSE-2.0\n                           *\n                           * Unless required by applicable law or agreed to in writing, software\n                           * distributed under the License is distributed on an \"AS IS\" BASIS,\n                           * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n                           * See the License for the specific language governing permissions and\n                           * limitations under the License.\n                           *\n                           * SPDX-License-Identifier: Apache-2.0\n                           * ============LICENSE_END=========================================================\n                           */\n\n                          executor.logger.info(executor.subject.id);\n\n                          var commonHeader = executor.inFields.get(\"commonHeader\")\n                          var response = executor.inFields.get(\"payload\")\n                          var albumID = commonHeader.get(\"requestId\")\n\n                          var pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(albumID.toString());\n                          var responseStatus = executor.subject.getOutFieldSchemaHelper(\"status\").createNewInstance();\n\n                          responseStatus.put(\"subscriptionName\", pmSubscriptionInfo.get(\"subscription\").get(\"subscriptionName\"))\n                          responseStatus.put(\"nfName\", pmSubscriptionInfo.get(\"nfName\"))\n                          responseStatus.put(\"changeType\", pmSubscriptionInfo.get(\"changeType\"))\n\n                          var status = response.get(pmSubscriptionInfo.get(\"changeType\").toLowerCase() + \"_DasH_subscription_DasH_response\").get(\"odl_DasH_response\").get(\"status\")\n\n                          executor.logger.info(\"RESPONSE STATUS = \" + status)\n\n                          if(status == \"success\") {\n                              responseStatus.put(\"message\", \"success\")\n                          } else {\n                              responseStatus.put(\"message\", \"failed\")\n                          }\n\n                          executor.outFields.put(\"status\", responseStatus)\n\n                          //var returnValue = executor.isTrue;\n                          true;\n                  - key:\n                      name: CDSDeleteResponseTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteResponseTask\n                        version: 0.0.1\n                      inputFields:\n                        entry:\n                        - key: actionIdentifiers\n                          value:\n                            key: actionIdentifiers\n                            fieldSchemaKey:\n                              name: CDSActionIdentifiersType\n                              version: 0.0.1\n                            optional: false\n                        - key: commonHeader\n                          value:\n                            key: commonHeader\n                            fieldSchemaKey:\n                              name: CDSResponseCommonHeaderType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSDeleteResponsePayloadType\n                              version: 0.0.1\n                            optional: false\n                        - key: status\n                          value:\n                            key: status\n                            fieldSchemaKey:\n                              name: CDSResponseStatusType\n                              version: 0.0.1\n                            optional: false\n                      outputFields:\n                        entry:\n                        - key: status\n                          value:\n                            key: status\n                            fieldSchemaKey:\n                              name: SubscriptionStatusType\n                              version: 0.0.1\n                            optional: false\n                      taskParameters:\n                        entry: []\n                      contextAlbumReference:\n                      - name: PMSubscriptionAlbum\n                        version: 0.0.1\n                      taskLogic:\n                        key: TaskLogic\n                        logicFlavour: JAVASCRIPT\n                        logic: |-\n                          /*\n                           * ============LICENSE_START=======================================================\n                           *  Copyright (C) 2020 Nordix. All rights reserved.\n                           * ================================================================================\n                           * Licensed under the Apache License, Version 2.0 (the \"License\");\n                           * you may not use this file except in compliance with the License.\n                           * You may obtain a copy of the License at\n                           *\n                           *      http://www.apache.org/licenses/LICENSE-2.0\n                           *\n                           * Unless required by applicable law or agreed to in writing, software\n                           * distributed under the License is distributed on an \"AS IS\" BASIS,\n                           * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n                           * See the License for the specific language governing permissions and\n                           * limitations under the License.\n                           *\n                           * SPDX-License-Identifier: Apache-2.0\n                           * ============LICENSE_END=========================================================\n                           */\n\n                          executor.logger.info(executor.subject.id);\n\n                          var commonHeader = executor.inFields.get(\"commonHeader\")\n                          var response = executor.inFields.get(\"payload\")\n                          var albumID = commonHeader.get(\"requestId\")\n\n                          var pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(albumID.toString());\n                          var responseStatus = executor.subject.getOutFieldSchemaHelper(\"status\").createNewInstance();\n\n                          responseStatus.put(\"subscriptionName\", pmSubscriptionInfo.get(\"subscription\").get(\"subscriptionName\"))\n                          responseStatus.put(\"nfName\", pmSubscriptionInfo.get(\"nfName\"))\n                          responseStatus.put(\"changeType\", pmSubscriptionInfo.get(\"changeType\"))\n\n                          var status = response.get(pmSubscriptionInfo.get(\"changeType\").toLowerCase() + \"_DasH_subscription_DasH_response\").get(\"odl_DasH_response\").get(\"status\")\n\n                          executor.logger.info(\"RESPONSE STATUS = \" + status)\n\n                          if(status == \"success\") {\n                              responseStatus.put(\"message\", \"success\")\n                          } else {\n                              responseStatus.put(\"message\", \"failed\")\n                          }\n\n                          executor.outFields.put(\"status\", responseStatus)\n\n                          //var returnValue = executor.isTrue;\n                          true;\n                  - key:\n                      name: CreateSubscriptionPayloadTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CreateSubscriptionPayloadTask\n                        version: 0.0.1\n                      inputFields:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                      outputFields:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSCreateSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                      taskParameters:\n                        entry: []\n                      contextAlbumReference:\n                      - name: PMSubscriptionAlbum\n                        version: 0.0.1\n                      taskLogic:\n                        key: TaskLogic\n                        logicFlavour: JAVASCRIPT\n                        logic: |-\n                          /*\n                           * ============LICENSE_START=======================================================\n                           *  Copyright (C) 2020 Nordix. All rights reserved.\n                           * ================================================================================\n                           * Licensed under the Apache License, Version 2.0 (the \"License\");\n                           * you may not use this file except in compliance with the License.\n                           * You may obtain a copy of the License at\n                           *\n                           *      http://www.apache.org/licenses/LICENSE-2.0\n                           *\n                           * Unless required by applicable law or agreed to in writing, software\n                           * distributed under the License is distributed on an \"AS IS\" BASIS,\n                           * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n                           * See the License for the specific language governing permissions and\n                           * limitations under the License.\n                           *\n                           * SPDX-License-Identifier: Apache-2.0\n                           * ============LICENSE_END=========================================================\n                           */\n\n                          executor.logger.info(executor.subject.id);\n\n                          var pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\n\n                          var changeType = pmSubscriptionInfo.get(\"changeType\").toLowerCase()\n\n                          var payloadProperties = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(changeType + \"_DasH_subscription_DasH_properties_record\");\n\n                          payloadProperties.put(\"nfName\",  pmSubscriptionInfo.get(\"nfName\"))\n                          payloadProperties.put(\"subscriptionName\",  pmSubscriptionInfo.get(\"subscription\").get(\"subscriptionName\"))\n                          payloadProperties.put(\"administrativeState\", pmSubscriptionInfo.get(\"subscription\").get(\"administrativeState\"))\n                          payloadProperties.put(\"fileBasedGP\",  pmSubscriptionInfo.get(\"subscription\").get(\"fileBasedGP\").toString())\n                          payloadProperties.put(\"fileLocation\", pmSubscriptionInfo.get(\"subscription\").get(\"fileLocation\"))\n                          payloadProperties.put(\"measurementGroups\", pmSubscriptionInfo.get(\"subscription\").get(\"measurementGroups\"))\n\n                          var payloadEntry = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(\"CDSRequestPayloadEntry\");\n                          payloadEntry.put(changeType + \"_DasH_subscription_DasH_properties\", payloadProperties)\n\n                          var payload = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewInstance();\n                          payload.put(changeType + \"_DasH_subscription_DasH_request\", payloadEntry);\n\n                          executor.outFields.put(\"albumID\", executor.inFields.get(\"albumID\"))\n                          executor.outFields.put(\"payload\", payload);\n\n                          //var returnValue = executor.isTrue;\n                          true;\n                  - key:\n                      name: CreateSubscriptionRequestTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CreateSubscriptionRequestTask\n                        version: 0.0.1\n                      inputFields:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSCreateSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                      outputFields:\n                        entry:\n                        - key: actionIdentifiers\n                          value:\n                            key: actionIdentifiers\n                            fieldSchemaKey:\n                              name: CDSActionIdentifiersType\n                              version: 0.0.1\n                            optional: false\n                        - key: commonHeader\n                          value:\n                            key: commonHeader\n                            fieldSchemaKey:\n                              name: CDSRequestCommonHeaderType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSCreateSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                      taskParameters:\n                        entry: []\n                      contextAlbumReference:\n                      - name: PMSubscriptionAlbum\n                        version: 0.0.1\n                      taskLogic:\n                        key: TaskLogic\n                        logicFlavour: JAVASCRIPT\n                        logic: |-\n                          /*\n                           * ============LICENSE_START=======================================================\n                           *  Copyright (C) 2020 Nordix. All rights reserved.\n                           * ================================================================================\n                           * Licensed under the Apache License, Version 2.0 (the \"License\");\n                           * you may not use this file except in compliance with the License.\n                           * You may obtain a copy of the License at\n                           *\n                           *      http://www.apache.org/licenses/LICENSE-2.0\n                           *\n                           * Unless required by applicable law or agreed to in writing, software\n                           * distributed under the License is distributed on an \"AS IS\" BASIS,\n                           * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n                           * See the License for the specific language governing permissions and\n                           * limitations under the License.\n                           *\n                           * SPDX-License-Identifier: Apache-2.0\n                           * ============LICENSE_END=========================================================\n                           */\n\n                          executor.logger.info(executor.subject.id);\n\n                          var pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\n\n                          var changeType = pmSubscriptionInfo.get(\"changeType\").toLowerCase()\n                          var blueprintName = pmSubscriptionInfo.get(\"blueprintName\").toLowerCase()\n                          var blueprintVersion = pmSubscriptionInfo.get(\"blueprintVersion\").toLowerCase()\n                          var payload = executor.inFields.get(\"payload\")\n                          var actionName = changeType + \"-subscription\"\n\n                          var commonHeader = executor.subject.getOutFieldSchemaHelper(\"commonHeader\").createNewInstance();\n                          commonHeader.put(\"originatorId\", \"sdnc\");\n                          commonHeader.put(\"requestId\", executor.inFields.get(\"albumID\").toString());\n                          commonHeader.put(\"subRequestId\", \"sub-123456-1000\");\n\n                          var actionIdentifiers = executor.subject.getOutFieldSchemaHelper(\"actionIdentifiers\").createNewInstance();\n                          actionIdentifiers.put(\"actionName\", actionName);\n                          actionIdentifiers.put(\"blueprintName\", blueprintName);\n                          actionIdentifiers.put(\"blueprintVersion\", blueprintVersion);\n                          actionIdentifiers.put(\"mode\", \"sync\");\n\n                          executor.outFields.put(\"commonHeader\", commonHeader);\n                          executor.outFields.put(\"actionIdentifiers\", actionIdentifiers);\n                          executor.outFields.put(\"payload\", payload);\n\n                          //var returnValue = executor.isTrue;\n                          true;\n                  - key:\n                      name: DeleteSubscriptionPayloadTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: DeleteSubscriptionPayloadTask\n                        version: 0.0.1\n                      inputFields:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                      outputFields:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSDeleteSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                      taskParameters:\n                        entry: []\n                      contextAlbumReference:\n                      - name: PMSubscriptionAlbum\n                        version: 0.0.1\n                      taskLogic:\n                        key: TaskLogic\n                        logicFlavour: JAVASCRIPT\n                        logic: |-\n                          /*\n                           * ============LICENSE_START=======================================================\n                           *  Copyright (C) 2020 Nordix. All rights reserved.\n                           * ================================================================================\n                           * Licensed under the Apache License, Version 2.0 (the \"License\");\n                           * you may not use this file except in compliance with the License.\n                           * You may obtain a copy of the License at\n                           *\n                           *      http://www.apache.org/licenses/LICENSE-2.0\n                           *\n                           * Unless required by applicable law or agreed to in writing, software\n                           * distributed under the License is distributed on an \"AS IS\" BASIS,\n                           * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n                           * See the License for the specific language governing permissions and\n                           * limitations under the License.\n                           *\n                           * SPDX-License-Identifier: Apache-2.0\n                           * ============LICENSE_END=========================================================\n                           */\n\n                          executor.logger.info(executor.subject.id);\n\n                          var pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\n\n                          var changeType = pmSubscriptionInfo.get(\"changeType\").toLowerCase()\n\n                          var payloadProperties = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(changeType + \"_DasH_subscription_DasH_properties_record\");\n\n                          payloadProperties.put(\"nfName\",  pmSubscriptionInfo.get(\"nfName\"))\n                          payloadProperties.put(\"subscriptionName\",  pmSubscriptionInfo.get(\"subscription\").get(\"subscriptionName\"))\n                          payloadProperties.put(\"administrativeState\", pmSubscriptionInfo.get(\"subscription\").get(\"administrativeState\"))\n                          payloadProperties.put(\"fileBasedGP\",  pmSubscriptionInfo.get(\"subscription\").get(\"fileBasedGP\").toString())\n                          payloadProperties.put(\"fileLocation\", pmSubscriptionInfo.get(\"subscription\").get(\"fileLocation\"))\n                          payloadProperties.put(\"measurementGroups\", pmSubscriptionInfo.get(\"subscription\").get(\"measurementGroups\"))\n\n                          var payloadEntry = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(\"CDSRequestPayloadEntry\");\n                          payloadEntry.put(changeType + \"_DasH_subscription_DasH_properties\", payloadProperties)\n\n                          var payload = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewInstance();\n                          payload.put(changeType + \"_DasH_subscription_DasH_request\", payloadEntry);\n\n                          executor.outFields.put(\"albumID\", executor.inFields.get(\"albumID\"))\n                          executor.outFields.put(\"payload\", payload);\n\n                          //var returnValue = executor.isTrue;\n                          true;\n                  - key:\n                      name: DeleteSubscriptionRequestTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: DeleteSubscriptionRequestTask\n                        version: 0.0.1\n                      inputFields:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSDeleteSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                      outputFields:\n                        entry:\n                        - key: actionIdentifiers\n                          value:\n                            key: actionIdentifiers\n                            fieldSchemaKey:\n                              name: CDSActionIdentifiersType\n                              version: 0.0.1\n                            optional: false\n                        - key: commonHeader\n                          value:\n                            key: commonHeader\n                            fieldSchemaKey:\n                              name: CDSRequestCommonHeaderType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSDeleteSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                      taskParameters:\n                        entry: []\n                      contextAlbumReference:\n                      - name: PMSubscriptionAlbum\n                        version: 0.0.1\n                      taskLogic:\n                        key: TaskLogic\n                        logicFlavour: JAVASCRIPT\n                        logic: |-\n                          /*\n                           * ============LICENSE_START=======================================================\n                           *  Copyright (C) 2020 Nordix. All rights reserved.\n                           * ================================================================================\n                           * Licensed under the Apache License, Version 2.0 (the \"License\");\n                           * you may not use this file except in compliance with the License.\n                           * You may obtain a copy of the License at\n                           *\n                           *      http://www.apache.org/licenses/LICENSE-2.0\n                           *\n                           * Unless required by applicable law or agreed to in writing, software\n                           * distributed under the License is distributed on an \"AS IS\" BASIS,\n                           * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n                           * See the License for the specific language governing permissions and\n                           * limitations under the License.\n                           *\n                           * SPDX-License-Identifier: Apache-2.0\n                           * ============LICENSE_END=========================================================\n                           */\n\n                          executor.logger.info(executor.subject.id);\n\n                          var pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\n\n                          var changeType = pmSubscriptionInfo.get(\"changeType\").toLowerCase()\n                          var blueprintName = pmSubscriptionInfo.get(\"blueprintName\").toLowerCase()\n                          var blueprintVersion = pmSubscriptionInfo.get(\"blueprintVersion\").toLowerCase()\n                          var payload = executor.inFields.get(\"payload\")\n                          var actionName = changeType + \"-subscription\"\n\n                          var commonHeader = executor.subject.getOutFieldSchemaHelper(\"commonHeader\").createNewInstance();\n                          commonHeader.put(\"originatorId\", \"sdnc\");\n                          commonHeader.put(\"requestId\", executor.inFields.get(\"albumID\").toString());\n                          commonHeader.put(\"subRequestId\", \"sub-123456-1000\");\n\n                          var actionIdentifiers = executor.subject.getOutFieldSchemaHelper(\"actionIdentifiers\").createNewInstance();\n                          actionIdentifiers.put(\"actionName\", actionName);\n                          actionIdentifiers.put(\"blueprintName\", blueprintName);\n                          actionIdentifiers.put(\"blueprintVersion\", blueprintVersion);\n                          actionIdentifiers.put(\"mode\", \"sync\");\n\n                          executor.outFields.put(\"commonHeader\", commonHeader);\n                          executor.outFields.put(\"actionIdentifiers\", actionIdentifiers);\n                          executor.outFields.put(\"payload\", payload);\n\n                          //var returnValue = executor.isTrue;\n                          true;\n                  - key:\n                      name: ReceiveSubscriptionTask\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: ReceiveSubscriptionTask\n                        version: 0.0.1\n                      inputFields:\n                        entry:\n                        - key: blueprintName\n                          value:\n                            key: blueprintName\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: blueprintVersion\n                          value:\n                            key: blueprintVersion\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: changeType\n                          value:\n                            key: changeType\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: closedLoopControlName\n                          value:\n                            key: closedLoopControlName\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: nfName\n                          value:\n                            key: nfName\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: policyName\n                          value:\n                            key: policyName\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: subscription\n                          value:\n                            key: subscription\n                            fieldSchemaKey:\n                              name: SubscriptionType\n                              version: 0.0.1\n                            optional: false\n                      outputFields:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                      taskParameters:\n                        entry: []\n                      contextAlbumReference:\n                      - name: PMSubscriptionAlbum\n                        version: 0.0.1\n                      taskLogic:\n                        key: TaskLogic\n                        logicFlavour: JAVASCRIPT\n                        logic: |-\n                          /*\n                           * ============LICENSE_START=======================================================\n                           *  Copyright (C) 2020 Nordix. All rights reserved.\n                           * ================================================================================\n                           * Licensed under the Apache License, Version 2.0 (the \"License\");\n                           * you may not use this file except in compliance with the License.\n                           * You may obtain a copy of the License at\n                           *\n                           *      http://www.apache.org/licenses/LICENSE-2.0\n                           *\n                           * Unless required by applicable law or agreed to in writing, software\n                           * distributed under the License is distributed on an \"AS IS\" BASIS,\n                           * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n                           * See the License for the specific language governing permissions and\n                           * limitations under the License.\n                           *\n                           * SPDX-License-Identifier: Apache-2.0\n                           * ============LICENSE_END=========================================================\n                           */\n                          var uuidType = java.util.UUID;\n\n                          executor.logger.info(executor.subject.id);\n\n                          //albumID will be used to fetch info from our album later\n                          var albumID = uuidType.randomUUID();\n                          var pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").getSchemaHelper().createNewInstance();\n                          var returnValue = true;\n\n                          if(executor.inFields.get(\"policyName\") != null) {\n                              executor.logger.info(\"nfName in receive sub event \" + executor.inFields.get(\"nfName\"));\n\n                              var changeType = executor.inFields.get(\"changeType\")\n                              var nfName = executor.inFields.get(\"nfName\")\n                              var policyName = executor.inFields.get(\"policyName\")\n                              var closedLoopControlName = executor.inFields.get(\"closedLoopControlName\")\n                              var subscription = executor.inFields.get(\"subscription\")\n                              var blueprintName = executor.inFields.get(\"blueprintName\")\n                              var blueprintVersion = executor.inFields.get(\"blueprintVersion\")\n\n                              pmSubscriptionInfo.put(\"nfName\", executor.inFields.get(\"nfName\"));\n                              pmSubscriptionInfo.put(\"changeType\", executor.inFields.get(\"changeType\"))\n                              pmSubscriptionInfo.put(\"policyName\", executor.inFields.get(\"policyName\"))\n                              pmSubscriptionInfo.put(\"closedLoopControlName\", executor.inFields.get(\"closedLoopControlName\"))\n                              pmSubscriptionInfo.put(\"subscription\", subscription)\n                              pmSubscriptionInfo.put(\"blueprintName\", blueprintName)\n                              pmSubscriptionInfo.put(\"blueprintVersion\", blueprintVersion)\n\n\n                              executor.getContextAlbum(\"PMSubscriptionAlbum\").put(albumID.toString(), pmSubscriptionInfo);\n\n                              executor.outFields.put(\"albumID\", albumID)\n                          } else {\n                              executor.message = \"Received invalid event\"\n                              returnValue = false;\n                          }\n\n                          returnValue;\n              events:\n                key:\n                  name: PMControlPolicy_Events\n                  version: 0.0.1\n                eventMap:\n                  entry:\n                  - key:\n                      name: CDSCreateResponseEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateResponseEvent\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: CDS\n                      target: APEX\n                      parameter:\n                        entry:\n                        - key: actionIdentifiers\n                          value:\n                            key: actionIdentifiers\n                            fieldSchemaKey:\n                              name: CDSActionIdentifiersType\n                              version: 0.0.1\n                            optional: false\n                        - key: commonHeader\n                          value:\n                            key: commonHeader\n                            fieldSchemaKey:\n                              name: CDSResponseCommonHeaderType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSCreateResponsePayloadType\n                              version: 0.0.1\n                            optional: false\n                        - key: status\n                          value:\n                            key: status\n                            fieldSchemaKey:\n                              name: CDSResponseStatusType\n                              version: 0.0.1\n                            optional: false\n                  - key:\n                      name: CDSCreateSubscriptionRequestEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateSubscriptionRequestEvent\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: APEX\n                      target: APEX\n                      parameter:\n                        entry:\n                        - key: actionIdentifiers\n                          value:\n                            key: actionIdentifiers\n                            fieldSchemaKey:\n                              name: CDSActionIdentifiersType\n                              version: 0.0.1\n                            optional: false\n                        - key: commonHeader\n                          value:\n                            key: commonHeader\n                            fieldSchemaKey:\n                              name: CDSRequestCommonHeaderType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSCreateSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                  - key:\n                      name: CDSDeleteResponseEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteResponseEvent\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: CDS\n                      target: APEX\n                      parameter:\n                        entry:\n                        - key: actionIdentifiers\n                          value:\n                            key: actionIdentifiers\n                            fieldSchemaKey:\n                              name: CDSActionIdentifiersType\n                              version: 0.0.1\n                            optional: false\n                        - key: commonHeader\n                          value:\n                            key: commonHeader\n                            fieldSchemaKey:\n                              name: CDSResponseCommonHeaderType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSDeleteResponsePayloadType\n                              version: 0.0.1\n                            optional: false\n                        - key: status\n                          value:\n                            key: status\n                            fieldSchemaKey:\n                              name: CDSResponseStatusType\n                              version: 0.0.1\n                            optional: false\n                  - key:\n                      name: CDSDeleteSubscriptionRequestEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteSubscriptionRequestEvent\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: APEX\n                      target: APEX\n                      parameter:\n                        entry:\n                        - key: actionIdentifiers\n                          value:\n                            key: actionIdentifiers\n                            fieldSchemaKey:\n                              name: CDSActionIdentifiersType\n                              version: 0.0.1\n                            optional: false\n                        - key: commonHeader\n                          value:\n                            key: commonHeader\n                            fieldSchemaKey:\n                              name: CDSRequestCommonHeaderType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSDeleteSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                  - key:\n                      name: CDSResponseStatusEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSResponseStatusEvent\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: APEX\n                      target: DCAE\n                      parameter:\n                        entry:\n                        - key: status\n                          value:\n                            key: status\n                            fieldSchemaKey:\n                              name: SubscriptionStatusType\n                              version: 0.0.1\n                            optional: false\n                  - key:\n                      name: CreateSubscriptionPayloadEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CreateSubscriptionPayloadEvent\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: APEX\n                      target: APEX\n                      parameter:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSCreateSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                  - key:\n                      name: DeleteSubscriptionPayloadEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: DeleteSubscriptionPayloadEvent\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: APEX\n                      target: APEX\n                      parameter:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                        - key: payload\n                          value:\n                            key: payload\n                            fieldSchemaKey:\n                              name: CDSDeleteSubscriptionPayloadType\n                              version: 0.0.1\n                            optional: false\n                  - key:\n                      name: MRResponseEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: MRResponseEvent\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: DCAE\n                      target: APEX\n                      parameter:\n                        entry:\n                        - key: count\n                          value:\n                            key: count\n                            fieldSchemaKey:\n                              name: SimpleIntType\n                              version: 0.0.1\n                            optional: false\n                        - key: serverTimeMs\n                          value:\n                            key: serverTimeMs\n                            fieldSchemaKey:\n                              name: SimpleIntType\n                              version: 0.0.1\n                            optional: false\n                  - key:\n                      name: PMSubscriptionOutputEvent\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMSubscriptionOutputEvent\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: APEX\n                      target: APEX\n                      parameter:\n                        entry:\n                        - key: albumID\n                          value:\n                            key: albumID\n                            fieldSchemaKey:\n                              name: UUIDType\n                              version: 0.0.1\n                            optional: false\n                  - key:\n                      name: pmsh-operational-policy\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: pmsh-operational-policy\n                        version: 0.0.1\n                      nameSpace: org.onap.policy.apex.onap.pmcontrol\n                      source: DCAE\n                      target: APEX\n                      parameter:\n                        entry:\n                        - key: blueprintName\n                          value:\n                            key: blueprintName\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: blueprintVersion\n                          value:\n                            key: blueprintVersion\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: changeType\n                          value:\n                            key: changeType\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: closedLoopControlName\n                          value:\n                            key: closedLoopControlName\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: nfName\n                          value:\n                            key: nfName\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: policyName\n                          value:\n                            key: policyName\n                            fieldSchemaKey:\n                              name: SimpleStringType\n                              version: 0.0.1\n                            optional: false\n                        - key: subscription\n                          value:\n                            key: subscription\n                            fieldSchemaKey:\n                              name: SubscriptionType\n                              version: 0.0.1\n                            optional: false\n              albums:\n                key:\n                  name: PMControlPolicy_Albums\n                  version: 0.0.1\n                albums:\n                  entry:\n                  - key:\n                      name: PMSubscriptionAlbum\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMSubscriptionAlbum\n                        version: 0.0.1\n                      scope: policy\n                      isWritable: true\n                      itemSchema:\n                        name: PMSubscriptionType\n                        version: 0.0.1\n              schemas:\n                key:\n                  name: PMControlPolicy_Schemas\n                  version: 0.0.1\n                schemas:\n                  entry:\n                  - key:\n                      name: CDSActionIdentifiersType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSActionIdentifiersType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: |-\n                        {\n                            \"type\": \"record\",\n                            \"name\": \"ActionIdentifiers_Type\",\n                            \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n                            \"fields\": [\n                                {\n                                    \"name\": \"actionName\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"blueprintName\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"blueprintVersion\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"mode\",\n                                    \"type\": \"string\"\n                                }\n                            ]\n                        }\n                  - key:\n                      name: CDSCreateResponsePayloadType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateResponsePayloadType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: |-\n                        {\n                          \"name\": \"CreateResponsePayloadEntry\",\n                          \"type\": \"record\",\n                          \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n                          \"fields\": [\n                            {\n                              \"name\": \"create_DasH_subscription_DasH_response\",\n                              \"type\": {\n                                \"name\": \"create_DasH_subscription_DasH_response\",\n                                \"type\": \"record\",\n                                \"fields\": [\n                                  {\n                                    \"name\": \"odl_DasH_response\",\n                                    \"type\": {\n                                      \"name\": \"odl_DasH_response\",\n                                      \"type\": \"record\",\n                                      \"fields\": [\n                                          {\n                                            \"name\": \"status\",\n                                            \"type\": \"string\"\n                                          }\n                                      ]\n                                    }\n                                  }\n                                ]\n                              }\n                            }\n                          ]\n                        }\n                  - key:\n                      name: CDSCreateSubscriptionPayloadType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSCreateSubscriptionPayloadType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: |-\n                        {\n                          \"type\": \"map\",\n                          \"values\": {\n                            \"type\": \"record\",\n                            \"name\": \"CDSRequestPayloadEntry\",\n                            \"fields\": [\n                              {\n                                \"name\": \"create_DasH_subscription_DasH_properties\",\n                                \"type\": {\n                                  \"name\": \"create_DasH_subscription_DasH_properties_record\",\n                                  \"type\": \"record\",\n                                  \"fields\": [\n                                    {\n                                      \"name\": \"nfName\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"subscriptionName\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"administrativeState\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"fileBasedGP\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"fileLocation\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"measurementGroups\",\n                                      \"type\": {\n                                        \"type\": \"array\",\n                                        \"items\": {\n                                          \"name\": \"measurementGroups_record\",\n                                          \"type\": \"record\",\n                                          \"fields\": [\n                                            {\n                                              \"name\": \"measurementGroup\",\n                                              \"type\": {\n                                                \"name\": \"measurementGroup\",\n                                                \"type\": \"record\",\n                                                \"fields\": [\n                                                  {\n                                                    \"name\": \"measurementTypes\",\n                                                    \"type\": {\n                                                      \"type\": \"array\",\n                                                      \"items\": {\n                                                        \"name\": \"measurementTypes_record\",\n                                                        \"type\": \"record\",\n                                                        \"fields\": [\n                                                          {\n                                                            \"name\": \"measurementType\",\n                                                            \"type\": \"string\"\n                                                          }\n                                                        ]\n                                                      }\n                                                    }\n                                                  },\n                                                  {\n                                                    \"name\": \"managedObjectDNsBasic\",\n                                                    \"type\": {\n                                                      \"type\": \"array\",\n                                                      \"items\": {\n                                                        \"name\": \"managedObjectDNsBasic_record\",\n                                                        \"type\": \"record\",\n                                                        \"fields\": [\n                                                          {\n                                                            \"name\": \"DN\",\n                                                            \"type\": \"string\"\n                                                          }\n                                                        ]\n                                                      }\n                                                    }\n                                                  }\n                                                ]\n                                              }\n                                            }\n                                          ]\n                                        }\n                                      }\n                                    }\n                                  ]\n                                }\n                              }\n                            ]\n                          }\n                        }\n                  - key:\n                      name: CDSDeleteResponsePayloadType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteResponsePayloadType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: |-\n                        {\n                          \"name\": \"DeleteResponsePayloadEntry\",\n                          \"type\": \"record\",\n                          \"namespace\": \"com.acme.avro\",\n                          \"fields\": [\n                            {\n                              \"name\": \"delete_DasH_subscription_DasH_response\",\n                              \"type\": {\n                                \"name\": \"delete_DasH_subscription_DasH_response\",\n                                \"type\": \"record\",\n                                \"fields\": [\n                                  {\n                                    \"name\": \"odl_DasH_response\",\n                                    \"type\": {\n                                      \"name\": \"odl_DasH_response\",\n                                      \"type\": \"record\",\n                                      \"fields\": [\n                                          {\n                                            \"name\": \"status\",\n                                            \"type\": \"string\"\n                                          }\n                                      ]\n                                    }\n                                  }\n                                ]\n                              }\n                            }\n                          ]\n                        }\n                  - key:\n                      name: CDSDeleteSubscriptionPayloadType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSDeleteSubscriptionPayloadType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: |-\n                        {\n                          \"type\": \"map\",\n                          \"values\": {\n                            \"type\": \"record\",\n                            \"name\": \"CDSRequestPayloadEntry\",\n                            \"fields\": [\n                              {\n                                \"name\": \"delete_DasH_subscription_DasH_properties\",\n                                \"type\": {\n                                  \"name\": \"delete_DasH_subscription_DasH_properties_record\",\n                                  \"type\": \"record\",\n                                  \"fields\": [\n                                    {\n                                      \"name\": \"nfName\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"subscriptionName\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"administrativeState\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"fileBasedGP\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"fileLocation\",\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"name\": \"measurementGroups\",\n                                      \"type\": {\n                                        \"type\": \"array\",\n                                        \"items\": {\n                                          \"name\": \"measurementGroups_record\",\n                                          \"type\": \"record\",\n                                          \"fields\": [\n                                            {\n                                              \"name\": \"measurementGroup\",\n                                              \"type\": {\n                                                \"name\": \"measurementGroup\",\n                                                \"type\": \"record\",\n                                                \"fields\": [\n                                                  {\n                                                    \"name\": \"measurementTypes\",\n                                                    \"type\": {\n                                                      \"type\": \"array\",\n                                                      \"items\": {\n                                                        \"name\": \"measurementTypes_record\",\n                                                        \"type\": \"record\",\n                                                        \"fields\": [\n                                                          {\n                                                            \"name\": \"measurementType\",\n                                                            \"type\": \"string\"\n                                                          }\n                                                        ]\n                                                      }\n                                                    }\n                                                  },\n                                                  {\n                                                    \"name\": \"managedObjectDNsBasic\",\n                                                    \"type\": {\n                                                      \"type\": \"array\",\n                                                      \"items\": {\n                                                        \"name\": \"managedObjectDNsBasic_record\",\n                                                        \"type\": \"record\",\n                                                        \"fields\": [\n                                                          {\n                                                            \"name\": \"DN\",\n                                                            \"type\": \"string\"\n                                                          }\n                                                        ]\n                                                      }\n                                                    }\n                                                  }\n                                                ]\n                                              }\n                                            }\n                                          ]\n                                        }\n                                      }\n                                    }\n                                  ]\n                                }\n                              }\n                            ]\n                          }\n                        }\n                  - key:\n                      name: CDSRequestCommonHeaderType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSRequestCommonHeaderType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: |-\n                        {\n                            \"type\": \"record\",\n                            \"name\": \"RequestCommonHeader_Type\",\n                            \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n                            \"fields\": [\n                                {\n                                    \"name\": \"originatorId\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"requestId\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"subRequestId\",\n                                    \"type\": \"string\"\n                                }\n                            ]\n                        }\n                  - key:\n                      name: CDSResponseCommonHeaderType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSResponseCommonHeaderType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: |-\n                        {\n                            \"type\": \"record\",\n                            \"name\": \"ResponseCommonHeader_Type\",\n                            \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n                            \"fields\": [\n                                {\n                                    \"name\": \"originatorId\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"requestId\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"subRequestId\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"timestamp\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"flags\",\n                                    \"type\": [\"null\", \"string\"]\n                                }\n                            ]\n                        }\n                  - key:\n                      name: CDSResponseStatusType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: CDSResponseStatusType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: |-\n                        {\n                            \"type\": \"record\",\n                            \"name\": \"ResponseStatus_Type\",\n                            \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n                            \"fields\": [\n                                {\n                                    \"name\": \"code\",\n                                    \"type\": \"int\"\n                                },\n                                {\n                                    \"name\": \"eventType\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"timestamp\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"message\",\n                                    \"type\": \"string\"\n                                }\n                            ]\n                        }\n                  - key:\n                      name: PMSubscriptionType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: PMSubscriptionType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: \"{\\n\\t\\\"name\\\": \\\"PMSubscription\\\",\\n\\t\\\"type\\\": \\\"record\\\",\\n\\t\\\"namespace\\\": \\\"\\\n                        org.onap.policy.apex.onap.pmcontrol\\\",\\n\\t\\\"fields\\\": [\\n        {\\n            \\\"name\\\": \\\"nfName\\\"\\\n                        ,\\n            \\\"type\\\": \\\"string\\\"\\n        },\\n\\t    {\\n\\t\\t\\t\\\"name\\\": \\\"changeType\\\",\\n\\t\\t\\t\\\"\\\n                        type\\\": \\\"string\\\"\\n\\t\\t},\\n\\t\\t{\\n\\t\\t\\t\\\"name\\\": \\\"closedLoopControlName\\\",\\n\\t\\t\\t\\\"type\\\": \\\"\\\n                        string\\\"\\n\\t\\t},\\n\\t\\t{\\n\\t\\t\\t\\\"name\\\": \\\"policyName\\\",\\n\\t\\t\\t\\\"type\\\": \\\"string\\\"\\n\\t\\t},\\n\\t\\t\\\n                        {\\n\\t\\t    \\\"name\\\": \\\"blueprintName\\\",\\n\\t\\t    \\\"type\\\": \\\"string\\\"\\n\\t\\t},\\n\\t\\t{\\n\\t\\t    \\\"name\\\"\\\n                        : \\\"blueprintVersion\\\",\\n\\t\\t    \\\"type\\\": \\\"string\\\"\\n\\t\\t},\\n\\t\\t{\\n\\t\\t\\t\\\"name\\\": \\\"subscription\\\"\\\n                        ,\\n\\t\\t\\t\\\"type\\\": {\\n\\t\\t\\t\\t\\\"name\\\": \\\"subscription\\\",\\n\\t\\t\\t\\t\\\"type\\\": \\\"record\\\",\\n\\t\\t\\t\\t\\\n                        \\\"fields\\\": [{\\n\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"subscriptionName\\\",\\n\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"string\\\"\\n\\t\\t\\\n                        \\t\\t\\t},\\n\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"administrativeState\\\",\\n\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"string\\\"\\\n                        \\n\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"fileBasedGP\\\",\\n\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"int\\\"\\\n                        \\n\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"fileLocation\\\",\\n\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"string\\\"\\\n                        \\n\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"measurementGroups\\\",\\n\\t\\t\\t\\t\\t\\t\\\"type\\\": {\\n\\\n                        \\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"array\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\\"items\\\": {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"Measurement_Groups_Type\\\"\\\n                        ,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"record\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\\"fields\\\": [{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\"\\\n                        : \\\"measurementGroup\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"Measurement_Group_Type\\\"\\\n                        ,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"record\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"fields\\\": [{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t\\\"name\\\": \\\"measurementTypes\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\n                        \\t\\t\\t\\\"type\\\": \\\"array\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"items\\\": {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"\\\n                        name\\\": \\\"Measurement_Types_Type\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"record\\\",\\n\\t\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"fields\\\": [{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"measurementType\\\",\\n\\t\\\n                        \\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"string\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}]\\n\\t\\t\\t\\t\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"managedObjectDNsBasic\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": {\\n\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"array\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"items\\\": {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t\\t\\\"name\\\": \\\"Managed_Object_Dns_Basic_Type\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"record\\\"\\\n                        ,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"fields\\\": [{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"DN\\\",\\n\\t\\\n                        \\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"string\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}]\\n\\t\\t\\t\\t\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t]\\n\\t\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t}]\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t]\\n\\t\\t\\t}\\n\\t\\\n                        \\t}\\n\\t]\\n}\"\n                  - key:\n                      name: SimpleIntType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: SimpleIntType\n                        version: 0.0.1\n                      schemaFlavour: Java\n                      schemaDefinition: java.lang.Integer\n                  - key:\n                      name: SimpleStringType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: SimpleStringType\n                        version: 0.0.1\n                      schemaFlavour: Java\n                      schemaDefinition: java.lang.String\n                  - key:\n                      name: SubscriptionStatusType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: SubscriptionStatusType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: |-\n                        {\n                            \"type\": \"record\",\n                            \"name\": \"ActivateSubscriptionStatus_Type\",\n                            \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n                            \"fields\": [\n                                {\n                                    \"name\": \"subscriptionName\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"nfName\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"changeType\",\n                                    \"type\": \"string\"\n                                },\n                                {\n                                    \"name\": \"message\",\n                                    \"type\": \"string\"\n                                }\n                            ]\n                        }\n                  - key:\n                      name: SubscriptionType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: SubscriptionType\n                        version: 0.0.1\n                      schemaFlavour: Avro\n                      schemaDefinition: \"{\\n\\t\\\"name\\\": \\\"subscription\\\",\\n\\t\\\"type\\\": \\\"record\\\",\\n\\t\\\"fields\\\": [{\\n\\t\\t\\\n                        \\t\\\"name\\\": \\\"subscriptionName\\\",\\n\\t\\t\\t\\\"type\\\": \\\"string\\\"\\n\\t\\t},\\n\\t\\t{\\n\\t\\t\\t\\\"name\\\": \\\"administrativeState\\\"\\\n                        ,\\n\\t\\t\\t\\\"type\\\": \\\"string\\\"\\n\\t\\t},\\n\\t\\t{\\n\\t\\t\\t\\\"name\\\": \\\"fileBasedGP\\\",\\n\\t\\t\\t\\\"type\\\": \\\"\\\n                        int\\\"\\n\\t\\t},\\n\\t\\t{\\n\\t\\t\\t\\\"name\\\": \\\"fileLocation\\\",\\n\\t\\t\\t\\\"type\\\": \\\"string\\\"\\n\\t\\t},\\n\\t\\t\\\n                        {\\n\\t\\t\\t\\\"name\\\": \\\"measurementGroups\\\",\\n\\t\\t\\t\\\"type\\\": {\\n\\t\\t\\t\\t\\\"type\\\": \\\"array\\\",\\n\\t\\t\\t\\\n                        \\t\\\"items\\\": {\\n\\t\\t\\t\\t\\t\\\"name\\\": \\\"Measurement_Groups_Type\\\",\\n\\t\\t\\t\\t\\t\\\"type\\\": \\\"record\\\",\\n\\\n                        \\t\\t\\t\\t\\t\\\"fields\\\": [{\\n\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"measurementGroup\\\",\\n\\t\\t\\t\\t\\t\\t\\\"type\\\": {\\n\\t\\\n                        \\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"Measurement_Group_Type\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"record\\\",\\n\\t\\t\\t\\t\\t\\\n                        \\t\\t\\\"fields\\\": [{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"measurementTypes\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\"\\\n                        : {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"array\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"items\\\": {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\n                        \\t\\t\\\"name\\\": \\\"Measurement_Types_Type\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"record\\\",\\n\\t\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t\\t\\t\\\"fields\\\": [{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"measurementType\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\\n                        \\t\\t\\t\\t\\t\\\"type\\\": \\\"string\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}]\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\n                        }\\n\\t\\t\\t\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"managedObjectDNsBasic\\\",\\n\\\n                        \\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"array\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"items\\\"\\\n                        : {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"Managed_Object_Dns_Basic_Type\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"\\\n                        type\\\": \\\"record\\\",\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"fields\\\": [{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"name\\\": \\\"DN\\\"\\\n                        ,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"string\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}]\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\\n                        \\t\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t]\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}]\\n\\t\\t\\t\\t}\\n\\t\\\n                        \\t\\t}\\n\\t\\t}\\n\\t]\\n}\"\n                  - key:\n                      name: UUIDType\n                      version: 0.0.1\n                    value:\n                      key:\n                        name: UUIDType\n                        version: 0.0.1\n                      schemaFlavour: Java\n                      schemaDefinition: java.util.UUID\n          engineParameters:\n            executorParameters:\n              JAVASCRIPT:\n                parameterClassName: org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters\n            contextParameters:\n              parameterClassName: org.onap.policy.apex.context.parameters.ContextParameters\n              schemaParameters:\n                Avro:\n                  parameterClassName: org.onap.policy.apex.plugins.context.schema.avro.AvroSchemaHelperParameters\n                Java:\n                  parameterClassName: org.onap.policy.apex.context.impl.schema.java.JavaSchemaHelperParameters\n                  jsonAdapters:\n                    Instant:\n                      adaptedClass: java.time.Instant\n                      adaptorClass: org.onap.policy.acm.util.Serialization$GsonInstantAdapter\n        eventInputParameters:\n          DCAEConsumer:\n            carrierTechnologyParameters:\n              carrierTechnology: RESTCLIENT\n              parameterClassName: org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters\n              parameters:\n                consumerPollTime: '50'\n                url: https://message-router:3905/events/unauthenticated.DCAE_CL_OUTPUT/cg1/sg1\n            eventProtocolParameters:\n              eventProtocol: JSON\n              parameters:\n                nameAlias: policyName\n            eventName: pmsh-operational-policy\n            eventNameFilter: pmsh-operational-policy\n          CDSRequestConsumer:\n            carrierTechnologyParameters:\n              carrierTechnology: RESTREQUESTOR\n              parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters\n              parameters:\n                url: http://10.10.10.184:30254/api/v1/execution-service/process\n                httpMethod: POST\n                restRequestTimeout: 2000\n                httpHeaders:\n                - - Authorization\n                  - Basic Y2NzZGthcHBzOmNjc2RrYXBwcw==\n            eventProtocolParameters:\n              eventProtocol: JSON\n            eventName: CDSCreateResponseEvent\n            eventNameFilter: CDSCreateResponseEvent\n            requestorMode: true\n            requestorPeer: CDSRequestProducer\n            requestorTimeout: 500\n          CDSDeleteRequestConsumer:\n            carrierTechnologyParameters:\n              carrierTechnology: RESTREQUESTOR\n              parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters\n              parameters:\n                url: http://10.10.10.184:30254/api/v1/execution-service/process\n                httpMethod: POST\n                restRequestTimeout: 2000\n                httpHeaders:\n                - - Authorization\n                  - Basic Y2NzZGthcHBzOmNjc2RrYXBwcw==\n            eventProtocolParameters:\n              eventProtocol: JSON\n            eventName: CDSDeleteResponseEvent\n            eventNameFilter: CDSDeleteResponseEvent\n            requestorMode: true\n            requestorPeer: CDSDeleteRequestProducer\n            requestorTimeout: 500\n          CDSReplyConsumer:\n            carrierTechnologyParameters:\n              carrierTechnology: RESTREQUESTOR\n              parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters\n              parameters:\n                url: https://message-router:3905/events/unauthenticated.PMSH_CL_INPUT\n                httpMethod: POST\n                restRequestTimeout: 2000\n            eventProtocolParameters:\n              eventProtocol: JSON\n            eventName: MRResponseEvent\n            eventNameFilter: MRResponseEvent\n            requestorMode: true\n            requestorPeer: CDSReplyProducer\n            requestorTimeout: 500\n        eventOutputParameters:\n          logOutputter:\n            carrierTechnologyParameters:\n              carrierTechnology: FILE\n              parameters:\n                fileName: /tmp/outputevents.log\n            eventProtocolParameters:\n              eventProtocol: JSON\n          StdOutOutputter:\n            carrierTechnologyParameters:\n              carrierTechnology: FILE\n              parameters:\n                standardIo: true\n            eventProtocolParameters:\n              eventProtocol: JSON\n          CDSRequestProducer:\n            carrierTechnologyParameters:\n              carrierTechnology: RESTREQUESTOR\n              parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters\n            eventProtocolParameters:\n              eventProtocol: JSON\n            eventNameFilter: CDSCreateSubscriptionRequestEvent\n            requestorMode: true\n            requestorPeer: CDSRequestConsumer\n            requestorTimeout: 500\n          CDSDeleteRequestProducer:\n            carrierTechnologyParameters:\n              carrierTechnology: RESTREQUESTOR\n              parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters\n            eventProtocolParameters:\n              eventProtocol: JSON\n            eventNameFilter: CDSDeleteSubscriptionRequestEvent\n            requestorMode: true\n            requestorPeer: CDSDeleteRequestConsumer\n            requestorTimeout: 500\n          CDSReplyProducer:\n            carrierTechnologyParameters:\n              carrierTechnology: RESTREQUESTOR\n              parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters\n            eventProtocolParameters:\n              eventProtocol: JSON\n            eventNameFilter: CDSResponseStatusEvent\n            requestorMode: true\n            requestorPeer: CDSReplyConsumer\n            requestorTimeout: 500",
                                        "options": {
                                                "raw": {
                                                        "language": "text"
                                        }
                                },
                                "url": {
-                                       "raw": "localhost:6969/onap/controlloop/v2/commission",
+                                       "raw": "localhost:6969/onap.acm.v2/commission",
                                        "host": [
                                                "localhost"
                                        ],
                                        "port": "6969",
                                        "path": [
                                                "onap",
-                                               "controlloop",
+                                               "acm",
                                                "v2",
                                                "commission"
                                        ]
@@ -67,7 +67,7 @@
                        "response": []
                },
                {
-                       "name": "Demo: Instantiation control loop definition (Full tosca try)",
+                       "name": "Demo: Instantiation automation composition definition (Full tosca try)",
                        "protocolProfileBehavior": {
                                "disabledSystemHeaders": {
                                        "content-type": true
                                ],
                                "body": {
                                        "mode": "raw",
-                                       "raw": "{\n    \"controlLoopList\": [\n        {\n            \"name\": \"PMSHInstance0\",\n            \"version\": \"1.0.1\",\n            \"definition\": {\n                \"name\": \"org.onap.domain.pmsh.PMSHControlLoopDefinition\",\n                \"version\": \"1.2.3\"\n            },\n            \"state\": \"UNINITIALISED\",\n            \"orderedState\": \"UNINITIALISED\",\n            \"description\": \"PMSH control loop instance 0\",\n            \"elements\": {\n                \"709c62b3-8918-41b9-a747-d21eb79c6c20\": {\n                    \"id\": \"709c62b3-8918-41b9-a747-d21eb79c6c20\",\n                    \"definition\": {\n                        \"name\": \"org.onap.domain.pmsh.PMSH_DCAEMicroservice\",\n                        \"version\": \"1.2.3\"\n                    },\n                    \"participantType\": {\n                        \"name\": \"org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant\",\n                        \"version\": \"2.3.4\"\n                    },\n                    \"state\": \"UNINITIALISED\",\n                    \"orderedState\": \"UNINITIALISED\",\n                    \"description\": \"DCAE Control Loop Element for the PMSH instance 0 control loop\"\n                },\n                \"709c62b3-8918-41b9-a747-d21eb79c6c21\": {\n                    \"id\": \"709c62b3-8918-41b9-a747-d21eb79c6c21\",\n                    \"definition\": {\n                        \"name\": \"org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement\",\n                        \"version\": \"1.2.3\"\n                    },\n                    \"participantType\": {\n                        \"name\": \"org.onap.policy.controlloop.PolicyControlLoopParticipant\",\n                        \"version\": \"2.3.1\"\n                    },\n                    \"state\": \"UNINITIALISED\",\n                    \"orderedState\": \"UNINITIALISED\",\n                    \"description\": \"Monitoring Policy Control Loop Element for the PMSH instance 0 control loop\"\n                },\n                \"709c62b3-8918-41b9-a747-d21eb79c6c22\": {\n                    \"id\": \"709c62b3-8918-41b9-a747-d21eb79c6c22\",\n                    \"definition\": {\n                        \"name\": \"org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement\",\n                        \"version\": \"1.2.3\"\n                    },\n                    \"participantType\": {\n                        \"name\": \"org.onap.policy.controlloop.PolicyControlLoopParticipant\",\n                        \"version\": \"2.3.1\"\n                    },\n                    \"state\": \"UNINITIALISED\",\n                    \"orderedState\": \"UNINITIALISED\",\n                    \"description\": \"Operational Policy Control Loop Element for the PMSH instance 0 control loop\"\n                }\n            }\n        }\n    ]\n}",
+                                       "raw": "{\n    \"controlLoopList\": [\n        {\n            \"name\": \"PMSHInstance0\",\n            \"version\": \"1.0.1\",\n            \"definition\": {\n                \"name\": \"org.onap.domain.pmsh.PMSHControlLoopDefinition\",\n                \"version\": \"1.2.3\"\n            },\n            \"state\": \"UNINITIALISED\",\n            \"orderedState\": \"UNINITIALISED\",\n            \"description\": \"PMSH automation composition instance 0\",\n            \"elements\": {\n                \"709c62b3-8918-41b9-a747-d21eb79c6c20\": {\n                    \"id\": \"709c62b3-8918-41b9-a747-d21eb79c6c20\",\n                    \"definition\": {\n                        \"name\": \"org.onap.domain.pmsh.PMSH_DCAEMicroservice\",\n                        \"version\": \"1.2.3\"\n                    },\n                    \"participantType\": {\n                        \"name\": \"org.onap.dcae.acm.DCAEMicroserviceControlLoopParticipant\",\n                        \"version\": \"2.3.4\"\n                    },\n                    \"state\": \"UNINITIALISED\",\n                    \"orderedState\": \"UNINITIALISED\",\n                    \"description\": \"DCAE Control Loop Element for the PMSH instance 0 automation composition\"\n                },\n                \"709c62b3-8918-41b9-a747-d21eb79c6c21\": {\n                    \"id\": \"709c62b3-8918-41b9-a747-d21eb79c6c21\",\n                    \"definition\": {\n                        \"name\": \"org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement\",\n                        \"version\": \"1.2.3\"\n                    },\n                    \"participantType\": {\n                        \"name\": \"org.onap.policy.acm.PolicyControlLoopParticipant\",\n                        \"version\": \"2.3.1\"\n                    },\n                    \"state\": \"UNINITIALISED\",\n                    \"orderedState\": \"UNINITIALISED\",\n                    \"description\": \"Monitoring Policy Control Loop Element for the PMSH instance 0 automation composition\"\n                },\n                \"709c62b3-8918-41b9-a747-d21eb79c6c22\": {\n                    \"id\": \"709c62b3-8918-41b9-a747-d21eb79c6c22\",\n                    \"definition\": {\n                        \"name\": \"org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement\",\n                        \"version\": \"1.2.3\"\n                    },\n                    \"participantType\": {\n                        \"name\": \"org.onap.policy.acm.PolicyControlLoopParticipant\",\n                        \"version\": \"2.3.1\"\n                    },\n                    \"state\": \"UNINITIALISED\",\n                    \"orderedState\": \"UNINITIALISED\",\n                    \"description\": \"Operational Policy Control Loop Element for the PMSH instance 0 automation composition\"\n                }\n            }\n        }\n    ]\n}",
                                        "options": {
                                                "raw": {
                                                        "language": "json"
                                        }
                                },
                                "url": {
-                                       "raw": "localhost:6969/onap/controlloop/v2/instantiation",
+                                       "raw": "localhost:6969/onap.acm.v2/instantiation",
                                        "host": [
                                                "localhost"
                                        ],
                                        "port": "6969",
                                        "path": [
                                                "onap",
-                                               "controlloop",
+                                               "acm",
                                                "v2",
                                                "instantiation"
                                        ]
                        "response": []
                },
                {
-                       "name": "Demo: Instantiation control loop definition Command",
+                       "name": "Demo: Instantiation automation composition definition Command",
                        "protocolProfileBehavior": {
                                "disabledSystemHeaders": {
                                        "content-type": true
                                        }
                                },
                                "url": {
-                                       "raw": "localhost:6969/onap/controlloop/v2/instantiation/command",
+                                       "raw": "localhost:6969/onap.acm.v2/instantiation/command",
                                        "host": [
                                                "localhost"
                                        ],
                                        "port": "6969",
                                        "path": [
                                                "onap",
-                                               "controlloop",
+                                               "acm",
                                                "v2",
                                                "instantiation",
                                                "command"
                        "response": []
                },
                {
-                       "name": "Demo: Get instantiated control loops",
+                       "name": "Demo: Get instantiated automation compositions",
                        "request": {
                                "auth": {
                                        "type": "basic",
                                "method": "GET",
                                "header": [],
                                "url": {
-                                       "raw": "localhost:6969/onap/controlloop/v2/instantiation",
+                                       "raw": "localhost:6969/onap.acm.v2/instantiation",
                                        "host": [
                                                "localhost"
                                        ],
                                        "port": "6969",
                                        "path": [
                                                "onap",
-                                               "controlloop",
+                                               "acm",
                                                "v2",
                                                "instantiation"
                                        ]
index f02fbdd..12b261f 100644 (file)
@@ -1,21 +1,21 @@
 {
-    "name": "ControlLoopParticipantGroup",
+    "name": "AutomationCompositionParticipantGroup",
     "intermediaryParameters": {
         "name": "Participant parameters",
         "reportingTimeInterval": 120000,
         "description": "Participant Description",
         "participantType":{
-            "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+            "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
             "version":"2.3.1"
         },
         "participantId": {
             "name": "org.onap.PM_Policy",
             "version": "1.0.0"
         },
-        "clampControlLoopTopics": {
+        "automationCompositionTopics": {
             "topicSources": [
                 {
-                    "topic": "POLICY-CLRUNTIME-PARTICIPANT",
+                    "topic": "POLICY-ACRUNTIME-PARTICIPANT",
                     "servers": [
                         "localhost"
                     ],
@@ -25,7 +25,7 @@
             ],
             "topicSinks": [
                 {
-                    "topic": "POLICY-CLRUNTIME-PARTICIPANT",
+                    "topic": "POLICY-ACRUNTIME-PARTICIPANT",
                     "servers": [
                         "localhost"
                     ],
index fd8948a..7424568 100644 (file)
@@ -1,5 +1,5 @@
 {
-    "name": "ControlLoopRuntimeGroup",
+    "name": "AutomationCompositionRuntimeGroup",
     "restServerParameters": {
         "host": "0.0.0.0",
         "port": 6969,
@@ -23,7 +23,7 @@
         "name": "PolicyProviderParameterGroup",
         "implementation": "org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl",
         "databaseDriver": "org.mariadb.jdbc.Driver",
-        "databaseUrl": "jdbc:mariadb://localhost:3306/controlloop",
+        "databaseUrl": "jdbc:mariadb://localhost:3306/acm",
         "databaseUser": "policy",
         "databasePassword": "P01icY",
         "persistenceUnit": "CommissioningMariaDb"
@@ -31,7 +31,7 @@
     "topicParameterGroup": {
         "topicSources": [
             {
-                "topic": "POLICY-CLRUNTIME-PARTICIPANT",
+                "topic": "POLICY-ACRUNTIME-PARTICIPANT",
                 "servers": [
                     "localhost"
                 ],
@@ -41,7 +41,7 @@
         ],
         "topicSinks": [
             {
-                "topic": "POLICY-CLRUNTIME-PARTICIPANT",
+                "topic": "POLICY-ACRUNTIME-PARTICIPANT",
                 "servers": [
                     "localhost"
                 ],
diff --git a/common/src/test/resources/examples/controlloop/original/cloop_DCAE_VES_TCA_substitution.yaml b/common/src/test/resources/examples/controlloop/original/cloop_DCAE_VES_TCA_substitution.yaml
deleted file mode 100644 (file)
index 96ea133..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-# ============LICENSE_START=======================================================
-# Copyright (C) 2021 Nordix Foundation.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# SPDX-License-Identifier: Apache-2.0
-# ============LICENSE_END=========================================================
-
-tosca_definitions_version: tosca_simple_yaml_1_3
-
-imports:
-  - cloop_base_types.yaml
-  - cloop_dcae_types.yaml
-
-topology_template:
-  inputs:
-    some_property_input:
-      type: string
-
-  substitution_mappings:
-    node_type: org.onap.DCAE_VES_TCA
-    properties:
-      some_property: { get_input: some_property_input }
-    capabilities:
-      VES-5.28.4-publisher: [ node1_VES_Collector, VES-5.28.4-publisher ]
-      VES-7.30.1-publisher: [ node1_VES_Collector, VES-7.30.1-publisher ]
-      TCA-handle-out-publisher: [ node2_TCA_GEN_2, TCA-handle-out-publisher ]
-      VES_specification-subscriber: [ node2_TCA_GEN_2, VES_specification-subscriber ]
-
-  node_templates:
-  ################################################################################
-  #alt1: without relay
-
-  node1_VES_Collector:
-    type: org.onap.VESCollector
-
-  node2_TCA_GEN_2:
-    type:  org.onap.TCA_GEN_2
-    requirements:
-      - receive:
-          capability: VES-5.28.4-publisher
-          node: node1_VES_Collector
-          relationship:
-            type: org.onap.PropagateEvent
-            properties:
-              config-keys: [ ves-measurement ]
-
-
-  ################################################################################
-  #alt2: with relay
-
-  node1_VES_Collector:
-    type: org.onap.VESCollector
-
-  node2_TCA_GEN_2:
-    type:  org.onap.TCA_GEN_2
-
-  node3_Relay:
-    type: org.onap.EventRelay
-    properties:
-      event_format: "VES_specification"
-      event_format_version: "5.28.4"
-      supported_carrier_protocols: [{ DMAAP_message_router: DMAAP_message_router }]
-      supported_data_formats: [{ JSON: JSON }]
-    requirements:
-      - receive:
-          node: node1_VES_Collector
-          properties:
-            config_keys: [ ves-measurement ]
-      - send:
-          node: node2_TCA_GEN_2
-          properties:
-            config_keys: [ ves-measurement ]
diff --git a/common/src/test/resources/examples/controlloop/original/cloop_base_types.yaml b/common/src/test/resources/examples/controlloop/original/cloop_base_types.yaml
deleted file mode 100644 (file)
index 4f29e56..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-# ============LICENSE_START=======================================================
-# Copyright (C) 2021 Nordix Foundation.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# SPDX-License-Identifier: Apache-2.0
-# ============LICENSE_END=========================================================
-
-tosca_definitions_version: tosca_simple_yaml_1_2
-
-capability_types:
-  #producer capability type
-  org.onap.EventProducer:
-    derived_from: tosca.capabilities.Root
-    properties:
-      carrier_protocol_type:
-        type: string
-        required: true
-        constraints:
-          valid_values: [ DMAAP_message_router,  REST ]
-          #all valid values should be added here
-      data_format:
-        type: string
-        required: true
-        constraints:
-          valid_values: [ JSON, YAML, JMS ]
-          #all valid values should be added here
-      event_format:
-        type: string
-        required: true
-        #examples for event_format: Ves_specification, etc.
-      event_format_version:
-        type: string
-        #examples for event_format_version: 5.28.4, 7.30.1, etc.
-      config_keys:
-        type: list
-        required: false
-        entry_schema:
-          type: string
-          constraints:
-            #valid_values: [ ]
-              #all valid values should be added here
-              #if not specified, events of any config key may be generated
-              #examples for config_key: ves-measurement, ves-syslog, tca_handle_out, etc.
-
-
-  #consumer capability type
-  org.onap.EventConsumer:
-    derived_from: tosca.capabilities.Root
-    properties:
-      carrier_protocol_type:
-        type: string
-        required: true
-        constraints:
-          valid_values: [ DMAAP_message_router, REST ]
-          #all valid values should be added here
-      data_format:
-        type: string
-        required: true
-        constraints:
-          valid_values: [ JSON, YAML, JMS ]
-          #all valid values should be added here
-      event_format:
-        type: string
-        required: true
-        #examples for event_format: Ves_specification, LinkUp, VnfConfigured, etc.
-      event_format_version:
-        type: string
-        #examples for event_format_version: 5.28.4, 7.30.1, etc.
-      config_keys:
-        type: list
-        required: false
-        entry_schema:
-          type: string
-          constraints:
-            #valid_values: [ ]
-              #all valid values should be added here
-              #if not specified, events of any config key may be generated
-              #examples for config_key: ves-measurement, ves-syslog, tca_handle_out, etc.
-
-
-relationship_types:
-  #the relationship type used on requirements to org.onap.EventProducer and org.onap.EventConsumer capabilities
-  org.onap.PropagateEvent:
-    derived_from: tosca.relationships.Root
-    properties:
-    config_keys:
-      type: list
-      required: false
-      description: >
-        Filters events by specific config_keys to be transferred by this relationship.
-        That is, any event with a specific config_key found in the list is transferred.
-        If list is not defined or is empty, events with all config_keys are transferred.
-      entry_schema: string
-
-
-
-node_types:
-  #base app node type
-  org.onap.APP:
-    derived_from: tosca.nodes.Root
-    properties:
-      application_name:
-        type: string
-        description: Human readable name for the application Product
-        required: false
-      provider:
-        type: string
-        description: Provider of the application and of the descriptor
-        required: true
-      application_version:
-        type: string
-        description: Software version of the application
-        required: true
-      blueprint_id:
-        type: string
-        description: A reference to the app blueprint
-      monitoring_policy:
-        type: string
-        required: false
-        description: A reference to the monitoring policy
-    requirements:
-      - receive:
-          capability: org.onap.EventProducer
-          relationship: org.onap.PropagateEvent
-          occurrences: [0, UNBOUNDED]
-      - send:
-          capability: org.onap.EventConsumer
-          relationship: org.onap.PropagateEvent
-          occurrences: [0, UNBOUNDED]
-
-  #the event relay node type
-  org.onap.EventRelay:
-    derived_from: tosca.nodes.Root
-    properties:
-      event_format:
-        type: string
-        required: true
-        #examples for event_format: Ves_specification, etc.
-      event_format_version:
-        type: string
-        required: true
-        #examples for event_format_version: 5.28.4, 7.30.1, etc.
-      config_keys:
-        type: list
-        required: false
-        entry_schema:
-          type: string
-          constraints:
-            #valid_values: [ ]
-              #all valid values should be added here
-              #if not specified, events of any config key is relayed
-              #examples for config_key: ves-measurement, ves-syslog, tca_handle_out, etc.
-      supported_carrier_protocols:
-        type: map
-        required: true
-        description: >
-          A map describing supported carrier protocols and translations. The
-          tuples define what protocol combinations are supported on the producer
-          and consumer side: e.g. { REST: REST, DMAAP: REST, DMAAP: DMAAP}
-        key_schema:
-          type: string
-          constraints:
-            valid_values: [ DMAAP_message_router,  REST ]
-            #all valid values should be added here
-        entry_schema:
-          type: string
-          constraints:
-            valid_values: [ DMAAP_message_router,  REST ]
-            #all valid values should be added here
-      supported_data_formats:
-        type: map
-        required: true
-        description: >
-          Is a map describing supported data formats and translation. The tuples
-          define what protocol combinations are supported on the producer and
-          consumer side: e.g. { JSON: JSON, JMS: JSON, YAML:YAML }
-        key_schema:
-          type: string
-          constraints:
-            valid_values: [ JSON,  JMS, YAML, etc ]
-            #all valid values should be added here
-        entry_schema:
-          type: string
-          constraints:
-            valid_values: [ JSON,  JMS, YAML, etc ]
-            #all valid values should be added here
-    requirements:
-      - receive:
-          capability: org.onap.EventProducer
-          relationship: org.onap.PropagateEvent
-          occurrences: [1, UNBOUNDED]
-      - send:
-          capability: org.onap.EventConsumer
-          relationship: org.onap.PropagateEvent
-          occurrences: [1, UNBOUNDED]
-
-
-
-
diff --git a/common/src/test/resources/examples/controlloop/original/cloop_dcae_example.yaml b/common/src/test/resources/examples/controlloop/original/cloop_dcae_example.yaml
deleted file mode 100644 (file)
index 4629f6f..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-# ============LICENSE_START=======================================================
-# Copyright (C) 2021 Nordix Foundation.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# SPDX-License-Identifier: Apache-2.0
-# ============LICENSE_END=========================================================
-
-tosca_definitions_version: tosca_simple_yaml_1_3
-
-imports:
-  - cloop_base_types.yaml
-  - cloop_dcae_types.yaml
-  - cloop_other_types.yaml
-
-topology_template:
-  node_templates:
-
-    node1_DCAE_VES_TCA:
-      type: org.onap.DCAE_VES_TCA
-      directives:
-        - substitute
-
-    node2_PolicyFramework:
-      type: org.onap.ApexPolicyFramework
-      requirements:
-        - receive:
-            capability: TCA-handle-out-publisher
-            node: node1_DCAE_VES_TCA
-            relationship:
-              properties:
-                config_keys: [ ves-measurement ]
-        - send:
-            capability: SelfService
-            node: org.onap.CDS
-            relationship:
-              properties:
-                config_keys: [ ves-measurement ]
-
-  #if this closed loop to subscribe to other events via the VesCollector, should we not add that?
diff --git a/common/src/test/resources/examples/controlloop/original/cloop_dcae_types.yaml b/common/src/test/resources/examples/controlloop/original/cloop_dcae_types.yaml
deleted file mode 100644 (file)
index 5f96cd5..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-# ============LICENSE_START=======================================================
-# Copyright (C) 2021 Nordix Foundation.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# SPDX-License-Identifier: Apache-2.0
-# ============LICENSE_END=========================================================
-
-tosca_definitions_version: tosca_simple_yaml_1_3
-
-imports:
-  - cloop_types.yaml
-
-node_types:
-
-  #node type for VES_Collector
-  org.onap.VES_Collector:
-    derived_from: org.onap.APP
-    capabilities:
-      VES-5.28.4-publisher:
-        type: org.onap.EventProducer
-        occurrences: [ 0, UNBOUNDED ]
-        properties:
-          carrier_protocol_type: "DMAAP_message_router"
-          data_format: "JSON"
-          event_format: "VES_specification"
-          event_format_version: "5.28.4"
-          config_keys:
-            - "ves-fault"
-            - "ves-measurement"
-            - "ves-syslog"
-            - "ves-heartbeat"
-            - "ves-other"
-            - "ves-mobileflow"
-            - "ves-statechange"
-            - "ves-thresholdCrossingAlert"
-            - "ves-voicequality"
-            - "ves-sipsignaling"
-      VES-7.30.1-publisher:
-        type: org.onap.EventProducer
-        occurrences: [ 0, UNBOUNDED ]
-        properties:
-          carrier_protocol_type: "DMAAP_message_router"
-          data_format: "JSON"
-          event_format: "VES_specification"
-          event_format_version: "7.30.1"
-          config_keys:
-            - "ves-fault"
-            - "ves-pnfRegistration"
-            - "ves-notification"
-            - "ves-perf3gpp"
-
-  #node type for TCA_GEN_2
-  org.onap.TCA_GEN_2:
-    derived_from: org.onap.APP
-    capabilities:
-      TCA-handle-out-publisher:
-        type: org.onap.EventProducer
-        occurrences: [ 0, UNBOUNDED ]
-        properties:
-          carrier_protocol_type: "DMAAP_message_router"
-          data_format: "JSON"
-          event_format: "DCAE_CL_Output"
-          event_format_version: "1.0.1"
-          config_keys: [ "tca_handle_out" ]
-      VES_specification-subscriber:
-        type: org.onap.EventConsumer
-        occurrences: [ 0, UNBOUNDED ]
-        properties:
-          carrier_protocol_type: "DMAAP_message_router"
-          data_format: "JSON"
-          event_format: "VES_specification"
-          event_format_version: "5.28.4"
-          config_keys: [ "tca_handle_in" ]
-
-
-
-  #node type for the composed VES_Collector and TCA_GEN_2
-  org.onap.DCAE_VES_TCA:
-    derived_from: org.onap.APP
-    capabilities:
-      VES-5.28.4-publisher:
-        type: org.onap.EventProducer
-        occurrences: [ 0, UNBOUNDED ]
-        properties:
-          carrier_protocol_type: "DMAAP_message_router"
-          data_format: "JSON"
-          event_format: "VES_specification"
-          event_format_version: "5.28.4"
-          config_keys:
-            - "ves-fault"
-            - "ves-measurement"
-            - "ves-syslog"
-            - "ves-heartbeat"
-            - "ves-other"
-            - "ves-mobileflow"
-            - "ves-statechange"
-            - "ves-thresholdCrossingAlert"
-            - "ves-voicequality"
-            - "ves-sipsignaling"
-      VES-7.30.1-publisher:
-        type: org.onap.EventProducer
-        occurrences: [ 0, UNBOUNDED ]
-        properties:
-          carrier_protocol_type: "DMAAP_message_router"
-          data_format: "JSON"
-          event_format: "VES_specification"
-          event_format_version: "7.30.1"
-          config_keys:
-            - "ves-pnfRegistration"
-            - "ves-notification"
-            - "ves-perf3gpp"
-      TCA-handle-out-publisher:
-        type: org.onap.EventProducer
-        occurrences: [ 0, UNBOUNDED ]
-        properties:
-          carrier_protocol_type: "DMAAP_message_router"
-          data_format: "JSON"
-          event_format: "DCAE_CL_Output"
-          event_format_version: "1.0.1"
-          config_keys: [ "tca_handle_out" ]
-      VES_specification-subscriber:
-        type: org.onap.EventConsumer
-        occurrences: [ 0, UNBOUNDED ]
-        properties:
-          carrier_protocol_type: "DMAAP_message_router"
-          data_format: "JSON"
-          event_format: "VES_specification"
-          event_format_version: "5.28.4"
-          config_keys: [ "tca_handle_in" ]
diff --git a/common/src/test/resources/examples/controlloop/original/cloop_other_types.yaml b/common/src/test/resources/examples/controlloop/original/cloop_other_types.yaml
deleted file mode 100644 (file)
index d743f49..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-# ============LICENSE_START=======================================================
-# Copyright (C) 2021 Nordix Foundation.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# SPDX-License-Identifier: Apache-2.0
-# ============LICENSE_END=========================================================
-
-tosca_definitions_version: tosca_simple_yaml_1_2
-
-imports:
-  - cloop_base_types.yaml
-
-node_types:
-  #node type for Policy
-  org.onap.PolicyFramework:
-    derived_from: org.onap.APP
-
-  #node type for Apex Policy
-  org.onap.ApexPolicyFramework:
-    derived_from: org.onap.PolicyFramework
-
-  #node type for CDS
-  org.onap.CDS:
-    derived_from: org.onap.APP
-    capabilities:
-      #consumer capability for CDS for events of type ResourceAndTemplate management API
-      ResourceAndTemplateManagement:
-        type: org.onap.EventConsumer
-        properties:
-          carrier_protocol_type: "DMAAP_message_router"
-          data_format: "JSON"
-          event_format: "ResourceAndTemplate"
-          event_format_version: "x.xx.x"
-        occurrences: [ 0, UNBOUNDED ]
-      #consumer capability for CDS for events of type SelfService API
-      SelfService:
-        type: org.onap.EventConsumer
-        properties:
-          carrier_protocol_type: "DMAAP_message_router"
-          data_format: "JSON"
-          event_format: "SelfService"
-          event_format_version: "x.xx.x"
-        occurrences: [ 0, UNBOUNDED ]
-      #producer capability for CDS for events of type PNFControl
-      PNFcontrolEventsProducer:
-        type: org.onap.EventProducer
-        properties:
-          carrier_protocol_type: "DMAAP_message_router"
-          data_format: "JSON"
-          event_format: "PNFcontrol"
-          event_format_version: "x.xx.x"
-        occurrences: [ 0, UNBOUNDED ]
diff --git a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoopState.java b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoopState.java
deleted file mode 100644 (file)
index ff0d553..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
-
-public enum ControlLoopState {
-    /**
-     * The control loop or control loop element is not initialised on participants, it does not exist on participants.
-     */
-    UNINITIALISED,
-    /**
-     * The control loop or control loop element is changing from unitialised to passive, it is being initialised onto
-     * participants.
-     */
-    UNINITIALISED2PASSIVE,
-    /**
-     * The control loop or control loop element is initialised on the participants but is passive, that is, it is not
-     * handling control loop messages yet.
-     */
-    PASSIVE,
-    /**
-     * The control loop or control loop element is changing from passive to running, the participants are preparing to
-     * execute control loops.
-     */
-    PASSIVE2RUNNING,
-    /** The control loop or control loop element is running and is executing control loops. */
-    RUNNING,
-    /**
-     * The control loop or control loop element is completing execution of current control loops but will not start
-     * running any more control loops and will become passive.
-     */
-    RUNNING2PASSIVE,
-    /**
-     * The control loop or control loop element is changing from passive to unitialised, the control loop is being
-     * removed from participants.
-     */
-    PASSIVE2UNINITIALISED;
-
-    public boolean equalsControlLoopOrderedState(final ControlLoopOrderedState controlLoopOrderedState)  {
-        return this.name().equals(controlLoopOrderedState.name());
-    }
-
-    public ControlLoopOrderedState asOrderedState() {
-        return ControlLoopOrderedState.valueOf(this.name());
-    }
-}
diff --git a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ControlLoopProvider.java b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ControlLoopProvider.java
deleted file mode 100644 (file)
index a1b1045..0000000
+++ /dev/null
@@ -1,279 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import javax.persistence.EntityNotFoundException;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.Status;
-import lombok.AllArgsConstructor;
-import lombok.NonNull;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ControlLoopRepository;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ToscaNodeTemplateRepository;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ToscaNodeTemplatesRepository;
-import org.onap.policy.models.base.PfConceptKey;
-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;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaTypedEntityFilter;
-import org.onap.policy.models.tosca.simple.concepts.JpaToscaNodeTemplate;
-import org.onap.policy.models.tosca.simple.concepts.JpaToscaNodeTemplates;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * This class provides information on control loop concepts in the database to callers.
- */
-@Service
-@Transactional
-@AllArgsConstructor
-public class ControlLoopProvider {
-
-    private final ControlLoopRepository controlLoopRepository;
-    private final ToscaNodeTemplateRepository toscaNodeTemplateRepository;
-    private final ToscaNodeTemplatesRepository toscaNodeTemplatesRepository;
-
-    /**
-     * Get Control Loop.
-     *
-     * @param controlLoopId the ID of the control loop to get
-     * @return the control loop found
-     * @throws PfModelException on errors getting the control loop
-     */
-    @Transactional(readOnly = true)
-    public ControlLoop getControlLoop(final ToscaConceptIdentifier controlLoopId) throws PfModelException {
-        try {
-            return controlLoopRepository.getById(controlLoopId.asConceptKey()).toAuthorative();
-        } catch (EntityNotFoundException e) {
-            throw new PfModelException(Status.NOT_FOUND, "ControlLoop not found", e);
-        }
-    }
-
-    /**
-     * Find Control Loop by controlLoopId.
-     *
-     * @param name the name of the control loop to get, null to get all control loops
-     * @param version the version of the control loop to get, null to get all control loops
-     * @return the control loop found
-     * @throws PfModelException on errors getting the control loop
-     */
-    @Transactional(readOnly = true)
-    public Optional<ControlLoop> findControlLoop(@NonNull final String name, @NonNull final String version)
-            throws PfModelException {
-        return findControlLoop(new PfConceptKey(name, version));
-    }
-
-    /**
-     * Find Control Loop by controlLoopId.
-     *
-     * @param controlLoopId the ID of the control loop to get
-     * @return the control loop found
-     * @throws PfModelException on errors getting the control loop
-     */
-    @Transactional(readOnly = true)
-    public Optional<ControlLoop> findControlLoop(final ToscaConceptIdentifier controlLoopId) throws PfModelException {
-        return findControlLoop(controlLoopId.asConceptKey());
-    }
-
-    private Optional<ControlLoop> findControlLoop(@NonNull final PfConceptKey key) throws PfModelException {
-        try {
-            return controlLoopRepository.findById(key).map(JpaControlLoop::toAuthorative);
-        } catch (IllegalArgumentException e) {
-            throw new PfModelException(Status.BAD_REQUEST, "Not valid parameter", e);
-        }
-    }
-
-    /**
-     * Save Control Loop.
-     *
-     * @param controlLoop the control loop to update
-     * @return the updated control loop
-     * @throws PfModelException on errors updating the control loop
-     */
-    public ControlLoop saveControlLoop(final ControlLoop controlLoop) throws PfModelException {
-        try {
-            var result = controlLoopRepository
-                    .save(ProviderUtils.getJpaAndValidate(controlLoop, JpaControlLoop::new, "control loop"));
-
-            // Return the saved participant
-            return result.toAuthorative();
-        } catch (IllegalArgumentException e) {
-            throw new PfModelException(Status.BAD_REQUEST, "Error in save controlLoop", e);
-        }
-    }
-
-    /**
-     * Get All Control Loops.
-     *
-     * @return all control loops found
-     * @throws PfModelException on errors getting control loops
-     */
-    @Transactional(readOnly = true)
-    public List<ControlLoop> getControlLoops() throws PfModelException {
-
-        return ProviderUtils.asEntityList(controlLoopRepository.findAll());
-    }
-
-    /**
-     * Get Control Loops.
-     *
-     * @param name the name of the control loop to get, null to get all control loops
-     * @param version the version of the control loop to get, null to get all control loops
-     * @return the control loops found
-     * @throws PfModelException on errors getting control loops
-     */
-    @Transactional(readOnly = true)
-    public List<ControlLoop> getControlLoops(final String name, final String version) throws PfModelException {
-
-        return ProviderUtils.asEntityList(controlLoopRepository.getFiltered(JpaControlLoop.class, name, version));
-    }
-
-    /**
-     * Saves control loops.
-     *
-     * @param controlLoops a specification of the control loops to create
-     * @return the control loops created
-     * @throws PfModelException on errors creating control loops
-     */
-    public List<ControlLoop> saveControlLoops(@NonNull final List<ControlLoop> controlLoops) throws PfModelException {
-        try {
-            var result = controlLoopRepository
-                    .saveAll(ProviderUtils.getJpaAndValidateList(controlLoops, JpaControlLoop::new, "control loops"));
-
-            // Return the saved participant
-            return ProviderUtils.asEntityList(result);
-        } catch (IllegalArgumentException e) {
-            throw new PfModelException(Status.BAD_REQUEST, "Error in save ControlLoops", e);
-        }
-    }
-
-    /**
-     * Saves Instance Properties to the database.
-     *
-     * @param serviceTemplate the service template
-     * @return a Map of tosca node templates
-     */
-    public Map<String, ToscaNodeTemplate> saveInstanceProperties(ToscaServiceTemplate serviceTemplate) {
-        Map<String, ToscaNodeTemplate> savedNodeTemplates = new HashMap<>();
-
-        var jpaToscaNodeTemplates = new JpaToscaNodeTemplates();
-        jpaToscaNodeTemplates.fromAuthorative(List.of(serviceTemplate.getToscaTopologyTemplate().getNodeTemplates()));
-
-        toscaNodeTemplatesRepository.save(jpaToscaNodeTemplates);
-        serviceTemplate.getToscaTopologyTemplate().getNodeTemplates().forEach(savedNodeTemplates::put);
-
-        return savedNodeTemplates;
-    }
-
-    /**
-     * Delete a control loop.
-     *
-     * @param name the name of the control loop to delete
-     * @param version the version of the control loop to delete
-     * @return the control loop deleted
-     * @throws PfModelException on errors deleting the control loop
-     */
-    public ControlLoop deleteControlLoop(@NonNull final String name, @NonNull final String version)
-            throws PfModelException {
-
-        var controlLoopKey = new PfConceptKey(name, version);
-        var jpaDeleteControlLoop = controlLoopRepository.findById(controlLoopKey);
-
-        if (jpaDeleteControlLoop.isEmpty()) {
-            String errorMessage =
-                    "delete of control loop \"" + controlLoopKey.getId() + "\" failed, control loop does not exist";
-            throw new PfModelException(Response.Status.BAD_REQUEST, errorMessage);
-        }
-
-        controlLoopRepository.deleteById(controlLoopKey);
-
-        return jpaDeleteControlLoop.get().toAuthorative();
-    }
-
-    /**
-     * Deletes Instance Properties on the database.
-     *
-     * @param filteredToscaNodeTemplateMap filtered node templates map to delete
-     * @param filteredToscaNodeTemplateList filtered node template list to delete
-     */
-    public void deleteInstanceProperties(Map<String, ToscaNodeTemplate> filteredToscaNodeTemplateMap,
-            List<ToscaNodeTemplate> filteredToscaNodeTemplateList) {
-
-        var jpaToscaNodeTemplates = new JpaToscaNodeTemplates();
-        jpaToscaNodeTemplates.fromAuthorative(List.of(filteredToscaNodeTemplateMap));
-
-        toscaNodeTemplatesRepository.save(jpaToscaNodeTemplates);
-
-        filteredToscaNodeTemplateList.forEach(template -> {
-            var jpaToscaNodeTemplate = new JpaToscaNodeTemplate(template);
-
-            toscaNodeTemplateRepository.delete(jpaToscaNodeTemplate);
-        });
-    }
-
-    /**
-     * Get All Node Templates.
-     *
-     * @return the list of node templates found
-     * @throws PfModelException on errors getting node templates
-     */
-    @Transactional(readOnly = true)
-    public List<ToscaNodeTemplate> getAllNodeTemplates() {
-        return ProviderUtils.asEntityList(toscaNodeTemplateRepository.findAll());
-    }
-
-    /**
-     * Get Node Templates.
-     *
-     * @param name the name of the node template to get, null to get all node templates
-     * @param version the version of the node template to get, null to get all node templates
-     * @return the node templates found
-     * @throws PfModelException on errors getting node templates
-     */
-    @Transactional(readOnly = true)
-    public List<ToscaNodeTemplate> getNodeTemplates(final String name, final String version) {
-        return ProviderUtils
-                .asEntityList(toscaNodeTemplateRepository.getFiltered(JpaToscaNodeTemplate.class, name, version));
-    }
-
-    /**
-     * Get filtered node templates.
-     *
-     * @param filter the filter for the node templates to get
-     * @return the node templates found
-     * @throws PfModelException on errors getting node templates
-     */
-    @Transactional(readOnly = true)
-    public List<ToscaNodeTemplate> getFilteredNodeTemplates(
-            @NonNull final ToscaTypedEntityFilter<ToscaNodeTemplate> filter) {
-
-        return filter.filter(ProviderUtils.asEntityList(toscaNodeTemplateRepository
-                .getFiltered(JpaToscaNodeTemplate.class, filter.getName(), filter.getVersion())));
-    }
-}
diff --git a/models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantMessageType.java b/models/src/main/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/participant/ParticipantMessageType.java
deleted file mode 100644 (file)
index 62b8d20..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
-
-/**
- * Class to hold the possible values for the type of participant messages.
- */
-public enum ParticipantMessageType {
-
-    /**
-     * Used by participants to report status to the control loop runtime.
-     */
-    PARTICIPANT_STATUS,
-
-    /**
-     * Used by the controlloop runtime to change the state of participants, triggers a
-     * PARTICIPANT_STATUS message with the result of the PARTICIPANT_STATE_CHANGE operation.
-     */
-    PARTICIPANT_STATE_CHANGE,
-
-    /**
-     * Used by controlloop runtime to update the controlloops running on participants, triggers a
-     * PARTICIPANT_STATUS message with the result of the CONTROL_LOOP_UPDATE operation.
-     */
-    CONTROL_LOOP_UPDATE,
-
-    /**
-     * Used by controlloop runtime to change the state of controlloops in participants, triggers a
-     * PARTICIPANT_STATUS message with result of CONTROL_LOOP_STATE_CHANGE operation.
-     */
-    CONTROL_LOOP_STATE_CHANGE,
-
-    /**
-     * Used by the control loop runtime to order a health check on participants, triggers a
-     * PARTICIPANT_STATUS message with the result of the PARTICIPANT_HEALTH_CHECK operation.
-     */
-    PARTICIPANT_HEALTH_CHECK,
-
-    /**
-     * Used by participant to register itself with control loop runtime.
-     */
-    PARTICIPANT_REGISTER,
-
-    /**
-     * Used by control loop runtime to respond to participant registration.
-     */
-    PARTICIPANT_REGISTER_ACK,
-
-    /**
-     * Used by participant to deregister itself with control loop runtime.
-     */
-    PARTICIPANT_DEREGISTER,
-
-    /**
-     * Used by control loop runtime to respond to participant deregistration.
-     */
-    PARTICIPANT_DEREGISTER_ACK,
-
-    /**
-     * Used by control loop runtime to send ToscaServiceTemplate to participant.
-     */
-    PARTICIPANT_UPDATE,
-
-    /**
-     * Used by participant to acknowledge the receipt of Participant_Update message
-     * from control loop runtime.
-     */
-    PARTICIPANT_UPDATE_ACK,
-
-    /**
-     * Used by participant to acknowledge the receipt of ControlLoop_Update message
-     * from control loop runtime.
-     */
-    CONTROLLOOP_UPDATE_ACK,
-
-    /**
-     * Used by participant to acknowledge the receipt of ControlLoop_StateChange message
-     * from control loop runtime.
-     */
-    CONTROLLOOP_STATECHANGE_ACK,
-
-    /**
-     * Used by control loop runtime to request for ParticipantStatus message immediately.
-     */
-    PARTICIPANT_STATUS_REQ
-}
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
 import java.io.Serializable;
 import java.time.Instant;
@@ -32,7 +32,7 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 @NoArgsConstructor
 @Data
 @ToString
-public class ClElementStatistics implements Serializable {
+public class AcElementStatistics implements Serializable {
 
     private static final long serialVersionUID = 3284285693112271055L;
 
@@ -46,8 +46,8 @@ public class ClElementStatistics implements Serializable {
     private Instant timeStamp;
 
     @NonNull
-    private ControlLoopState controlLoopState;
+    private AutomationCompositionState state;
 
-    private long clElementUptime;
+    private long acElementUptime;
 
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
 import java.util.List;
 import lombok.Getter;
@@ -28,6 +28,6 @@ import lombok.ToString;
 @Getter
 @Setter
 @ToString
-public class ClElementStatisticsList {
-    private List<ClElementStatistics> clElementStatistics;
+public class AcElementStatisticsList {
+    private List<AcElementStatistics> acElementStatistics;
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
 import java.util.List;
 import java.util.Map;
@@ -35,22 +35,22 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity;
 
 /**
- * Class to represent a control loop instance.
+ * Class to represent an automation composition instance.
  */
 @NoArgsConstructor
 @Data
 @EqualsAndHashCode(callSuper = true)
-public class ControlLoop extends ToscaEntity implements Comparable<ControlLoop> {
+public class AutomationComposition extends ToscaEntity implements Comparable<AutomationComposition> {
     @NonNull
     private ToscaConceptIdentifier definition = new ToscaConceptIdentifier(PfConceptKey.getNullKey());
 
     @NonNull
-    private ControlLoopState state = ControlLoopState.UNINITIALISED;
+    private AutomationCompositionState state = AutomationCompositionState.UNINITIALISED;
 
     @NonNull
-    private ControlLoopOrderedState orderedState = ControlLoopOrderedState.UNINITIALISED;
+    private AutomationCompositionOrderedState orderedState = AutomationCompositionOrderedState.UNINITIALISED;
 
-    private Map<UUID, ControlLoopElement> elements;
+    private Map<UUID, AutomationCompositionElement> elements;
 
     @NonNull
     private Boolean primed = false;
@@ -68,28 +68,28 @@ public class ControlLoop extends ToscaEntity implements Comparable<ControlLoop>
     /**
      * Copy contructor, does a deep copy.
      *
-     * @param otherControlLoop the other element to copy from
+     * @param otherAutomationComposition the other element to copy from
      */
-    public ControlLoop(final ControlLoop otherControlLoop) {
-        super(otherControlLoop);
-        this.definition = new ToscaConceptIdentifier(otherControlLoop.definition);
-        this.state = otherControlLoop.state;
-        this.orderedState = otherControlLoop.orderedState;
-        this.elements = PfUtils.mapMap(otherControlLoop.elements, ControlLoopElement::new);
-        this.primed = otherControlLoop.primed;
+    public AutomationComposition(final AutomationComposition otherAutomationComposition) {
+        super(otherAutomationComposition);
+        this.definition = new ToscaConceptIdentifier(otherAutomationComposition.definition);
+        this.state = otherAutomationComposition.state;
+        this.orderedState = otherAutomationComposition.orderedState;
+        this.elements = PfUtils.mapMap(otherAutomationComposition.elements, AutomationCompositionElement::new);
+        this.primed = otherAutomationComposition.primed;
     }
 
     @Override
-    public int compareTo(final ControlLoop other) {
+    public int compareTo(final AutomationComposition other) {
         return compareNameVersion(this, other);
     }
 
     /**
-     * Set the ordered state on the control loop and on all its control loop elements.
+     * Set the ordered state on the automation composition and on all its automation composition elements.
      *
-     * @param orderedState the state we want the control loop to transition to
+     * @param orderedState the state we want the automation composition to transition to
      */
-    public void setCascadedOrderedState(final ControlLoopOrderedState orderedState) {
+    public void setCascadedOrderedState(final AutomationCompositionOrderedState orderedState) {
         this.orderedState = orderedState;
 
         if (MapUtils.isEmpty(elements)) {
@@ -100,17 +100,18 @@ public class ControlLoop extends ToscaEntity implements Comparable<ControlLoop>
     }
 
     /**
-     * Get a list of control loop element statistics.
+     * Get a list of automation composition element statistics.
      *
-     * @param controlLoop the control loop
-     * @return List of ClElementStatistics
+     * @param automationComposition the automation composition
+     * @return List of AcElementStatistics
      */
-    public List<ClElementStatistics> getControlLoopElementStatisticsList(final ControlLoop controlLoop) {
-        if (MapUtils.isEmpty(controlLoop.elements)) {
+    public List<AcElementStatistics> getAutomationCompositionElementStatisticsList(
+        final AutomationComposition automationComposition) {
+        if (MapUtils.isEmpty(automationComposition.elements)) {
             return List.of();
         }
 
-        return controlLoop.elements.values().stream().map(ControlLoopElement::getClElementStatistics)
-                .collect(Collectors.toList());
+        return automationComposition.elements.values().stream()
+            .map(AutomationCompositionElement::getAcElementStatistics).collect(Collectors.toList());
     }
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -35,12 +35,12 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 
 /**
- * Class to represent a control loop instance.
+ * Class to represent a automation composition instance.
  */
 @NoArgsConstructor
 @Data
 @ToString
-public class ControlLoopElement {
+public class AutomationCompositionElement {
     @NonNull
     private UUID id = UUID.randomUUID();
 
@@ -54,16 +54,16 @@ public class ControlLoopElement {
     private ToscaConceptIdentifier participantId = new ToscaConceptIdentifier(PfConceptKey.getNullKey());
 
     @NonNull
-    private ControlLoopState state = ControlLoopState.UNINITIALISED;
+    private AutomationCompositionState state = AutomationCompositionState.UNINITIALISED;
 
     @NonNull
-    private ControlLoopOrderedState orderedState = ControlLoopOrderedState.UNINITIALISED;
+    private AutomationCompositionOrderedState orderedState = AutomationCompositionOrderedState.UNINITIALISED;
 
     private ToscaServiceTemplate toscaServiceTemplateFragment;
 
     private String description;
 
-    private ClElementStatistics clElementStatistics;
+    private AcElementStatistics acElementStatistics;
 
     // A map indexed by the property name. Each map entry is the serialized value of the property,
     // which can be deserialized into an instance of the type of the property.
@@ -74,7 +74,7 @@ public class ControlLoopElement {
      *
      * @param otherElement the other element to copy from
      */
-    public ControlLoopElement(final ControlLoopElement otherElement) {
+    public AutomationCompositionElement(final AutomationCompositionElement otherElement) {
         this.id = otherElement.id;
         this.definition = new ToscaConceptIdentifier(otherElement.definition);
         this.participantType = new ToscaConceptIdentifier(otherElement.participantType);
@@ -83,7 +83,7 @@ public class ControlLoopElement {
         this.orderedState = otherElement.orderedState;
         this.toscaServiceTemplateFragment = otherElement.toscaServiceTemplateFragment;
         this.description = otherElement.description;
-        this.clElementStatistics = otherElement.clElementStatistics;
+        this.acElementStatistics = otherElement.acElementStatistics;
         this.propertiesMap = PfUtils.mapMap(otherElement.propertiesMap, UnaryOperator.identity());
     }
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;
@@ -29,10 +29,10 @@ import lombok.ToString;
 @Setter
 @AllArgsConstructor
 @ToString
-public class ControlLoopElementAck {
+public class AutomationCompositionElementAck {
 
-    // State of the controlLoopElement
-    private ControlLoopState state;
+    // State of the AutomationCompositionElement
+    private AutomationCompositionState state;
 
     // Result: Success/Fail.
     private Boolean result;
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
+ * Copyright (C) 2021-2022 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -33,18 +33,18 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty;
 
 /**
- * Class to represent a control loop element definition instance.
+ * Class to represent an automation composition element definition instance.
  */
 @Getter
 @NoArgsConstructor
 @Data
 @ToString
-public class ControlLoopElementDefinition {
+public class AutomationCompositionElementDefinition {
 
-    private ToscaConceptIdentifier clElementDefinitionId;
+    private ToscaConceptIdentifier acElementDefinitionId;
 
-    // The definition of the Control Loop Element in TOSCA
-    private ToscaNodeTemplate controlLoopElementToscaNodeTemplate;
+    // The definition of the Automation Composition Element in TOSCA
+    private ToscaNodeTemplate automationCompositionElementToscaNodeTemplate;
 
     // A map indexed by the property name. Each map entry is the serialized value of the property,
     // which can be deserialized into an instance of the type of the property.
@@ -53,12 +53,12 @@ public class ControlLoopElementDefinition {
     /**
      * Copy constructor, does a deep copy but as all fields here are immutable, it's just a regular copy.
      *
-     * @param clElementDefinition the controlloop element definition to copy from
+     * @param acElementDefinition the automation composition element definition to copy from
      */
-    public ControlLoopElementDefinition(final ControlLoopElementDefinition clElementDefinition) {
-        this.clElementDefinitionId = clElementDefinition.clElementDefinitionId;
-        this.controlLoopElementToscaNodeTemplate =
-                new ToscaNodeTemplate(clElementDefinition.controlLoopElementToscaNodeTemplate);
-        this.commonPropertiesMap = PfUtils.mapMap(clElementDefinition.commonPropertiesMap, UnaryOperator.identity());
+    public AutomationCompositionElementDefinition(final AutomationCompositionElementDefinition acElementDefinition) {
+        this.acElementDefinitionId = acElementDefinition.acElementDefinitionId;
+        this.automationCompositionElementToscaNodeTemplate =
+                new ToscaNodeTemplate(acElementDefinition.automationCompositionElementToscaNodeTemplate);
+        this.commonPropertiesMap = PfUtils.mapMap(acElementDefinition.commonPropertiesMap, UnaryOperator.identity());
     }
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -26,27 +26,27 @@ import lombok.ToString;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 /**
- * Class to represent a control loop info instance.
+ * Class to represent a automation composition info instance.
  */
 @NoArgsConstructor
 @Data
 @ToString
-public class ControlLoopInfo {
+public class AutomationCompositionInfo {
 
-    private ToscaConceptIdentifier controlLoopId;
+    private ToscaConceptIdentifier automationCompositionId;
 
-    private ControlLoopState state = ControlLoopState.UNINITIALISED;
+    private AutomationCompositionState state = AutomationCompositionState.UNINITIALISED;
 
-    private ControlLoopStatistics controlLoopStatistics;
+    private AutomationCompositionStatistics automationCompositionStatistics;
 
     /**
      * Copy constructor, does a deep copy but as all fields here are immutable, it's just a regular copy.
      *
      * @param otherElement the other element to copy from
      */
-    public ControlLoopInfo(final ControlLoopInfo otherElement) {
-        this.controlLoopId = otherElement.controlLoopId;
+    public AutomationCompositionInfo(final AutomationCompositionInfo otherElement) {
+        this.automationCompositionId = otherElement.automationCompositionId;
         this.state = otherElement.state;
-        this.controlLoopStatistics = otherElement.controlLoopStatistics;
+        this.automationCompositionStatistics = otherElement.automationCompositionStatistics;
     }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
-public enum ControlLoopOrderedState {
+public enum AutomationCompositionOrderedState {
     /**
-     * The control loop or control loop element should become uninitialised on participants, it should not exist on
-     * participants.
+     * The automation composition or automation composition element should become uninitialised on participants, it
+     * should not exist on participants.
      */
     UNINITIALISED,
     /**
-     * The control loop or control loop element should initialised on the participants and be passive, that is, it is
-     * not handling control loop messages yet.
+     * The automation composition or automation composition element should initialised on the participants and be
+     * passive, that is, it is not handling automation composition messages yet.
      */
     PASSIVE,
-    /** The control loop or control loop element should running and is executing control loops. */
+    /**
+     * The automation composition or automation composition element should running and is executing automation
+     * compositions.
+     */
     RUNNING;
 
-    public boolean equalsControlLoopState(final ControlLoopState controlLoopState)  {
-        return this.name().equals(controlLoopState.name());
+    public boolean equalsAutomationCompositionState(final AutomationCompositionState automationCompositionState) {
+        return this.name().equals(automationCompositionState.name());
     }
 
-    public ControlLoopState asState() {
-        return ControlLoopState.valueOf(this.name());
+    public AutomationCompositionState asState() {
+        return AutomationCompositionState.valueOf(this.name());
     }
 }
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionState.java b/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionState.java
new file mode 100644 (file)
index 0000000..aa6fcfd
--- /dev/null
@@ -0,0 +1,67 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.models.acm.concepts;
+
+public enum AutomationCompositionState {
+    /**
+     * The automation composition or automation composition element is not initialised on participants, it does not
+     * exist on participants.
+     */
+    UNINITIALISED,
+    /**
+     * The automation composition or automation composition element is changing from unitialised to passive, it is being
+     * initialised onto participants.
+     */
+    UNINITIALISED2PASSIVE,
+    /**
+     * The automation composition or automation composition element is initialised on the participants but is passive,
+     * that is, it is not handling automation composition messages yet.
+     */
+    PASSIVE,
+    /**
+     * The automation composition or automation composition element is changing from passive to running, the
+     * participants are preparing to execute automation compositions.
+     */
+    PASSIVE2RUNNING,
+    /**
+     * The automation composition or automation composition element is running and is executing automation compositions.
+     */
+    RUNNING,
+    /**
+     * The automation composition or automation composition element is completing execution of current automation
+     * compositions but will not start running any more automation compositions and will become passive.
+     */
+    RUNNING2PASSIVE,
+    /**
+     * The automation composition or automation composition element is changing from passive to unitialised, the
+     * automation composition is being removed from participants.
+     */
+    PASSIVE2UNINITIALISED;
+
+    public boolean equalsAutomationCompositionOrderedState(
+        final AutomationCompositionOrderedState automationCompositionOrderedState) {
+        return this.name().equals(automationCompositionOrderedState.name());
+    }
+
+    public AutomationCompositionOrderedState asOrderedState() {
+        return AutomationCompositionOrderedState.valueOf(this.name());
+    }
+}
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
 import java.time.Instant;
 import lombok.Data;
@@ -30,16 +30,16 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 @NoArgsConstructor
 @Data
 @ToString
-public class ControlLoopStatistics {
+public class AutomationCompositionStatistics {
 
     @NonNull
-    private ToscaConceptIdentifier controlLoopId;
+    private ToscaConceptIdentifier automationCompositionId;
 
     @NonNull
     private Instant timeStamp;
 
     @NonNull
-    private ClElementStatisticsList clElementStatisticsList;
+    private AcElementStatisticsList acElementStatisticsList;
 
     private long eventCount;
     private long lastExecutionTime;
@@ -16,7 +16,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -34,15 +34,15 @@ import org.onap.policy.models.base.PfUtils;
 @NoArgsConstructor
 @AllArgsConstructor
 @EqualsAndHashCode
-public class ControlLoops {
-    private List<ControlLoop> controlLoopList = new ArrayList<>();
+public class AutomationCompositions {
+    private List<AutomationComposition> automationCompositionList = new ArrayList<>();
 
     /**
      * Copy constructor, does a deep copy.
      *
-     * @param otherControlLoops the other element to copy from
+     * @param otherAutomationCompositions the other element to copy from
      */
-    public ControlLoops(final ControlLoops otherControlLoops) {
-        this.controlLoopList = PfUtils.mapList(controlLoopList, ControlLoop::new);
+    public AutomationCompositions(final AutomationCompositions otherAutomationCompositions) {
+        this.automationCompositionList = PfUtils.mapList(automationCompositionList, AutomationComposition::new);
     }
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -42,8 +42,8 @@ public class ParticipantDefinition {
 
     private ToscaConceptIdentifier participantType;
 
-    // List of ControlLoopElementDefinition values for a particular participant
-    private List<ControlLoopElementDefinition> controlLoopElementDefinitionList = new ArrayList<>();
+    // List of AutomationCompositionElementDefinition values for a particular participant
+    private List<AutomationCompositionElementDefinition> automationCompositionElementDefinitionList = new ArrayList<>();
 
     /**
      * Copy constructor, does a deep copy but as all fields here are immutable, it's just a regular copy.
@@ -53,7 +53,8 @@ public class ParticipantDefinition {
     public ParticipantDefinition(final ParticipantDefinition participantDefinition) {
         this.participantId = participantDefinition.participantId;
         this.participantType = participantDefinition.participantType;
-        this.controlLoopElementDefinitionList = PfUtils.mapList(
-            participantDefinition.controlLoopElementDefinitionList, ControlLoopElementDefinition::new);
+        this.automationCompositionElementDefinitionList =
+            PfUtils.mapList(participantDefinition.automationCompositionElementDefinitionList,
+                AutomationCompositionElementDefinition::new);
     }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
 /**
  * Class to hold the possible values for mode of participant.
  */
 public enum ParticipantState {
-
     /**
-     * Control Loop execution is unknown.
+     * Participant state is unknown.
      */
     UNKNOWN,
 
     /**
-     * Control Loop execution is always rejected.
+     * Participant is passive, automation composition element execution is always rejected.
      */
     PASSIVE,
 
     /**
-     * Control Loop execution execution proceeds, but changes to domain state or context are not carried out. The
-     * participant returns an indication that it is running in SAFE mode together with the action it would have
-     * performed if it was operating in ACTIVE mode.
+     * Automation composition element execution execution proceeds, but changes to domain state or context are not
+     * carried out. The participant returns an indication that it is running in SAFE mode together with the action it
+     * would have performed if it was operating in ACTIVE mode.
      */
     SAFE,
 
     /**
-     * Control Loop execution execution proceeds and changes to domain and state are carried out in a test environment.
-     * The participant returns an indication that it is running in TEST mode together with the action it has performed
-     * on the test environment.
+     * Automation composition element execution execution proceeds and changes to domain and state are carried out in a
+     * test environment. The participant returns an indication that it is running in TEST mode together with the action
+     * it has performed on the test environment.
      */
     TEST,
 
     /**
-     * Control Loop execution execution is executed in the live environment by the participant.
+     * Automation composition element execution is executed in the live environment by the participant.
      */
     ACTIVE,
 
     /**
-     * Control Loop execution execution is terminated and not available.
+     * Automation composition element execution has been terminated.
      */
     TERMINATED
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -40,8 +40,8 @@ public class ParticipantUpdates {
 
     private ToscaConceptIdentifier participantId;
 
-    // List of ControlLoopElement values for a particular participant
-    private List<ControlLoopElement> controlLoopElementList = new ArrayList<>();
+    // List of AutomationCompositionElement values for a particular participant
+    private List<AutomationCompositionElement> automationCompositionElementList = new ArrayList<>();
 
     /**
      * Copy constructor, does a deep copy but as all fields here are immutable, it's just a regular copy.
@@ -50,7 +50,7 @@ public class ParticipantUpdates {
      */
     public ParticipantUpdates(final ParticipantUpdates participantUpdates) {
         this.participantId = participantUpdates.participantId;
-        this.controlLoopElementList = PfUtils.mapList(
-            participantUpdates.controlLoopElementList, ControlLoopElement::new);
+        this.automationCompositionElementList = PfUtils.mapList(
+            participantUpdates.automationCompositionElementList, AutomationCompositionElement::new);
     }
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
 import java.util.Map;
 import javax.ws.rs.core.Response;
@@ -36,7 +36,8 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 public final class ParticipantUtils {
 
     private static final Coder CODER = new StandardCoder();
-    private static final String CONTROL_LOOP_ELEMENT = "org.onap.policy.clamp.controlloop.ControlLoopElement";
+    private static final String AUTOMATION_COMPOSITION_ELEMENT =
+        "org.onap.policy.clamp.acm.AutomationCompositionElement";
 
     /**
      * Finds participantType from a map of properties.
@@ -57,27 +58,30 @@ public final class ParticipantUtils {
     }
 
     /**
-     * Get the First StartPhase
-     * it depend of the state of the Control Loop
-     * and also from the all startPhase defined into the ToscaServiceTemplate.
-     * @param controlLoop the ControlLoop
+     * Get the First StartPhase.
+     *
+     * <p>This depends on the state of the automation composition and also on all start phases defined in the
+     * ToscaServiceTemplate.
+     *
+     * @param automationComposition the automation composition
      * @param toscaServiceTemplate the ToscaServiceTemplate
      * @return the First StartPhase
      */
-    public static int getFirstStartPhase(ControlLoop controlLoop, ToscaServiceTemplate toscaServiceTemplate) {
+    public static int getFirstStartPhase(
+        AutomationComposition automationComposition, ToscaServiceTemplate toscaServiceTemplate) {
         var minStartPhase = 1000;
         var maxStartPhase = 0;
-        for (var element : controlLoop.getElements().values()) {
+        for (var element : automationComposition.getElements().values()) {
             ToscaNodeTemplate toscaNodeTemplate = toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates()
-                    .get(element.getDefinition().getName());
+                .get(element.getDefinition().getName());
             int startPhase = ParticipantUtils.findStartPhase(toscaNodeTemplate.getProperties());
             minStartPhase = Math.min(minStartPhase, startPhase);
             maxStartPhase = Math.max(maxStartPhase, startPhase);
         }
 
-        return ControlLoopState.UNINITIALISED2PASSIVE.equals(controlLoop.getState())
-                || ControlLoopState.PASSIVE2RUNNING.equals(controlLoop.getState()) ? minStartPhase
-                        : maxStartPhase;
+        return AutomationCompositionState.UNINITIALISED2PASSIVE.equals(automationComposition.getState())
+            || AutomationCompositionState.PASSIVE2RUNNING.equals(automationComposition.getState()) ? minStartPhase
+                : maxStartPhase;
     }
 
     /**
@@ -95,22 +99,22 @@ public final class ParticipantUtils {
     }
 
     /**
-     * Checks If NodeTemplate Is ControlLoopElement.
+     * Checks if a NodeTemplate is an AutomationCompositionElement.
      *
      * @param nodeTemplate the ToscaNodeTemplate
      * @param toscaServiceTemplate the ToscaServiceTemplate
-     * @return true if NodeTemplate Is ControlLoopElement
+     * @return true if the NodeTemplate is an AutomationCompositionElement
      */
-    public static boolean checkIfNodeTemplateIsControlLoopElement(ToscaNodeTemplate nodeTemplate,
-            ToscaServiceTemplate toscaServiceTemplate) {
-        if (nodeTemplate.getType().contains(CONTROL_LOOP_ELEMENT)) {
+    public static boolean checkIfNodeTemplateIsAutomationCompositionElement(ToscaNodeTemplate nodeTemplate,
+        ToscaServiceTemplate toscaServiceTemplate) {
+        if (nodeTemplate.getType().contains(AUTOMATION_COMPOSITION_ELEMENT)) {
             return true;
         } else {
             var nodeType = toscaServiceTemplate.getNodeTypes().get(nodeTemplate.getType());
             if (nodeType != null) {
                 var derivedFrom = nodeType.getDerivedFrom();
                 if (derivedFrom != null) {
-                    return derivedFrom.contains(CONTROL_LOOP_ELEMENT);
+                    return derivedFrom.contains(AUTOMATION_COMPOSITION_ELEMENT);
                 }
             }
         }
@@ -16,7 +16,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.notification;
+package org.onap.policy.clamp.models.acm.messages.dmaap.notification;
 
 import com.google.gson.annotations.SerializedName;
 import java.util.ArrayList;
@@ -29,23 +29,23 @@ import org.apache.commons.collections4.CollectionUtils;
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
-public class ControlLoopNotification {
+public class AutomationCompositionNotification {
 
     /**
-     * Status of control loops that are being added to participants.
+     * Status of automation compositions that are being added to participants.
      */
-    @SerializedName("deployed-control-loops")
-    private List<ControlLoopStatus> added = new ArrayList<>();
+    @SerializedName("deployed-automation-compositions")
+    private List<AutomationCompositionStatus> added = new ArrayList<>();
 
     /**
      * Status of policies that are being deleted from PDPs.
      */
-    @SerializedName("undeployed-control-loops")
-    private List<ControlLoopStatus> deleted = new ArrayList<>();
+    @SerializedName("undeployed-automation-compositions")
+    private List<AutomationCompositionStatus> deleted = new ArrayList<>();
 
 
     /**
-     * Determines if the notification is empty (i.e., has no added or delete control loop
+     * Determines if the notification is empty (i.e., has no added or delete automation composition
      * notifications).
      *
      * @return {@code true} if the notification is empty, {@code false} otherwise
@@ -16,7 +16,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.notification;
+package org.onap.policy.clamp.models.acm.messages.dmaap.notification;
 
 import com.google.gson.annotations.SerializedName;
 import java.util.UUID;
@@ -28,8 +28,8 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
-public class ControlLoopStatus {
-    @SerializedName("control-loop-id")
+public class AutomationCompositionStatus {
+    @SerializedName("automation-composition-id")
     private UUID id;
 
     private ToscaConceptIdentifier definition;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -27,32 +27,32 @@ import java.util.function.UnaryOperator;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElementAck;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementAck;
 import org.onap.policy.models.base.PfUtils;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 /**
- * Class to represent the CONTROLLOOP_ACK message that a participant sends
- * to control loop runtime as an acknowledgement to either ControlLoopUpdate
- * or ControlLoopStateChange message.
+ * Class to represent the AUTOMATION_COMPOSITION_ACK message that a participant sends
+ * to automation composition runtime as an acknowledgement to either AUTOMATION_COMPOSITION_UPDATE
+ * or AUTOMATION_COMPOSITION_STATE_CHANGE message.
  */
 @Getter
 @Setter
 @ToString(callSuper = true)
-public class ControlLoopAck extends ParticipantAckMessage {
+public class AutomationCompositionAck extends ParticipantAckMessage {
 
-    private ToscaConceptIdentifier controlLoopId;
+    private ToscaConceptIdentifier automationCompositionId;
     private Integer startPhase;
 
-    // A map with ControlLoopElementID as its key, and a pair of result and message as value per
-    // ControlLoopElement.
-    private Map<UUID, ControlLoopElementAck> controlLoopResultMap = new LinkedHashMap<>();
+    // A map with AutomationCompositionElementID as its key, and a pair of result and message as value per
+    // AutomationCompositionElement.
+    private Map<UUID, AutomationCompositionElementAck> automationCompositionResultMap = new LinkedHashMap<>();
 
     /**
      * Constructor for instantiating ParticipantRegisterAck class with message name.
      *
      */
-    public ControlLoopAck(final ParticipantMessageType messageType) {
+    public AutomationCompositionAck(final ParticipantMessageType messageType) {
         super(messageType);
     }
 
@@ -61,9 +61,10 @@ public class ControlLoopAck extends ParticipantAckMessage {
      *
      * @param source source from which to copy
      */
-    public ControlLoopAck(final ControlLoopAck source) {
+    public AutomationCompositionAck(final AutomationCompositionAck source) {
         super(source);
-        this.controlLoopId = source.controlLoopId;
-        this.controlLoopResultMap = PfUtils.mapMap(source.controlLoopResultMap, UnaryOperator.identity());
+        this.automationCompositionId = source.automationCompositionId;
+        this.automationCompositionResultMap =
+            PfUtils.mapMap(source.automationCompositionResultMap, UnaryOperator.identity());
     }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
 
 /**
- * Class to represent the CONTROL_LOOP_STATE_CHANGE message that the control loop runtime will send to
- * participants to change the state of a control loop they are running.
+ * Class to represent the AUTOMATION_COMPOSITION_STATE_CHANGE message that the automation composition runtime will send
+ * to participants to change the state of an automation composition they are running.
  */
 @Getter
 @Setter
 @ToString(callSuper = true)
-public class ControlLoopStateChange extends ParticipantMessage {
-    private ControlLoopOrderedState orderedState;
-    private ControlLoopState currentState;
+public class AutomationCompositionStateChange extends ParticipantMessage {
+    private AutomationCompositionOrderedState orderedState;
+    private AutomationCompositionState currentState;
     private Integer startPhase;
 
     /**
-     * Constructor for instantiating ControlLoopStateChange class with message name.
+     * Constructor for instantiating class with message name.
      *
      */
-    public ControlLoopStateChange() {
-        super(ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE);
+    public AutomationCompositionStateChange() {
+        super(ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
     }
 
     /**
@@ -51,7 +51,7 @@ public class ControlLoopStateChange extends ParticipantMessage {
      *
      * @param source source from which to copy
      */
-    public ControlLoopStateChange(ControlLoopStateChange source) {
+    public AutomationCompositionStateChange(AutomationCompositionStateChange source) {
         super(source);
 
         this.orderedState = source.orderedState;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import java.util.ArrayList;
 import java.util.List;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantUpdates;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantUpdates;
 import org.onap.policy.models.base.PfUtils;
 
 /**
- * Class to represent the CONTROL_LOOP_UPDATE message that the control loop runtime sends to a participant.
- * When a participant receives this message, it creates the control loop elements contained in the message and sets them
- * to state PASSIVE. subsequent CONTROL_LOOP_STATE_CHANGE messages are used to activate the control loops.
+ * Class to represent the AUTOMATION_COMPOSITION_UPDATE message that the automation composition runtime sends to a
+ * participant. When a participant receives this message, it creates the automation composition elements contained in
+ * the message and sets them to state PASSIVE. subsequent AUTOMATION_COMPOSITION_STATE_CHANGE messages are used to
+ * activate the automation compositions.
  */
 @Getter
 @Setter
 @ToString(callSuper = true)
-public class ControlLoopUpdate extends ParticipantMessage {
+public class AutomationCompositionUpdate extends ParticipantMessage {
 
     // A list of ParticipantUpdates instances which carries details of an updated participant.
     private List<ParticipantUpdates> participantUpdatesList = new ArrayList<>();
     private Integer startPhase = 0;
 
     /**
-     * Constructor for instantiating ControlLoopUpdate class with message name.
+     * Constructor for instantiating class with message name.
      *
      */
-    public ControlLoopUpdate() {
-        super(ParticipantMessageType.CONTROL_LOOP_UPDATE);
+    public AutomationCompositionUpdate() {
+        super(ParticipantMessageType.AUTOMATION_COMPOSITION_UPDATE);
     }
 
     /**
@@ -55,10 +56,9 @@ public class ControlLoopUpdate extends ParticipantMessage {
      *
      * @param source source from which to copy
      */
-    public ControlLoopUpdate(ControlLoopUpdate source) {
+    public AutomationCompositionUpdate(AutomationCompositionUpdate source) {
         super(source);
 
-        this.participantUpdatesList = PfUtils.mapList(source.participantUpdatesList,
-            ParticipantUpdates::new);
+        this.participantUpdatesList = PfUtils.mapList(source.participantUpdatesList, ParticipantUpdates::new);
     }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import java.util.UUID;
 import lombok.Getter;
 import lombok.NonNull;
 import lombok.Setter;
 import lombok.ToString;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 /**
@@ -104,7 +104,7 @@ public class ParticipantAckMessage {
             return false;
         }
 
-        // Broadcast message to all control loop elements on this participant
+        // Broadcast message to all automation composition elements on this participant
         if (this.participantId == null) {
             return true;
         }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
 /**
- * Class to represent the PARTICIPANT_DEREGISTER message that all the participants send to control loop runtime.
+ * Class to represent the PARTICIPANT_DEREGISTER message that all the participants send to the ACM runtime.
  */
 @Getter
 @Setter
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
 /**
- * Class to represent the PARTICIPANT_DEREGISTER_ACK message that control loop runtime sends to the participant.
+ * Class to represent the PARTICIPANT_DEREGISTER_ACK message that the ACM runtime sends to the participant.
  */
 @Getter
 @Setter
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import java.time.Instant;
 import java.util.UUID;
@@ -30,7 +30,7 @@ import lombok.ToString;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 /**
- * Class to represent the base class for various messages that will be exchanged between the control loop runtime and
+ * Class to represent the base class for various messages that will be exchanged between the ACM runtime and
  * participants.
  */
 @Getter
@@ -58,9 +58,9 @@ public class ParticipantMessage {
     private ToscaConceptIdentifier participantId;
 
     /**
-     * Control loop ID, or {@code null} for messages to participants.
+     * Automation Composition ID, or {@code null} for messages to participants.
      */
-    private ToscaConceptIdentifier controlLoopId;
+    private ToscaConceptIdentifier automationCompositionId;
 
     /**
      * Constructor for instantiating a participant message class.
@@ -80,7 +80,7 @@ public class ParticipantMessage {
         this.messageType = source.messageType;
         this.participantType = source.participantType;
         this.participantId = source.participantId;
-        this.controlLoopId = source.controlLoopId;
+        this.automationCompositionId = source.automationCompositionId;
     }
 
     /**
@@ -101,7 +101,7 @@ public class ParticipantMessage {
             return false;
         }
 
-        // Broadcast message to all control loop elements on this participant
+        // Broadcast message to all automation composition elements on this participant
         if (this.participantId == null) {
             return true;
         }
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantMessageType.java b/models/src/main/java/org/onap/policy/clamp/models/acm/messages/dmaap/participant/ParticipantMessageType.java
new file mode 100644 (file)
index 0000000..4f6bcdb
--- /dev/null
@@ -0,0 +1,104 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
+
+/**
+ * Class to hold the possible values for the type of participant messages.
+ */
+public enum ParticipantMessageType {
+
+    /**
+     * Used by participants to report status to the automation composition runtime.
+     */
+    PARTICIPANT_STATUS,
+
+    /**
+     * Used by the acm runtime to change the state of participants, triggers a
+     * PARTICIPANT_STATUS message with the result of the PARTICIPANT_STATE_CHANGE operation.
+     */
+    PARTICIPANT_STATE_CHANGE,
+
+    /**
+     * Used by acm runtime to update the automation compositions running on participants, triggers a
+     * PARTICIPANT_STATUS message with the result of the AUTOMATION_COMPOSITION_UPDATE operation.
+     */
+    AUTOMATION_COMPOSITION_UPDATE,
+
+    /**
+     * Used by acm runtime to change the state of automation compositions in participants, triggers a
+     * PARTICIPANT_STATUS message with result of AUTOMATION_COMPOSITION_STATE_CHANGE operation.
+     */
+    AUTOMATION_COMPOSITION_STATE_CHANGE,
+
+    /**
+     * Used by the automation composition runtime to order a health check on participants, triggers a
+     * PARTICIPANT_STATUS message with the result of the PARTICIPANT_HEALTH_CHECK operation.
+     */
+    PARTICIPANT_HEALTH_CHECK,
+
+    /**
+     * Used by participant to register itself with automation composition runtime.
+     */
+    PARTICIPANT_REGISTER,
+
+    /**
+     * Used by automation composition runtime to respond to participant registration.
+     */
+    PARTICIPANT_REGISTER_ACK,
+
+    /**
+     * Used by participant to deregister itself with automation composition runtime.
+     */
+    PARTICIPANT_DEREGISTER,
+
+    /**
+     * Used by automation composition runtime to respond to participant deregistration.
+     */
+    PARTICIPANT_DEREGISTER_ACK,
+
+    /**
+     * Used by automation composition runtime to send ToscaServiceTemplate to participant.
+     */
+    PARTICIPANT_UPDATE,
+
+    /**
+     * Used by participant to acknowledge the receipt of PARTICIPANT_UPDATE message
+     * from automation composition runtime.
+     */
+    PARTICIPANT_UPDATE_ACK,
+
+    /**
+     * Used by participant to acknowledge the receipt of AUTOMATION_COMPOSITION_UPDATE message
+     * from automation composition runtime.
+     */
+    AUTOMATION_COMPOSITION_UPDATE_ACK,
+
+    /**
+     * Used by participant to acknowledge the receipt of AUTOMATION_COMPOSITION_STATE_CHANGE message
+     * from automation composition runtime.
+     */
+    AUTOMATION_COMPOSITION_STATECHANGE_ACK,
+
+    /**
+     * Used by automation composition runtime to request for PARTICIPANT_STATUS message immediately.
+     */
+    PARTICIPANT_STATUS_REQ
+}
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
 /**
- * Class to represent the PARTICIPANT_REGISTER message that all the participants send to control loop runtime.
+ * Class to represent the PARTICIPANT_REGISTER message that all the participants send to the ACM runtime.
  */
 @Getter
 @Setter
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
 /**
- * Class to represent the PARTICIPANT_REGISTER_ACK message that control loop runtime sends to registered participant.
+ * Class to represent the PARTICIPANT_REGISTER_ACK message that the ACM runtime sends to a registered participant.
  */
 @Getter
 @Setter
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import java.util.ArrayList;
 import java.util.List;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopInfo;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantDefinition;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantHealthStatus;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatistics;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionInfo;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantDefinition;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantStatistics;
 import org.onap.policy.models.base.PfUtils;
 
 /**
- * Class to represent the PARTICIPANT_STATUS message that all the participants send to the control loop runtime.
+ * Class to represent the PARTICIPANT_STATUS message that all the participants send to the ACM runtime.
  */
 @Getter
 @Setter
@@ -49,8 +49,8 @@ public class ParticipantStatus extends ParticipantMessage {
     // A list of ParticipantDefinition updates, returned in response to ParticipantStatusReq only
     private List<ParticipantDefinition> participantDefinitionUpdates = new ArrayList<>();
 
-    // List of ControlLoopInfo types with ControlLoopId, its state and statistics
-    private List<ControlLoopInfo> controlLoopInfoList = new ArrayList<>();
+    // List of AutomationCompositionInfo types with AutomationCompositionId, its state and statistics
+    private List<AutomationCompositionInfo> automationCompositionInfoList = new ArrayList<>();
 
     /**
      * Constructor for instantiating ParticipantStatus class with message name.
@@ -71,8 +71,9 @@ public class ParticipantStatus extends ParticipantMessage {
         this.state = source.state;
         this.healthStatus = source.healthStatus;
         this.participantStatistics = (source.participantStatistics == null ? null : new ParticipantStatistics());
-        this.participantDefinitionUpdates = PfUtils.mapList(source.participantDefinitionUpdates,
-            ParticipantDefinition::new);
-        this.controlLoopInfoList = PfUtils.mapList(source.controlLoopInfoList, ControlLoopInfo::new);
+        this.participantDefinitionUpdates =
+            PfUtils.mapList(source.participantDefinitionUpdates, ParticipantDefinition::new);
+        this.automationCompositionInfoList =
+            PfUtils.mapList(source.automationCompositionInfoList, AutomationCompositionInfo::new);
     }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
 /**
- * Class to represent the PARTICIPANT_STATUS_REQ message that controlloop runtime
+ * Class to represent the PARTICIPANT_STATUS_REQ message that the ACM runtime
  * sends to participants for an immediate ParticipantStatus from participants.
  */
 @Getter
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import java.util.ArrayList;
 import java.util.List;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantDefinition;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantDefinition;
 import org.onap.policy.models.base.PfUtils;
 
 /**
- * Class to represent the PARTICIPANT_UPDATE message that the control loop runtime sends to a participant.
- * ControlLoop Runtime sends Control Loop Element Definitions and Common Parameter Values to Participants.
+ * Class to represent the PARTICIPANT_UPDATE message that the ACM runtime sends to a participant.
+ * the ACM Runtime sends automation composition element Definitions and Common Parameter Values to Participants.
  */
 @Getter
 @Setter
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
 /**
- * Class to represent the PARTICIPANT_UPDATE_ACK message that registered participant sends to controlloop runtime.
+ * Class to represent the PARTICIPANT_UPDATE_ACK message that registered participant sends to the ACM runtime.
  */
 @Getter
 @Setter
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.rest.commissioning;
+package org.onap.policy.clamp.models.acm.messages.rest.commissioning;
 
 import java.util.List;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
-import org.onap.policy.clamp.controlloop.models.messages.rest.SimpleResponse;
+import org.onap.policy.clamp.models.acm.messages.rest.SimpleResponse;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 /**
@@ -34,5 +34,5 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 @Setter
 @ToString(callSuper = true)
 public class CommissioningResponse extends SimpleResponse {
-    private List<ToscaConceptIdentifier> affectedControlLoopDefinitions;
+    private List<ToscaConceptIdentifier> affectedAutomationCompositionDefinitions;
 }
  *  ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.rest.instantiation;
+package org.onap.policy.clamp.models.acm.messages.rest.instantiation;
 
 import java.util.ArrayList;
 import java.util.List;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.messages.rest.GenericNameVersion;
-import org.onap.policy.clamp.controlloop.models.messages.rest.SimpleResponse;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
+import org.onap.policy.clamp.models.acm.messages.rest.GenericNameVersion;
+import org.onap.policy.clamp.models.acm.messages.rest.SimpleResponse;
 
 
 /**
@@ -35,9 +35,9 @@ import org.onap.policy.clamp.controlloop.models.messages.rest.SimpleResponse;
 @Getter
 @Setter
 @ToString(callSuper = true)
-public class ControlLoopOrderStateResponse extends SimpleResponse {
+public class AutomationCompositionOrderStateResponse extends SimpleResponse {
 
-    private ControlLoopOrderedState orderedState = ControlLoopOrderedState.UNINITIALISED;
+    private AutomationCompositionOrderedState orderedState = AutomationCompositionOrderedState.UNINITIALISED;
 
-    private List<GenericNameVersion> controlLoopIdentifierList = new ArrayList<>();
+    private List<GenericNameVersion> automationCompositionIdentifierList = new ArrayList<>();
 }
  *  ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.rest.instantiation;
+package org.onap.policy.clamp.models.acm.messages.rest.instantiation;
 
 import lombok.Data;
 
 @Data
-public class ControlLoopPrimed {
+public class AutomationCompositionPrimed {
 
     private String name;
 
  *  ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.rest.instantiation;
+package org.onap.policy.clamp.models.acm.messages.rest.instantiation;
 
 import java.util.ArrayList;
 import java.util.List;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
-import org.onap.policy.clamp.controlloop.models.messages.rest.SimpleResponse;
+import org.onap.policy.clamp.models.acm.messages.rest.SimpleResponse;
 
 
 /**
- * Response to provide all primed controlLoops.
+ * Response to provide all primed automation compositions.
  */
 @Getter
 @Setter
 @ToString(callSuper = true)
-public class ControlLoopPrimedResponse extends SimpleResponse {
+public class AutomationCompositionPrimedResponse extends SimpleResponse {
 
-    private List<ControlLoopPrimed> primedControlLoopsList = new ArrayList<>();
+    private List<AutomationCompositionPrimed> primedAutomationCompositionsList = new ArrayList<>();
 }
  *  ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.rest.instantiation;
+package org.onap.policy.clamp.models.acm.messages.rest.instantiation;
 
 import java.util.ArrayList;
 import java.util.List;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
-import org.onap.policy.clamp.controlloop.models.messages.rest.SimpleResponse;
+import org.onap.policy.clamp.models.acm.messages.rest.SimpleResponse;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 /**
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.rest.instantiation;
+package org.onap.policy.clamp.models.acm.messages.rest.instantiation;
 
 import java.util.List;
 import lombok.Data;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 @Data
 public class InstantiationCommand {
-    // The state to which the control loops are to be set
-    private ControlLoopOrderedState orderedState;
+    // The state to which the automation compositions are to be set
+    private AutomationCompositionOrderedState orderedState;
 
-    // The list of control loops on which the command is to be issued
-    private List<ToscaConceptIdentifier> controlLoopIdentifierList;
+    // The list of automation compositions on which the command is to be issued
+    private List<ToscaConceptIdentifier> automationCompositionIdentifierList;
 }
  *  ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.rest.instantiation;
+package org.onap.policy.clamp.models.acm.messages.rest.instantiation;
 
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.messages.rest.SimpleResponse;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
+import org.onap.policy.clamp.models.acm.messages.rest.SimpleResponse;
 
 /**
  * Response to instantiation OrderState.
@@ -35,5 +35,5 @@ import org.onap.policy.clamp.controlloop.models.messages.rest.SimpleResponse;
 @ToString(callSuper = true)
 public class InstantiationOrderStateResponse extends SimpleResponse {
 
-    private ControlLoopOrderedState orderedState;
+    private AutomationCompositionOrderedState orderedState;
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.rest.instantiation;
+package org.onap.policy.clamp.models.acm.messages.rest.instantiation;
 
 import java.util.List;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
-import org.onap.policy.clamp.controlloop.models.messages.rest.SimpleResponse;
+import org.onap.policy.clamp.models.acm.messages.rest.SimpleResponse;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 /**
@@ -34,5 +34,5 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 @Setter
 @ToString(callSuper = true)
 public class InstantiationResponse extends SimpleResponse {
-    private List<ToscaConceptIdentifier> affectedControlLoops;
+    private List<ToscaConceptIdentifier> affectedAutomationCompositions;
 }
@@ -20,7 +20,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts;
+package org.onap.policy.clamp.models.acm.persistence.concepts;
 
 import java.io.Serializable;
 import java.util.List;
@@ -37,8 +37,8 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NonNull;
 import org.apache.commons.lang3.builder.CompareToBuilder;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
+import org.onap.policy.clamp.models.acm.concepts.AcElementStatistics;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
 import org.onap.policy.common.parameters.annotations.NotNull;
 import org.onap.policy.models.base.PfAuthorative;
 import org.onap.policy.models.base.PfConcept;
@@ -49,17 +49,17 @@ import org.onap.policy.models.base.validation.annotations.VerifyKey;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 /**
- * Class to represent a controlloop element statistics in the database.
+ * Class to represent automation composition element statistics in the database.
  *
  * @author Ramesh Murugan Iyer (ramesh.murugan.iyer@est.tech)
  */
 @Entity
-@Table(name = "ClElementStatistics")
+@Table(name = "AcElementStatistics")
 @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
 @Data
 @AllArgsConstructor
 @EqualsAndHashCode(callSuper = false)
-public class JpaClElementStatistics extends PfConcept implements PfAuthorative<ClElementStatistics>, Serializable {
+public class JpaAcElementStatistics extends PfConcept implements PfAuthorative<AcElementStatistics>, Serializable {
 
     private static final long serialVersionUID = 621426717868738629L;
 
@@ -79,36 +79,36 @@ public class JpaClElementStatistics extends PfConcept implements PfAuthorative<C
 
     @Column
     @NotNull
-    private ControlLoopState state;
+    private AutomationCompositionState state;
 
     @Column
-    private long clElementUptime;
+    private long acElementUptime;
 
 
     /**
-     * The Default Constructor creates a {@link JpaClElementStatistics} object with a null key.
+     * The Default Constructor creates a {@link JpaAcElementStatistics} object with a null key.
      */
-    public JpaClElementStatistics() {
+    public JpaAcElementStatistics() {
         this(new PfReferenceTimestampKey());
     }
 
 
     /**
-     * The Key Constructor creates a {@link JpaClElementStatistics} object with the given Reference Timestamp key.
+     * The Key Constructor creates a {@link JpaAcElementStatistics} object with the given Reference Timestamp key.
      *
      * @param key the key
      */
-    public JpaClElementStatistics(@NonNull final PfReferenceTimestampKey key) {
-        this(key, new PfConceptKey(), ControlLoopState.PASSIVE, 0L);
+    public JpaAcElementStatistics(@NonNull final PfReferenceTimestampKey key) {
+        this(key, new PfConceptKey(), AutomationCompositionState.PASSIVE, 0L);
     }
 
     /**
-     * The Key Constructor creates a {@link JpaClElementStatistics} object with all mandatory fields.
+     * The Key Constructor creates a {@link JpaAcElementStatistics} object with all mandatory fields.
      *
      * @param key the key
-     * @param participantId the TOSCA definition of the control loop element
+     * @param participantId the TOSCA definition of the automation composition element
      */
-    public JpaClElementStatistics(@NonNull final PfReferenceTimestampKey key,
+    public JpaAcElementStatistics(@NonNull final PfReferenceTimestampKey key,
                                   @NonNull final PfConceptKey participantId) {
         this.key = key;
         this.participantId = participantId;
@@ -119,12 +119,12 @@ public class JpaClElementStatistics extends PfConcept implements PfAuthorative<C
      *
      * @param copyConcept the concept to copy from
      */
-    public JpaClElementStatistics(@NonNull final JpaClElementStatistics copyConcept) {
+    public JpaAcElementStatistics(@NonNull final JpaAcElementStatistics copyConcept) {
         super(copyConcept);
         this.key = new PfReferenceTimestampKey(copyConcept.key);
         this.participantId = new PfConceptKey(copyConcept.participantId);
         this.state = copyConcept.state;
-        this.clElementUptime = copyConcept.clElementUptime;
+        this.acElementUptime = copyConcept.acElementUptime;
     }
 
 
@@ -133,36 +133,36 @@ public class JpaClElementStatistics extends PfConcept implements PfAuthorative<C
      *
      * @param authorativeConcept the authorative concept to copy from
      */
-    public JpaClElementStatistics(@NonNull final ClElementStatistics authorativeConcept) {
+    public JpaAcElementStatistics(@NonNull final AcElementStatistics authorativeConcept) {
         this.fromAuthorative(authorativeConcept);
     }
 
 
 
     @Override
-    public ClElementStatistics toAuthorative() {
-        var clElementStatistics = new ClElementStatistics();
-        clElementStatistics.setId(UUID.fromString(getKey().getReferenceKey().getLocalName()));
-        clElementStatistics.setTimeStamp(key.getInstant());
-        clElementStatistics.setParticipantId(new ToscaConceptIdentifier(participantId));
-        clElementStatistics.setControlLoopState(state);
-        clElementStatistics.setClElementUptime(clElementUptime);
-
-        return clElementStatistics;
+    public AcElementStatistics toAuthorative() {
+        var acElementStatistics = new AcElementStatistics();
+        acElementStatistics.setId(UUID.fromString(getKey().getReferenceKey().getLocalName()));
+        acElementStatistics.setTimeStamp(key.getInstant());
+        acElementStatistics.setParticipantId(new ToscaConceptIdentifier(participantId));
+        acElementStatistics.setState(state);
+        acElementStatistics.setAcElementUptime(acElementUptime);
+
+        return acElementStatistics;
     }
 
     @Override
-    public void fromAuthorative(@NonNull ClElementStatistics clElementStatistics) {
+    public void fromAuthorative(@NonNull AcElementStatistics acElementStatistics) {
         // @formatter:off
         if (this.key == null || this.getKey().isNullKey()) {
-            this.setKey(new PfReferenceTimestampKey(clElementStatistics.getParticipantId().getName(),
-                clElementStatistics.getParticipantId().getVersion(), clElementStatistics.getId().toString(),
-                clElementStatistics.getTimeStamp()));
+            this.setKey(new PfReferenceTimestampKey(acElementStatistics.getParticipantId().getName(),
+                acElementStatistics.getParticipantId().getVersion(), acElementStatistics.getId().toString(),
+                acElementStatistics.getTimeStamp()));
         }
         // @formatter:on
-        this.setParticipantId(clElementStatistics.getParticipantId().asConceptKey());
-        this.setState(clElementStatistics.getControlLoopState());
-        this.setClElementUptime(clElementStatistics.getClElementUptime());
+        this.setParticipantId(acElementStatistics.getParticipantId().asConceptKey());
+        this.setState(acElementStatistics.getState());
+        this.setAcElementUptime(acElementStatistics.getAcElementUptime());
     }
 
     @Override
@@ -189,8 +189,8 @@ public class JpaClElementStatistics extends PfConcept implements PfAuthorative<C
             return getClass().getName().compareTo(otherConcept.getClass().getName());
         }
 
-        final JpaClElementStatistics other = (JpaClElementStatistics) otherConcept;
+        final JpaAcElementStatistics other = (JpaAcElementStatistics) otherConcept;
         return new CompareToBuilder().append(this.key, other.key).append(this.state, other.state)
-                .append(this.clElementUptime, other.clElementUptime).toComparison();
+                .append(this.acElementUptime, other.acElementUptime).toComparison();
     }
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts;
+package org.onap.policy.clamp.models.acm.persistence.concepts;
 
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -39,10 +39,10 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NonNull;
 import org.apache.commons.lang3.ObjectUtils;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
+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.common.parameters.annotations.NotNull;
 import org.onap.policy.common.parameters.annotations.Valid;
 import org.onap.policy.models.base.PfAuthorative;
@@ -55,16 +55,16 @@ import org.onap.policy.models.base.validation.annotations.VerifyKey;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 /**
- * Class to represent a control loop in the database.
+ * Class to represent a automation composition in the database.
  *
  * @author Liam Fallon (liam.fallon@est.tech)
  */
 @Entity
-@Table(name = "ControlLoop")
+@Table(name = "AutomationComposition")
 @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
 @Data
 @EqualsAndHashCode(callSuper = false)
-public class JpaControlLoop extends PfConcept implements PfAuthorative<ControlLoop> {
+public class JpaAutomationComposition extends PfConcept implements PfAuthorative<AutomationComposition> {
     private static final long serialVersionUID = -4725410933242154805L;
 
     @EmbeddedId
@@ -82,11 +82,11 @@ public class JpaControlLoop extends PfConcept implements PfAuthorative<ControlLo
 
     @Column
     @NotNull
-    private ControlLoopState state;
+    private AutomationCompositionState state;
 
     @Column
     @NotNull
-    private ControlLoopOrderedState orderedState;
+    private AutomationCompositionOrderedState orderedState;
 
     @Column
     private String description;
@@ -96,34 +96,36 @@ public class JpaControlLoop extends PfConcept implements PfAuthorative<ControlLo
 
     @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
     @NotNull
-    private Map<@NotNull UUID, @NotNull @Valid JpaControlLoopElement> elements;
+    private Map<@NotNull UUID, @NotNull @Valid JpaAutomationCompositionElement> elements;
+    // @formatter:on
 
     /**
-     * The Default Constructor creates a {@link JpaControlLoop} object with a null key.
+     * The Default Constructor creates a {@link JpaAutomationComposition} object with a null key.
      */
-    public JpaControlLoop() {
+    public JpaAutomationComposition() {
         this(new PfConceptKey());
     }
 
     /**
-     * The Key Constructor creates a {@link JpaControlLoop} object with the given concept key.
+     * The Key Constructor creates a {@link JpaAutomationComposition} object with the given concept key.
      *
      * @param key the key
      */
-    public JpaControlLoop(@NonNull final PfConceptKey key) {
-        this(key, new PfConceptKey(), ControlLoopState.UNINITIALISED, new LinkedHashMap<>());
+    public JpaAutomationComposition(@NonNull final PfConceptKey key) {
+        this(key, new PfConceptKey(), AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>());
     }
 
     /**
-     * The Key Constructor creates a {@link JpaControlLoop} object with all mandatory fields.
+     * The Key Constructor creates a {@link JpaAutomationComposition} object with all mandatory fields.
      *
      * @param key the key
-     * @param definition the TOSCA definition of the control loop
-     * @param state the state of the control loop
-     * @param elements the elements of the control looop in participants
+     * @param definition the TOSCA definition of the automation composition
+     * @param state the state of the automation composition
+     * @param elements the elements of the automation composition in participants
      */
-    public JpaControlLoop(@NonNull final PfConceptKey key, @NonNull final PfConceptKey definition,
-            @NonNull final ControlLoopState state, @NonNull final Map<UUID, JpaControlLoopElement> elements) {
+    public JpaAutomationComposition(@NonNull final PfConceptKey key, @NonNull final PfConceptKey definition,
+        @NonNull final AutomationCompositionState state,
+        @NonNull final Map<UUID, JpaAutomationCompositionElement> elements) {
         this.key = key;
         this.definition = definition;
         this.state = state;
@@ -135,14 +137,15 @@ public class JpaControlLoop extends PfConcept implements PfAuthorative<ControlLo
      *
      * @param copyConcept the concept to copy from
      */
-    public JpaControlLoop(@NonNull final JpaControlLoop copyConcept) {
+    public JpaAutomationComposition(@NonNull final JpaAutomationComposition copyConcept) {
         super(copyConcept);
         this.key = new PfConceptKey(copyConcept.key);
         this.definition = new PfConceptKey(copyConcept.definition);
         this.state = copyConcept.state;
         this.orderedState = copyConcept.orderedState;
         this.description = copyConcept.description;
-        this.elements = PfUtils.mapMap(copyConcept.elements, JpaControlLoopElement::new, new LinkedHashMap<>(0));
+        this.elements =
+            PfUtils.mapMap(copyConcept.elements, JpaAutomationCompositionElement::new, new LinkedHashMap<>(0));
         this.primed = copyConcept.primed;
     }
 
@@ -151,44 +154,46 @@ public class JpaControlLoop extends PfConcept implements PfAuthorative<ControlLo
      *
      * @param authorativeConcept the authorative concept to copy from
      */
-    public JpaControlLoop(@NonNull final ControlLoop authorativeConcept) {
+    public JpaAutomationComposition(@NonNull final AutomationComposition authorativeConcept) {
         this.fromAuthorative(authorativeConcept);
     }
 
     @Override
-    public ControlLoop toAuthorative() {
-        var controlLoop = new ControlLoop();
-
-        controlLoop.setName(getKey().getName());
-        controlLoop.setVersion(getKey().getVersion());
-        controlLoop.setDefinition(new ToscaConceptIdentifier(definition));
-        controlLoop.setState(state);
-        controlLoop.setOrderedState(orderedState != null ? orderedState : state.asOrderedState());
-        controlLoop.setDescription(description);
-        controlLoop.setElements(PfUtils.mapMap(elements, JpaControlLoopElement::toAuthorative, new LinkedHashMap<>(0)));
-        controlLoop.setPrimed(primed);
-
-        return controlLoop;
+    public AutomationComposition toAuthorative() {
+        var automationComposition = new AutomationComposition();
+
+        automationComposition.setName(getKey().getName());
+        automationComposition.setVersion(getKey().getVersion());
+        automationComposition.setDefinition(new ToscaConceptIdentifier(definition));
+        automationComposition.setState(state);
+        automationComposition.setOrderedState(orderedState != null ? orderedState : state.asOrderedState());
+        automationComposition.setDescription(description);
+        automationComposition.setElements(
+            PfUtils.mapMap(elements, JpaAutomationCompositionElement::toAuthorative, new LinkedHashMap<>(0)));
+        automationComposition.setPrimed(primed);
+
+        return automationComposition;
     }
 
     @Override
-    public void fromAuthorative(@NonNull final ControlLoop controlLoop) {
+    public void fromAuthorative(@NonNull final AutomationComposition automationComposition) {
         if (this.key == null || this.getKey().isNullKey()) {
-            this.setKey(new PfConceptKey(controlLoop.getName(), controlLoop.getVersion()));
+            this.setKey(new PfConceptKey(automationComposition.getName(), automationComposition.getVersion()));
         }
 
-        this.definition = controlLoop.getDefinition().asConceptKey();
-        this.state = controlLoop.getState();
-        this.orderedState = controlLoop.getOrderedState();
-        this.description = controlLoop.getDescription();
-        this.primed = controlLoop.getPrimed();
-
-        this.elements = new LinkedHashMap<>(controlLoop.getElements().size());
-        for (Entry<UUID, ControlLoopElement> elementEntry : controlLoop.getElements().entrySet()) {
-            var jpaControlLoopElement = new JpaControlLoopElement();
-            jpaControlLoopElement.setKey(new PfReferenceKey(getKey(), elementEntry.getValue().getId().toString()));
-            jpaControlLoopElement.fromAuthorative(elementEntry.getValue());
-            this.elements.put(elementEntry.getKey(), jpaControlLoopElement);
+        this.definition = automationComposition.getDefinition().asConceptKey();
+        this.state = automationComposition.getState();
+        this.orderedState = automationComposition.getOrderedState();
+        this.description = automationComposition.getDescription();
+        this.primed = automationComposition.getPrimed();
+
+        this.elements = new LinkedHashMap<>(automationComposition.getElements().size());
+        for (Entry<UUID, AutomationCompositionElement> elementEntry : automationComposition.getElements().entrySet()) {
+            var jpaAutomationCompositionElement = new JpaAutomationCompositionElement();
+            jpaAutomationCompositionElement
+                .setKey(new PfReferenceKey(getKey(), elementEntry.getValue().getId().toString()));
+            jpaAutomationCompositionElement.fromAuthorative(elementEntry.getValue());
+            this.elements.put(elementEntry.getKey(), jpaAutomationCompositionElement);
         }
     }
 
@@ -198,7 +203,7 @@ public class JpaControlLoop extends PfConcept implements PfAuthorative<ControlLo
 
         keyList.add(definition);
 
-        for (JpaControlLoopElement element : elements.values()) {
+        for (JpaAutomationCompositionElement element : elements.values()) {
             keyList.addAll(element.getKeys());
         }
 
@@ -211,7 +216,7 @@ public class JpaControlLoop extends PfConcept implements PfAuthorative<ControlLo
         definition.clean();
         description = (description == null ? null : description.trim());
 
-        for (JpaControlLoopElement element : elements.values()) {
+        for (JpaAutomationCompositionElement element : elements.values()) {
             element.clean();
         }
     }
@@ -228,7 +233,7 @@ public class JpaControlLoop extends PfConcept implements PfAuthorative<ControlLo
             return this.getClass().getName().compareTo(otherConcept.getClass().getName());
         }
 
-        final JpaControlLoop other = (JpaControlLoop) otherConcept;
+        final JpaAutomationComposition other = (JpaAutomationComposition) otherConcept;
         int result = key.compareTo(other.key);
         if (result != 0) {
             return result;
@@ -20,7 +20,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts;
+package org.onap.policy.clamp.models.acm.persistence.concepts;
 
 import java.util.List;
 import java.util.UUID;
@@ -35,9 +35,9 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NonNull;
 import org.apache.commons.lang3.ObjectUtils;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
+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.common.parameters.annotations.NotNull;
 import org.onap.policy.models.base.PfAuthorative;
 import org.onap.policy.models.base.PfConcept;
@@ -48,16 +48,16 @@ import org.onap.policy.models.base.validation.annotations.VerifyKey;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 /**
- * Class to represent a participant control loop element in the database.
+ * Class to represent a participant automation composition element in the database.
  *
  * @author Liam Fallon (liam.fallon@est.tech)
  */
 @Entity
-@Table(name = "ControlLoopElement")
+@Table(name = "AutomationCompositionElement")
 @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
 @Data
 @EqualsAndHashCode(callSuper = false)
-public class JpaControlLoopElement extends PfConcept implements PfAuthorative<ControlLoopElement> {
+public class JpaAutomationCompositionElement extends PfConcept implements PfAuthorative<AutomationCompositionElement> {
     private static final long serialVersionUID = -1791732273187890213L;
 
     @EmbeddedId
@@ -86,41 +86,41 @@ public class JpaControlLoopElement extends PfConcept implements PfAuthorative<Co
 
     @Column
     @NotNull
-    private ControlLoopState state;
+    private AutomationCompositionState state;
 
     @Column
     @NotNull
-    private ControlLoopOrderedState orderedState;
+    private AutomationCompositionOrderedState orderedState;
 
     @Column
     private String description;
 
     /**
-     * The Default Constructor creates a {@link JpaControlLoopElement} object with a null key.
+     * The Default Constructor creates a {@link JpaAutomationCompositionElement} object with a null key.
      */
-    public JpaControlLoopElement() {
+    public JpaAutomationCompositionElement() {
         this(new PfReferenceKey());
     }
 
     /**
-     * The Key Constructor creates a {@link JpaControlLoopElement} object with the given concept key.
+     * The Key Constructor creates a {@link JpaAutomationCompositionElement} object with the given concept key.
      *
      * @param key the key
      */
-    public JpaControlLoopElement(@NonNull final PfReferenceKey key) {
-        this(key, new PfConceptKey(), new PfConceptKey(), ControlLoopState.UNINITIALISED);
+    public JpaAutomationCompositionElement(@NonNull final PfReferenceKey key) {
+        this(key, new PfConceptKey(), new PfConceptKey(), AutomationCompositionState.UNINITIALISED);
     }
 
     /**
-     * The Key Constructor creates a {@link JpaControlLoopElement} object with all mandatory fields.
+     * The Key Constructor creates a {@link JpaAutomationCompositionElement} object with all mandatory fields.
      *
      * @param key the key
-     * @param definition the TOSCA definition of the control loop element
-     * @param participantType the TOSCA definition of the participant running the control loop element
-     * @param state the state of the control loop
+     * @param definition the TOSCA definition of the automation composition element
+     * @param participantType the TOSCA definition of the participant running the automation composition element
+     * @param state the state of the automation composition
      */
-    public JpaControlLoopElement(@NonNull final PfReferenceKey key, @NonNull final PfConceptKey definition,
-            @NonNull final PfConceptKey participantType, @NonNull final ControlLoopState state) {
+    public JpaAutomationCompositionElement(@NonNull final PfReferenceKey key, @NonNull final PfConceptKey definition,
+        @NonNull final PfConceptKey participantType, @NonNull final AutomationCompositionState state) {
         this.key = key;
         this.definition = definition;
         this.participantType = participantType;
@@ -132,7 +132,7 @@ public class JpaControlLoopElement extends PfConcept implements PfAuthorative<Co
      *
      * @param copyConcept the concept to copy from
      */
-    public JpaControlLoopElement(@NonNull final JpaControlLoopElement copyConcept) {
+    public JpaAutomationCompositionElement(@NonNull final JpaAutomationCompositionElement copyConcept) {
         super(copyConcept);
         this.key = new PfReferenceKey(copyConcept.key);
         this.definition = new PfConceptKey(copyConcept.definition);
@@ -148,13 +148,13 @@ public class JpaControlLoopElement extends PfConcept implements PfAuthorative<Co
      *
      * @param authorativeConcept the authorative concept to copy from
      */
-    public JpaControlLoopElement(@NonNull final ControlLoopElement authorativeConcept) {
+    public JpaAutomationCompositionElement(@NonNull final AutomationCompositionElement authorativeConcept) {
         this.fromAuthorative(authorativeConcept);
     }
 
     @Override
-    public ControlLoopElement toAuthorative() {
-        var element = new ControlLoopElement();
+    public AutomationCompositionElement toAuthorative() {
+        var element = new AutomationCompositionElement();
 
         element.setId(UUID.fromString(getKey().getLocalName()));
         element.setDefinition(new ToscaConceptIdentifier(definition));
@@ -168,7 +168,7 @@ public class JpaControlLoopElement extends PfConcept implements PfAuthorative<Co
     }
 
     @Override
-    public void fromAuthorative(@NonNull final ControlLoopElement element) {
+    public void fromAuthorative(@NonNull final AutomationCompositionElement element) {
         if (this.key == null || this.getKey().isNullKey()) {
             this.setKey(new PfReferenceKey());
             getKey().setLocalName(element.getId().toString());
@@ -217,7 +217,7 @@ public class JpaControlLoopElement extends PfConcept implements PfAuthorative<Co
             return this.getClass().getName().compareTo(otherConcept.getClass().getName());
         }
 
-        final JpaControlLoopElement other = (JpaControlLoopElement) otherConcept;
+        final JpaAutomationCompositionElement other = (JpaAutomationCompositionElement) otherConcept;
         int result = key.compareTo(other.key);
         if (result != 0) {
             return result;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts;
+package org.onap.policy.clamp.models.acm.persistence.concepts;
 
 import java.io.Serializable;
 import java.util.List;
@@ -33,9 +33,9 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NonNull;
 import org.apache.commons.lang3.ObjectUtils;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantHealthStatus;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.concepts.Participant;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.common.parameters.annotations.NotNull;
 import org.onap.policy.models.base.PfAuthorative;
 import org.onap.policy.models.base.PfConcept;
@@ -21,7 +21,7 @@
  */
 
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts;
+package org.onap.policy.clamp.models.acm.persistence.concepts;
 
 import java.io.Serializable;
 import java.util.List;
@@ -37,9 +37,9 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NonNull;
 import org.apache.commons.lang3.builder.CompareToBuilder;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantHealthStatus;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatistics;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantStatistics;
 import org.onap.policy.common.parameters.annotations.NotNull;
 import org.onap.policy.models.base.PfAuthorative;
 import org.onap.policy.models.base.PfConcept;
@@ -50,7 +50,7 @@ import org.onap.policy.models.base.validation.annotations.VerifyKey;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 /**
- * Class to represent a control loop statistics in the database.
+ * Class to represent a participant statistics in the database.
  *
  * @author Ramesh Murugan Iyer (ramesh.murugan.iyer@est.tech)
  */
@@ -124,7 +124,7 @@ public class JpaParticipantStatistics extends PfConcept implements PfAuthorative
      * The Key Constructor creates a {@link JpaParticipantStatistics} object with all mandatory fields.
      *
      * @param key the key
-     * @param participantId the TOSCA definition of the control loop participant
+     * @param participantId the TOSCA definition of the participant
      */
     public JpaParticipantStatistics(@NonNull final PfTimestampKey key, @NonNull final PfConceptKey participantId) {
         this.key = key;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider;
+package org.onap.policy.clamp.models.acm.persistence.provider;
 
 import java.time.Instant;
 import java.util.List;
@@ -27,9 +27,9 @@ import java.util.stream.Collectors;
 import javax.ws.rs.core.Response.Status;
 import lombok.AllArgsConstructor;
 import lombok.NonNull;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaClElementStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ClElementStatisticsRepository;
+import org.onap.policy.clamp.models.acm.concepts.AcElementStatistics;
+import org.onap.policy.clamp.models.acm.persistence.concepts.JpaAcElementStatistics;
+import org.onap.policy.clamp.models.acm.persistence.repository.AcElementStatisticsRepository;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.base.PfReferenceTimestampKey;
 import org.onap.policy.models.dao.PfFilterParameters;
@@ -37,87 +37,89 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 /**
- * This class provides the provision of information on control loop element statistics in the database to callers.
+ * This class provides the provision of information on automation composition element statistics in the database to
+ * callers.
  *
  * @author Ramesh Murugan Iyer (ramesh.murugan.iyer@est.tech)
  */
 @Service
 @Transactional
 @AllArgsConstructor
-public class ClElementStatisticsProvider {
+public class AcElementStatisticsProvider {
 
-    private ClElementStatisticsRepository clElementStatisticsRepository;
+    private AcElementStatisticsRepository acElementStatisticsRepository;
 
     /**
-     * Creates control loop element statistics.
+     * Creates automation composition element statistics.
      *
-     * @param clElementStatisticsList a specification of the CL element statistics to create
-     * @return the clElement statistics created
+     * @param acElementStatisticsList a specification of the statistics to create
+     * @return the Element statistics created
      * @throws PfModelException on initiation errors
      */
-    public List<ClElementStatistics> createClElementStatistics(
-            @NonNull final List<ClElementStatistics> clElementStatisticsList) throws PfModelException {
+    public List<AcElementStatistics> createAcElementStatistics(
+        @NonNull final List<AcElementStatistics> acElementStatisticsList) throws PfModelException {
 
         try {
-            var jpaClElementStatisticsList = ProviderUtils.getJpaAndValidateList(clElementStatisticsList,
-                    JpaClElementStatistics::new, "control loop element statistics");
+            var jpaAcElementStatisticsList = ProviderUtils.getJpaAndValidateList(acElementStatisticsList,
+                JpaAcElementStatistics::new, "automation composition element statistics");
 
-            var jpaClElementStatisticsSaved = clElementStatisticsRepository.saveAll(jpaClElementStatisticsList);
+            var jpaAcElementStatisticsSaved = acElementStatisticsRepository.saveAll(jpaAcElementStatisticsList);
 
-            // Return the saved control loop element statistics
-            return asClElementStatisticsList(jpaClElementStatisticsSaved);
+            // Return the saved automation composition element statistics
+            return asAcElementStatisticsList(jpaAcElementStatisticsSaved);
         } catch (IllegalArgumentException e) {
-            throw new PfModelException(Status.BAD_REQUEST, "Error in save control loop element statistics", e);
+            throw new PfModelException(Status.BAD_REQUEST, "Error in save automation composition element statistics",
+                e);
         }
     }
 
     /**
-     * Convert JPA clElement statistics list to clElement statistics list.
+     * Convert JPA acElement statistics list to acElement statistics list.
      *
-     * @param jpaClElementStatistics the list to convert
-     * @return the clElement statistics list
+     * @param jpaAcElementStatistics the list to convert
+     * @return the acElement statistics list
      */
-    private List<ClElementStatistics> asClElementStatisticsList(List<JpaClElementStatistics> jpaClElementStatistics) {
-        return jpaClElementStatistics.stream().map(JpaClElementStatistics::toAuthorative).collect(Collectors.toList());
+    private List<AcElementStatistics> asAcElementStatisticsList(List<JpaAcElementStatistics> jpaAcElementStatistics) {
+        return jpaAcElementStatistics.stream().map(JpaAcElementStatistics::toAuthorative).collect(Collectors.toList());
     }
 
     /**
-     * Get clElement statistics.
+     * Get acElement statistics.
      *
      * @param name the name of the participant
      * @param version version of the participant
-     * @param id of the control loop element
+     * @param id of the automation composition element
      * @param timestamp timestamp of the statistics
-     * @return the clElement statistics found
+     * @return the acElement statistics found
      */
     @Transactional(readOnly = true)
-    public List<ClElementStatistics> getClElementStatistics(final String name, final String version, final String id,
-            final Instant timestamp) {
+    public List<AcElementStatistics> getAcElementStatistics(final String name, final String version, final String id,
+        final Instant timestamp) {
         if (name != null && version != null && timestamp != null && id != null) {
-            return asClElementStatisticsList(clElementStatisticsRepository
-                    .findAllById(List.of(new PfReferenceTimestampKey(name, version, id, timestamp))));
+            return asAcElementStatisticsList(acElementStatisticsRepository
+                .findAllById(List.of(new PfReferenceTimestampKey(name, version, id, timestamp))));
         } else if (name != null) {
-            return getFilteredClElementStatistics(name, version, null, null, null, "DESC", 0);
+            return getFilteredAcElementStatistics(name, version, null, null, null, "DESC", 0);
         }
-        return asClElementStatisticsList(clElementStatisticsRepository.findAll());
+        return asAcElementStatisticsList(acElementStatisticsRepository.findAll());
     }
 
     /**
-     * Get filtered clElement statistics.
+     * Get filtered acElement statistics.
      *
-     * @param name the clElement name for the statistics to get
-     * @param version the clElement version for the statistics to get
+     * @param name the acElement name for the statistics to get
+     * @param version the acElement version for the statistics to get
      * @param startTimeStamp startTimeStamp to filter statistics
      * @param endTimeStamp endTimeStamp to filter statistics
      * @param sortOrder sortOrder to query database
      * @param getRecordNum Total query count from database
      * @param filterMap the filters to apply to the get operation
-     * @return the clElement statistics found
+     * @return the acElement statistics found
      */
     @Transactional(readOnly = true)
-    public List<ClElementStatistics> getFilteredClElementStatistics(final String name, final String version,
-            final Instant startTimeStamp, final Instant endTimeStamp, Map<String, Object> filterMap,
-            final String sortOrder, final int getRecordNum) {
+    public List<AcElementStatistics> getFilteredAcElementStatistics(final String name, final String version,
+        final Instant startTimeStamp, final Instant endTimeStamp, Map<String, Object> filterMap, final String sortOrder,
+        final int getRecordNum) {
 
         // @formatter:off
         PfFilterParameters filterParams = PfFilterParameters
@@ -131,7 +133,7 @@ public class ClElementStatisticsProvider {
                 .recordNum(getRecordNum)
                 .build();
         // @formatter:on
-        return asClElementStatisticsList(
-                clElementStatisticsRepository.getFiltered(JpaClElementStatistics.class, filterParams));
+        return asAcElementStatisticsList(
+            acElementStatisticsRepository.getFiltered(JpaAcElementStatistics.class, filterParams));
     }
 }
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java
new file mode 100644 (file)
index 0000000..7606130
--- /dev/null
@@ -0,0 +1,287 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.models.acm.persistence.provider;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import javax.persistence.EntityNotFoundException;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+import lombok.AllArgsConstructor;
+import lombok.NonNull;
+import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
+import org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationComposition;
+import org.onap.policy.clamp.models.acm.persistence.repository.AutomationCompositionRepository;
+import org.onap.policy.clamp.models.acm.persistence.repository.ToscaNodeTemplateRepository;
+import org.onap.policy.clamp.models.acm.persistence.repository.ToscaNodeTemplatesRepository;
+import org.onap.policy.models.base.PfConceptKey;
+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;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaTypedEntityFilter;
+import org.onap.policy.models.tosca.simple.concepts.JpaToscaNodeTemplate;
+import org.onap.policy.models.tosca.simple.concepts.JpaToscaNodeTemplates;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * This class provides information on automation composition concepts in the database to callers.
+ */
+@Service
+@Transactional
+@AllArgsConstructor
+public class AutomationCompositionProvider {
+
+    private final AutomationCompositionRepository automationCompositionRepository;
+    private final ToscaNodeTemplateRepository toscaNodeTemplateRepository;
+    private final ToscaNodeTemplatesRepository toscaNodeTemplatesRepository;
+
+    /**
+     * Get automation composition.
+     *
+     * @param automationCompositionId the ID of the automation composition to get
+     * @return the automation composition found
+     * @throws PfModelException on errors getting the automation composition
+     */
+    @Transactional(readOnly = true)
+    public AutomationComposition getAutomationComposition(final ToscaConceptIdentifier automationCompositionId)
+        throws PfModelException {
+        try {
+            return automationCompositionRepository.getById(automationCompositionId.asConceptKey()).toAuthorative();
+        } catch (EntityNotFoundException e) {
+            throw new PfModelException(Status.NOT_FOUND, "AutomationComposition not found", e);
+        }
+    }
+
+    /**
+     * Find automation composition by automationCompositionId.
+     *
+     * @param name the name of the automation composition to get, null to get all automation compositions
+     * @param version the version of the automation composition to get, null to get all automation compositions
+     * @return the automation composition found
+     * @throws PfModelException on errors getting the automation composition
+     */
+    @Transactional(readOnly = true)
+    public Optional<AutomationComposition> findAutomationComposition(@NonNull final String name,
+        @NonNull final String version) throws PfModelException {
+        return findAutomationComposition(new PfConceptKey(name, version));
+    }
+
+    /**
+     * Find automation composition by automationCompositionId.
+     *
+     * @param automationCompositionId the ID of the automation composition to get
+     * @return the automation composition found
+     * @throws PfModelException on errors getting the automation composition
+     */
+    @Transactional(readOnly = true)
+    public Optional<AutomationComposition> findAutomationComposition(
+        final ToscaConceptIdentifier automationCompositionId) throws PfModelException {
+        return findAutomationComposition(automationCompositionId.asConceptKey());
+    }
+
+    private Optional<AutomationComposition> findAutomationComposition(@NonNull final PfConceptKey key)
+        throws PfModelException {
+        try {
+            return automationCompositionRepository.findById(key).map(JpaAutomationComposition::toAuthorative);
+        } catch (IllegalArgumentException e) {
+            throw new PfModelException(Status.BAD_REQUEST, "Not valid parameter", e);
+        }
+    }
+
+    /**
+     * Save automation composition.
+     *
+     * @param automationComposition the automation composition to update
+     * @return the updated automation composition
+     * @throws PfModelException on errors updating the automation composition
+     */
+    public AutomationComposition saveAutomationComposition(final AutomationComposition automationComposition)
+        throws PfModelException {
+        try {
+            var result = automationCompositionRepository.save(ProviderUtils.getJpaAndValidate(automationComposition,
+                JpaAutomationComposition::new, "automation composition"));
+
+            // Return the saved participant
+            return result.toAuthorative();
+        } catch (IllegalArgumentException e) {
+            throw new PfModelException(Status.BAD_REQUEST, "Error in save automationComposition", e);
+        }
+    }
+
+    /**
+     * Get all automation compositions.
+     *
+     * @return all automation compositions found
+     * @throws PfModelException on errors getting automation compositions
+     */
+    @Transactional(readOnly = true)
+    public List<AutomationComposition> getAutomationCompositions() throws PfModelException {
+
+        return ProviderUtils.asEntityList(automationCompositionRepository.findAll());
+    }
+
+    /**
+     * Get automation compositions.
+     *
+     * @param name the name of the automation composition to get, null to get all automation compositions
+     * @param version the version of the automation composition to get, null to get all automation compositions
+     * @return the automation compositions found
+     * @throws PfModelException on errors getting automation compositions
+     */
+    @Transactional(readOnly = true)
+    public List<AutomationComposition> getAutomationCompositions(final String name, final String version)
+        throws PfModelException {
+
+        return ProviderUtils
+            .asEntityList(automationCompositionRepository.getFiltered(JpaAutomationComposition.class, name, version));
+    }
+
+    /**
+     * Saves automation compositions.
+     *
+     * @param automationCompositions a specification of the automation compositions to create
+     * @return the automation compositions created
+     * @throws PfModelException on errors creating automation compositions
+     */
+    public List<AutomationComposition> saveAutomationCompositions(
+        @NonNull final List<AutomationComposition> automationCompositions) throws PfModelException {
+        try {
+            var result =
+                automationCompositionRepository.saveAll(ProviderUtils.getJpaAndValidateList(automationCompositions,
+                    JpaAutomationComposition::new, "automation compositions"));
+
+            // Return the saved participant
+            return ProviderUtils.asEntityList(result);
+        } catch (IllegalArgumentException e) {
+            throw new PfModelException(Status.BAD_REQUEST, "Error in save AutomationCompositions", e);
+        }
+    }
+
+    /**
+     * Saves Instance Properties to the database.
+     *
+     * @param serviceTemplate the service template
+     * @return a Map of tosca node templates
+     */
+    public Map<String, ToscaNodeTemplate> saveInstanceProperties(ToscaServiceTemplate serviceTemplate) {
+        Map<String, ToscaNodeTemplate> savedNodeTemplates = new HashMap<>();
+
+        var jpaToscaNodeTemplates = new JpaToscaNodeTemplates();
+        jpaToscaNodeTemplates.fromAuthorative(List.of(serviceTemplate.getToscaTopologyTemplate().getNodeTemplates()));
+
+        toscaNodeTemplatesRepository.save(jpaToscaNodeTemplates);
+        serviceTemplate.getToscaTopologyTemplate().getNodeTemplates().forEach(savedNodeTemplates::put);
+
+        return savedNodeTemplates;
+    }
+
+    /**
+     * Delete a automation composition.
+     *
+     * @param name the name of the automation composition to delete
+     * @param version the version of the automation composition to delete
+     * @return the automation composition deleted
+     * @throws PfModelException on errors deleting the automation composition
+     */
+    public AutomationComposition deleteAutomationComposition(@NonNull final String name, @NonNull final String version)
+        throws PfModelException {
+
+        var automationCompositionKey = new PfConceptKey(name, version);
+        var jpaDeleteAutomationComposition = automationCompositionRepository.findById(automationCompositionKey);
+
+        if (jpaDeleteAutomationComposition.isEmpty()) {
+            String errorMessage = "delete of automation composition \"" + automationCompositionKey.getId()
+                + "\" failed, automation composition does not exist";
+            throw new PfModelException(Response.Status.BAD_REQUEST, errorMessage);
+        }
+
+        automationCompositionRepository.deleteById(automationCompositionKey);
+
+        return jpaDeleteAutomationComposition.get().toAuthorative();
+    }
+
+    /**
+     * Deletes Instance Properties on the database.
+     *
+     * @param filteredToscaNodeTemplateMap filtered node templates map to delete
+     * @param filteredToscaNodeTemplateList filtered node template list to delete
+     */
+    public void deleteInstanceProperties(Map<String, ToscaNodeTemplate> filteredToscaNodeTemplateMap,
+        List<ToscaNodeTemplate> filteredToscaNodeTemplateList) {
+
+        var jpaToscaNodeTemplates = new JpaToscaNodeTemplates();
+        jpaToscaNodeTemplates.fromAuthorative(List.of(filteredToscaNodeTemplateMap));
+
+        toscaNodeTemplatesRepository.save(jpaToscaNodeTemplates);
+
+        filteredToscaNodeTemplateList.forEach(template -> {
+            var jpaToscaNodeTemplate = new JpaToscaNodeTemplate(template);
+
+            toscaNodeTemplateRepository.delete(jpaToscaNodeTemplate);
+        });
+    }
+
+    /**
+     * Get All Node Templates.
+     *
+     * @return the list of node templates found
+     * @throws PfModelException on errors getting node templates
+     */
+    @Transactional(readOnly = true)
+    public List<ToscaNodeTemplate> getAllNodeTemplates() {
+        return ProviderUtils.asEntityList(toscaNodeTemplateRepository.findAll());
+    }
+
+    /**
+     * Get Node Templates.
+     *
+     * @param name the name of the node template to get, null to get all node templates
+     * @param version the version of the node template to get, null to get all node templates
+     * @return the node templates found
+     * @throws PfModelException on errors getting node templates
+     */
+    @Transactional(readOnly = true)
+    public List<ToscaNodeTemplate> getNodeTemplates(final String name, final String version) {
+        return ProviderUtils
+            .asEntityList(toscaNodeTemplateRepository.getFiltered(JpaToscaNodeTemplate.class, name, version));
+    }
+
+    /**
+     * Get filtered node templates.
+     *
+     * @param filter the filter for the node templates to get
+     * @return the node templates found
+     * @throws PfModelException on errors getting node templates
+     */
+    @Transactional(readOnly = true)
+    public List<ToscaNodeTemplate> getFilteredNodeTemplates(
+        @NonNull final ToscaTypedEntityFilter<ToscaNodeTemplate> filter) {
+
+        return filter.filter(ProviderUtils.asEntityList(toscaNodeTemplateRepository
+            .getFiltered(JpaToscaNodeTemplate.class, filter.getName(), filter.getVersion())));
+    }
+}
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider;
+package org.onap.policy.clamp.models.acm.persistence.provider;
 
 import java.util.List;
 import java.util.Optional;
 import javax.ws.rs.core.Response.Status;
 import lombok.AllArgsConstructor;
 import lombok.NonNull;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaParticipant;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ParticipantRepository;
+import org.onap.policy.clamp.models.acm.concepts.Participant;
+import org.onap.policy.clamp.models.acm.persistence.concepts.JpaParticipant;
+import org.onap.policy.clamp.models.acm.persistence.repository.ParticipantRepository;
 import org.onap.policy.models.base.PfConceptKey;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.base.PfModelRuntimeException;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider;
+package org.onap.policy.clamp.models.acm.persistence.provider;
 
 import java.time.Instant;
 import java.util.List;
@@ -27,9 +27,9 @@ import java.util.stream.Collectors;
 import javax.ws.rs.core.Response.Status;
 import lombok.AllArgsConstructor;
 import lombok.NonNull;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaParticipantStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ParticipantStatisticsRepository;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantStatistics;
+import org.onap.policy.clamp.models.acm.persistence.concepts.JpaParticipantStatistics;
+import org.onap.policy.clamp.models.acm.persistence.repository.ParticipantStatisticsRepository;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.base.PfTimestampKey;
 import org.onap.policy.models.dao.PfFilterParameters;
@@ -103,7 +103,7 @@ public class ParticipantStatisticsProvider {
     /**
      * Creates Participant statistics.
      *
-     * @param participantStatisticsList a specification of the CL statistics to create
+     * @param participantStatisticsList a specification of the statistics to create
      * @return the participant statistics created
      * @throws PfModelException on errors creating participant statistics
      */
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider;
+package org.onap.policy.clamp.models.acm.persistence.provider;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -80,7 +80,7 @@ public final class ProviderUtils {
     }
 
     /**
-     * Convert JPA control loop list to an authorative control loop list.
+     * Convert JPA automation composition list to an authorative automation composition list.
      *
      * @param <T> the type of TOSCA entity
      * @param <J> the type of JPA TOSCA entity
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider;
+package org.onap.policy.clamp.models.acm.persistence.provider;
 
 import java.util.HashMap;
 import java.util.List;
@@ -26,7 +26,7 @@ import java.util.Map;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 import lombok.RequiredArgsConstructor;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ToscaServiceTemplateRepository;
+import org.onap.policy.clamp.models.acm.persistence.repository.ToscaServiceTemplateRepository;
 import org.onap.policy.models.base.PfConceptKey;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
@@ -83,19 +83,19 @@ public class ServiceTemplateProvider {
     }
 
     /**
-     * Get the requested control loop definitions.
+     * Get the requested automation composition definitions.
      *
      * @param name the name of the definition to get, null for all definitions
      * @param version the version of the definition to get, null for all definitions
-     * @return the control loop definitions
-     * @throws PfModelException on errors getting control loop definitions
+     * @return the automation composition definitions
+     * @throws PfModelException on errors getting automation composition definitions
      */
     @Transactional(readOnly = true)
     public ToscaServiceTemplate getToscaServiceTemplate(String name, String version) throws PfModelException {
         var serviceTemplateKey = new PfConceptKey(name, version);
         var jpaServiceTemplates = serviceTemplateRepository.findById(serviceTemplateKey);
         if (jpaServiceTemplates.isEmpty()) {
-            throw new PfModelException(Status.NOT_FOUND, "Control Loop definitions not found");
+            throw new PfModelException(Status.NOT_FOUND, "Automation composition definitions not found");
         }
         return jpaServiceTemplates.get().toAuthorative();
     }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository;
+package org.onap.policy.clamp.models.acm.persistence.repository;
 
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaClElementStatistics;
+import org.onap.policy.clamp.models.acm.persistence.concepts.JpaAcElementStatistics;
 import org.onap.policy.models.base.PfReferenceTimestampKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface ClElementStatisticsRepository
-        extends JpaRepository<JpaClElementStatistics, PfReferenceTimestampKey>, FilterRepository {
+public interface AcElementStatisticsRepository
+        extends JpaRepository<JpaAcElementStatistics, PfReferenceTimestampKey>, FilterRepository {
 
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository;
+package org.onap.policy.clamp.models.acm.persistence.repository;
 
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaControlLoop;
+import org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationComposition;
 import org.onap.policy.models.base.PfConceptKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface ControlLoopRepository extends JpaRepository<JpaControlLoop, PfConceptKey>, FilterRepository {
-
+public interface AutomationCompositionRepository
+    extends JpaRepository<JpaAutomationComposition, PfConceptKey>, FilterRepository {
 }
@@ -18,9 +18,9 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository;
+package org.onap.policy.clamp.models.acm.persistence.repository;
 
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaParticipant;
+import org.onap.policy.clamp.models.acm.persistence.concepts.JpaParticipant;
 import org.onap.policy.models.base.PfConceptKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
@@ -18,9 +18,9 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository;
+package org.onap.policy.clamp.models.acm.persistence.repository;
 
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaParticipantStatistics;
+import org.onap.policy.clamp.models.acm.persistence.concepts.JpaParticipantStatistics;
 import org.onap.policy.models.base.PfTimestampKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.rest;
+package org.onap.policy.clamp.models.acm.rest;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.onap.policy.clamp.controlloop.models.messages.rest.SimpleResponse;
+import org.onap.policy.clamp.models.acm.messages.rest.SimpleResponse;
 import org.onap.policy.models.errors.concepts.ErrorResponseInfo;
 import org.springframework.http.ResponseEntity;
 
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.common.utils;
+package org.onap.policy.clamp.models.acm.utils;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElementDefinition;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantDefinition;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantUpdates;
+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.ParticipantDefinition;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantUpdates;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeType;
@@ -34,55 +34,55 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
 
 /**
- * Utility functions used in controlloop-runtime and participants.
+ * Utility functions used in acm-runtime and participants.
  *
  */
-public class CommonUtils {
+public class AcmUtils {
 
-    private CommonUtils() {
+    private AcmUtils() {
         throw new IllegalStateException("Utility class");
     }
 
     /**
      * Prepare participant updates map.
      *
-     * @param clElement controlloop element
+     * @param acElement automation composition element
      * @param participantUpdates list of participantUpdates
      */
-    public static void prepareParticipantUpdate(ControlLoopElement clElement,
+    public static void prepareParticipantUpdate(AutomationCompositionElement acElement,
         List<ParticipantUpdates> participantUpdates) {
         if (participantUpdates.isEmpty()) {
-            participantUpdates.add(getControlLoopElementList(clElement));
+            participantUpdates.add(getAutomationCompositionElementList(acElement));
             return;
         }
 
         var participantExists = false;
         for (ParticipantUpdates participantUpdate : participantUpdates) {
-            if (participantUpdate.getParticipantId().equals(clElement.getParticipantId())) {
-                participantUpdate.setControlLoopElementList(List.of(clElement));
+            if (participantUpdate.getParticipantId().equals(acElement.getParticipantId())) {
+                participantUpdate.setAutomationCompositionElementList(List.of(acElement));
                 participantExists = true;
             }
         }
         if (!participantExists) {
-            participantUpdates.add(getControlLoopElementList(clElement));
+            participantUpdates.add(getAutomationCompositionElementList(acElement));
         }
     }
 
-    private static ParticipantUpdates getControlLoopElementList(ControlLoopElement clElement) {
+    private static ParticipantUpdates getAutomationCompositionElementList(AutomationCompositionElement acElement) {
         var participantUpdate = new ParticipantUpdates();
-        participantUpdate.setParticipantId(clElement.getParticipantId());
-        participantUpdate.setControlLoopElementList(List.of(clElement));
+        participantUpdate.setParticipantId(acElement.getParticipantId());
+        participantUpdate.setAutomationCompositionElementList(List.of(acElement));
         return participantUpdate;
     }
 
     /**
-     * Set the Policy information in the service template for the controlloopelement.
+     * Set the Policy information in the service template for the automation composition element.
      *
-     * @param clElement controlloop element
+     * @param acElement automation composition element
      * @param toscaServiceTemplate ToscaServiceTemplate
      */
-    public static void setServiceTemplatePolicyInfo(ControlLoopElement clElement,
-            ToscaServiceTemplate toscaServiceTemplate) {
+    public static void setServiceTemplatePolicyInfo(AutomationCompositionElement acElement,
+        ToscaServiceTemplate toscaServiceTemplate) {
         // Pass respective PolicyTypes or Policies as part of toscaServiceTemplateFragment
         if (toscaServiceTemplate.getPolicyTypes() == null
             && toscaServiceTemplate.getToscaTopologyTemplate().getPolicies() == null) {
@@ -94,59 +94,59 @@ public class CommonUtils {
         toscaTopologyTemplate.setPolicies(toscaServiceTemplate.getToscaTopologyTemplate().getPolicies());
         toscaServiceTemplateFragment.setToscaTopologyTemplate(toscaTopologyTemplate);
         toscaServiceTemplateFragment.setDataTypes(toscaServiceTemplate.getDataTypes());
-        clElement.setToscaServiceTemplateFragment(toscaServiceTemplateFragment);
+        acElement.setToscaServiceTemplateFragment(toscaServiceTemplateFragment);
     }
 
     /**
      * Prepare ParticipantDefinitionUpdate to set in the message.
      *
-     * @param clParticipantType controlloop element
+     * @param acParticipantType participant type
      * @param entryKey key for the entry
      * @param entryValue value relates to toscaNodeTemplate
      * @param participantDefinitionUpdates list of participantDefinitionUpdates
      * @param commonPropertiesMap common properties map
      */
-    public static void prepareParticipantDefinitionUpdate(ToscaConceptIdentifier clParticipantType, String entryKey,
-            ToscaNodeTemplate entryValue, List<ParticipantDefinition> participantDefinitionUpdates,
-            Map<String, ToscaNodeType> commonPropertiesMap) {
+    public static void prepareParticipantDefinitionUpdate(ToscaConceptIdentifier acParticipantType, String entryKey,
+        ToscaNodeTemplate entryValue, List<ParticipantDefinition> participantDefinitionUpdates,
+        Map<String, ToscaNodeType> commonPropertiesMap) {
 
-        var clDefinition = new ControlLoopElementDefinition();
-        clDefinition.setClElementDefinitionId(new ToscaConceptIdentifier(entryKey, entryValue.getVersion()));
-        clDefinition.setControlLoopElementToscaNodeTemplate(entryValue);
+        var acDefinition = new AutomationCompositionElementDefinition();
+        acDefinition.setAcElementDefinitionId(new ToscaConceptIdentifier(entryKey, entryValue.getVersion()));
+        acDefinition.setAutomationCompositionElementToscaNodeTemplate(entryValue);
         if (commonPropertiesMap != null) {
             ToscaNodeType nodeType = commonPropertiesMap.get(entryValue.getType());
             if (nodeType != null) {
-                clDefinition.setCommonPropertiesMap(nodeType.getProperties());
+                acDefinition.setCommonPropertiesMap(nodeType.getProperties());
             }
         }
 
-        List<ControlLoopElementDefinition> controlLoopElementDefinitionList = new ArrayList<>();
+        List<AutomationCompositionElementDefinition> automationCompositionElementDefinitionList = new ArrayList<>();
 
         if (participantDefinitionUpdates.isEmpty()) {
-            participantDefinitionUpdates
-                    .add(getParticipantDefinition(clDefinition, clParticipantType, controlLoopElementDefinitionList));
+            participantDefinitionUpdates.add(
+                getParticipantDefinition(acDefinition, acParticipantType, automationCompositionElementDefinitionList));
         } else {
             var participantExists = false;
             for (ParticipantDefinition participantDefinitionUpdate : participantDefinitionUpdates) {
-                if (participantDefinitionUpdate.getParticipantType().equals(clParticipantType)) {
-                    participantDefinitionUpdate.getControlLoopElementDefinitionList().add(clDefinition);
+                if (participantDefinitionUpdate.getParticipantType().equals(acParticipantType)) {
+                    participantDefinitionUpdate.getAutomationCompositionElementDefinitionList().add(acDefinition);
                     participantExists = true;
                 }
             }
             if (!participantExists) {
-                participantDefinitionUpdates.add(
-                        getParticipantDefinition(clDefinition, clParticipantType, controlLoopElementDefinitionList));
+                participantDefinitionUpdates.add(getParticipantDefinition(acDefinition, acParticipantType,
+                    automationCompositionElementDefinitionList));
             }
         }
     }
 
-    private static ParticipantDefinition getParticipantDefinition(ControlLoopElementDefinition clDefinition,
-            ToscaConceptIdentifier clParticipantType,
-            List<ControlLoopElementDefinition> controlLoopElementDefinitionList) {
+    private static ParticipantDefinition getParticipantDefinition(AutomationCompositionElementDefinition acDefinition,
+        ToscaConceptIdentifier acParticipantType,
+        List<AutomationCompositionElementDefinition> automationCompositionElementDefinitionList) {
         var participantDefinition = new ParticipantDefinition();
-        participantDefinition.setParticipantType(clParticipantType);
-        controlLoopElementDefinitionList.add(clDefinition);
-        participantDefinition.setControlLoopElementDefinitionList(controlLoopElementDefinitionList);
+        participantDefinition.setParticipantType(acParticipantType);
+        automationCompositionElementDefinitionList.add(acDefinition);
+        participantDefinition.setAutomationCompositionElementDefinitionList(automationCompositionElementDefinitionList);
         return participantDefinition;
     }
 }
diff --git a/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoopElementTest.java b/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoopElementTest.java
deleted file mode 100644 (file)
index ed579fe..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.UUID;
-import org.junit.jupiter.api.Test;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-
-class ControlLoopElementTest {
-    @Test
-    void testControlLoopElement() {
-        var cle0 = new ControlLoopElement();
-        var cle1 = new ControlLoopElement(cle0);
-        assertEquals(cle0, cle1);
-
-        cle1.setDefinition(new ToscaConceptIdentifier("defName", "0.0.1"));
-        cle1.setDescription("Description");
-        cle1.setId(UUID.randomUUID());
-        cle1.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
-        cle1.setParticipantId(new ToscaConceptIdentifier("id", "1.2.3"));
-        cle1.setState(ControlLoopState.UNINITIALISED);
-
-        var cle2 = new ControlLoopElement(cle1);
-        assertEquals(cle1, cle2);
-    }
-
-    @Test
-    void testControlLoopState() {
-        var cle0 = new ControlLoopElement();
-
-        assertTrue(
-                cle0.getOrderedState()
-                .equalsControlLoopState(ControlLoopState.UNINITIALISED));
-
-        assertTrue(
-                cle0.getOrderedState().asState()
-                .equalsControlLoopOrderedState(ControlLoopOrderedState.UNINITIALISED));
-    }
-
-    @Test
-    void testControlLoopElementLombok() {
-        assertNotNull(new ControlLoopElement());
-        var cle0 = new ControlLoopElement();
-
-        assertThat(cle0.toString()).contains("ControlLoopElement(");
-        assertThat(cle0.hashCode()).isNotZero();
-        assertEquals(true, cle0.equals(cle0));
-        assertEquals(false, cle0.equals(null));
-
-        var cle1 = new ControlLoopElement();
-
-        cle1.setDefinition(new ToscaConceptIdentifier("defName", "0.0.1"));
-        cle1.setDescription("Description");
-        cle1.setId(UUID.randomUUID());
-        cle1.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
-        cle1.setParticipantId(new ToscaConceptIdentifier("id", "1.2.3"));
-        cle1.setState(ControlLoopState.UNINITIALISED);
-
-        assertThat(cle1.toString()).contains("ControlLoopElement(");
-        assertEquals(false, cle1.hashCode() == 0);
-        assertEquals(false, cle1.equals(cle0));
-        assertEquals(false, cle1.equals(null));
-
-        assertNotEquals(cle1, cle0);
-
-        var cle2 = new ControlLoopElement();
-
-        // @formatter:off
-        assertThatThrownBy(() -> cle2.setDefinition(null)).   isInstanceOf(NullPointerException.class);
-        assertThatThrownBy(() -> cle2.setId(null)).           isInstanceOf(NullPointerException.class);
-        assertThatThrownBy(() -> cle2.setOrderedState(null)). isInstanceOf(NullPointerException.class);
-        assertThatThrownBy(() -> cle2.setParticipantId(null)).isInstanceOf(NullPointerException.class);
-        assertThatThrownBy(() -> cle2.setState(null)).        isInstanceOf(NullPointerException.class);
-        // @formatter:on
-
-        assertNotEquals(cle2, cle0);
-    }
-}
diff --git a/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoopTest.java b/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/concepts/ControlLoopTest.java
deleted file mode 100644 (file)
index d9c518b..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
-import java.time.Instant;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.UUID;
-import org.junit.jupiter.api.Test;
-import org.onap.policy.models.base.PfKey;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-
-class ControlLoopTest {
-    @Test
-    void testControlLoop() {
-        var cl0 = new ControlLoop();
-        cl0.setDefinition(new ToscaConceptIdentifier("dfName", "1.2.3"));
-        assertEquals("dfName", cl0.getType());
-        assertEquals("1.2.3", cl0.getTypeVersion());
-
-        var cl1 = new ControlLoop(cl0);
-        assertEquals(cl0, cl1);
-
-        assertEquals(0, cl0.compareTo(cl1));
-    }
-
-    @Test
-    void testControlLoopLombok() {
-        assertNotNull(new ControlLoop());
-        var cl0 = new ControlLoop();
-        cl0.setElements(new LinkedHashMap<>());
-
-        assertThat(cl0.toString()).contains("ControlLoop(");
-        assertThat(cl0.hashCode()).isNotZero();
-        assertEquals(true, cl0.equals(cl0));
-        assertEquals(false, cl0.equals(null));
-
-        var cl1 = new ControlLoop();
-
-        cl1.setDefinition(new ToscaConceptIdentifier("defName", "0.0.1"));
-        cl1.setDescription("Description");
-        cl1.setElements(new LinkedHashMap<>());
-        cl1.setName("Name");
-        cl1.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
-        cl1.setState(ControlLoopState.UNINITIALISED);
-        cl1.setVersion("0.0.1");
-
-        assertThat(cl1.toString()).contains("ControlLoop(");
-        assertEquals(false, cl1.hashCode() == 0);
-        assertEquals(false, cl1.equals(cl0));
-        assertEquals(false, cl1.equals(null));
-
-        assertNotEquals(cl1, cl0);
-
-        var cl2 = new ControlLoop();
-        cl2.setElements(new LinkedHashMap<>());
-
-        // @formatter:off
-        assertThatThrownBy(() -> cl2.setDefinition(null)).  isInstanceOf(NullPointerException.class);
-        assertThatThrownBy(() -> cl2.setOrderedState(null)).isInstanceOf(NullPointerException.class);
-        assertThatThrownBy(() -> cl2.setState(null)).       isInstanceOf(NullPointerException.class);
-        // @formatter:on
-
-        assertEquals(cl2, cl0);
-
-        cl1.setCascadedOrderedState(ControlLoopOrderedState.PASSIVE);
-        assertEquals(ControlLoopOrderedState.PASSIVE, cl1.getOrderedState());
-
-        cl1.getElements().put(UUID.randomUUID(), new ControlLoopElement());
-        cl1.setCascadedOrderedState(ControlLoopOrderedState.RUNNING);
-        assertEquals(ControlLoopOrderedState.RUNNING, cl1.getOrderedState());
-        assertEquals(ControlLoopOrderedState.RUNNING, cl1.getElements().values().iterator().next().getOrderedState());
-
-        assertNull(cl0.getElements().get(UUID.randomUUID()));
-        assertNull(cl1.getElements().get(UUID.randomUUID()));
-
-        assertEquals(PfKey.NULL_KEY_NAME, cl0.getDefinition().getName());
-
-    }
-
-    @Test
-    void testControlLoopElementStatisticsList() {
-        var cl = new ControlLoop();
-        List<ClElementStatistics> emptylist = cl.getControlLoopElementStatisticsList(cl);
-        assertEquals(List.of(), emptylist);
-
-        var cl1 = getControlLoopTest();
-        List<ClElementStatistics> list = cl1.getControlLoopElementStatisticsList(cl1);
-        assertNotNull(list);
-        assertEquals(2, list.size());
-        assertEquals(ControlLoopState.UNINITIALISED, list.get(0).getControlLoopState());
-    }
-
-    private ControlLoop getControlLoopTest() {
-        var cl = new ControlLoop();
-        cl.setDefinition(new ToscaConceptIdentifier("defName", "1.2.3"));
-        cl.setDescription("Description");
-        cl.setElements(new LinkedHashMap<>());
-        cl.setName("Name");
-        cl.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
-        cl.setState(ControlLoopState.UNINITIALISED);
-        cl.setVersion("0.0.1");
-
-        var uuid = UUID.randomUUID();
-        var id = new ToscaConceptIdentifier(
-                "org.onap.policy.controlloop.PolicyControlLoopParticipant", "1.0.1");
-        var clElement = getControlLoopElementTest(uuid, id);
-
-        var uuid2 = UUID.randomUUID();
-        var id2 = new ToscaConceptIdentifier(
-                "org.onap.policy.controlloop.PolicyControlLoopParticipantIntermediary", "0.0.1");
-        var clElement2 = getControlLoopElementTest(uuid2, id2);
-
-        cl.getElements().put(uuid, clElement);
-        cl.getElements().put(uuid2, clElement2);
-        return cl;
-    }
-
-    private ControlLoopElement getControlLoopElementTest(UUID uuid, ToscaConceptIdentifier id) {
-        var clElement = new ControlLoopElement();
-        clElement.setId(uuid);
-        clElement.setParticipantId(id);
-        clElement.setDefinition(id);
-        clElement.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
-
-        var clElementStatistics = new ClElementStatistics();
-        clElementStatistics.setParticipantId(id);
-        clElementStatistics.setControlLoopState(ControlLoopState.UNINITIALISED);
-        clElementStatistics.setTimeStamp(Instant.now());
-
-        clElement.setClElementStatistics(clElementStatistics);
-
-        return clElement;
-    }
-}
diff --git a/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/JpaClElementStatisticsTest.java b/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/JpaClElementStatisticsTest.java
deleted file mode 100644 (file)
index 0e6fb83..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.time.Instant;
-import java.util.UUID;
-import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.models.base.PfConceptKey;
-import org.onap.policy.models.base.PfReferenceTimestampKey;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-
-/**
- * Test the {@link JpaClElementStatistics} class.
- */
-class JpaClElementStatisticsTest {
-
-    private static final String NULL_KEY_ERROR = "key is marked .*ull but is null";
-
-    @Test
-    void testJpaClElementStatisticsConstructor() {
-        assertThatThrownBy(() -> {
-            new JpaClElementStatistics((JpaClElementStatistics) null);
-        }).hasMessageMatching("copyConcept is marked .*ull but is null");
-
-        assertThatThrownBy(() -> {
-            new JpaClElementStatistics((PfReferenceTimestampKey) null);
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaClElementStatistics(null, null);
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaClElementStatistics(null, new PfConceptKey());
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaClElementStatistics(new PfReferenceTimestampKey(), null);
-        }).hasMessageMatching("participantId is marked .*ull but is null");
-
-        assertNotNull(new JpaClElementStatistics());
-        assertNotNull(new JpaClElementStatistics((new PfReferenceTimestampKey())));
-        assertNotNull(new JpaClElementStatistics(new PfReferenceTimestampKey(), new PfConceptKey()));
-    }
-
-    @Test
-    void testJpaClElementStatistics() {
-        JpaClElementStatistics testJpaClElementStatistics = createJpaClElementStatisticsInstance();
-
-        ClElementStatistics cles = createClElementStatisticsInstance();
-        assertEquals(cles, testJpaClElementStatistics.toAuthorative());
-
-        assertThatThrownBy(() -> {
-            testJpaClElementStatistics.fromAuthorative(null);
-        }).hasMessageMatching("clElementStatistics is marked .*ull but is null");
-
-        assertThatThrownBy(() -> new JpaClElementStatistics((JpaClElementStatistics) null))
-                .isInstanceOf(NullPointerException.class);
-
-        JpaClElementStatistics testJpaClElementStatisticsFa = new JpaClElementStatistics();
-        testJpaClElementStatisticsFa.setKey(null);
-        testJpaClElementStatisticsFa.fromAuthorative(cles);
-        assertEquals(testJpaClElementStatistics, testJpaClElementStatisticsFa);
-        testJpaClElementStatisticsFa.setKey(PfReferenceTimestampKey.getNullKey());
-        testJpaClElementStatisticsFa.fromAuthorative(cles);
-        assertEquals(testJpaClElementStatistics, testJpaClElementStatisticsFa);
-        testJpaClElementStatisticsFa.setKey(new PfReferenceTimestampKey("elementName", "0.0.1",
-            "a95757ba-b34a-4049-a2a8-46773abcbe5e", Instant.ofEpochSecond(123456L)));
-        testJpaClElementStatisticsFa.fromAuthorative(cles);
-        assertEquals(testJpaClElementStatistics, testJpaClElementStatisticsFa);
-
-        testJpaClElementStatisticsFa = new JpaClElementStatistics(cles);
-        assertEquals(testJpaClElementStatistics, testJpaClElementStatisticsFa);
-
-        assertEquals(1, testJpaClElementStatistics.getKeys().size());
-
-        assertEquals("elementName", testJpaClElementStatistics.getKey().getReferenceKey().getParentKeyName());
-
-        testJpaClElementStatistics.clean();
-        assertEquals("elementName", testJpaClElementStatistics.getKey().getReferenceKey().getParentKeyName());
-
-        JpaClElementStatistics testJpaClElementStatistics2 = new JpaClElementStatistics(testJpaClElementStatistics);
-        assertEquals(testJpaClElementStatistics, testJpaClElementStatistics2);
-    }
-
-    @Test
-    void testJpaClElementStatisticsValidation() {
-        JpaClElementStatistics testJpaClElementStatistics = createJpaClElementStatisticsInstance();
-
-        assertThatThrownBy(() -> {
-            testJpaClElementStatistics.validate(null);
-        }).hasMessageMatching("fieldName is marked .*ull but is null");
-
-        assertTrue(testJpaClElementStatistics.validate("").isValid());
-    }
-
-    @Test
-    void testJpaClElementStatisticsCompareTo() {
-        JpaClElementStatistics testJpaClElementStatistics = createJpaClElementStatisticsInstance();
-
-        JpaClElementStatistics otherJpaClElementStatistics = new JpaClElementStatistics(testJpaClElementStatistics);
-        assertEquals(0, testJpaClElementStatistics.compareTo(otherJpaClElementStatistics));
-        assertEquals(-1, testJpaClElementStatistics.compareTo(null));
-        assertEquals(0, testJpaClElementStatistics.compareTo(testJpaClElementStatistics));
-        assertNotEquals(0, testJpaClElementStatistics.compareTo(new DummyJpaClElementStatisticsChild()));
-
-        testJpaClElementStatistics.setState(ControlLoopState.PASSIVE);
-        assertNotEquals(0, testJpaClElementStatistics.compareTo(otherJpaClElementStatistics));
-        testJpaClElementStatistics.setState(ControlLoopState.UNINITIALISED);
-        assertEquals(0, testJpaClElementStatistics.compareTo(otherJpaClElementStatistics));
-
-        assertEquals(testJpaClElementStatistics, new JpaClElementStatistics(testJpaClElementStatistics));
-    }
-
-    @Test
-    void testJpaClElementStatisticsLombok() {
-        assertNotNull(new Participant());
-        JpaClElementStatistics cles0 = new JpaClElementStatistics();
-
-        assertThat(cles0.toString()).contains("JpaClElementStatistics(");
-        assertThat(cles0.hashCode()).isNotZero();
-        assertEquals(true, cles0.equals(cles0));
-        assertEquals(false, cles0.equals(null));
-
-
-        JpaClElementStatistics cles11 = new JpaClElementStatistics();
-
-        cles11.setState(ControlLoopState.UNINITIALISED);
-
-        assertThat(cles11.toString()).contains("JpaClElementStatistics(");
-        assertEquals(false, cles11.hashCode() == 0);
-        assertEquals(false, cles11.equals(cles0));
-        assertEquals(false, cles11.equals(null));
-
-        assertNotEquals(cles11, cles0);
-
-        JpaClElementStatistics cles2 = new JpaClElementStatistics();
-        assertEquals(cles2, cles0);
-    }
-
-    private JpaClElementStatistics createJpaClElementStatisticsInstance() {
-        ClElementStatistics testCles = createClElementStatisticsInstance();
-        JpaClElementStatistics testJpaClElementStatistics = new JpaClElementStatistics();
-        testJpaClElementStatistics.setKey(null);
-        testJpaClElementStatistics.fromAuthorative(testCles);
-        testJpaClElementStatistics.setKey(PfReferenceTimestampKey.getNullKey());
-        testJpaClElementStatistics.fromAuthorative(testCles);
-
-        return testJpaClElementStatistics;
-    }
-
-    private ClElementStatistics createClElementStatisticsInstance() {
-        ClElementStatistics clElementStatistics = new ClElementStatistics();
-        clElementStatistics.setParticipantId(new ToscaConceptIdentifier("elementName", "0.0.1"));
-        clElementStatistics.setId(UUID.fromString("a95757ba-b34a-4049-a2a8-46773abcbe5e"));
-        clElementStatistics.setTimeStamp(Instant.ofEpochSecond(123456L));
-        clElementStatistics.setControlLoopState(ControlLoopState.UNINITIALISED);
-
-        return clElementStatistics;
-    }
-}
diff --git a/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/JpaControlLoopElementTest.java b/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/JpaControlLoopElementTest.java
deleted file mode 100644 (file)
index 63c5ea3..0000000
+++ /dev/null
@@ -1,300 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-import java.util.UUID;
-import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.common.utils.coder.StandardCoder;
-import org.onap.policy.models.base.PfConceptKey;
-import org.onap.policy.models.base.PfKey;
-import org.onap.policy.models.base.PfReferenceKey;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-
-/**
- * Test the {@link JpaControlLoopElement} class.
- */
-class JpaControlLoopElementTest {
-
-    private static final String NULL_KEY_ERROR = "key is marked .*ull but is null";
-
-    @Test
-    void testJpaControlLoopElementConstructor() {
-        assertThatThrownBy(() -> {
-            new JpaControlLoopElement((JpaControlLoopElement) null);
-        }).hasMessageMatching("copyConcept is marked .*ull but is null");
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoopElement((PfReferenceKey) null);
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoopElement(null, null, null, null);
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoopElement(null, null, null, ControlLoopState.UNINITIALISED);
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoopElement(null, null, new PfConceptKey("participant", "0.0.1"), null);
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoopElement(null, null, new PfConceptKey("participant", "0.0.1"),
-                    ControlLoopState.UNINITIALISED);
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoopElement(null, new PfConceptKey(), null, null);
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoopElement(null, new PfConceptKey(), null, ControlLoopState.UNINITIALISED);
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoopElement(null, new PfConceptKey(), new PfConceptKey("participant", "0.0.1"), null);
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoopElement(null, new PfConceptKey(), new PfConceptKey("participant", "0.0.1"),
-                    ControlLoopState.UNINITIALISED);
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoopElement(new PfReferenceKey(), null, null, null);
-        }).hasMessageMatching("definition is marked .*ull but is null");
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoopElement(new PfReferenceKey(), null, null, ControlLoopState.UNINITIALISED);
-        }).hasMessageMatching("definition is marked .*ull but is null");
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoopElement(new PfReferenceKey(), null, new PfConceptKey("participant", "0.0.1"), null);
-        }).hasMessageMatching("definition is marked .*ull but is null");
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoopElement(new PfReferenceKey(), null, new PfConceptKey("participant", "0.0.1"),
-                    ControlLoopState.UNINITIALISED);
-        }).hasMessageMatching("definition is marked .*ull but is null");
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoopElement(new PfReferenceKey(), new PfConceptKey(), null, null);
-        }).hasMessageMatching("participantType is marked .*ull but is null");
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoopElement(new PfReferenceKey(), new PfConceptKey(), null, ControlLoopState.UNINITIALISED);
-        }).hasMessageMatching("participantType is marked .*ull but is null");
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoopElement(new PfReferenceKey(), new PfConceptKey(),
-                    new PfConceptKey("participant", "0.0.1"), null);
-        }).hasMessageMatching("state is marked .*ull but is null");
-
-        assertNotNull(new JpaControlLoopElement());
-        assertNotNull(new JpaControlLoopElement((new PfReferenceKey())));
-        assertNotNull(new JpaControlLoopElement(new PfReferenceKey(), new PfConceptKey(),
-                new PfConceptKey("participant", "0.0.1"), ControlLoopState.UNINITIALISED));
-    }
-
-    @Test
-    void testJpaControlLoopElement() {
-        JpaControlLoopElement testJpaControlLoopElement = createJpaControlLoopElementInstance();
-
-        ControlLoopElement cle = createControlLoopElementInstance();
-        assertEquals(cle, testJpaControlLoopElement.toAuthorative());
-
-        assertThatThrownBy(() -> {
-            testJpaControlLoopElement.fromAuthorative(null);
-        }).hasMessageMatching("element is marked .*ull but is null");
-
-        assertThatThrownBy(() -> new JpaControlLoopElement((JpaControlLoopElement) null))
-                .isInstanceOf(NullPointerException.class);
-
-        JpaControlLoopElement testJpaControlLoopElementFa = new JpaControlLoopElement();
-        testJpaControlLoopElementFa.setKey(null);
-        testJpaControlLoopElementFa.fromAuthorative(cle);
-        assertEquals(testJpaControlLoopElement, testJpaControlLoopElementFa);
-        testJpaControlLoopElementFa.setKey(PfReferenceKey.getNullKey());
-        testJpaControlLoopElementFa.fromAuthorative(cle);
-        assertEquals(testJpaControlLoopElement, testJpaControlLoopElementFa);
-        testJpaControlLoopElementFa.setKey(new PfReferenceKey(PfKey.NULL_KEY_NAME, PfKey.NULL_KEY_VERSION,
-                "a95757ba-b34a-4049-a2a8-46773abcbe5e"));
-        testJpaControlLoopElementFa.fromAuthorative(cle);
-        assertEquals(testJpaControlLoopElement, testJpaControlLoopElementFa);
-
-        assertEquals("a95757ba-b34a-4049-a2a8-46773abcbe5e", testJpaControlLoopElement.getKey().getLocalName());
-        assertEquals("a95757ba-b34a-4049-a2a8-46773abcbe5e",
-                new JpaControlLoopElement(createControlLoopElementInstance()).getKey().getLocalName());
-        assertEquals("a95757ba-b34a-4049-a2a8-46773abcbe5e",
-                ((PfReferenceKey) new JpaControlLoopElement(createControlLoopElementInstance()).getKeys().get(0))
-                        .getLocalName());
-
-        testJpaControlLoopElement.clean();
-        assertEquals("a95757ba-b34a-4049-a2a8-46773abcbe5e", testJpaControlLoopElement.getKey().getLocalName());
-
-        testJpaControlLoopElement.setDescription(" A Message ");
-        testJpaControlLoopElement.clean();
-        assertEquals("A Message", testJpaControlLoopElement.getDescription());
-
-        JpaControlLoopElement testJpaControlLoopElement2 = new JpaControlLoopElement(testJpaControlLoopElement);
-        assertEquals(testJpaControlLoopElement, testJpaControlLoopElement2);
-    }
-
-    @Test
-    void testJpaControlLoopElementOrderedState() throws CoderException {
-        ControlLoopElement testControlLoopElement = createControlLoopElementInstance();
-        JpaControlLoopElement testJpaControlLoopElement = createJpaControlLoopElementInstance();
-
-        testJpaControlLoopElement.setOrderedState(null);
-        assertEquals(testControlLoopElement, testJpaControlLoopElement.toAuthorative());
-        testJpaControlLoopElement.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
-
-        ControlLoopElement noOrderedStateCle = new StandardCoder().decode(
-                new File("src/test/resources/json/ControlLoopElementNoOrderedState.json"), ControlLoopElement.class);
-
-        JpaControlLoopElement noOrderedStateJpaCle = new JpaControlLoopElement(noOrderedStateCle);
-        assertNull(noOrderedStateJpaCle.getOrderedState());
-        noOrderedStateCle.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
-        noOrderedStateJpaCle = new JpaControlLoopElement(noOrderedStateCle);
-        assertEquals(testJpaControlLoopElement, noOrderedStateJpaCle);
-    }
-
-    @Test
-    void testJpaControlLoopElementValidation() {
-        JpaControlLoopElement testJpaControlLoopElement = createJpaControlLoopElementInstance();
-
-        assertThatThrownBy(() -> {
-            testJpaControlLoopElement.validate(null);
-        }).hasMessageMatching("fieldName is marked .*ull but is null");
-
-        assertTrue(testJpaControlLoopElement.validate("").isValid());
-    }
-
-    @Test
-    void testJpaControlLoopElementCompareTo() {
-        JpaControlLoopElement testJpaControlLoopElement = createJpaControlLoopElementInstance();
-
-        JpaControlLoopElement otherJpaControlLoopElement = new JpaControlLoopElement(testJpaControlLoopElement);
-        assertEquals(0, testJpaControlLoopElement.compareTo(otherJpaControlLoopElement));
-        assertEquals(-1, testJpaControlLoopElement.compareTo(null));
-        assertEquals(0, testJpaControlLoopElement.compareTo(testJpaControlLoopElement));
-        assertNotEquals(0, testJpaControlLoopElement.compareTo(new DummyJpaControlLoopElementChild()));
-
-        testJpaControlLoopElement
-                .setKey(new PfReferenceKey("BadValue", "0.0.1", "a95757ba-b34a-4049-a2a8-46773abcbe5e"));
-        assertNotEquals(0, testJpaControlLoopElement.compareTo(otherJpaControlLoopElement));
-        testJpaControlLoopElement.setKey(new PfReferenceKey(PfKey.NULL_KEY_NAME, PfKey.NULL_KEY_VERSION,
-                "a95757ba-b34a-4049-a2a8-46773abcbe5e"));
-        assertEquals(0, testJpaControlLoopElement.compareTo(otherJpaControlLoopElement));
-
-        testJpaControlLoopElement.setDefinition(new PfConceptKey("BadValue", "0.0.1"));
-        assertNotEquals(0, testJpaControlLoopElement.compareTo(otherJpaControlLoopElement));
-        testJpaControlLoopElement.setDefinition(new PfConceptKey("cleDef", "0.0.1"));
-        assertEquals(0, testJpaControlLoopElement.compareTo(otherJpaControlLoopElement));
-
-        testJpaControlLoopElement.setDescription("Description");
-        assertNotEquals(0, testJpaControlLoopElement.compareTo(otherJpaControlLoopElement));
-        testJpaControlLoopElement.setDescription(null);
-        assertEquals(0, testJpaControlLoopElement.compareTo(otherJpaControlLoopElement));
-
-        testJpaControlLoopElement.setOrderedState(ControlLoopOrderedState.PASSIVE);
-        assertNotEquals(0, testJpaControlLoopElement.compareTo(otherJpaControlLoopElement));
-        testJpaControlLoopElement.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
-        assertEquals(0, testJpaControlLoopElement.compareTo(otherJpaControlLoopElement));
-
-        testJpaControlLoopElement.setState(ControlLoopState.PASSIVE);
-        assertNotEquals(0, testJpaControlLoopElement.compareTo(otherJpaControlLoopElement));
-        testJpaControlLoopElement.setState(ControlLoopState.UNINITIALISED);
-        assertEquals(0, testJpaControlLoopElement.compareTo(otherJpaControlLoopElement));
-
-        testJpaControlLoopElement.setParticipantType(new PfConceptKey("dummy", "0.0.1"));
-        assertNotEquals(0, testJpaControlLoopElement.compareTo(otherJpaControlLoopElement));
-        testJpaControlLoopElement.setParticipantType(new PfConceptKey("participantType", "0.0.1"));
-        assertEquals(0, testJpaControlLoopElement.compareTo(otherJpaControlLoopElement));
-
-        assertEquals(testJpaControlLoopElement, new JpaControlLoopElement(testJpaControlLoopElement));
-    }
-
-    @Test
-    void testJpaControlLoopElementLombok() {
-        assertNotNull(new Participant());
-        JpaControlLoopElement cle0 = new JpaControlLoopElement();
-
-        assertThat(cle0.toString()).contains("JpaControlLoopElement(");
-        assertThat(cle0.hashCode()).isNotZero();
-        assertEquals(true, cle0.equals(cle0));
-        assertEquals(false, cle0.equals(null));
-
-
-        JpaControlLoopElement cle1 = new JpaControlLoopElement();
-
-        cle1.setDefinition(new PfConceptKey("defName", "0.0.1"));
-        cle1.setDescription("Description");
-        cle1.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
-        cle1.setState(ControlLoopState.UNINITIALISED);
-        cle1.setParticipantId(new PfConceptKey("participant", "0.0.1"));
-
-        assertThat(cle1.toString()).contains("ControlLoopElement(");
-        assertEquals(false, cle1.hashCode() == 0);
-        assertEquals(false, cle1.equals(cle0));
-        assertEquals(false, cle1.equals(null));
-
-        assertNotEquals(cle1, cle0);
-
-        JpaControlLoopElement cle2 = new JpaControlLoopElement();
-        assertEquals(cle2, cle0);
-    }
-
-    private JpaControlLoopElement createJpaControlLoopElementInstance() {
-        ControlLoopElement testCle = createControlLoopElementInstance();
-        JpaControlLoopElement testJpaControlLoopElement = new JpaControlLoopElement();
-        testJpaControlLoopElement.setKey(null);
-        testJpaControlLoopElement.fromAuthorative(testCle);
-        testJpaControlLoopElement.setKey(PfReferenceKey.getNullKey());
-        testJpaControlLoopElement.fromAuthorative(testCle);
-
-        return testJpaControlLoopElement;
-    }
-
-    private ControlLoopElement createControlLoopElementInstance() {
-        ControlLoopElement controlLoopElement = new ControlLoopElement();
-        controlLoopElement.setId(UUID.fromString("a95757ba-b34a-4049-a2a8-46773abcbe5e"));
-        controlLoopElement.setDefinition(new ToscaConceptIdentifier("cleDef", "0.0.1"));
-        controlLoopElement.setParticipantType(new ToscaConceptIdentifier("participantType", "0.0.1"));
-
-        return controlLoopElement;
-    }
-}
diff --git a/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/JpaControlLoopTest.java b/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/concepts/JpaControlLoopTest.java
deleted file mode 100644 (file)
index d705c49..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatCode;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-import java.util.LinkedHashMap;
-import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.common.utils.coder.StandardCoder;
-import org.onap.policy.models.base.PfConceptKey;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-
-/**
- * Test the {@link JpaControlLoopTest} class.
- */
-class JpaControlLoopTest {
-
-    private static final String NULL_KEY_ERROR = "key is marked .*ull but is null";
-
-    @Test
-    void testJpaControlLoopConstructor() {
-        assertThatThrownBy(() -> {
-            new JpaControlLoop((JpaControlLoop) null);
-        }).hasMessageMatching("copyConcept is marked .*ull but is null");
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoop((PfConceptKey) null);
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoop(null, null, null, null);
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoop(null, null, null, new LinkedHashMap<>());
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoop(null, null, ControlLoopState.UNINITIALISED, null);
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoop(null, null, ControlLoopState.UNINITIALISED, new LinkedHashMap<>());
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoop(null, new PfConceptKey(), null, null);
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoop(null, new PfConceptKey(), null, new LinkedHashMap<>());
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoop(null, new PfConceptKey(), ControlLoopState.UNINITIALISED, null);
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoop(null, new PfConceptKey(), ControlLoopState.UNINITIALISED, new LinkedHashMap<>());
-        }).hasMessageMatching(NULL_KEY_ERROR);
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoop(new PfConceptKey(), null, null, null);
-        }).hasMessageMatching("definition is marked .*ull but is null");
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoop(new PfConceptKey(), null, null, new LinkedHashMap<>());
-        }).hasMessageMatching("definition is marked .*ull but is null");
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoop(new PfConceptKey(), null, ControlLoopState.UNINITIALISED, null);
-        }).hasMessageMatching("definition is marked .*ull but is null");
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoop(new PfConceptKey(), null, ControlLoopState.UNINITIALISED, new LinkedHashMap<>());
-        }).hasMessageMatching("definition is marked .*ull but is null");
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoop(new PfConceptKey(), new PfConceptKey(), null, null);
-        }).hasMessageMatching("state is marked .*ull but is null");
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoop(new PfConceptKey(), new PfConceptKey(), null, new LinkedHashMap<>());
-        }).hasMessageMatching("state is marked .*ull but is null");
-
-        assertThatThrownBy(() -> {
-            new JpaControlLoop(new PfConceptKey(), new PfConceptKey(), ControlLoopState.UNINITIALISED, null);
-        }).hasMessageMatching("elements is marked .*ull but is null");
-
-        assertNotNull(new JpaControlLoop());
-        assertNotNull(new JpaControlLoop((new PfConceptKey())));
-        assertNotNull(new JpaControlLoop(new PfConceptKey(), new PfConceptKey(), ControlLoopState.UNINITIALISED,
-                new LinkedHashMap<>()));
-    }
-
-    @Test
-    void testJpaControlLoop() {
-        JpaControlLoop testJpaControlLoop = createJpaControlLoopInstance();
-
-        ControlLoop participant = createControlLoopInstance();
-        assertEquals(participant, testJpaControlLoop.toAuthorative());
-
-        assertThatThrownBy(() -> {
-            testJpaControlLoop.fromAuthorative(null);
-        }).hasMessageMatching("controlLoop is marked .*ull but is null");
-
-        assertThatThrownBy(() -> new JpaControlLoop((JpaControlLoop) null)).isInstanceOf(NullPointerException.class);
-
-        JpaControlLoop testJpaControlLoopFa = new JpaControlLoop();
-        testJpaControlLoopFa.setKey(null);
-        testJpaControlLoopFa.fromAuthorative(participant);
-        assertEquals(testJpaControlLoop, testJpaControlLoopFa);
-        testJpaControlLoopFa.setKey(PfConceptKey.getNullKey());
-        testJpaControlLoopFa.fromAuthorative(participant);
-        assertEquals(testJpaControlLoop, testJpaControlLoopFa);
-        testJpaControlLoopFa.setKey(new PfConceptKey("control-loop", "0.0.1"));
-        testJpaControlLoopFa.fromAuthorative(participant);
-        assertEquals(testJpaControlLoop, testJpaControlLoopFa);
-
-        assertEquals("control-loop", testJpaControlLoop.getKey().getName());
-        assertEquals("control-loop", new JpaControlLoop(createControlLoopInstance()).getKey().getName());
-        assertEquals("control-loop",
-                ((PfConceptKey) new JpaControlLoop(createControlLoopInstance()).getKeys().get(0)).getName());
-
-        testJpaControlLoop.clean();
-        assertEquals("control-loop", testJpaControlLoop.getKey().getName());
-
-        testJpaControlLoop.setDescription("   A Message   ");
-        testJpaControlLoop.clean();
-        assertEquals("A Message", testJpaControlLoop.getDescription());
-
-        JpaControlLoop testJpaControlLoop2 = new JpaControlLoop(testJpaControlLoop);
-        assertEquals(testJpaControlLoop, testJpaControlLoop2);
-    }
-
-    @Test
-    void testJpaControlLoopElementOrderedState() throws CoderException {
-        ControlLoop testControlLoop = createControlLoopInstance();
-        JpaControlLoop testJpaControlLoop = createJpaControlLoopInstance();
-
-        testJpaControlLoop.setOrderedState(null);
-        assertEquals(testControlLoop, testJpaControlLoop.toAuthorative());
-        testJpaControlLoop.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
-
-        ControlLoop noOrderedStateCl = new StandardCoder()
-                .decode(new File("src/test/resources/json/ControlLoopNoOrderedState.json"), ControlLoop.class);
-
-        JpaControlLoop noOrderedStateJpaCl = new JpaControlLoop(noOrderedStateCl);
-        assertNull(noOrderedStateJpaCl.getOrderedState());
-        noOrderedStateCl.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
-        noOrderedStateJpaCl = new JpaControlLoop(noOrderedStateCl);
-        assertEquals(testJpaControlLoop, noOrderedStateJpaCl);
-
-        ControlLoops controlLoopsWithElements = new StandardCoder()
-                .decode(new File("src/test/resources/providers/TestControlLoops.json"), ControlLoops.class);
-
-        JpaControlLoop jpaControlLoopWithElements =
-                new JpaControlLoop(controlLoopsWithElements.getControlLoopList().get(0));
-        assertEquals(4, jpaControlLoopWithElements.getElements().size());
-        assertEquals(18, jpaControlLoopWithElements.getKeys().size());
-        assertThatCode(() -> jpaControlLoopWithElements.clean()).doesNotThrowAnyException();
-
-        assertEquals(controlLoopsWithElements.getControlLoopList().get(0), jpaControlLoopWithElements.toAuthorative());
-    }
-
-    @Test
-    void testJpaControlLoopValidation() {
-        JpaControlLoop testJpaControlLoop = createJpaControlLoopInstance();
-
-        assertThatThrownBy(() -> {
-            testJpaControlLoop.validate(null);
-        }).hasMessageMatching("fieldName is marked .*ull but is null");
-
-        assertTrue(testJpaControlLoop.validate("").isValid());
-    }
-
-    @Test
-    void testJpaControlLoopCompareTo() {
-        JpaControlLoop testJpaControlLoop = createJpaControlLoopInstance();
-
-        JpaControlLoop otherJpaControlLoop = new JpaControlLoop(testJpaControlLoop);
-        assertEquals(0, testJpaControlLoop.compareTo(otherJpaControlLoop));
-        assertEquals(-1, testJpaControlLoop.compareTo(null));
-        assertEquals(0, testJpaControlLoop.compareTo(testJpaControlLoop));
-        assertNotEquals(0, testJpaControlLoop.compareTo(new DummyJpaControlLoopChild()));
-
-        testJpaControlLoop.setKey(new PfConceptKey("BadValue", "0.0.1"));
-        assertNotEquals(0, testJpaControlLoop.compareTo(otherJpaControlLoop));
-        testJpaControlLoop.setKey(new PfConceptKey("control-loop", "0.0.1"));
-        assertEquals(0, testJpaControlLoop.compareTo(otherJpaControlLoop));
-
-        testJpaControlLoop.setDefinition(new PfConceptKey("BadValue", "0.0.1"));
-        assertNotEquals(0, testJpaControlLoop.compareTo(otherJpaControlLoop));
-        testJpaControlLoop.setDefinition(new PfConceptKey("controlLoopDefinitionName", "0.0.1"));
-        assertEquals(0, testJpaControlLoop.compareTo(otherJpaControlLoop));
-
-        testJpaControlLoop.setState(ControlLoopState.PASSIVE);
-        assertNotEquals(0, testJpaControlLoop.compareTo(otherJpaControlLoop));
-        testJpaControlLoop.setState(ControlLoopState.UNINITIALISED);
-        assertEquals(0, testJpaControlLoop.compareTo(otherJpaControlLoop));
-
-        testJpaControlLoop.setOrderedState(ControlLoopOrderedState.PASSIVE);
-        assertNotEquals(0, testJpaControlLoop.compareTo(otherJpaControlLoop));
-        testJpaControlLoop.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
-        assertEquals(0, testJpaControlLoop.compareTo(otherJpaControlLoop));
-
-        testJpaControlLoop.setDescription("A description");
-        assertNotEquals(0, testJpaControlLoop.compareTo(otherJpaControlLoop));
-        testJpaControlLoop.setDescription(null);
-        assertEquals(0, testJpaControlLoop.compareTo(otherJpaControlLoop));
-
-        testJpaControlLoop.setPrimed(true);
-        assertNotEquals(0, testJpaControlLoop.compareTo(otherJpaControlLoop));
-        testJpaControlLoop.setPrimed(false);
-        assertEquals(0, testJpaControlLoop.compareTo(otherJpaControlLoop));
-
-        assertEquals(testJpaControlLoop, new JpaControlLoop(testJpaControlLoop));
-    }
-
-    @Test
-    void testJpaControlLoopLombok() {
-        assertNotNull(new ControlLoop());
-        JpaControlLoop cl0 = new JpaControlLoop();
-
-        assertThat(cl0.toString()).contains("JpaControlLoop(");
-        assertThat(cl0.hashCode()).isNotZero();
-        assertEquals(true, cl0.equals(cl0));
-        assertEquals(false, cl0.equals(null));
-
-
-        JpaControlLoop cl1 = new JpaControlLoop();
-
-        cl1.setDefinition(new PfConceptKey("defName", "0.0.1"));
-        cl1.setDescription("Description");
-        cl1.setElements(new LinkedHashMap<>());
-        cl1.setKey(new PfConceptKey("participant", "0.0.1"));
-        cl1.setState(ControlLoopState.UNINITIALISED);
-
-        assertThat(cl1.toString()).contains("ControlLoop(");
-        assertEquals(false, cl1.hashCode() == 0);
-        assertEquals(false, cl1.equals(cl0));
-        assertEquals(false, cl1.equals(null));
-
-        assertNotEquals(cl1, cl0);
-
-        JpaControlLoop cl2 = new JpaControlLoop();
-        assertEquals(cl2, cl0);
-    }
-
-    private JpaControlLoop createJpaControlLoopInstance() {
-        ControlLoop testControlLoop = createControlLoopInstance();
-        JpaControlLoop testJpaControlLoop = new JpaControlLoop();
-        testJpaControlLoop.setKey(null);
-        testJpaControlLoop.fromAuthorative(testControlLoop);
-        testJpaControlLoop.setKey(PfConceptKey.getNullKey());
-        testJpaControlLoop.fromAuthorative(testControlLoop);
-
-        return testJpaControlLoop;
-    }
-
-    private ControlLoop createControlLoopInstance() {
-        ControlLoop testControlLoop = new ControlLoop();
-        testControlLoop.setName("control-loop");
-        testControlLoop.setVersion("0.0.1");
-        testControlLoop.setDefinition(new ToscaConceptIdentifier("controlLoopDefinitionName", "0.0.1"));
-        testControlLoop.setElements(new LinkedHashMap<>());
-
-        return testControlLoop;
-    }
-}
diff --git a/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ClElementStatisticsProviderTest.java b/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ClElementStatisticsProviderTest.java
deleted file mode 100644 (file)
index 82ce8d7..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.junit.Assert.assertEquals;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyList;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.time.Instant;
-import java.util.List;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatisticsList;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaClElementStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ClElementStatisticsRepository;
-import org.onap.policy.common.utils.coder.Coder;
-import org.onap.policy.common.utils.coder.StandardCoder;
-import org.onap.policy.common.utils.resources.ResourceUtils;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-
-class ClElementStatisticsProviderTest {
-    private static final String LIST_IS_NULL = ".*. is marked .*ull but is null";
-    private static final Coder CODER = new StandardCoder();
-    private static final String CL_ELEMENT_STATS_JSON = "src/test/resources/providers/TestClElementStatistics.json";
-
-    private ClElementStatisticsProvider clElementStatisticsProvider;
-    private ClElementStatisticsList inputClElementStats;
-    private String originalJson = ResourceUtils.getResourceAsString(CL_ELEMENT_STATS_JSON);
-
-    /**
-     * Set up test ClElement statistics provider.
-     *
-     * @throws Exception on errors
-     */
-    @BeforeEach
-    void beforeSetupDao() throws Exception {
-
-        inputClElementStats = CODER.decode(originalJson, ClElementStatisticsList.class);
-        var clElementStatisticsRepository = mock(ClElementStatisticsRepository.class);
-
-        var jpaClElementStatisticsList =
-                ProviderUtils.getJpaAndValidateList(inputClElementStats.getClElementStatistics(),
-                        JpaClElementStatistics::new, "control loop element statistics");
-
-        for (var clElementStat : jpaClElementStatisticsList) {
-            when(clElementStatisticsRepository.getById(eq(clElementStat.getKey()))).thenReturn(clElementStat);
-            when(clElementStatisticsRepository.findAllById(eq(List.of(clElementStat.getKey()))))
-                    .thenReturn(List.of(clElementStat));
-        }
-
-        when(clElementStatisticsRepository.saveAll(anyList())).thenReturn(jpaClElementStatisticsList);
-
-        when(clElementStatisticsRepository.getFiltered(eq(JpaClElementStatistics.class), any()))
-                .thenReturn(List.of(jpaClElementStatisticsList.get(0)));
-
-        clElementStatisticsProvider = new ClElementStatisticsProvider(clElementStatisticsRepository);
-    }
-
-    @Test
-    void testClElementStatisticsCreate() throws Exception {
-        assertThatThrownBy(() -> {
-            clElementStatisticsProvider.createClElementStatistics(null);
-        }).hasMessageMatching(LIST_IS_NULL);
-
-        ClElementStatisticsList createdClElementStats = new ClElementStatisticsList();
-        createdClElementStats.setClElementStatistics(
-                clElementStatisticsProvider.createClElementStatistics(inputClElementStats.getClElementStatistics()));
-
-        assertEquals(inputClElementStats.toString().replaceAll("\\s+", ""),
-                createdClElementStats.toString().replaceAll("\\s+", ""));
-    }
-
-    @Test
-    void testGetClElementStatistics() throws Exception {
-
-        List<ClElementStatistics> getResponse;
-
-        // Return empty list when no data present in db
-        getResponse = clElementStatisticsProvider.getClElementStatistics(null, null, null, null);
-        assertThat(getResponse).isEmpty();
-
-        clElementStatisticsProvider.createClElementStatistics(inputClElementStats.getClElementStatistics());
-        ToscaConceptIdentifier identifier = inputClElementStats.getClElementStatistics().get(0).getParticipantId();
-        Instant instant = inputClElementStats.getClElementStatistics().get(0).getTimeStamp();
-        String id = inputClElementStats.getClElementStatistics().get(0).getId().toString();
-        assertEquals(1, clElementStatisticsProvider
-                .getClElementStatistics(identifier.getName(), identifier.getVersion(), id, instant).size());
-
-        assertEquals(1, clElementStatisticsProvider
-                .getFilteredClElementStatistics("name2", "1.0.1", null, null, null, "DESC", 1).size());
-    }
-}
diff --git a/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ControlLoopProviderTest.java b/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ControlLoopProviderTest.java
deleted file mode 100644 (file)
index 4b8617b..0000000
+++ /dev/null
@@ -1,290 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.util.List;
-import java.util.Optional;
-import javax.persistence.EntityNotFoundException;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ControlLoopRepository;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ToscaNodeTemplateRepository;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ToscaNodeTemplatesRepository;
-import org.onap.policy.common.utils.coder.Coder;
-import org.onap.policy.common.utils.coder.StandardCoder;
-import org.onap.policy.common.utils.coder.YamlJsonTranslator;
-import org.onap.policy.common.utils.resources.ResourceUtils;
-import org.onap.policy.models.base.PfConceptKey;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaTypedEntityFilter;
-import org.onap.policy.models.tosca.simple.concepts.JpaToscaNodeTemplate;
-
-class ControlLoopProviderTest {
-
-    private static final String LIST_IS_NULL = "controlLoops is marked .*ull but is null";
-    private static final String OBJECT_IS_NULL = "controlLoop is marked non-null but is null";
-
-    private static final String ID_NAME = "PMSHInstance1";
-    private static final String ID_VERSION = "1.0.1";
-    private static final String ID_NAME_NOT_EXTST = "not_exist";
-    private static final String ID_NAME_NOT_VALID = "not_valid";
-
-    private static final Coder CODER = new StandardCoder();
-    private static final String CONTROL_LOOP_JSON = "src/test/resources/providers/TestControlLoops.json";
-    private static final String TOSCA_TEMPLATE_YAML = "examples/controlloop/PMSubscriptionHandling.yaml";
-
-    private static final YamlJsonTranslator yamlTranslator = new YamlJsonTranslator();
-
-    private ControlLoops inputControlLoops;
-    private List<JpaControlLoop> inputControlLoopsJpa;
-    private String originalJson = ResourceUtils.getResourceAsString(CONTROL_LOOP_JSON);
-
-    @BeforeEach
-    void beforeSetupDao() throws Exception {
-        inputControlLoops = CODER.decode(originalJson, ControlLoops.class);
-        inputControlLoopsJpa = ProviderUtils.getJpaAndValidateList(inputControlLoops.getControlLoopList(),
-                JpaControlLoop::new, "control loops");
-    }
-
-    @Test
-    void testControlLoopsSave() throws Exception {
-        var controlLoopRepository = mock(ControlLoopRepository.class);
-        var controlLoopProvider = new ControlLoopProvider(controlLoopRepository,
-                mock(ToscaNodeTemplateRepository.class), mock(ToscaNodeTemplatesRepository.class));
-
-        assertThatThrownBy(() -> {
-            controlLoopProvider.saveControlLoops(null);
-        }).hasMessageMatching(LIST_IS_NULL);
-
-        when(controlLoopRepository.saveAll(inputControlLoopsJpa)).thenReturn(inputControlLoopsJpa);
-
-        var createdControlLoops = new ControlLoops();
-        createdControlLoops
-                .setControlLoopList(controlLoopProvider.saveControlLoops(inputControlLoops.getControlLoopList()));
-
-        assertEquals(inputControlLoops, createdControlLoops);
-
-        when(controlLoopRepository.saveAll(any())).thenThrow(IllegalArgumentException.class);
-
-        assertThatThrownBy(() -> {
-            controlLoopProvider.saveControlLoops(inputControlLoops.getControlLoopList());
-        }).hasMessageMatching("Error in save ControlLoops");
-    }
-
-    @Test
-    void testControlLoopSave() throws Exception {
-        var controlLoopRepository = mock(ControlLoopRepository.class);
-        var controlLoopProvider = new ControlLoopProvider(controlLoopRepository,
-                mock(ToscaNodeTemplateRepository.class), mock(ToscaNodeTemplatesRepository.class));
-
-        assertThatThrownBy(() -> {
-            controlLoopProvider.saveControlLoop(null);
-        }).hasMessageMatching(OBJECT_IS_NULL);
-
-        when(controlLoopRepository.save(inputControlLoopsJpa.get(0))).thenReturn(inputControlLoopsJpa.get(0));
-
-        var createdControlLoop = controlLoopProvider.saveControlLoop(inputControlLoops.getControlLoopList().get(0));
-
-        assertEquals(inputControlLoops.getControlLoopList().get(0), createdControlLoop);
-
-        when(controlLoopRepository.save(any())).thenThrow(IllegalArgumentException.class);
-
-        assertThatThrownBy(() -> {
-            controlLoopProvider.saveControlLoop(inputControlLoops.getControlLoopList().get(0));
-        }).hasMessageMatching("Error in save controlLoop");
-    }
-
-    @Test
-    void testGetControlLoops() throws Exception {
-        var controlLoopRepository = mock(ControlLoopRepository.class);
-        var controlLoopProvider = new ControlLoopProvider(controlLoopRepository,
-                mock(ToscaNodeTemplateRepository.class), mock(ToscaNodeTemplatesRepository.class));
-
-        // Return empty list when no data present in db
-        List<ControlLoop> getResponse = controlLoopProvider.getControlLoops();
-        assertThat(getResponse).isEmpty();
-
-        controlLoopProvider.saveControlLoops(inputControlLoops.getControlLoopList());
-
-        var controlLoop0 = inputControlLoops.getControlLoopList().get(1);
-        var name = controlLoop0.getName();
-        var version = controlLoop0.getVersion();
-        var controlLoop1 = inputControlLoops.getControlLoopList().get(1);
-
-        when(controlLoopRepository.getFiltered(eq(JpaControlLoop.class), any(), any()))
-                .thenReturn(List.of(new JpaControlLoop(controlLoop0), new JpaControlLoop(controlLoop1)));
-        when(controlLoopRepository.findById(controlLoop0.getKey().asIdentifier().asConceptKey()))
-                .thenReturn(Optional.of(new JpaControlLoop(controlLoop0)));
-        when(controlLoopRepository.getById(controlLoop0.getKey().asIdentifier().asConceptKey()))
-                .thenReturn(new JpaControlLoop(controlLoop0));
-        when(controlLoopRepository.getFiltered(JpaControlLoop.class, name, version))
-                .thenReturn(List.of(new JpaControlLoop(controlLoop0)));
-        when(controlLoopRepository.findById(controlLoop1.getKey().asIdentifier().asConceptKey()))
-                .thenReturn(Optional.of(new JpaControlLoop(controlLoop1)));
-
-        assertEquals(1, controlLoopProvider.getControlLoops(name, version).size());
-
-        var cl = controlLoopProvider.findControlLoop(new ToscaConceptIdentifier(ID_NAME, ID_VERSION)).get();
-        assertEquals(inputControlLoops.getControlLoopList().get(1), cl);
-
-        cl = controlLoopProvider.getControlLoop(new ToscaConceptIdentifier(ID_NAME, ID_VERSION));
-        assertEquals(inputControlLoops.getControlLoopList().get(1), cl);
-
-        when(controlLoopRepository.getById(any())).thenThrow(EntityNotFoundException.class);
-
-        assertThatThrownBy(() -> {
-            controlLoopProvider.getControlLoop(new ToscaConceptIdentifier(ID_NAME_NOT_EXTST, ID_VERSION));
-        }).hasMessageMatching("ControlLoop not found");
-
-        cl = controlLoopProvider.findControlLoop(ID_NAME, ID_VERSION).get();
-        assertEquals(inputControlLoops.getControlLoopList().get(1), cl);
-
-        assertThat(controlLoopProvider.findControlLoop(new ToscaConceptIdentifier(ID_NAME_NOT_EXTST, ID_VERSION)))
-                .isEmpty();
-
-        when(controlLoopRepository.findById(any())).thenThrow(IllegalArgumentException.class);
-
-        assertThatThrownBy(() -> {
-            controlLoopProvider.findControlLoop(ID_NAME_NOT_VALID, ID_VERSION);
-        }).hasMessageMatching("Not valid parameter");
-    }
-
-    @Test
-    void testDeleteControlLoop() throws Exception {
-        var controlLoopRepository = mock(ControlLoopRepository.class);
-        var controlLoopProvider = new ControlLoopProvider(controlLoopRepository,
-                mock(ToscaNodeTemplateRepository.class), mock(ToscaNodeTemplatesRepository.class));
-
-        assertThatThrownBy(() -> {
-            controlLoopProvider.deleteControlLoop(ID_NAME_NOT_EXTST, ID_VERSION);
-        }).hasMessageMatching(".*.failed, control loop does not exist");
-
-        var controlLoop = inputControlLoops.getControlLoopList().get(0);
-        var name = controlLoop.getName();
-        var version = controlLoop.getVersion();
-
-        when(controlLoopRepository.findById(new PfConceptKey(name, version)))
-                .thenReturn(Optional.of(inputControlLoopsJpa.get(0)));
-
-        ControlLoop deletedCl = controlLoopProvider.deleteControlLoop(name, version);
-        assertEquals(controlLoop, deletedCl);
-    }
-
-    @Test
-    void testDeleteAllInstanceProperties() throws Exception {
-        var controlLoopProvider = new ControlLoopProvider(mock(ControlLoopRepository.class),
-                mock(ToscaNodeTemplateRepository.class), mock(ToscaNodeTemplatesRepository.class));
-        var toscaServiceTemplate = testControlLoopRead();
-        controlLoopProvider.deleteInstanceProperties(controlLoopProvider.saveInstanceProperties(toscaServiceTemplate),
-                controlLoopProvider.getAllNodeTemplates());
-        assertThat(controlLoopProvider.getControlLoops()).isEmpty();
-    }
-
-    @Test
-    void testSaveAndDeleteInstanceProperties() throws Exception {
-        var toscaNodeTemplatesRepository = mock(ToscaNodeTemplatesRepository.class);
-        var toscaNodeTemplateRepository = mock(ToscaNodeTemplateRepository.class);
-        var controlLoopProvider = new ControlLoopProvider(mock(ControlLoopRepository.class),
-                toscaNodeTemplateRepository, toscaNodeTemplatesRepository);
-        var toscaServiceTest = testControlLoopRead();
-
-        controlLoopProvider.saveInstanceProperties(toscaServiceTest);
-        verify(toscaNodeTemplatesRepository).save(any());
-
-        var name = "org.onap.policy.controlloop.PolicyControlLoopParticipant";
-        var version = "2.3.1";
-        var elem = toscaServiceTest.getToscaTopologyTemplate().getNodeTemplates().get(name);
-        when(toscaNodeTemplateRepository.getFiltered(JpaToscaNodeTemplate.class, name, version))
-                .thenReturn(List.of(new JpaToscaNodeTemplate(elem)));
-
-        var filtered = controlLoopProvider.getNodeTemplates(name, version);
-        verify(toscaNodeTemplateRepository).getFiltered(JpaToscaNodeTemplate.class, name, version);
-
-        controlLoopProvider.deleteInstanceProperties(controlLoopProvider.saveInstanceProperties(toscaServiceTest),
-                filtered);
-
-        verify(toscaNodeTemplateRepository).delete(any());
-    }
-
-    @Test
-    void testGetNodeTemplates() throws Exception {
-        var toscaNodeTemplateRepository = mock(ToscaNodeTemplateRepository.class);
-        var controlLoopProvider = new ControlLoopProvider(mock(ControlLoopRepository.class),
-                toscaNodeTemplateRepository, mock(ToscaNodeTemplatesRepository.class));
-
-        var toscaNodeTemplate0 = new JpaToscaNodeTemplate(new PfConceptKey(ID_NAME, ID_VERSION));
-        var toscaNodeTemplate1 = new JpaToscaNodeTemplate(new PfConceptKey("PMSHInstance2", ID_VERSION));
-
-        when(toscaNodeTemplateRepository.getFiltered(JpaToscaNodeTemplate.class, null, null))
-                .thenReturn(List.of(toscaNodeTemplate0, toscaNodeTemplate1));
-        when(toscaNodeTemplateRepository.findAll()).thenReturn(List.of(toscaNodeTemplate0, toscaNodeTemplate1));
-        when(toscaNodeTemplateRepository.getFiltered(JpaToscaNodeTemplate.class, ID_NAME, ID_VERSION))
-                .thenReturn(List.of(toscaNodeTemplate0));
-
-        // Getting all nodes
-        var listNodes = controlLoopProvider.getAllNodeTemplates();
-        assertNotNull(listNodes);
-        assertThat(listNodes).hasSize(2);
-
-        listNodes = controlLoopProvider.getNodeTemplates(ID_NAME, ID_VERSION);
-        assertNotNull(listNodes);
-        assertThat(listNodes).hasSize(1);
-
-        listNodes = controlLoopProvider.getAllNodeTemplates();
-        assertNotNull(listNodes);
-        assertThat(listNodes).hasSize(2);
-
-        var nodeTemplateFilter =
-                ToscaTypedEntityFilter.<ToscaNodeTemplate>builder().name(ID_NAME).version(ID_VERSION).build();
-
-        listNodes = controlLoopProvider.getFilteredNodeTemplates(nodeTemplateFilter);
-        assertNotNull(listNodes);
-        assertThat(listNodes).hasSize(1);
-
-        assertThatThrownBy(() -> {
-            controlLoopProvider.getFilteredNodeTemplates(null);
-        }).hasMessageMatching("filter is marked non-null but is null");
-    }
-
-    private static ToscaServiceTemplate testControlLoopRead() {
-        return testControlLoopYamlSerialization(TOSCA_TEMPLATE_YAML);
-    }
-
-    private static ToscaServiceTemplate testControlLoopYamlSerialization(String controlLoopFilePath) {
-        var controlLoopString = ResourceUtils.getResourceAsString(controlLoopFilePath);
-        return yamlTranslator.fromYaml(controlLoopString, ToscaServiceTemplate.class);
-    }
-}
diff --git a/models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/notification/ControlLoopNotificationTest.java b/models/src/test/java/org/onap/policy/clamp/controlloop/models/messages/dmaap/notification/ControlLoopNotificationTest.java
deleted file mode 100644 (file)
index bf2e2fa..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.notification;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.junit.jupiter.api.Test;
-
-class ControlLoopNotificationTest {
-
-    @Test
-    void testControlLoopNotification() {
-        ControlLoopNotification cln0 = new ControlLoopNotification();
-
-        List<ControlLoopStatus> addedList = new ArrayList<>();
-        addedList.add(new ControlLoopStatus());
-
-        List<ControlLoopStatus> deletedList = new ArrayList<>();
-        deletedList.add(new ControlLoopStatus());
-
-        assertEquals(true, cln0.isEmpty());
-
-        cln0.setAdded(addedList);
-        assertEquals(false, cln0.isEmpty());
-        cln0.setAdded(null);
-        assertEquals(true, cln0.isEmpty());
-
-        cln0.setDeleted(deletedList);
-        assertEquals(false, cln0.isEmpty());
-        cln0.setDeleted(null);
-        assertEquals(true, cln0.isEmpty());
-
-        cln0.setAdded(addedList);
-        cln0.setDeleted(deletedList);
-        assertEquals(false, cln0.isEmpty());
-        cln0.setAdded(null);
-        cln0.setDeleted(null);
-        assertEquals(true, cln0.isEmpty());
-    }
-
-    @Test
-    void testControlLoopNotificationLombok() {
-        assertNotNull(new ControlLoopNotification());
-        assertNotNull(new ControlLoopNotification(new ArrayList<>(), new ArrayList<>()));
-
-        ControlLoopNotification cln0 = new ControlLoopNotification();
-
-        assertThat(cln0.toString()).contains("ControlLoopNotification(");
-        assertEquals(false, cln0.hashCode() == 0);
-        assertEquals(true, cln0.equals(cln0));
-        assertEquals(false, cln0.equals(null));
-
-
-        ControlLoopNotification cln1 = new ControlLoopNotification();
-
-        assertThat(cln1.toString()).contains("ControlLoopNotification(");
-        assertEquals(false, cln1.hashCode() == 0);
-        assertEquals(true, cln1.equals(cln0));
-        assertEquals(false, cln1.equals(null));
-    }
-}
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -31,37 +31,37 @@ import java.util.UUID;
 import org.junit.jupiter.api.Test;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
-class ClElementStatisticsTest {
+class AcElementStatisticsTest {
     @Test
-    void testClElementStatisticsLombok() {
-        assertNotNull(new ClElementStatistics());
-        ClElementStatistics cles0 = new ClElementStatistics();
+    void testAcElementStatisticsLombok() {
+        assertNotNull(new AcElementStatistics());
+        AcElementStatistics aces0 = new AcElementStatistics();
 
-        assertThat(cles0.toString()).contains("ClElementStatistics(");
-        assertThat(cles0.hashCode()).isNotZero();
-        assertEquals(true, cles0.equals(cles0));
-        assertEquals(false, cles0.equals(null));
+        assertThat(aces0.toString()).contains("AcElementStatistics(");
+        assertThat(aces0.hashCode()).isNotZero();
+        assertEquals(true, aces0.equals(aces0));
+        assertEquals(false, aces0.equals(null));
 
 
-        ClElementStatistics cles1 = new ClElementStatistics();
-        cles1.setParticipantId(new ToscaConceptIdentifier("defName", "0.0.1"));
-        cles1.setTimeStamp(Instant.now());
+        AcElementStatistics aces1 = new AcElementStatistics();
+        aces1.setParticipantId(new ToscaConceptIdentifier("defName", "0.0.1"));
+        aces1.setTimeStamp(Instant.now());
 
-        assertThat(cles1.toString()).contains("ClElementStatistics(");
-        assertEquals(false, cles1.hashCode() == 0);
-        assertEquals(false, cles1.equals(cles0));
-        assertEquals(false, cles1.equals(null));
+        assertThat(aces1.toString()).contains("AcElementStatistics(");
+        assertEquals(false, aces1.hashCode() == 0);
+        assertEquals(false, aces1.equals(aces0));
+        assertEquals(false, aces1.equals(null));
 
-        assertNotEquals(cles1, cles0);
+        assertNotEquals(aces1, aces0);
 
-        ClElementStatistics cles2 = new ClElementStatistics();
-        cles2.setId(UUID.randomUUID());
+        AcElementStatistics aces2 = new AcElementStatistics();
+        aces2.setId(UUID.randomUUID());
 
         // @formatter:off
-        assertThatThrownBy(() -> cles2.setParticipantId(null)).isInstanceOf(NullPointerException.class);
-        assertThatThrownBy(() -> cles2.setTimeStamp(null)).isInstanceOf(NullPointerException.class);
+        assertThatThrownBy(() -> aces2.setParticipantId(null)).isInstanceOf(NullPointerException.class);
+        assertThatThrownBy(() -> aces2.setTimeStamp(null)).isInstanceOf(NullPointerException.class);
         // @formatter:on
 
-        assertNotEquals(cles2, cles0);
+        assertNotEquals(aces2, aces0);
     }
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
 import com.openpojo.reflection.PojoClass;
 import com.openpojo.reflection.impl.PojoClassFactory;
@@ -37,12 +37,12 @@ import org.onap.policy.common.utils.test.ToStringTester;
 /**
  * Class to perform unit tests of all pojos.
  */
-class ControlLoopConceptPojosTest {
+class AutomationCompositionConceptPojosTest {
 
     @Test
     void testPojos() {
         List<PojoClass> pojoClasses =
-                PojoClassFactory.getPojoClasses(ControlLoopConceptPojosTest.class.getPackageName());
+                PojoClassFactory.getPojoClasses(AutomationCompositionConceptPojosTest.class.getPackageName());
 
         // @formatter:off
         final Validator validator = ValidatorBuilder
diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionElementTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionElementTest.java
new file mode 100644 (file)
index 0000000..4e739db
--- /dev/null
@@ -0,0 +1,103 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.models.acm.concepts;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.UUID;
+import org.junit.jupiter.api.Test;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+
+class AutomationCompositionElementTest {
+    @Test
+    void testAutomationCompositionElement() {
+        var ace0 = new AutomationCompositionElement();
+        var ace1 = new AutomationCompositionElement(ace0);
+        assertEquals(ace0, ace1);
+
+        ace1.setDefinition(new ToscaConceptIdentifier("defName", "0.0.1"));
+        ace1.setDescription("Description");
+        ace1.setId(UUID.randomUUID());
+        ace1.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+        ace1.setParticipantId(new ToscaConceptIdentifier("id", "1.2.3"));
+        ace1.setState(AutomationCompositionState.UNINITIALISED);
+
+        var ace2 = new AutomationCompositionElement(ace1);
+        assertEquals(ace1, ace2);
+    }
+
+    @Test
+    void testAutomationCompositionState() {
+        var ace0 = new AutomationCompositionElement();
+
+        assertTrue(
+                ace0.getOrderedState()
+                .equalsAutomationCompositionState(AutomationCompositionState.UNINITIALISED));
+
+        assertTrue(
+                ace0.getOrderedState().asState()
+                .equalsAutomationCompositionOrderedState(AutomationCompositionOrderedState.UNINITIALISED));
+    }
+
+    @Test
+    void testAutomationCompositionElementLombok() {
+        assertNotNull(new AutomationCompositionElement());
+        var ace0 = new AutomationCompositionElement();
+
+        assertThat(ace0.toString()).contains("AutomationCompositionElement(");
+        assertThat(ace0.hashCode()).isNotZero();
+        assertEquals(true, ace0.equals(ace0));
+        assertEquals(false, ace0.equals(null));
+
+        var ace1 = new AutomationCompositionElement();
+
+        ace1.setDefinition(new ToscaConceptIdentifier("defName", "0.0.1"));
+        ace1.setDescription("Description");
+        ace1.setId(UUID.randomUUID());
+        ace1.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+        ace1.setParticipantId(new ToscaConceptIdentifier("id", "1.2.3"));
+        ace1.setState(AutomationCompositionState.UNINITIALISED);
+
+        assertThat(ace1.toString()).contains("AutomationCompositionElement(");
+        assertEquals(false, ace1.hashCode() == 0);
+        assertEquals(false, ace1.equals(ace0));
+        assertEquals(false, ace1.equals(null));
+
+        assertNotEquals(ace1, ace0);
+
+        var ace2 = new AutomationCompositionElement();
+
+        // @formatter:off
+        assertThatThrownBy(() -> ace2.setDefinition(null)).   isInstanceOf(NullPointerException.class);
+        assertThatThrownBy(() -> ace2.setId(null)).           isInstanceOf(NullPointerException.class);
+        assertThatThrownBy(() -> ace2.setOrderedState(null)). isInstanceOf(NullPointerException.class);
+        assertThatThrownBy(() -> ace2.setParticipantId(null)).isInstanceOf(NullPointerException.class);
+        assertThatThrownBy(() -> ace2.setState(null)).        isInstanceOf(NullPointerException.class);
+        // @formatter:on
+
+        assertNotEquals(ace2, ace0);
+    }
+}
diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionTest.java
new file mode 100644 (file)
index 0000000..ad8a1bb
--- /dev/null
@@ -0,0 +1,160 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.models.acm.concepts;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import java.time.Instant;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.UUID;
+import org.junit.jupiter.api.Test;
+import org.onap.policy.models.base.PfKey;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+
+class AutomationCompositionTest {
+    @Test
+    void testAutomationComposition() {
+        var ac0 = new AutomationComposition();
+        ac0.setDefinition(new ToscaConceptIdentifier("dfName", "1.2.3"));
+        assertEquals("dfName", ac0.getType());
+        assertEquals("1.2.3", ac0.getTypeVersion());
+
+        var ac1 = new AutomationComposition(ac0);
+        assertEquals(ac0, ac1);
+
+        assertEquals(0, ac0.compareTo(ac1));
+    }
+
+    @Test
+    void testAutomationCompositionLombok() {
+        assertNotNull(new AutomationComposition());
+        var ac0 = new AutomationComposition();
+        ac0.setElements(new LinkedHashMap<>());
+
+        assertThat(ac0.toString()).contains("AutomationComposition(");
+        assertThat(ac0.hashCode()).isNotZero();
+        assertEquals(true, ac0.equals(ac0));
+        assertEquals(false, ac0.equals(null));
+
+        var ac1 = new AutomationComposition();
+
+        ac1.setDefinition(new ToscaConceptIdentifier("defName", "0.0.1"));
+        ac1.setDescription("Description");
+        ac1.setElements(new LinkedHashMap<>());
+        ac1.setName("Name");
+        ac1.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+        ac1.setState(AutomationCompositionState.UNINITIALISED);
+        ac1.setVersion("0.0.1");
+
+        assertThat(ac1.toString()).contains("AutomationComposition(");
+        assertEquals(false, ac1.hashCode() == 0);
+        assertEquals(false, ac1.equals(ac0));
+        assertEquals(false, ac1.equals(null));
+
+        assertNotEquals(ac1, ac0);
+
+        var ac2 = new AutomationComposition();
+        ac2.setElements(new LinkedHashMap<>());
+
+        // @formatter:off
+        assertThatThrownBy(() -> ac2.setDefinition(null)).  isInstanceOf(NullPointerException.class);
+        assertThatThrownBy(() -> ac2.setOrderedState(null)).isInstanceOf(NullPointerException.class);
+        assertThatThrownBy(() -> ac2.setState(null)).       isInstanceOf(NullPointerException.class);
+        // @formatter:on
+
+        assertEquals(ac2, ac0);
+
+        ac1.setCascadedOrderedState(AutomationCompositionOrderedState.PASSIVE);
+        assertEquals(AutomationCompositionOrderedState.PASSIVE, ac1.getOrderedState());
+
+        ac1.getElements().put(UUID.randomUUID(), new AutomationCompositionElement());
+        ac1.setCascadedOrderedState(AutomationCompositionOrderedState.RUNNING);
+        assertEquals(AutomationCompositionOrderedState.RUNNING, ac1.getOrderedState());
+        assertEquals(AutomationCompositionOrderedState.RUNNING,
+            ac1.getElements().values().iterator().next().getOrderedState());
+
+        assertNull(ac0.getElements().get(UUID.randomUUID()));
+        assertNull(ac1.getElements().get(UUID.randomUUID()));
+
+        assertEquals(PfKey.NULL_KEY_NAME, ac0.getDefinition().getName());
+
+    }
+
+    @Test
+    void testAutomationCompositionElementStatisticsList() {
+        var ac = new AutomationComposition();
+        List<AcElementStatistics> emptylist = ac.getAutomationCompositionElementStatisticsList(ac);
+        assertEquals(List.of(), emptylist);
+
+        var ac1 = getAutomationCompositionTest();
+        List<AcElementStatistics> list = ac1.getAutomationCompositionElementStatisticsList(ac1);
+        assertNotNull(list);
+        assertEquals(2, list.size());
+        assertEquals(AutomationCompositionState.UNINITIALISED, list.get(0).getState());
+    }
+
+    private AutomationComposition getAutomationCompositionTest() {
+        var ac = new AutomationComposition();
+        ac.setDefinition(new ToscaConceptIdentifier("defName", "1.2.3"));
+        ac.setDescription("Description");
+        ac.setElements(new LinkedHashMap<>());
+        ac.setName("Name");
+        ac.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+        ac.setState(AutomationCompositionState.UNINITIALISED);
+        ac.setVersion("0.0.1");
+
+        var uuid = UUID.randomUUID();
+        var id = new ToscaConceptIdentifier("org.onap.policy.acm.PolicyAutomationCompositionParticipant", "1.0.1");
+        var acElement = getAutomationCompositionElementTest(uuid, id);
+
+        var uuid2 = UUID.randomUUID();
+        var id2 = new ToscaConceptIdentifier("org.onap.policy.acm.PolicyAutomationCompositionParticipantIntermediary",
+            "0.0.1");
+        var acElement2 = getAutomationCompositionElementTest(uuid2, id2);
+
+        ac.getElements().put(uuid, acElement);
+        ac.getElements().put(uuid2, acElement2);
+        return ac;
+    }
+
+    private AutomationCompositionElement getAutomationCompositionElementTest(UUID uuid, ToscaConceptIdentifier id) {
+        var acElement = new AutomationCompositionElement();
+        acElement.setId(uuid);
+        acElement.setParticipantId(id);
+        acElement.setDefinition(id);
+        acElement.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+
+        var acElementStatistics = new AcElementStatistics();
+        acElementStatistics.setParticipantId(id);
+        acElementStatistics.setState(AutomationCompositionState.UNINITIALISED);
+        acElementStatistics.setTimeStamp(Instant.now());
+
+        acElement.setAcElementStatistics(acElementStatistics);
+
+        return acElement;
+    }
+}
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.concepts;
+package org.onap.policy.clamp.models.acm.concepts;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -36,12 +36,14 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 class ParticipantUtilsTest {
 
     private static final Coder CODER = new StandardCoder();
-    private static final String TOSCA_TEMPLATE_YAML = "examples/controlloop/PMSubscriptionHandling.yaml";
-    private static final String CONTROL_LOOP_JSON = "src/test/resources/providers/TestControlLoops.json";
-    private static final String CONTROL_LOOP_ELEMENT = "org.onap.policy.clamp.controlloop.ControlLoopElement";
-    private static final String POLICY_CONTROL_LOOP_ELEMENT =
-            "org.onap.policy.clamp.controlloop.PolicyControlLoopElement";
-    private static final String PARTICIPANT_CONTROL_LOOP_ELEMENT = "org.onap.policy.clamp.controlloop.Participant";
+    private static final String TOSCA_TEMPLATE_YAML = "examples/acm/PMSubscriptionHandling.yaml";
+    private static final String AUTOMATION_COMPOSITION_JSON =
+        "src/test/resources/providers/TestAutomationCompositions.json";
+    private static final String AUTOMATION_COMPOSITION_ELEMENT =
+        "org.onap.policy.clamp.acm.AutomationCompositionElement";
+    private static final String POLICY_AUTOMATION_COMPOSITION_ELEMENT =
+        "org.onap.policy.clamp.acm.PolicyAutomationCompositionElement";
+    private static final String PARTICIPANT_AUTOMATION_COMPOSITION_ELEMENT = "org.onap.policy.clamp.acm.Participant";
     private static final StandardYamlCoder YAML_TRANSLATOR = new StandardYamlCoder();
 
     @Test
@@ -60,25 +62,30 @@ class ParticipantUtilsTest {
 
     @Test
     void testGetFirstStartPhase() throws CoderException {
-        var serviceTemplate = YAML_TRANSLATOR.decode(ResourceUtils.getResourceAsStream(TOSCA_TEMPLATE_YAML),
-                ToscaServiceTemplate.class);
-        var controlLoops = CODER.decode(ResourceUtils.getResourceAsString(CONTROL_LOOP_JSON), ControlLoops.class);
-        var result = ParticipantUtils.getFirstStartPhase(controlLoops.getControlLoopList().get(0), serviceTemplate);
+        var serviceTemplate =
+            YAML_TRANSLATOR.decode(ResourceUtils.getResourceAsStream(TOSCA_TEMPLATE_YAML), ToscaServiceTemplate.class);
+        var automationCompositions =
+            CODER.decode(ResourceUtils.getResourceAsString(AUTOMATION_COMPOSITION_JSON), AutomationCompositions.class);
+        var result = ParticipantUtils.getFirstStartPhase(automationCompositions.getAutomationCompositionList().get(0),
+            serviceTemplate);
         assertThat(result).isZero();
     }
 
     @Test
-    void testCheckIfNodeTemplateIsControlLoopElement() throws CoderException {
-        var serviceTemplate = YAML_TRANSLATOR.decode(ResourceUtils.getResourceAsStream(TOSCA_TEMPLATE_YAML),
-                ToscaServiceTemplate.class);
+    void testCheckIfNodeTemplateIsAutomationCompositionElement() throws CoderException {
+        var serviceTemplate =
+            YAML_TRANSLATOR.decode(ResourceUtils.getResourceAsStream(TOSCA_TEMPLATE_YAML), ToscaServiceTemplate.class);
         var nodeTemplate = new ToscaNodeTemplate();
-        nodeTemplate.setType(CONTROL_LOOP_ELEMENT);
-        assertThat(ParticipantUtils.checkIfNodeTemplateIsControlLoopElement(nodeTemplate, serviceTemplate)).isTrue();
+        nodeTemplate.setType(AUTOMATION_COMPOSITION_ELEMENT);
+        assertThat(ParticipantUtils.checkIfNodeTemplateIsAutomationCompositionElement(nodeTemplate, serviceTemplate))
+            .isTrue();
 
-        nodeTemplate.setType(POLICY_CONTROL_LOOP_ELEMENT);
-        assertThat(ParticipantUtils.checkIfNodeTemplateIsControlLoopElement(nodeTemplate, serviceTemplate)).isTrue();
+        nodeTemplate.setType(POLICY_AUTOMATION_COMPOSITION_ELEMENT);
+        assertThat(ParticipantUtils.checkIfNodeTemplateIsAutomationCompositionElement(nodeTemplate, serviceTemplate))
+            .isTrue();
 
-        nodeTemplate.setType(PARTICIPANT_CONTROL_LOOP_ELEMENT);
-        assertThat(ParticipantUtils.checkIfNodeTemplateIsControlLoopElement(nodeTemplate, serviceTemplate)).isFalse();
+        nodeTemplate.setType(PARTICIPANT_AUTOMATION_COMPOSITION_ELEMENT);
+        assertThat(ParticipantUtils.checkIfNodeTemplateIsAutomationCompositionElement(nodeTemplate, serviceTemplate))
+            .isFalse();
     }
 }
diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/notification/AutomationCompositionNotificationTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/messages/dmaap/notification/AutomationCompositionNotificationTest.java
new file mode 100644 (file)
index 0000000..49bb719
--- /dev/null
@@ -0,0 +1,83 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.models.acm.messages.dmaap.notification;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.jupiter.api.Test;
+
+class AutomationCompositionNotificationTest {
+
+    @Test
+    void testAutomationCompositionNotification() {
+        AutomationCompositionNotification acn0 = new AutomationCompositionNotification();
+
+        List<AutomationCompositionStatus> addedList = new ArrayList<>();
+        addedList.add(new AutomationCompositionStatus());
+
+        List<AutomationCompositionStatus> deletedList = new ArrayList<>();
+        deletedList.add(new AutomationCompositionStatus());
+
+        assertEquals(true, acn0.isEmpty());
+
+        acn0.setAdded(addedList);
+        assertEquals(false, acn0.isEmpty());
+        acn0.setAdded(null);
+        assertEquals(true, acn0.isEmpty());
+
+        acn0.setDeleted(deletedList);
+        assertEquals(false, acn0.isEmpty());
+        acn0.setDeleted(null);
+        assertEquals(true, acn0.isEmpty());
+
+        acn0.setAdded(addedList);
+        acn0.setDeleted(deletedList);
+        assertEquals(false, acn0.isEmpty());
+        acn0.setAdded(null);
+        acn0.setDeleted(null);
+        assertEquals(true, acn0.isEmpty());
+    }
+
+    @Test
+    void testAutomationCompositionNotificationLombok() {
+        assertNotNull(new AutomationCompositionNotification());
+        assertNotNull(new AutomationCompositionNotification(new ArrayList<>(), new ArrayList<>()));
+
+        AutomationCompositionNotification acn0 = new AutomationCompositionNotification();
+
+        assertThat(acn0.toString()).contains("AutomationCompositionNotification(");
+        assertEquals(false, acn0.hashCode() == 0);
+        assertEquals(true, acn0.equals(acn0));
+        assertEquals(false, acn0.equals(null));
+
+
+        AutomationCompositionNotification acn1 = new AutomationCompositionNotification();
+
+        assertThat(acn1.toString()).contains("AutomationCompositionNotification(");
+        assertEquals(false, acn1.hashCode() == 0);
+        assertEquals(true, acn1.equals(acn0));
+        assertEquals(false, acn1.equals(null));
+    }
+}
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.notification;
+package org.onap.policy.clamp.models.acm.messages.dmaap.notification;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
@@ -28,21 +28,21 @@ import java.util.UUID;
 import org.junit.jupiter.api.Test;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
-class ControlLoopStatusTest {
+class AutomationCompositionStatusTest {
 
     @Test
-    void testControlLoopStatusLombok() {
-        assertNotNull(new ControlLoopStatus());
-        assertNotNull(new ControlLoopStatus(UUID.randomUUID(), new ToscaConceptIdentifier()));
+    void testAutomationCompositionStatusLombok() {
+        assertNotNull(new AutomationCompositionStatus());
+        assertNotNull(new AutomationCompositionStatus(UUID.randomUUID(), new ToscaConceptIdentifier()));
 
-        ControlLoopStatus cln0 = new ControlLoopStatus();
+        AutomationCompositionStatus acn0 = new AutomationCompositionStatus();
 
-        assertThat(cln0.toString()).contains("ControlLoopStatus(");
-        assertEquals(false, cln0.hashCode() == 0);
-        assertEquals(true, cln0.equals(cln0));
-        assertEquals(false, cln0.equals(null));
+        assertThat(acn0.toString()).contains("AutomationCompositionStatus(");
+        assertEquals(false, acn0.hashCode() == 0);
+        assertEquals(true, acn0.equals(acn0));
+        assertEquals(false, acn0.equals(null));
 
-        ControlLoopStatus cln1 = new ControlLoopStatus();
-        assertEquals(true, cln1.equals(cln0));
+        AutomationCompositionStatus acn1 = new AutomationCompositionStatus();
+        assertEquals(true, acn1.equals(acn0));
     }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
 
 import java.util.Map;
 import java.util.UUID;
 import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElementAck;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementAck;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
-class ControlLoopAckTest {
+class AutomationCompositionAckTest {
 
     @Test
     void testCopyConstructor() throws CoderException {
-        assertThatThrownBy(() -> new ControlLoopAck((ControlLoopAck) null))
+        assertThatThrownBy(() -> new AutomationCompositionAck((AutomationCompositionAck) null))
             .isInstanceOf(NullPointerException.class);
 
-        final var orig = new ControlLoopAck(ParticipantMessageType.CONTROL_LOOP_UPDATE);
+        final var orig = new AutomationCompositionAck(ParticipantMessageType.AUTOMATION_COMPOSITION_UPDATE);
 
         // verify with null values
         assertEquals(removeVariableFields(orig.toString()),
-                removeVariableFields(new ControlLoopAck(orig).toString()));
+                removeVariableFields(new AutomationCompositionAck(orig).toString()));
 
         // verify with all values
         var id = new ToscaConceptIdentifier("id", "1.2.3");
-        orig.setControlLoopId(id);
+        orig.setAutomationCompositionId(id);
         orig.setParticipantId(id);
         orig.setParticipantType(id);
-        var clElementResult = new ControlLoopElementAck(ControlLoopState.UNINITIALISED,
-            true, "ControlLoopElement result");
-        final var controlLoopResultMap = Map.of(UUID.randomUUID(), clElementResult);
-        orig.setControlLoopResultMap(controlLoopResultMap);
+        var acElementResult = new AutomationCompositionElementAck(AutomationCompositionState.UNINITIALISED,
+            true, "AutomationCompositionElement result");
+        final var automationCompositionResultMap = Map.of(UUID.randomUUID(), acElementResult);
+        orig.setAutomationCompositionResultMap(automationCompositionResultMap);
 
         orig.setResponseTo(UUID.randomUUID());
         orig.setResult(true);
-        orig.setMessage("Successfully processed ControlLoopUpdate message");
+        orig.setMessage("Successfully processed AutomationCompositionUpdate message");
 
         assertEquals(removeVariableFields(orig.toString()),
-                removeVariableFields(new ControlLoopAck(orig).toString()));
+                removeVariableFields(new AutomationCompositionAck(orig).toString()));
 
-        assertSerializable(orig, ControlLoopAck.class);
+        assertSerializable(orig, AutomationCompositionAck.class);
     }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
 
 import java.time.Instant;
 import java.util.UUID;
 import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 /**
  * Test the copy constructor and other methods.
  */
-class ControlLoopStateChangeTest {
+class AutomationCompositionStateChangeTest {
 
     @Test
     void testCopyConstructor() throws CoderException {
-        assertThatThrownBy(() -> new ControlLoopStateChange(null)).isInstanceOf(NullPointerException.class);
+        assertThatThrownBy(() -> new AutomationCompositionStateChange(null)).isInstanceOf(NullPointerException.class);
 
-        ControlLoopStateChange orig = new ControlLoopStateChange();
+        AutomationCompositionStateChange orig = new AutomationCompositionStateChange();
 
         // verify with null values
         assertEquals(removeVariableFields(orig.toString()),
-                removeVariableFields(new ControlLoopStateChange(orig).toString()));
+                removeVariableFields(new AutomationCompositionStateChange(orig).toString()));
 
         // verify with all values
         ToscaConceptIdentifier id = new ToscaConceptIdentifier("id", "1.2.3");
-        orig.setControlLoopId(id);
+        orig.setAutomationCompositionId(id);
         orig.setParticipantId(id);
         orig.setMessageId(UUID.randomUUID());
-        orig.setOrderedState(ControlLoopOrderedState.RUNNING);
-        orig.setCurrentState(ControlLoopState.PASSIVE);
+        orig.setOrderedState(AutomationCompositionOrderedState.RUNNING);
+        orig.setCurrentState(AutomationCompositionState.PASSIVE);
         orig.setTimestamp(Instant.ofEpochMilli(3000));
 
         assertEquals(removeVariableFields(orig.toString()),
-                removeVariableFields(new ControlLoopStateChange(orig).toString()));
+                removeVariableFields(new AutomationCompositionStateChange(orig).toString()));
 
-        assertSerializable(orig, ControlLoopStateChange.class);
+        assertSerializable(orig, AutomationCompositionStateChange.class);
     }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
 
 import java.time.Instant;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantUpdates;
+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.ParticipantUpdates;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty;
@@ -41,42 +41,42 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty;
 /**
  * Test the copy constructor.
  */
-class ControlLoopUpdateTest {
+class AutomationCompositionUpdateTest {
     @Test
     void testCopyConstructor() throws CoderException {
-        assertThatThrownBy(() -> new ControlLoopUpdate(null)).isInstanceOf(NullPointerException.class);
+        assertThatThrownBy(() -> new AutomationCompositionUpdate(null)).isInstanceOf(NullPointerException.class);
 
-        ControlLoopUpdate orig = new ControlLoopUpdate();
+        AutomationCompositionUpdate orig = new AutomationCompositionUpdate();
         // verify with all values
         ToscaConceptIdentifier id = new ToscaConceptIdentifier("id", "1.2.3");
-        orig.setControlLoopId(id);
+        orig.setAutomationCompositionId(id);
         orig.setParticipantId(null);
         orig.setMessageId(UUID.randomUUID());
         orig.setTimestamp(Instant.ofEpochMilli(3000));
 
-        ControlLoopElement clElement = new ControlLoopElement();
-        clElement.setId(UUID.randomUUID());
-        clElement.setDefinition(id);
-        clElement.setDescription("Description");
-        clElement.setOrderedState(ControlLoopOrderedState.PASSIVE);
-        clElement.setState(ControlLoopState.PASSIVE);
-        clElement.setParticipantId(id);
-        clElement.setParticipantType(id);
+        AutomationCompositionElement acElement = new AutomationCompositionElement();
+        acElement.setId(UUID.randomUUID());
+        acElement.setDefinition(id);
+        acElement.setDescription("Description");
+        acElement.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
+        acElement.setState(AutomationCompositionState.PASSIVE);
+        acElement.setParticipantId(id);
+        acElement.setParticipantType(id);
 
         ToscaProperty property = new ToscaProperty();
         property.setName("test");
         property.setType("testType");
         Map<String, ToscaProperty> propertiesMap = Map.of("Prop1", property);
-        clElement.setPropertiesMap(propertiesMap);
+        acElement.setPropertiesMap(propertiesMap);
 
         ParticipantUpdates participantUpdates = new ParticipantUpdates();
         participantUpdates.setParticipantId(id);
-        participantUpdates.setControlLoopElementList(List.of(clElement));
+        participantUpdates.setAutomationCompositionElementList(List.of(acElement));
         orig.setParticipantUpdatesList(List.of(participantUpdates));
 
-        ControlLoopUpdate other = new ControlLoopUpdate(orig);
+        AutomationCompositionUpdate other = new AutomationCompositionUpdate(orig);
 
         assertEquals(removeVariableFields(orig.toString()), removeVariableFields(other.toString()));
-        assertSerializable(orig, ControlLoopUpdate.class);
+        assertSerializable(orig, AutomationCompositionUpdate.class);
     }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
 
 import java.util.UUID;
 import org.junit.jupiter.api.Test;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
 
 import java.util.UUID;
 import org.junit.jupiter.api.Test;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
 
 import java.time.Instant;
 import java.util.UUID;
@@ -47,7 +47,7 @@ class ParticipantDeregisterTest {
         ToscaConceptIdentifier id = new ToscaConceptIdentifier();
         id.setName("id");
         id.setVersion("1.2.3");
-        orig.setControlLoopId(id);
+        orig.setAutomationCompositionId(id);
         orig.setParticipantId(id);
         orig.setParticipantType(id);
         orig.setMessageId(UUID.randomUUID());
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
 
 import java.time.Instant;
 import java.util.UUID;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import com.openpojo.reflection.PojoClass;
 import com.openpojo.reflection.impl.PojoClassFactory;
@@ -46,8 +46,8 @@ class ParticipantPojosTest {
         pojoClasses.remove(PojoClassFactory.getPojoClass(ParticipantMessageTest.class));
         pojoClasses.remove(PojoClassFactory.getPojoClass(ParticipantAckMessage.class));
         pojoClasses.remove(PojoClassFactory.getPojoClass(ParticipantAckMessageTest.class));
-        pojoClasses.remove(PojoClassFactory.getPojoClass(ControlLoopAck.class));
-        pojoClasses.remove(PojoClassFactory.getPojoClass(ControlLoopAckTest.class));
+        pojoClasses.remove(PojoClassFactory.getPojoClass(AutomationCompositionAck.class));
+        pojoClasses.remove(PojoClassFactory.getPojoClass(AutomationCompositionAckTest.class));
 
         // @formatter:off
         final Validator validator = ValidatorBuilder
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
 
 import java.util.UUID;
 import org.junit.jupiter.api.Test;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
 
 import java.time.Instant;
 import java.util.UUID;
@@ -47,7 +47,7 @@ class ParticipantRegisterTest {
         ToscaConceptIdentifier id = new ToscaConceptIdentifier();
         id.setName("id");
         id.setVersion("1.2.3");
-        orig.setControlLoopId(id);
+        orig.setAutomationCompositionId(id);
         orig.setParticipantId(id);
         orig.setParticipantType(id);
         orig.setMessageId(UUID.randomUUID());
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
 
 import java.time.Instant;
 import java.util.UUID;
@@ -43,7 +43,7 @@ class ParticipantStatusReqTest {
         // verify with all values
         ToscaConceptIdentifier id = new ToscaConceptIdentifier("id", "1.2.3");
         orig.setParticipantId(id);
-        orig.setControlLoopId(null);
+        orig.setAutomationCompositionId(null);
         orig.setParticipantType(null);
         orig.setMessageId(UUID.randomUUID());
         orig.setTimestamp(Instant.ofEpochMilli(3000));
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
 
 import java.time.Instant;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatisticsList;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElementDefinition;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopInfo;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantDefinition;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantHealthStatus;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.concepts.AcElementStatistics;
+import org.onap.policy.clamp.models.acm.concepts.AcElementStatisticsList;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionInfo;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionStatistics;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantDefinition;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
@@ -58,7 +58,7 @@ class ParticipantStatusTest {
 
         // verify with all values
         ToscaConceptIdentifier id = new ToscaConceptIdentifier("id", "1.2.3");
-        orig.setControlLoopId(id);
+        orig.setAutomationCompositionId(id);
         orig.setParticipantId(id);
         ToscaConceptIdentifier type = new ToscaConceptIdentifier("type", "2.3.4");
         orig.setParticipantType(type);
@@ -67,14 +67,14 @@ class ParticipantStatusTest {
         orig.setHealthStatus(ParticipantHealthStatus.HEALTHY);
         orig.setTimestamp(Instant.ofEpochMilli(3000));
 
-        ControlLoopInfo clInfo = getControlLoopInfo(id);
-        orig.setControlLoopInfoList(List.of(clInfo));
+        AutomationCompositionInfo acInfo = getAutomationCompositionInfo(id);
+        orig.setAutomationCompositionInfoList(List.of(acInfo));
 
         ParticipantDefinition participantDefinitionUpdate = new ParticipantDefinition();
         participantDefinitionUpdate.setParticipantId(id);
         participantDefinitionUpdate.setParticipantType(type);
-        ControlLoopElementDefinition clDefinition = getClElementDefinition(id);
-        participantDefinitionUpdate.setControlLoopElementDefinitionList(List.of(clDefinition));
+        AutomationCompositionElementDefinition acDefinition = getAcElementDefinition(id);
+        participantDefinitionUpdate.setAutomationCompositionElementDefinitionList(List.of(acDefinition));
         orig.setParticipantDefinitionUpdates(List.of(participantDefinitionUpdate));
 
         assertEquals(removeVariableFields(orig.toString()),
@@ -83,47 +83,47 @@ class ParticipantStatusTest {
         assertSerializable(orig, ParticipantStatus.class);
     }
 
-    private ControlLoopInfo getControlLoopInfo(ToscaConceptIdentifier id) {
-        ControlLoopInfo clInfo = new ControlLoopInfo();
-        clInfo.setState(ControlLoopState.PASSIVE2RUNNING);
-        clInfo.setControlLoopId(id);
-
-        ControlLoopStatistics clStatistics = new ControlLoopStatistics();
-        clStatistics.setControlLoopId(id);
-        clStatistics.setAverageExecutionTime(12345);
-        clStatistics.setEventCount(12345);
-        clStatistics.setLastEnterTime(12345);
-        clStatistics.setLastExecutionTime(12345);
-        clStatistics.setLastStart(12345);
-        clStatistics.setTimeStamp(Instant.ofEpochMilli(3000));
-        clStatistics.setUpTime(12345);
-        ClElementStatisticsList clElementStatisticsList = new ClElementStatisticsList();
-        ClElementStatistics clElementStatistics = new ClElementStatistics();
-        clElementStatistics.setParticipantId(new ToscaConceptIdentifier("defName", "0.0.1"));
-        clElementStatistics.setTimeStamp(Instant.now());
-        clElementStatisticsList.setClElementStatistics(List.of(clElementStatistics));
-        clStatistics.setClElementStatisticsList(clElementStatisticsList);
-
-        clInfo.setControlLoopStatistics(clStatistics);
-        return clInfo;
+    private AutomationCompositionInfo getAutomationCompositionInfo(ToscaConceptIdentifier id) {
+        AutomationCompositionInfo acInfo = new AutomationCompositionInfo();
+        acInfo.setState(AutomationCompositionState.PASSIVE2RUNNING);
+        acInfo.setAutomationCompositionId(id);
+
+        AutomationCompositionStatistics acStatistics = new AutomationCompositionStatistics();
+        acStatistics.setAutomationCompositionId(id);
+        acStatistics.setAverageExecutionTime(12345);
+        acStatistics.setEventCount(12345);
+        acStatistics.setLastEnterTime(12345);
+        acStatistics.setLastExecutionTime(12345);
+        acStatistics.setLastStart(12345);
+        acStatistics.setTimeStamp(Instant.ofEpochMilli(3000));
+        acStatistics.setUpTime(12345);
+        AcElementStatisticsList acElementStatisticsList = new AcElementStatisticsList();
+        AcElementStatistics acElementStatistics = new AcElementStatistics();
+        acElementStatistics.setParticipantId(new ToscaConceptIdentifier("defName", "0.0.1"));
+        acElementStatistics.setTimeStamp(Instant.now());
+        acElementStatisticsList.setAcElementStatistics(List.of(acElementStatistics));
+        acStatistics.setAcElementStatisticsList(acElementStatisticsList);
+
+        acInfo.setAutomationCompositionStatistics(acStatistics);
+        return acInfo;
     }
 
-    private ControlLoopElementDefinition getClElementDefinition(ToscaConceptIdentifier id) {
+    private AutomationCompositionElementDefinition getAcElementDefinition(ToscaConceptIdentifier id) {
         ToscaNodeTemplate toscaNodeTemplate = new ToscaNodeTemplate();
         toscaNodeTemplate.setName("nodeTemplate");
         toscaNodeTemplate.setDerivedFrom("parentNodeTemplate");
         toscaNodeTemplate.setDescription("Description of nodeTemplate");
         toscaNodeTemplate.setVersion("1.2.3");
 
-        ControlLoopElementDefinition clDefinition = new ControlLoopElementDefinition();
-        clDefinition.setClElementDefinitionId(id);
-        clDefinition.setControlLoopElementToscaNodeTemplate(toscaNodeTemplate);
+        AutomationCompositionElementDefinition acDefinition = new AutomationCompositionElementDefinition();
+        acDefinition.setAcElementDefinitionId(id);
+        acDefinition.setAutomationCompositionElementToscaNodeTemplate(toscaNodeTemplate);
 
         ToscaProperty property = new ToscaProperty();
         property.setName("test");
         property.setType("testType");
         Map<String, ToscaProperty> commonPropertiesMap = Map.of("Prop1", property);
-        clDefinition.setCommonPropertiesMap(commonPropertiesMap);
-        return clDefinition;
+        acDefinition.setCommonPropertiesMap(commonPropertiesMap);
+        return acDefinition;
     }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
 
 import java.util.UUID;
 import org.junit.jupiter.api.Test;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.dmaap.participant;
+package org.onap.policy.clamp.models.acm.messages.dmaap.participant;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
-import static org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.assertSerializable;
+import static org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageUtils.removeVariableFields;
 
 import java.time.Instant;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElementDefinition;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantDefinition;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantDefinition;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
@@ -49,7 +49,7 @@ class ParticipantUpdateTest {
         ParticipantUpdate orig = new ParticipantUpdate();
         // verify with all values
         ToscaConceptIdentifier id = new ToscaConceptIdentifier("id", "1.2.3");
-        orig.setControlLoopId(id);
+        orig.setAutomationCompositionId(id);
         orig.setParticipantId(id);
         orig.setParticipantType(id);
         orig.setMessageId(UUID.randomUUID());
@@ -69,8 +69,8 @@ class ParticipantUpdateTest {
 
         ParticipantDefinition participantDefinitionUpdate = new ParticipantDefinition();
         participantDefinitionUpdate.setParticipantType(id);
-        ControlLoopElementDefinition clDefinition = getClElementDefinition(id);
-        participantDefinitionUpdate.setControlLoopElementDefinitionList(List.of(clDefinition));
+        AutomationCompositionElementDefinition acDefinition = getAcElementDefinition(id);
+        participantDefinitionUpdate.setAutomationCompositionElementDefinitionList(List.of(acDefinition));
         orig.setParticipantDefinitionUpdates(List.of(participantDefinitionUpdate));
 
         ParticipantUpdate other = new ParticipantUpdate(orig);
@@ -80,22 +80,22 @@ class ParticipantUpdateTest {
         assertSerializable(orig, ParticipantUpdate.class);
     }
 
-    private ControlLoopElementDefinition getClElementDefinition(ToscaConceptIdentifier id) {
+    private AutomationCompositionElementDefinition getAcElementDefinition(ToscaConceptIdentifier id) {
         ToscaNodeTemplate toscaNodeTemplate = new ToscaNodeTemplate();
         toscaNodeTemplate.setName("nodeTemplate");
         toscaNodeTemplate.setDerivedFrom("parentNodeTemplate");
         toscaNodeTemplate.setDescription("Description of nodeTemplate");
         toscaNodeTemplate.setVersion("1.2.3");
 
-        ControlLoopElementDefinition clDefinition = new ControlLoopElementDefinition();
-        clDefinition.setClElementDefinitionId(id);
-        clDefinition.setControlLoopElementToscaNodeTemplate(toscaNodeTemplate);
+        AutomationCompositionElementDefinition acDefinition = new AutomationCompositionElementDefinition();
+        acDefinition.setAcElementDefinitionId(id);
+        acDefinition.setAutomationCompositionElementToscaNodeTemplate(toscaNodeTemplate);
 
         ToscaProperty property = new ToscaProperty();
         property.setName("test");
         property.setType("testType");
         Map<String, ToscaProperty> commonPropertiesMap = Map.of("Prop1", property);
-        clDefinition.setCommonPropertiesMap(commonPropertiesMap);
-        return clDefinition;
+        acDefinition.setCommonPropertiesMap(commonPropertiesMap);
+        return acDefinition;
     }
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.rest;
+package org.onap.policy.clamp.models.acm.messages.rest;
 
 import com.openpojo.reflection.PojoClass;
 import com.openpojo.reflection.impl.PojoClassFactory;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.messages.rest.instantiation;
+package org.onap.policy.clamp.models.acm.messages.rest.instantiation;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
@@ -27,7 +27,7 @@ import static org.junit.Assert.assertNotNull;
 
 import java.util.ArrayList;
 import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
 
 class InstantiationCommandTest {
     @Test
@@ -43,8 +43,8 @@ class InstantiationCommandTest {
 
         InstantiationCommand ic1 = new InstantiationCommand();
 
-        ic1.setControlLoopIdentifierList(new ArrayList<>());
-        ic1.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
+        ic1.setAutomationCompositionIdentifierList(new ArrayList<>());
+        ic1.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
 
         assertThat(ic1.toString()).contains("InstantiationCommand(");
         assertEquals(false, ic1.hashCode() == 0);
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts;
+package org.onap.policy.clamp.models.acm.persistence.concepts;
 
 /**
- * Test class for {@link JpaControlLoop} comparisons.
+ * Test class for {@link JpaAcElementStatistics} comparisons.
  */
-class DummyJpaControlLoopChild extends JpaControlLoop {
+class DummyJpaAcElementStatisticsChild extends JpaAcElementStatistics {
     private static final long serialVersionUID = -5101743610779424064L;
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts;
+package org.onap.policy.clamp.models.acm.persistence.concepts;
 
 /**
- * Test class for {@link JpaControlLoopElement} comparisons.
+ * Test class for {@link JpaAutomationComposition} comparisons.
  */
-class DummyJpaControlLoopElementChild extends JpaControlLoopElement {
+class DummyJpaAutomationCompositionChild extends JpaAutomationComposition {
     private static final long serialVersionUID = -5101743610779424064L;
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts;
+package org.onap.policy.clamp.models.acm.persistence.concepts;
 
 /**
- * Test class for {@link JpaClElementStatistics} comparisons.
+ * Test class for {@link JpaAutomationCompositionElement} comparisons.
  */
-class DummyJpaClElementStatisticsChild extends JpaClElementStatistics {
+class DummyJpaAutomationCompositionElementChild extends JpaAutomationCompositionElement {
     private static final long serialVersionUID = -5101743610779424064L;
 }
diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAcElementStatisticsTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAcElementStatisticsTest.java
new file mode 100644 (file)
index 0000000..4cf7b8a
--- /dev/null
@@ -0,0 +1,189 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.models.acm.persistence.concepts;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.time.Instant;
+import java.util.UUID;
+import org.junit.jupiter.api.Test;
+import org.onap.policy.clamp.models.acm.concepts.AcElementStatistics;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
+import org.onap.policy.clamp.models.acm.concepts.Participant;
+import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.base.PfReferenceTimestampKey;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+
+/**
+ * Test the {@link JpaAcElementStatistics} class.
+ */
+class JpaAcElementStatisticsTest {
+
+    private static final String NULL_KEY_ERROR = "key is marked .*ull but is null";
+
+    @Test
+    void testJpaAcElementStatisticsConstructor() {
+        assertThatThrownBy(() -> {
+            new JpaAcElementStatistics((JpaAcElementStatistics) null);
+        }).hasMessageMatching("copyConcept is marked .*ull but is null");
+
+        assertThatThrownBy(() -> {
+            new JpaAcElementStatistics((PfReferenceTimestampKey) null);
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAcElementStatistics(null, null);
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAcElementStatistics(null, new PfConceptKey());
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAcElementStatistics(new PfReferenceTimestampKey(), null);
+        }).hasMessageMatching("participantId is marked .*ull but is null");
+
+        assertNotNull(new JpaAcElementStatistics());
+        assertNotNull(new JpaAcElementStatistics((new PfReferenceTimestampKey())));
+        assertNotNull(new JpaAcElementStatistics(new PfReferenceTimestampKey(), new PfConceptKey()));
+    }
+
+    @Test
+    void testJpaAcElementStatistics() {
+        JpaAcElementStatistics testJpaAcElementStatistics = createJpaAcElementStatisticsInstance();
+
+        AcElementStatistics aces = createAcElementStatisticsInstance();
+        assertEquals(aces, testJpaAcElementStatistics.toAuthorative());
+
+        assertThatThrownBy(() -> {
+            testJpaAcElementStatistics.fromAuthorative(null);
+        }).hasMessageMatching("acElementStatistics is marked .*ull but is null");
+
+        assertThatThrownBy(() -> new JpaAcElementStatistics((JpaAcElementStatistics) null))
+                .isInstanceOf(NullPointerException.class);
+
+        JpaAcElementStatistics testJpaAcElementStatisticsFa = new JpaAcElementStatistics();
+        testJpaAcElementStatisticsFa.setKey(null);
+        testJpaAcElementStatisticsFa.fromAuthorative(aces);
+        assertEquals(testJpaAcElementStatistics, testJpaAcElementStatisticsFa);
+        testJpaAcElementStatisticsFa.setKey(PfReferenceTimestampKey.getNullKey());
+        testJpaAcElementStatisticsFa.fromAuthorative(aces);
+        assertEquals(testJpaAcElementStatistics, testJpaAcElementStatisticsFa);
+        testJpaAcElementStatisticsFa.setKey(new PfReferenceTimestampKey("elementName", "0.0.1",
+            "a95757ba-b34a-4049-a2a8-46773abcbe5e", Instant.ofEpochSecond(123456L)));
+        testJpaAcElementStatisticsFa.fromAuthorative(aces);
+        assertEquals(testJpaAcElementStatistics, testJpaAcElementStatisticsFa);
+
+        testJpaAcElementStatisticsFa = new JpaAcElementStatistics(aces);
+        assertEquals(testJpaAcElementStatistics, testJpaAcElementStatisticsFa);
+
+        assertEquals(1, testJpaAcElementStatistics.getKeys().size());
+
+        assertEquals("elementName", testJpaAcElementStatistics.getKey().getReferenceKey().getParentKeyName());
+
+        testJpaAcElementStatistics.clean();
+        assertEquals("elementName", testJpaAcElementStatistics.getKey().getReferenceKey().getParentKeyName());
+
+        JpaAcElementStatistics testJpaAcElementStatistics2 = new JpaAcElementStatistics(testJpaAcElementStatistics);
+        assertEquals(testJpaAcElementStatistics, testJpaAcElementStatistics2);
+    }
+
+    @Test
+    void testJpaAcElementStatisticsValidation() {
+        JpaAcElementStatistics testJpaAcElementStatistics = createJpaAcElementStatisticsInstance();
+
+        assertThatThrownBy(() -> {
+            testJpaAcElementStatistics.validate(null);
+        }).hasMessageMatching("fieldName is marked .*ull but is null");
+
+        assertTrue(testJpaAcElementStatistics.validate("").isValid());
+    }
+
+    @Test
+    void testJpaAcElementStatisticsCompareTo() {
+        JpaAcElementStatistics testJpaAcElementStatistics = createJpaAcElementStatisticsInstance();
+
+        JpaAcElementStatistics otherJpaAcElementStatistics = new JpaAcElementStatistics(testJpaAcElementStatistics);
+        assertEquals(0, testJpaAcElementStatistics.compareTo(otherJpaAcElementStatistics));
+        assertEquals(-1, testJpaAcElementStatistics.compareTo(null));
+        assertEquals(0, testJpaAcElementStatistics.compareTo(testJpaAcElementStatistics));
+        assertNotEquals(0, testJpaAcElementStatistics.compareTo(new DummyJpaAcElementStatisticsChild()));
+
+        testJpaAcElementStatistics.setState(AutomationCompositionState.PASSIVE);
+        assertNotEquals(0, testJpaAcElementStatistics.compareTo(otherJpaAcElementStatistics));
+        testJpaAcElementStatistics.setState(AutomationCompositionState.UNINITIALISED);
+        assertEquals(0, testJpaAcElementStatistics.compareTo(otherJpaAcElementStatistics));
+
+        assertEquals(testJpaAcElementStatistics, new JpaAcElementStatistics(testJpaAcElementStatistics));
+    }
+
+    @Test
+    void testJpaAcElementStatisticsLombok() {
+        assertNotNull(new Participant());
+        JpaAcElementStatistics aces0 = new JpaAcElementStatistics();
+
+        assertThat(aces0.toString()).contains("JpaAcElementStatistics(");
+        assertThat(aces0.hashCode()).isNotZero();
+        assertEquals(true, aces0.equals(aces0));
+        assertEquals(false, aces0.equals(null));
+
+
+        JpaAcElementStatistics aces11 = new JpaAcElementStatistics();
+
+        aces11.setState(AutomationCompositionState.UNINITIALISED);
+
+        assertThat(aces11.toString()).contains("JpaAcElementStatistics(");
+        assertEquals(false, aces11.hashCode() == 0);
+        assertEquals(false, aces11.equals(aces0));
+        assertEquals(false, aces11.equals(null));
+
+        assertNotEquals(aces11, aces0);
+
+        JpaAcElementStatistics aces2 = new JpaAcElementStatistics();
+        assertEquals(aces2, aces0);
+    }
+
+    private JpaAcElementStatistics createJpaAcElementStatisticsInstance() {
+        AcElementStatistics testAces = createAcElementStatisticsInstance();
+        JpaAcElementStatistics testJpaAcElementStatistics = new JpaAcElementStatistics();
+        testJpaAcElementStatistics.setKey(null);
+        testJpaAcElementStatistics.fromAuthorative(testAces);
+        testJpaAcElementStatistics.setKey(PfReferenceTimestampKey.getNullKey());
+        testJpaAcElementStatistics.fromAuthorative(testAces);
+
+        return testJpaAcElementStatistics;
+    }
+
+    private AcElementStatistics createAcElementStatisticsInstance() {
+        AcElementStatistics acElementStatistics = new AcElementStatistics();
+        acElementStatistics.setParticipantId(new ToscaConceptIdentifier("elementName", "0.0.1"));
+        acElementStatistics.setId(UUID.fromString("a95757ba-b34a-4049-a2a8-46773abcbe5e"));
+        acElementStatistics.setTimeStamp(Instant.ofEpochSecond(123456L));
+        acElementStatistics.setState(AutomationCompositionState.UNINITIALISED);
+
+        return acElementStatistics;
+    }
+}
diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationCompositionElementTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationCompositionElementTest.java
new file mode 100644 (file)
index 0000000..f4257bd
--- /dev/null
@@ -0,0 +1,315 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.models.acm.persistence.concepts;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.util.UUID;
+import org.junit.jupiter.api.Test;
+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.Participant;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.common.utils.coder.StandardCoder;
+import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.base.PfKey;
+import org.onap.policy.models.base.PfReferenceKey;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+
+/**
+ * Test the {@link JpaAutomationCompositionElement} class.
+ */
+class JpaAutomationCompositionElementTest {
+
+    private static final String NULL_KEY_ERROR = "key is marked .*ull but is null";
+
+    @Test
+    void testJpaAutomationCompositionElementConstructor() {
+        assertThatThrownBy(() -> {
+            new JpaAutomationCompositionElement((JpaAutomationCompositionElement) null);
+        }).hasMessageMatching("copyConcept is marked .*ull but is null");
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationCompositionElement((PfReferenceKey) null);
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationCompositionElement(null, null, null, null);
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationCompositionElement(null, null, null, AutomationCompositionState.UNINITIALISED);
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationCompositionElement(null, null, new PfConceptKey("participant", "0.0.1"), null);
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationCompositionElement(null, null, new PfConceptKey("participant", "0.0.1"),
+                AutomationCompositionState.UNINITIALISED);
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationCompositionElement(null, new PfConceptKey(), null, null);
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationCompositionElement(null, new PfConceptKey(), null,
+                AutomationCompositionState.UNINITIALISED);
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationCompositionElement(null, new PfConceptKey(), new PfConceptKey("participant", "0.0.1"),
+                null);
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationCompositionElement(null, new PfConceptKey(), new PfConceptKey("participant", "0.0.1"),
+                AutomationCompositionState.UNINITIALISED);
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationCompositionElement(new PfReferenceKey(), null, null, null);
+        }).hasMessageMatching("definition is marked .*ull but is null");
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationCompositionElement(new PfReferenceKey(), null, null,
+                AutomationCompositionState.UNINITIALISED);
+        }).hasMessageMatching("definition is marked .*ull but is null");
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationCompositionElement(new PfReferenceKey(), null, new PfConceptKey("participant", "0.0.1"),
+                null);
+        }).hasMessageMatching("definition is marked .*ull but is null");
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationCompositionElement(new PfReferenceKey(), null, new PfConceptKey("participant", "0.0.1"),
+                AutomationCompositionState.UNINITIALISED);
+        }).hasMessageMatching("definition is marked .*ull but is null");
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationCompositionElement(new PfReferenceKey(), new PfConceptKey(), null, null);
+        }).hasMessageMatching("participantType is marked .*ull but is null");
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationCompositionElement(new PfReferenceKey(), new PfConceptKey(), null,
+                AutomationCompositionState.UNINITIALISED);
+        }).hasMessageMatching("participantType is marked .*ull but is null");
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationCompositionElement(new PfReferenceKey(), new PfConceptKey(),
+                new PfConceptKey("participant", "0.0.1"), null);
+        }).hasMessageMatching("state is marked .*ull but is null");
+
+        assertNotNull(new JpaAutomationCompositionElement());
+        assertNotNull(new JpaAutomationCompositionElement((new PfReferenceKey())));
+        assertNotNull(new JpaAutomationCompositionElement(new PfReferenceKey(), new PfConceptKey(),
+            new PfConceptKey("participant", "0.0.1"), AutomationCompositionState.UNINITIALISED));
+    }
+
+    @Test
+    void testJpaAutomationCompositionElement() {
+        JpaAutomationCompositionElement testJpaAutomationCompositionElement =
+            createJpaAutomationCompositionElementInstance();
+
+        AutomationCompositionElement ace = createAutomationCompositionElementInstance();
+        assertEquals(ace, testJpaAutomationCompositionElement.toAuthorative());
+
+        assertThatThrownBy(() -> {
+            testJpaAutomationCompositionElement.fromAuthorative(null);
+        }).hasMessageMatching("element is marked .*ull but is null");
+
+        assertThatThrownBy(() -> new JpaAutomationCompositionElement((JpaAutomationCompositionElement) null))
+            .isInstanceOf(NullPointerException.class);
+
+        JpaAutomationCompositionElement testJpaAutomationCompositionElementFa = new JpaAutomationCompositionElement();
+        testJpaAutomationCompositionElementFa.setKey(null);
+        testJpaAutomationCompositionElementFa.fromAuthorative(ace);
+        assertEquals(testJpaAutomationCompositionElement, testJpaAutomationCompositionElementFa);
+        testJpaAutomationCompositionElementFa.setKey(PfReferenceKey.getNullKey());
+        testJpaAutomationCompositionElementFa.fromAuthorative(ace);
+        assertEquals(testJpaAutomationCompositionElement, testJpaAutomationCompositionElementFa);
+        testJpaAutomationCompositionElementFa.setKey(
+            new PfReferenceKey(PfKey.NULL_KEY_NAME, PfKey.NULL_KEY_VERSION, "a95757ba-b34a-4049-a2a8-46773abcbe5e"));
+        testJpaAutomationCompositionElementFa.fromAuthorative(ace);
+        assertEquals(testJpaAutomationCompositionElement, testJpaAutomationCompositionElementFa);
+
+        assertEquals("a95757ba-b34a-4049-a2a8-46773abcbe5e",
+            testJpaAutomationCompositionElement.getKey().getLocalName());
+        assertEquals("a95757ba-b34a-4049-a2a8-46773abcbe5e",
+            new JpaAutomationCompositionElement(createAutomationCompositionElementInstance()).getKey().getLocalName());
+        assertEquals("a95757ba-b34a-4049-a2a8-46773abcbe5e",
+            ((PfReferenceKey) new JpaAutomationCompositionElement(createAutomationCompositionElementInstance())
+                .getKeys().get(0)).getLocalName());
+
+        testJpaAutomationCompositionElement.clean();
+        assertEquals("a95757ba-b34a-4049-a2a8-46773abcbe5e",
+            testJpaAutomationCompositionElement.getKey().getLocalName());
+
+        testJpaAutomationCompositionElement.setDescription(" A Message ");
+        testJpaAutomationCompositionElement.clean();
+        assertEquals("A Message", testJpaAutomationCompositionElement.getDescription());
+
+        JpaAutomationCompositionElement testJpaAutomationCompositionElement2 =
+            new JpaAutomationCompositionElement(testJpaAutomationCompositionElement);
+        assertEquals(testJpaAutomationCompositionElement, testJpaAutomationCompositionElement2);
+    }
+
+    @Test
+    void testJpaAutomationCompositionElementOrderedState() throws CoderException {
+        AutomationCompositionElement testAutomationCompositionElement = createAutomationCompositionElementInstance();
+        JpaAutomationCompositionElement testJpaAutomationCompositionElement =
+            createJpaAutomationCompositionElementInstance();
+
+        testJpaAutomationCompositionElement.setOrderedState(null);
+        assertEquals(testAutomationCompositionElement, testJpaAutomationCompositionElement.toAuthorative());
+        testJpaAutomationCompositionElement.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+
+        AutomationCompositionElement noOrderedStateAce = new StandardCoder().decode(
+            new File("src/test/resources/json/AutomationCompositionElementNoOrderedState.json"),
+            AutomationCompositionElement.class);
+
+        JpaAutomationCompositionElement noOrderedStateJpaAce = new JpaAutomationCompositionElement(noOrderedStateAce);
+        assertNull(noOrderedStateJpaAce.getOrderedState());
+        noOrderedStateAce.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+        noOrderedStateJpaAce = new JpaAutomationCompositionElement(noOrderedStateAce);
+        assertEquals(testJpaAutomationCompositionElement, noOrderedStateJpaAce);
+    }
+
+    @Test
+    void testJpaAutomationCompositionElementValidation() {
+        JpaAutomationCompositionElement testJpaAutomationCompositionElement =
+            createJpaAutomationCompositionElementInstance();
+
+        assertThatThrownBy(() -> {
+            testJpaAutomationCompositionElement.validate(null);
+        }).hasMessageMatching("fieldName is marked .*ull but is null");
+
+        assertTrue(testJpaAutomationCompositionElement.validate("").isValid());
+    }
+
+    @Test
+    void testJpaAutomationCompositionElementCompareTo() {
+        JpaAutomationCompositionElement testJpaAutomationCompositionElement =
+            createJpaAutomationCompositionElementInstance();
+
+        JpaAutomationCompositionElement otherJpaAutomationCompositionElement =
+            new JpaAutomationCompositionElement(testJpaAutomationCompositionElement);
+        assertEquals(0, testJpaAutomationCompositionElement.compareTo(otherJpaAutomationCompositionElement));
+        assertEquals(-1, testJpaAutomationCompositionElement.compareTo(null));
+        assertEquals(0, testJpaAutomationCompositionElement.compareTo(testJpaAutomationCompositionElement));
+        assertNotEquals(0,
+            testJpaAutomationCompositionElement.compareTo(new DummyJpaAutomationCompositionElementChild()));
+
+        testJpaAutomationCompositionElement
+            .setKey(new PfReferenceKey("BadValue", "0.0.1", "a95757ba-b34a-4049-a2a8-46773abcbe5e"));
+        assertNotEquals(0, testJpaAutomationCompositionElement.compareTo(otherJpaAutomationCompositionElement));
+        testJpaAutomationCompositionElement.setKey(
+            new PfReferenceKey(PfKey.NULL_KEY_NAME, PfKey.NULL_KEY_VERSION, "a95757ba-b34a-4049-a2a8-46773abcbe5e"));
+        assertEquals(0, testJpaAutomationCompositionElement.compareTo(otherJpaAutomationCompositionElement));
+
+        testJpaAutomationCompositionElement.setDefinition(new PfConceptKey("BadValue", "0.0.1"));
+        assertNotEquals(0, testJpaAutomationCompositionElement.compareTo(otherJpaAutomationCompositionElement));
+        testJpaAutomationCompositionElement.setDefinition(new PfConceptKey("aceDef", "0.0.1"));
+        assertEquals(0, testJpaAutomationCompositionElement.compareTo(otherJpaAutomationCompositionElement));
+
+        testJpaAutomationCompositionElement.setDescription("Description");
+        assertNotEquals(0, testJpaAutomationCompositionElement.compareTo(otherJpaAutomationCompositionElement));
+        testJpaAutomationCompositionElement.setDescription(null);
+        assertEquals(0, testJpaAutomationCompositionElement.compareTo(otherJpaAutomationCompositionElement));
+
+        testJpaAutomationCompositionElement.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
+        assertNotEquals(0, testJpaAutomationCompositionElement.compareTo(otherJpaAutomationCompositionElement));
+        testJpaAutomationCompositionElement.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+        assertEquals(0, testJpaAutomationCompositionElement.compareTo(otherJpaAutomationCompositionElement));
+
+        testJpaAutomationCompositionElement.setState(AutomationCompositionState.PASSIVE);
+        assertNotEquals(0, testJpaAutomationCompositionElement.compareTo(otherJpaAutomationCompositionElement));
+        testJpaAutomationCompositionElement.setState(AutomationCompositionState.UNINITIALISED);
+        assertEquals(0, testJpaAutomationCompositionElement.compareTo(otherJpaAutomationCompositionElement));
+
+        testJpaAutomationCompositionElement.setParticipantType(new PfConceptKey("dummy", "0.0.1"));
+        assertNotEquals(0, testJpaAutomationCompositionElement.compareTo(otherJpaAutomationCompositionElement));
+        testJpaAutomationCompositionElement.setParticipantType(new PfConceptKey("participantType", "0.0.1"));
+        assertEquals(0, testJpaAutomationCompositionElement.compareTo(otherJpaAutomationCompositionElement));
+
+        assertEquals(testJpaAutomationCompositionElement,
+            new JpaAutomationCompositionElement(testJpaAutomationCompositionElement));
+    }
+
+    @Test
+    void testJpaAutomationCompositionElementLombok() {
+        assertNotNull(new Participant());
+        JpaAutomationCompositionElement ace0 = new JpaAutomationCompositionElement();
+
+        assertThat(ace0.toString()).contains("JpaAutomationCompositionElement(");
+        assertThat(ace0.hashCode()).isNotZero();
+        assertEquals(true, ace0.equals(ace0));
+        assertEquals(false, ace0.equals(null));
+
+        JpaAutomationCompositionElement ace1 = new JpaAutomationCompositionElement();
+
+        ace1.setDefinition(new PfConceptKey("defName", "0.0.1"));
+        ace1.setDescription("Description");
+        ace1.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+        ace1.setState(AutomationCompositionState.UNINITIALISED);
+        ace1.setParticipantId(new PfConceptKey("participant", "0.0.1"));
+
+        assertThat(ace1.toString()).contains("AutomationCompositionElement(");
+        assertEquals(false, ace1.hashCode() == 0);
+        assertEquals(false, ace1.equals(ace0));
+        assertEquals(false, ace1.equals(null));
+
+        assertNotEquals(ace1, ace0);
+
+        JpaAutomationCompositionElement ace2 = new JpaAutomationCompositionElement();
+        assertEquals(ace2, ace0);
+    }
+
+    private JpaAutomationCompositionElement createJpaAutomationCompositionElementInstance() {
+        AutomationCompositionElement testAce = createAutomationCompositionElementInstance();
+        JpaAutomationCompositionElement testJpaAutomationCompositionElement = new JpaAutomationCompositionElement();
+        testJpaAutomationCompositionElement.setKey(null);
+        testJpaAutomationCompositionElement.fromAuthorative(testAce);
+        testJpaAutomationCompositionElement.setKey(PfReferenceKey.getNullKey());
+        testJpaAutomationCompositionElement.fromAuthorative(testAce);
+
+        return testJpaAutomationCompositionElement;
+    }
+
+    private AutomationCompositionElement createAutomationCompositionElementInstance() {
+        AutomationCompositionElement automationCompositionElement = new AutomationCompositionElement();
+        automationCompositionElement.setId(UUID.fromString("a95757ba-b34a-4049-a2a8-46773abcbe5e"));
+        automationCompositionElement.setDefinition(new ToscaConceptIdentifier("aceDef", "0.0.1"));
+        automationCompositionElement.setParticipantType(new ToscaConceptIdentifier("participantType", "0.0.1"));
+
+        return automationCompositionElement;
+    }
+}
diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationCompositionTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationCompositionTest.java
new file mode 100644 (file)
index 0000000..a016d12
--- /dev/null
@@ -0,0 +1,310 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.models.acm.persistence.concepts;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatCode;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.util.LinkedHashMap;
+import org.junit.jupiter.api.Test;
+import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
+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.common.utils.coder.CoderException;
+import org.onap.policy.common.utils.coder.StandardCoder;
+import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+
+/**
+ * Test the {@link JpaAutomationCompositionTest} class.
+ */
+class JpaAutomationCompositionTest {
+
+    private static final String NULL_KEY_ERROR = "key is marked .*ull but is null";
+
+    @Test
+    void testJpaAutomationCompositionConstructor() {
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition((JpaAutomationComposition) null);
+        }).hasMessageMatching("copyConcept is marked .*ull but is null");
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition((PfConceptKey) null);
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(null, null, null, null);
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(null, null, null, new LinkedHashMap<>());
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(null, null, AutomationCompositionState.UNINITIALISED, null);
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(null, null, AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>());
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(null, new PfConceptKey(), null, null);
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(null, new PfConceptKey(), null, new LinkedHashMap<>());
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(null, new PfConceptKey(), AutomationCompositionState.UNINITIALISED, null);
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(null, new PfConceptKey(), AutomationCompositionState.UNINITIALISED,
+                new LinkedHashMap<>());
+        }).hasMessageMatching(NULL_KEY_ERROR);
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(new PfConceptKey(), null, null, null);
+        }).hasMessageMatching("definition is marked .*ull but is null");
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(new PfConceptKey(), null, null, new LinkedHashMap<>());
+        }).hasMessageMatching("definition is marked .*ull but is null");
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(new PfConceptKey(), null, AutomationCompositionState.UNINITIALISED, null);
+        }).hasMessageMatching("definition is marked .*ull but is null");
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(new PfConceptKey(), null, AutomationCompositionState.UNINITIALISED,
+                new LinkedHashMap<>());
+        }).hasMessageMatching("definition is marked .*ull but is null");
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(new PfConceptKey(), new PfConceptKey(), null, null);
+        }).hasMessageMatching("state is marked .*ull but is null");
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(new PfConceptKey(), new PfConceptKey(), null, new LinkedHashMap<>());
+        }).hasMessageMatching("state is marked .*ull but is null");
+
+        assertThatThrownBy(() -> {
+            new JpaAutomationComposition(new PfConceptKey(), new PfConceptKey(),
+                AutomationCompositionState.UNINITIALISED, null);
+        }).hasMessageMatching("elements is marked .*ull but is null");
+
+        assertNotNull(new JpaAutomationComposition());
+        assertNotNull(new JpaAutomationComposition((new PfConceptKey())));
+        assertNotNull(new JpaAutomationComposition(new PfConceptKey(), new PfConceptKey(),
+            AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>()));
+    }
+
+    @Test
+    void testJpaAutomationComposition() {
+        JpaAutomationComposition testJpaAutomationComposition = createJpaAutomationCompositionInstance();
+
+        AutomationComposition participant = createAutomationCompositionInstance();
+        assertEquals(participant, testJpaAutomationComposition.toAuthorative());
+
+        assertThatThrownBy(() -> {
+            testJpaAutomationComposition.fromAuthorative(null);
+        }).hasMessageMatching("automationComposition is marked .*ull but is null");
+
+        assertThatThrownBy(() -> new JpaAutomationComposition((JpaAutomationComposition) null))
+            .isInstanceOf(NullPointerException.class);
+
+        JpaAutomationComposition testJpaAutomationCompositionFa = new JpaAutomationComposition();
+        testJpaAutomationCompositionFa.setKey(null);
+        testJpaAutomationCompositionFa.fromAuthorative(participant);
+        assertEquals(testJpaAutomationComposition, testJpaAutomationCompositionFa);
+        testJpaAutomationCompositionFa.setKey(PfConceptKey.getNullKey());
+        testJpaAutomationCompositionFa.fromAuthorative(participant);
+        assertEquals(testJpaAutomationComposition, testJpaAutomationCompositionFa);
+        testJpaAutomationCompositionFa.setKey(new PfConceptKey("automation-composition", "0.0.1"));
+        testJpaAutomationCompositionFa.fromAuthorative(participant);
+        assertEquals(testJpaAutomationComposition, testJpaAutomationCompositionFa);
+
+        assertEquals("automation-composition", testJpaAutomationComposition.getKey().getName());
+        assertEquals("automation-composition",
+            new JpaAutomationComposition(createAutomationCompositionInstance()).getKey().getName());
+        assertEquals("automation-composition",
+            ((PfConceptKey) new JpaAutomationComposition(createAutomationCompositionInstance()).getKeys().get(0))
+                .getName());
+
+        testJpaAutomationComposition.clean();
+        assertEquals("automation-composition", testJpaAutomationComposition.getKey().getName());
+
+        testJpaAutomationComposition.setDescription("   A Message   ");
+        testJpaAutomationComposition.clean();
+        assertEquals("A Message", testJpaAutomationComposition.getDescription());
+
+        JpaAutomationComposition testJpaAutomationComposition2 =
+            new JpaAutomationComposition(testJpaAutomationComposition);
+        assertEquals(testJpaAutomationComposition, testJpaAutomationComposition2);
+    }
+
+    @Test
+    void testJpaAutomationCompositionElementOrderedState() throws CoderException {
+        AutomationComposition testAutomationComposition = createAutomationCompositionInstance();
+        JpaAutomationComposition testJpaAutomationComposition = createJpaAutomationCompositionInstance();
+
+        testJpaAutomationComposition.setOrderedState(null);
+        assertEquals(testAutomationComposition, testJpaAutomationComposition.toAuthorative());
+        testJpaAutomationComposition.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+
+        AutomationComposition noOrderedStateAc = new StandardCoder().decode(
+            new File("src/test/resources/json/AutomationCompositionNoOrderedState.json"), AutomationComposition.class);
+
+        JpaAutomationComposition noOrderedStateJpaAc = new JpaAutomationComposition(noOrderedStateAc);
+        assertNull(noOrderedStateJpaAc.getOrderedState());
+        noOrderedStateAc.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+        noOrderedStateJpaAc = new JpaAutomationComposition(noOrderedStateAc);
+        assertEquals(testJpaAutomationComposition, noOrderedStateJpaAc);
+
+        AutomationCompositions automationCompositionsWithElements = new StandardCoder().decode(
+            new File("src/test/resources/providers/TestAutomationCompositions.json"), AutomationCompositions.class);
+
+        JpaAutomationComposition jpaAutomationCompositionWithElements =
+            new JpaAutomationComposition(automationCompositionsWithElements.getAutomationCompositionList().get(0));
+        assertEquals(4, jpaAutomationCompositionWithElements.getElements().size());
+        assertEquals(18, jpaAutomationCompositionWithElements.getKeys().size());
+        assertThatCode(() -> jpaAutomationCompositionWithElements.clean()).doesNotThrowAnyException();
+
+        assertEquals(automationCompositionsWithElements.getAutomationCompositionList().get(0),
+            jpaAutomationCompositionWithElements.toAuthorative());
+    }
+
+    @Test
+    void testJpaAutomationCompositionValidation() {
+        JpaAutomationComposition testJpaAutomationComposition = createJpaAutomationCompositionInstance();
+
+        assertThatThrownBy(() -> {
+            testJpaAutomationComposition.validate(null);
+        }).hasMessageMatching("fieldName is marked .*ull but is null");
+
+        assertTrue(testJpaAutomationComposition.validate("").isValid());
+    }
+
+    @Test
+    void testJpaAutomationCompositionCompareTo() {
+        JpaAutomationComposition testJpaAutomationComposition = createJpaAutomationCompositionInstance();
+
+        JpaAutomationComposition otherJpaAutomationComposition =
+            new JpaAutomationComposition(testJpaAutomationComposition);
+        assertEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
+        assertEquals(-1, testJpaAutomationComposition.compareTo(null));
+        assertEquals(0, testJpaAutomationComposition.compareTo(testJpaAutomationComposition));
+        assertNotEquals(0, testJpaAutomationComposition.compareTo(new DummyJpaAutomationCompositionChild()));
+
+        testJpaAutomationComposition.setKey(new PfConceptKey("BadValue", "0.0.1"));
+        assertNotEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
+        testJpaAutomationComposition.setKey(new PfConceptKey("automation-composition", "0.0.1"));
+        assertEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
+
+        testJpaAutomationComposition.setDefinition(new PfConceptKey("BadValue", "0.0.1"));
+        assertNotEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
+        testJpaAutomationComposition.setDefinition(new PfConceptKey("automationCompositionDefinitionName", "0.0.1"));
+        assertEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
+
+        testJpaAutomationComposition.setState(AutomationCompositionState.PASSIVE);
+        assertNotEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
+        testJpaAutomationComposition.setState(AutomationCompositionState.UNINITIALISED);
+        assertEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
+
+        testJpaAutomationComposition.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
+        assertNotEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
+        testJpaAutomationComposition.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+        assertEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
+
+        testJpaAutomationComposition.setDescription("A description");
+        assertNotEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
+        testJpaAutomationComposition.setDescription(null);
+        assertEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
+
+        testJpaAutomationComposition.setPrimed(true);
+        assertNotEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
+        testJpaAutomationComposition.setPrimed(false);
+        assertEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
+
+        assertEquals(testJpaAutomationComposition, new JpaAutomationComposition(testJpaAutomationComposition));
+    }
+
+    @Test
+    void testJpaAutomationCompositionLombok() {
+        assertNotNull(new AutomationComposition());
+        JpaAutomationComposition ac0 = new JpaAutomationComposition();
+
+        assertThat(ac0.toString()).contains("JpaAutomationComposition(");
+        assertThat(ac0.hashCode()).isNotZero();
+        assertEquals(true, ac0.equals(ac0));
+        assertEquals(false, ac0.equals(null));
+
+        JpaAutomationComposition ac1 = new JpaAutomationComposition();
+
+        ac1.setDefinition(new PfConceptKey("defName", "0.0.1"));
+        ac1.setDescription("Description");
+        ac1.setElements(new LinkedHashMap<>());
+        ac1.setKey(new PfConceptKey("participant", "0.0.1"));
+        ac1.setState(AutomationCompositionState.UNINITIALISED);
+
+        assertThat(ac1.toString()).contains("AutomationComposition(");
+        assertEquals(false, ac1.hashCode() == 0);
+        assertEquals(false, ac1.equals(ac0));
+        assertEquals(false, ac1.equals(null));
+
+        assertNotEquals(ac1, ac0);
+
+        JpaAutomationComposition ac2 = new JpaAutomationComposition();
+        assertEquals(ac2, ac0);
+    }
+
+    private JpaAutomationComposition createJpaAutomationCompositionInstance() {
+        AutomationComposition testAutomationComposition = createAutomationCompositionInstance();
+        JpaAutomationComposition testJpaAutomationComposition = new JpaAutomationComposition();
+        testJpaAutomationComposition.setKey(null);
+        testJpaAutomationComposition.fromAuthorative(testAutomationComposition);
+        testJpaAutomationComposition.setKey(PfConceptKey.getNullKey());
+        testJpaAutomationComposition.fromAuthorative(testAutomationComposition);
+
+        return testJpaAutomationComposition;
+    }
+
+    private AutomationComposition createAutomationCompositionInstance() {
+        AutomationComposition testAutomationComposition = new AutomationComposition();
+        testAutomationComposition.setName("automation-composition");
+        testAutomationComposition.setVersion("0.0.1");
+        testAutomationComposition
+            .setDefinition(new ToscaConceptIdentifier("automationCompositionDefinitionName", "0.0.1"));
+        testAutomationComposition.setElements(new LinkedHashMap<>());
+
+        return testAutomationComposition;
+    }
+}
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts;
+package org.onap.policy.clamp.models.acm.persistence.concepts;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -29,10 +29,10 @@ import static org.junit.Assert.assertTrue;
 
 import java.time.Instant;
 import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantHealthStatus;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatistics;
+import org.onap.policy.clamp.models.acm.concepts.Participant;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantStatistics;
 import org.onap.policy.common.parameters.BeanValidationResult;
 import org.onap.policy.models.base.PfConceptKey;
 import org.onap.policy.models.base.PfTimestampKey;
@@ -76,8 +76,8 @@ class JpaParticipantStatisticsTest {
     void testJpaParticipantStatistics() {
         JpaParticipantStatistics testJpaParticipantStatistics = createJpaParticipantStatisticsInstance();
 
-        ParticipantStatistics cles = createParticipantStatisticsInstance();
-        assertEquals(cles, testJpaParticipantStatistics.toAuthorative());
+        ParticipantStatistics aces = createParticipantStatisticsInstance();
+        assertEquals(aces, testJpaParticipantStatistics.toAuthorative());
 
         assertThatThrownBy(() -> {
             testJpaParticipantStatistics.fromAuthorative(null);
@@ -88,17 +88,17 @@ class JpaParticipantStatisticsTest {
 
         JpaParticipantStatistics testJpaParticipantStatisticsFa = new JpaParticipantStatistics();
         testJpaParticipantStatisticsFa.setKey(null);
-        testJpaParticipantStatisticsFa.fromAuthorative(cles);
+        testJpaParticipantStatisticsFa.fromAuthorative(aces);
         assertEquals(testJpaParticipantStatistics, testJpaParticipantStatisticsFa);
         testJpaParticipantStatisticsFa.setKey(PfTimestampKey.getNullKey());
-        testJpaParticipantStatisticsFa.fromAuthorative(cles);
+        testJpaParticipantStatisticsFa.fromAuthorative(aces);
         assertEquals(testJpaParticipantStatistics, testJpaParticipantStatisticsFa);
         testJpaParticipantStatisticsFa
                 .setKey(new PfTimestampKey("participantName", "0.0.1", Instant.ofEpochMilli(123456L)));
-        testJpaParticipantStatisticsFa.fromAuthorative(cles);
+        testJpaParticipantStatisticsFa.fromAuthorative(aces);
         assertEquals(testJpaParticipantStatistics, testJpaParticipantStatisticsFa);
 
-        testJpaParticipantStatisticsFa = new JpaParticipantStatistics(cles);
+        testJpaParticipantStatisticsFa = new JpaParticipantStatistics(aces);
         assertEquals(testJpaParticipantStatistics, testJpaParticipantStatisticsFa);
 
         assertEquals(2, testJpaParticipantStatistics.getKeys().size());
@@ -171,12 +171,12 @@ class JpaParticipantStatisticsTest {
     }
 
     private JpaParticipantStatistics createJpaParticipantStatisticsInstance() {
-        ParticipantStatistics testCles = createParticipantStatisticsInstance();
+        ParticipantStatistics testAces = createParticipantStatisticsInstance();
         JpaParticipantStatistics testJpaParticipantStatistics = new JpaParticipantStatistics();
         testJpaParticipantStatistics.setKey(null);
-        testJpaParticipantStatistics.fromAuthorative(testCles);
+        testJpaParticipantStatistics.fromAuthorative(testAces);
         testJpaParticipantStatistics.setKey(PfTimestampKey.getNullKey());
-        testJpaParticipantStatistics.fromAuthorative(testCles);
+        testJpaParticipantStatistics.fromAuthorative(testAces);
 
         return testJpaParticipantStatistics;
     }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts;
+package org.onap.policy.clamp.models.acm.persistence.concepts;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -28,9 +28,9 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantHealthStatus;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.concepts.Participant;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
 import org.onap.policy.models.base.PfConceptKey;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts;
+package org.onap.policy.clamp.models.acm.persistence.concepts;
 
 import com.openpojo.reflection.PojoClass;
 import com.openpojo.reflection.impl.PojoClassFactory;
diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AcElementStatisticsProviderTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AcElementStatisticsProviderTest.java
new file mode 100644 (file)
index 0000000..15d1d84
--- /dev/null
@@ -0,0 +1,116 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.models.acm.persistence.provider;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyList;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.time.Instant;
+import java.util.List;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.onap.policy.clamp.models.acm.concepts.AcElementStatistics;
+import org.onap.policy.clamp.models.acm.concepts.AcElementStatisticsList;
+import org.onap.policy.clamp.models.acm.persistence.concepts.JpaAcElementStatistics;
+import org.onap.policy.clamp.models.acm.persistence.repository.AcElementStatisticsRepository;
+import org.onap.policy.common.utils.coder.Coder;
+import org.onap.policy.common.utils.coder.StandardCoder;
+import org.onap.policy.common.utils.resources.ResourceUtils;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+
+class AcElementStatisticsProviderTest {
+    private static final String LIST_IS_NULL = ".*. is marked .*ull but is null";
+    private static final Coder CODER = new StandardCoder();
+    private static final String AC_ELEMENT_STATS_JSON = "src/test/resources/providers/TestAcElementStatistics.json";
+
+    private AcElementStatisticsProvider acElementStatisticsProvider;
+    private AcElementStatisticsList inputAcElementStats;
+    private String originalJson = ResourceUtils.getResourceAsString(AC_ELEMENT_STATS_JSON);
+
+    /**
+     * Set up test AcElement statistics provider.
+     *
+     * @throws Exception on errors
+     */
+    @BeforeEach
+    void beforeSetupDao() throws Exception {
+
+        inputAcElementStats = CODER.decode(originalJson, AcElementStatisticsList.class);
+        var acElementStatisticsRepository = mock(AcElementStatisticsRepository.class);
+
+        var jpaAcElementStatisticsList =
+            ProviderUtils.getJpaAndValidateList(inputAcElementStats.getAcElementStatistics(),
+                JpaAcElementStatistics::new, "automation composition element statistics");
+
+        for (var acElementStat : jpaAcElementStatisticsList) {
+            when(acElementStatisticsRepository.getById(eq(acElementStat.getKey()))).thenReturn(acElementStat);
+            when(acElementStatisticsRepository.findAllById(eq(List.of(acElementStat.getKey()))))
+                .thenReturn(List.of(acElementStat));
+        }
+
+        when(acElementStatisticsRepository.saveAll(anyList())).thenReturn(jpaAcElementStatisticsList);
+
+        when(acElementStatisticsRepository.getFiltered(eq(JpaAcElementStatistics.class), any()))
+            .thenReturn(List.of(jpaAcElementStatisticsList.get(0)));
+
+        acElementStatisticsProvider = new AcElementStatisticsProvider(acElementStatisticsRepository);
+    }
+
+    @Test
+    void testAcElementStatisticsCreate() throws Exception {
+        assertThatThrownBy(() -> {
+            acElementStatisticsProvider.createAcElementStatistics(null);
+        }).hasMessageMatching(LIST_IS_NULL);
+
+        AcElementStatisticsList createdAcElementStats = new AcElementStatisticsList();
+        createdAcElementStats.setAcElementStatistics(
+            acElementStatisticsProvider.createAcElementStatistics(inputAcElementStats.getAcElementStatistics()));
+
+        assertEquals(inputAcElementStats.toString().replaceAll("\\s+", ""),
+            createdAcElementStats.toString().replaceAll("\\s+", ""));
+    }
+
+    @Test
+    void testGetAcElementStatistics() throws Exception {
+
+        List<AcElementStatistics> getResponse;
+
+        // Return empty list when no data present in db
+        getResponse = acElementStatisticsProvider.getAcElementStatistics(null, null, null, null);
+        assertThat(getResponse).isEmpty();
+
+        acElementStatisticsProvider.createAcElementStatistics(inputAcElementStats.getAcElementStatistics());
+        ToscaConceptIdentifier identifier = inputAcElementStats.getAcElementStatistics().get(0).getParticipantId();
+        Instant instant = inputAcElementStats.getAcElementStatistics().get(0).getTimeStamp();
+        String id = inputAcElementStats.getAcElementStatistics().get(0).getId().toString();
+        assertEquals(1, acElementStatisticsProvider
+            .getAcElementStatistics(identifier.getName(), identifier.getVersion(), id, instant).size());
+
+        assertEquals(1, acElementStatisticsProvider
+            .getFilteredAcElementStatistics("name2", "1.0.1", null, null, null, "DESC", 1).size());
+    }
+}
diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java
new file mode 100644 (file)
index 0000000..0a367ee
--- /dev/null
@@ -0,0 +1,305 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.models.acm.persistence.provider;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.List;
+import java.util.Optional;
+import javax.persistence.EntityNotFoundException;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions;
+import org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationComposition;
+import org.onap.policy.clamp.models.acm.persistence.repository.AutomationCompositionRepository;
+import org.onap.policy.clamp.models.acm.persistence.repository.ToscaNodeTemplateRepository;
+import org.onap.policy.clamp.models.acm.persistence.repository.ToscaNodeTemplatesRepository;
+import org.onap.policy.common.utils.coder.Coder;
+import org.onap.policy.common.utils.coder.StandardCoder;
+import org.onap.policy.common.utils.coder.YamlJsonTranslator;
+import org.onap.policy.common.utils.resources.ResourceUtils;
+import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaTypedEntityFilter;
+import org.onap.policy.models.tosca.simple.concepts.JpaToscaNodeTemplate;
+
+class AutomationCompositionProviderTest {
+
+    private static final String LIST_IS_NULL = "automationCompositions is marked .*ull but is null";
+    private static final String OBJECT_IS_NULL = "automationComposition is marked non-null but is null";
+
+    private static final String ID_NAME = "PMSHInstance1";
+    private static final String ID_VERSION = "1.0.1";
+    private static final String ID_NAME_NOT_EXTST = "not_exist";
+    private static final String ID_NAME_NOT_VALID = "not_valid";
+
+    private static final Coder CODER = new StandardCoder();
+    private static final String AUTOMATION_COMPOSITION_JSON =
+        "src/test/resources/providers/TestAutomationCompositions.json";
+    private static final String TOSCA_TEMPLATE_YAML = "examples/acm/PMSubscriptionHandling.yaml";
+
+    private static final YamlJsonTranslator yamlTranslator = new YamlJsonTranslator();
+
+    private AutomationCompositions inputAutomationCompositions;
+    private List<JpaAutomationComposition> inputAutomationCompositionsJpa;
+    private String originalJson = ResourceUtils.getResourceAsString(AUTOMATION_COMPOSITION_JSON);
+
+    @BeforeEach
+    void beforeSetupDao() throws Exception {
+        inputAutomationCompositions = CODER.decode(originalJson, AutomationCompositions.class);
+        inputAutomationCompositionsJpa =
+            ProviderUtils.getJpaAndValidateList(inputAutomationCompositions.getAutomationCompositionList(),
+                JpaAutomationComposition::new, "automation compositions");
+    }
+
+    @Test
+    void testAutomationCompositionsSave() throws Exception {
+        var automationCompositionRepository = mock(AutomationCompositionRepository.class);
+        var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository,
+            mock(ToscaNodeTemplateRepository.class), mock(ToscaNodeTemplatesRepository.class));
+
+        assertThatThrownBy(() -> {
+            automationCompositionProvider.saveAutomationCompositions(null);
+        }).hasMessageMatching(LIST_IS_NULL);
+
+        when(automationCompositionRepository.saveAll(inputAutomationCompositionsJpa))
+            .thenReturn(inputAutomationCompositionsJpa);
+
+        var createdAutomationCompositions = new AutomationCompositions();
+        createdAutomationCompositions.setAutomationCompositionList(automationCompositionProvider
+            .saveAutomationCompositions(inputAutomationCompositions.getAutomationCompositionList()));
+
+        assertEquals(inputAutomationCompositions, createdAutomationCompositions);
+
+        when(automationCompositionRepository.saveAll(any())).thenThrow(IllegalArgumentException.class);
+
+        assertThatThrownBy(() -> {
+            automationCompositionProvider
+                .saveAutomationCompositions(inputAutomationCompositions.getAutomationCompositionList());
+        }).hasMessageMatching("Error in save AutomationCompositions");
+    }
+
+    @Test
+    void testAutomationCompositionSave() throws Exception {
+        var automationCompositionRepository = mock(AutomationCompositionRepository.class);
+        var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository,
+            mock(ToscaNodeTemplateRepository.class), mock(ToscaNodeTemplatesRepository.class));
+
+        assertThatThrownBy(() -> {
+            automationCompositionProvider.saveAutomationComposition(null);
+        }).hasMessageMatching(OBJECT_IS_NULL);
+
+        when(automationCompositionRepository.save(inputAutomationCompositionsJpa.get(0)))
+            .thenReturn(inputAutomationCompositionsJpa.get(0));
+
+        var createdAutomationComposition = automationCompositionProvider
+            .saveAutomationComposition(inputAutomationCompositions.getAutomationCompositionList().get(0));
+
+        assertEquals(inputAutomationCompositions.getAutomationCompositionList().get(0), createdAutomationComposition);
+
+        when(automationCompositionRepository.save(any())).thenThrow(IllegalArgumentException.class);
+
+        assertThatThrownBy(() -> {
+            automationCompositionProvider
+                .saveAutomationComposition(inputAutomationCompositions.getAutomationCompositionList().get(0));
+        }).hasMessageMatching("Error in save automationComposition");
+    }
+
+    @Test
+    void testGetAutomationCompositions() throws Exception {
+        var automationCompositionRepository = mock(AutomationCompositionRepository.class);
+        var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository,
+            mock(ToscaNodeTemplateRepository.class), mock(ToscaNodeTemplatesRepository.class));
+
+        // Return empty list when no data present in db
+        List<AutomationComposition> getResponse = automationCompositionProvider.getAutomationCompositions();
+        assertThat(getResponse).isEmpty();
+
+        automationCompositionProvider
+            .saveAutomationCompositions(inputAutomationCompositions.getAutomationCompositionList());
+
+        var automationComposition0 = inputAutomationCompositions.getAutomationCompositionList().get(1);
+        var name = automationComposition0.getName();
+        var version = automationComposition0.getVersion();
+        var automationComposition1 = inputAutomationCompositions.getAutomationCompositionList().get(1);
+
+        when(automationCompositionRepository.getFiltered(eq(JpaAutomationComposition.class), any(), any()))
+            .thenReturn(List.of(new JpaAutomationComposition(automationComposition0),
+                new JpaAutomationComposition(automationComposition1)));
+        when(automationCompositionRepository.findById(automationComposition0.getKey().asIdentifier().asConceptKey()))
+            .thenReturn(Optional.of(new JpaAutomationComposition(automationComposition0)));
+        when(automationCompositionRepository.getById(automationComposition0.getKey().asIdentifier().asConceptKey()))
+            .thenReturn(new JpaAutomationComposition(automationComposition0));
+        when(automationCompositionRepository.getFiltered(JpaAutomationComposition.class, name, version))
+            .thenReturn(List.of(new JpaAutomationComposition(automationComposition0)));
+        when(automationCompositionRepository.findById(automationComposition1.getKey().asIdentifier().asConceptKey()))
+            .thenReturn(Optional.of(new JpaAutomationComposition(automationComposition1)));
+
+        assertEquals(1, automationCompositionProvider.getAutomationCompositions(name, version).size());
+
+        var ac = automationCompositionProvider
+            .findAutomationComposition(new ToscaConceptIdentifier(ID_NAME, ID_VERSION)).get();
+        assertEquals(inputAutomationCompositions.getAutomationCompositionList().get(1), ac);
+
+        ac = automationCompositionProvider.getAutomationComposition(new ToscaConceptIdentifier(ID_NAME, ID_VERSION));
+        assertEquals(inputAutomationCompositions.getAutomationCompositionList().get(1), ac);
+
+        when(automationCompositionRepository.getById(any())).thenThrow(EntityNotFoundException.class);
+
+        assertThatThrownBy(() -> {
+            automationCompositionProvider
+                .getAutomationComposition(new ToscaConceptIdentifier(ID_NAME_NOT_EXTST, ID_VERSION));
+        }).hasMessageMatching("AutomationComposition not found");
+
+        ac = automationCompositionProvider.findAutomationComposition(ID_NAME, ID_VERSION).get();
+        assertEquals(inputAutomationCompositions.getAutomationCompositionList().get(1), ac);
+
+        assertThat(automationCompositionProvider
+            .findAutomationComposition(new ToscaConceptIdentifier(ID_NAME_NOT_EXTST, ID_VERSION))).isEmpty();
+
+        when(automationCompositionRepository.findById(any())).thenThrow(IllegalArgumentException.class);
+
+        assertThatThrownBy(() -> {
+            automationCompositionProvider.findAutomationComposition(ID_NAME_NOT_VALID, ID_VERSION);
+        }).hasMessageMatching("Not valid parameter");
+    }
+
+    @Test
+    void testDeleteAutomationComposition() throws Exception {
+        var automationCompositionRepository = mock(AutomationCompositionRepository.class);
+        var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository,
+            mock(ToscaNodeTemplateRepository.class), mock(ToscaNodeTemplatesRepository.class));
+
+        assertThatThrownBy(() -> {
+            automationCompositionProvider.deleteAutomationComposition(ID_NAME_NOT_EXTST, ID_VERSION);
+        }).hasMessageMatching(".*.failed, automation composition does not exist");
+
+        var automationComposition = inputAutomationCompositions.getAutomationCompositionList().get(0);
+        var name = automationComposition.getName();
+        var version = automationComposition.getVersion();
+
+        when(automationCompositionRepository.findById(new PfConceptKey(name, version)))
+            .thenReturn(Optional.of(inputAutomationCompositionsJpa.get(0)));
+
+        AutomationComposition deletedAc = automationCompositionProvider.deleteAutomationComposition(name, version);
+        assertEquals(automationComposition, deletedAc);
+    }
+
+    @Test
+    void testDeleteAllInstanceProperties() throws Exception {
+        var automationCompositionProvider =
+            new AutomationCompositionProvider(mock(AutomationCompositionRepository.class),
+                mock(ToscaNodeTemplateRepository.class), mock(ToscaNodeTemplatesRepository.class));
+        var toscaServiceTemplate = testAutomationCompositionRead();
+        automationCompositionProvider.deleteInstanceProperties(
+            automationCompositionProvider.saveInstanceProperties(toscaServiceTemplate),
+            automationCompositionProvider.getAllNodeTemplates());
+        assertThat(automationCompositionProvider.getAutomationCompositions()).isEmpty();
+    }
+
+    @Test
+    void testSaveAndDeleteInstanceProperties() throws Exception {
+        var toscaNodeTemplatesRepository = mock(ToscaNodeTemplatesRepository.class);
+        var toscaNodeTemplateRepository = mock(ToscaNodeTemplateRepository.class);
+        var automationCompositionProvider = new AutomationCompositionProvider(
+            mock(AutomationCompositionRepository.class), toscaNodeTemplateRepository, toscaNodeTemplatesRepository);
+        var toscaServiceTest = testAutomationCompositionRead();
+
+        automationCompositionProvider.saveInstanceProperties(toscaServiceTest);
+        verify(toscaNodeTemplatesRepository).save(any());
+
+        var name = "org.onap.policy.acm.PolicyAutomationCompositionParticipant";
+        var version = "2.3.1";
+        var elem = toscaServiceTest.getToscaTopologyTemplate().getNodeTemplates().get(name);
+        when(toscaNodeTemplateRepository.getFiltered(JpaToscaNodeTemplate.class, name, version))
+            .thenReturn(List.of(new JpaToscaNodeTemplate(elem)));
+
+        var filtered = automationCompositionProvider.getNodeTemplates(name, version);
+        verify(toscaNodeTemplateRepository).getFiltered(JpaToscaNodeTemplate.class, name, version);
+
+        automationCompositionProvider
+            .deleteInstanceProperties(automationCompositionProvider.saveInstanceProperties(toscaServiceTest), filtered);
+
+        verify(toscaNodeTemplateRepository).delete(any());
+    }
+
+    @Test
+    void testGetNodeTemplates() throws Exception {
+        var toscaNodeTemplateRepository = mock(ToscaNodeTemplateRepository.class);
+        var automationCompositionProvider =
+            new AutomationCompositionProvider(mock(AutomationCompositionRepository.class), toscaNodeTemplateRepository,
+                mock(ToscaNodeTemplatesRepository.class));
+
+        var toscaNodeTemplate0 = new JpaToscaNodeTemplate(new PfConceptKey(ID_NAME, ID_VERSION));
+        var toscaNodeTemplate1 = new JpaToscaNodeTemplate(new PfConceptKey("PMSHInstance2", ID_VERSION));
+
+        when(toscaNodeTemplateRepository.getFiltered(JpaToscaNodeTemplate.class, null, null))
+            .thenReturn(List.of(toscaNodeTemplate0, toscaNodeTemplate1));
+        when(toscaNodeTemplateRepository.findAll()).thenReturn(List.of(toscaNodeTemplate0, toscaNodeTemplate1));
+        when(toscaNodeTemplateRepository.getFiltered(JpaToscaNodeTemplate.class, ID_NAME, ID_VERSION))
+            .thenReturn(List.of(toscaNodeTemplate0));
+
+        // Getting all nodes
+        var listNodes = automationCompositionProvider.getAllNodeTemplates();
+        assertNotNull(listNodes);
+        assertThat(listNodes).hasSize(2);
+
+        listNodes = automationCompositionProvider.getNodeTemplates(ID_NAME, ID_VERSION);
+        assertNotNull(listNodes);
+        assertThat(listNodes).hasSize(1);
+
+        listNodes = automationCompositionProvider.getAllNodeTemplates();
+        assertNotNull(listNodes);
+        assertThat(listNodes).hasSize(2);
+
+        var nodeTemplateFilter =
+            ToscaTypedEntityFilter.<ToscaNodeTemplate>builder().name(ID_NAME).version(ID_VERSION).build();
+
+        listNodes = automationCompositionProvider.getFilteredNodeTemplates(nodeTemplateFilter);
+        assertNotNull(listNodes);
+        assertThat(listNodes).hasSize(1);
+
+        assertThatThrownBy(() -> {
+            automationCompositionProvider.getFilteredNodeTemplates(null);
+        }).hasMessageMatching("filter is marked non-null but is null");
+    }
+
+    private static ToscaServiceTemplate testAutomationCompositionRead() {
+        return testAutomationCompositionYamlSerialization(TOSCA_TEMPLATE_YAML);
+    }
+
+    private static ToscaServiceTemplate testAutomationCompositionYamlSerialization(
+        String automationCompositionFilePath) {
+        var automationCompositionString = ResourceUtils.getResourceAsString(automationCompositionFilePath);
+        return yamlTranslator.fromYaml(automationCompositionString, ToscaServiceTemplate.class);
+    }
+}
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider;
+package org.onap.policy.clamp.models.acm.persistence.provider;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -33,9 +33,9 @@ import java.util.List;
 import java.util.Optional;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaParticipant;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ParticipantRepository;
+import org.onap.policy.clamp.models.acm.concepts.Participant;
+import org.onap.policy.clamp.models.acm.persistence.concepts.JpaParticipant;
+import org.onap.policy.clamp.models.acm.persistence.repository.ParticipantRepository;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.common.utils.resources.ResourceUtils;
@@ -84,7 +84,7 @@ class ParticipantProviderTest {
     }
 
     @Test
-    void testGetControlLoops() throws Exception {
+    void testGetAutomationCompositions() throws Exception {
         var participantRepository = mock(ParticipantRepository.class);
         var participantProvider = new ParticipantProvider(participantRepository);
 
@@ -119,7 +119,7 @@ class ParticipantProviderTest {
                 .thenReturn(jpaParticipantList);
 
         final ToscaTypedEntityFilter<Participant> filter = ToscaTypedEntityFilter.<Participant>builder()
-                .type("org.onap.domain.pmsh.PMSHControlLoopDefinition").build();
+                .type("org.onap.domain.pmsh.PMSHAutomationCompositionDefinition").build();
         assertEquals(1, participantProvider.getFilteredParticipants(filter).size());
 
     }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider;
+package org.onap.policy.clamp.models.acm.persistence.provider;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -33,10 +33,10 @@ import java.time.Instant;
 import java.util.List;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatisticsList;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaParticipantStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ParticipantStatisticsRepository;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantStatistics;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantStatisticsList;
+import org.onap.policy.clamp.models.acm.persistence.concepts.JpaParticipantStatistics;
+import org.onap.policy.clamp.models.acm.persistence.repository.ParticipantStatisticsRepository;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.common.utils.resources.ResourceUtils;
@@ -89,7 +89,7 @@ class ParticipantStatisticsProviderTest {
     }
 
     @Test
-    void testGetControlLoops() throws Exception {
+    void testGetAutomationCompositions() throws Exception {
         // Return empty list when no data present in db
         List<ParticipantStatistics> getResponse =
                 participantStatisticsProvider.getParticipantStatistics(null, null, null);
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider;
+package org.onap.policy.clamp.models.acm.persistence.provider;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -32,7 +32,7 @@ import java.util.List;
 import java.util.Optional;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ToscaServiceTemplateRepository;
+import org.onap.policy.clamp.models.acm.persistence.repository.ToscaServiceTemplateRepository;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardYamlCoder;
 import org.onap.policy.common.utils.resources.ResourceUtils;
@@ -117,7 +117,7 @@ class ServiceTemplateProviderTest {
 
         var serviceTemplateProvider = new ServiceTemplateProvider(serviceTemplateRepository);
         assertThatThrownBy(() -> serviceTemplateProvider.getToscaServiceTemplate("Name", "1.0.0"))
-                .hasMessage("Control Loop definitions not found");
+                .hasMessage("Automation composition definitions not found");
     }
 
     @Test
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository;
+package org.onap.policy.clamp.models.acm.persistence.repository;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -26,9 +26,9 @@ import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ProviderUtils;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions;
+import org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationComposition;
+import org.onap.policy.clamp.models.acm.persistence.provider.ProviderUtils;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.common.utils.resources.ResourceUtils;
@@ -38,11 +38,12 @@ import org.onap.policy.models.provider.PolicyModelsProviderParameters;
 import org.onap.policy.models.provider.impl.ModelsProvider;
 
 class FilterRepositoryImplTest {
-    private static final String CONTROL_LOOP_JSON = "src/test/resources/providers/TestControlLoops.json";
+    private static final String AUTOMATION_COMPOSITION_JSON =
+        "src/test/resources/providers/TestAutomationCompositions.json";
     private static final Coder CODER = new StandardCoder();
     private static final AtomicInteger dbNameCounter = new AtomicInteger();
-    private static final String originalJson = ResourceUtils.getResourceAsString(CONTROL_LOOP_JSON);
-    private static List<JpaControlLoop> jpaControlLoops;
+    private static final String originalJson = ResourceUtils.getResourceAsString(AUTOMATION_COMPOSITION_JSON);
+    private static List<JpaAutomationComposition> jpaAutomationCompositions;
     private PfDao pfDao;
 
     @BeforeEach
@@ -51,17 +52,18 @@ class FilterRepositoryImplTest {
         parameters.setDatabaseDriver("org.h2.Driver");
         parameters.setName("PolicyProviderParameterGroup");
         parameters.setImplementation("org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl");
-        parameters.setDatabaseUrl("jdbc:h2:mem:controlLoopProviderTestDb" + dbNameCounter.getAndDecrement());
+        parameters.setDatabaseUrl("jdbc:h2:mem:automationCompositionProviderTestDb" + dbNameCounter.getAndDecrement());
         parameters.setDatabaseUser("policy");
         parameters.setDatabasePassword("P01icY");
         parameters.setPersistenceUnit("ToscaConceptTest");
 
         pfDao = ModelsProvider.init(parameters);
-        var inputControlLoops = CODER.decode(originalJson, ControlLoops.class);
-        jpaControlLoops = ProviderUtils.getJpaAndValidateList(inputControlLoops.getControlLoopList(),
-                JpaControlLoop::new, "ControlLoops");
+        var inputAutomationCompositions = CODER.decode(originalJson, AutomationCompositions.class);
+        jpaAutomationCompositions =
+            ProviderUtils.getJpaAndValidateList(inputAutomationCompositions.getAutomationCompositionList(),
+                JpaAutomationComposition::new, "AutomationCompositions");
 
-        pfDao.createCollection(jpaControlLoops);
+        pfDao.createCollection(jpaAutomationCompositions);
     }
 
     @Test
@@ -77,10 +79,11 @@ class FilterRepositoryImplTest {
                 return pfDao;
             }
         };
-        var result = filterRepositoryImpl.getFiltered(JpaControlLoop.class, null, null);
+        var result = filterRepositoryImpl.getFiltered(JpaAutomationComposition.class, null, null);
         assertThat(result).hasSize(2);
 
-        result = filterRepositoryImpl.getFiltered(JpaControlLoop.class, jpaControlLoops.get(0).getName(), null);
+        result = filterRepositoryImpl.getFiltered(JpaAutomationComposition.class,
+            jpaAutomationCompositions.get(0).getName(), null);
         assertThat(result).hasSize(1);
     }
 
@@ -96,11 +99,11 @@ class FilterRepositoryImplTest {
         // @formatter:off
         PfFilterParameters filterParams = PfFilterParameters
                 .builder()
-                .name(jpaControlLoops.get(0).getName())
+                .name(jpaAutomationCompositions.get(0).getName())
                 .build();
         // @formatter:on
 
-        var result = filterRepositoryImpl.getFiltered(JpaControlLoop.class, filterParams);
+        var result = filterRepositoryImpl.getFiltered(JpaAutomationComposition.class, filterParams);
         assertThat(result).hasSize(1);
     }
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.models.rest;
+package org.onap.policy.clamp.models.acm.rest;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.common.utils;
+package org.onap.policy.clamp.models.acm.utils;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
@@ -29,10 +29,10 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantDefinition;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantUpdates;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantUtils;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantDefinition;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantUpdates;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantUtils;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaDataType;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
@@ -41,37 +41,37 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
 
-class CommonUtilsTest {
+class AcmUtilsTest {
 
     private ToscaConceptIdentifier id = new ToscaConceptIdentifier("id", "1.0.0");
-    private ToscaConceptIdentifier idNode = new ToscaConceptIdentifier(
-            "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant", "0.0.0");
+    private ToscaConceptIdentifier idNode =
+        new ToscaConceptIdentifier("org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant", "0.0.0");
 
     @Test
     void testCommonUtilsParticipantUpdate() {
-        var clElement = new ControlLoopElement();
+        var acElement = new AutomationCompositionElement();
         List<ParticipantUpdates> participantUpdates = new ArrayList<>();
         assertThat(participantUpdates).isEmpty();
 
-        CommonUtils.prepareParticipantUpdate(clElement, participantUpdates);
+        AcmUtils.prepareParticipantUpdate(acElement, participantUpdates);
         assertThat(participantUpdates).isNotEmpty();
-        assertEquals(clElement, participantUpdates.get(0).getControlLoopElementList().get(0));
+        assertEquals(acElement, participantUpdates.get(0).getAutomationCompositionElementList().get(0));
 
-        CommonUtils.prepareParticipantUpdate(clElement, participantUpdates);
+        AcmUtils.prepareParticipantUpdate(acElement, participantUpdates);
         assertNotEquals(id, participantUpdates.get(0).getParticipantId());
 
-        clElement.setParticipantId(id);
-        clElement.setParticipantType(id);
-        CommonUtils.prepareParticipantUpdate(clElement, participantUpdates);
+        acElement.setParticipantId(id);
+        acElement.setParticipantType(id);
+        AcmUtils.prepareParticipantUpdate(acElement, participantUpdates);
         assertEquals(id, participantUpdates.get(1).getParticipantId());
     }
 
     @Test
     void testCommonUtilsServiceTemplate() {
-        var clElement = new ControlLoopElement();
+        var acElement = new AutomationCompositionElement();
         var toscaServiceTemplate = getDummyToscaServiceTemplate();
-        CommonUtils.setServiceTemplatePolicyInfo(clElement, toscaServiceTemplate);
-        assertEquals(getDummyToscaDataTypeMap(), clElement.getToscaServiceTemplateFragment().getDataTypes());
+        AcmUtils.setServiceTemplatePolicyInfo(acElement, toscaServiceTemplate);
+        assertEquals(getDummyToscaDataTypeMap(), acElement.getToscaServiceTemplateFragment().getDataTypes());
     }
 
     @Test
@@ -85,9 +85,8 @@ class CommonUtilsTest {
         assertEquals(id, participantDefinitionUpdates.get(0).getParticipantType());
 
         checkParticipantDefinitionUpdate(toscaServiceTemplate, participantDefinitionUpdates);
-        assertEquals(idNode, participantDefinitionUpdates.get(0)
-                .getControlLoopElementDefinitionList().get(0)
-                .getClElementDefinitionId());
+        assertEquals(idNode, participantDefinitionUpdates.get(0).getAutomationCompositionElementDefinitionList().get(0)
+            .getAcElementDefinitionId());
     }
 
     private ToscaServiceTemplate getDummyToscaServiceTemplate() {
@@ -130,21 +129,20 @@ class CommonUtilsTest {
     private Map<String, ToscaNodeTemplate> getDummyNodeTemplates() {
         Map<String, ToscaNodeTemplate> nodeTemplates = new HashMap<>();
         var nodeTemplate = new ToscaNodeTemplate();
-        nodeTemplate.setType("org.onap.policy.clamp.controlloop.ControlLoopElement");
-        nodeTemplates.put("org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant", nodeTemplate);
+        nodeTemplate.setType("org.onap.policy.clamp.acm.AutomationCompositionElement");
+        nodeTemplates.put("org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant", nodeTemplate);
         return nodeTemplates;
     }
 
-    private void checkParticipantDefinitionUpdate(
-            ToscaServiceTemplate toscaServiceTemplate,
-            List<ParticipantDefinition> participantDefinitionUpdates) {
+    private void checkParticipantDefinitionUpdate(ToscaServiceTemplate toscaServiceTemplate,
+        List<ParticipantDefinition> participantDefinitionUpdates) {
 
         for (Map.Entry<String, ToscaNodeTemplate> toscaInputEntry : toscaServiceTemplate.getToscaTopologyTemplate()
-                .getNodeTemplates().entrySet()) {
-            if (ParticipantUtils.checkIfNodeTemplateIsControlLoopElement(toscaInputEntry.getValue(),
-                    toscaServiceTemplate)) {
-                CommonUtils.prepareParticipantDefinitionUpdate(id, toscaInputEntry.getKey(),
-                        toscaInputEntry.getValue(), participantDefinitionUpdates, null);
+            .getNodeTemplates().entrySet()) {
+            if (ParticipantUtils.checkIfNodeTemplateIsAutomationCompositionElement(toscaInputEntry.getValue(),
+                toscaServiceTemplate)) {
+                AcmUtils.prepareParticipantDefinitionUpdate(id, toscaInputEntry.getKey(), toscaInputEntry.getValue(),
+                    participantDefinitionUpdates, null);
             }
         }
     }
index 54495a2..9bd1362 100644 (file)
         <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate</class>
         <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate</class>
         <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaTrigger</class>
-        <class>org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaControlLoop</class>
-        <class>org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaControlLoopElement</class>
-        <class>org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaParticipant</class>
-        <class>org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaParticipantStatistics</class>
-        <class>org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaClElementStatistics</class>
+        <class>org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationComposition</class>
+        <class>org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationCompositionElement</class>
+        <class>org.onap.policy.clamp.models.acm.persistence.concepts.JpaParticipant</class>
+        <class>org.onap.policy.clamp.models.acm.persistence.concepts.JpaParticipantStatistics</class>
+        <class>org.onap.policy.clamp.models.acm.persistence.concepts.JpaClElementStatistics</class>
 
         <properties>
             <property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
@@ -26,8 +26,8 @@ data_types:
       version:
         type: string
         required: true
-  org.onap.datatypes.policy.clamp.controlloop.DCAEMicroserviceControlLoopElementConsulInfo:
-    name: org.onap.datatypes.policy.clamp.controlloop.DCAEMicroserviceControlLoopElementConsulInfo
+  org.onap.datatypes.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElementConsulInfo:
+    name: org.onap.datatypes.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElementConsulInfo
     version: 0.0.0
     derived_from: tosca.datatypes.Root
     properties:
@@ -303,14 +303,14 @@ policy_types:
     derived_from: onap.policies.Monitoring
     metadata: {}
 node_types:
-  org.onap.policy.clamp.controlloop.Participant:
+  org.onap.policy.clamp.acm.Participant:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
       provider:
         type: string
         required: false
-  org.onap.policy.clamp.controlloop.ControlLoopElement:
+  org.onap.policy.clamp.acm.AutomationCompositionElement:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
@@ -327,11 +327,11 @@ node_types:
         - greater-or-equal: 0
         metadata:
             common: true
-        description: A value indicating the start phase in which this control loop element will be started, the
-                     first start phase is zero. Control Loop Elements are started in their start_phase order and stopped
-                     in reverse start phase order. Control Loop Elements with the same start phase are started and
-                     stopped simultaneously
-  org.onap.policy.clamp.controlloop.ControlLoop:
+        description: A value indicating the start phase in which this automation composition element will be started,
+                     the first start phase is zero. Automation composition elements are started in their start_phase
+                     order and stopped in reverse start phase order. Automation composition elements with the same start
+                     phase are started and stopped simultaneously
+  org.onap.policy.clamp.acm.AutomationComposition:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
@@ -343,9 +343,9 @@ node_types:
         required: true
         entry_schema:
           type: onap.datatypes.ToscaConceptIdentifier
-  org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement:
+  org.onap.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       dcae_blueprint_id:
         type: onap.datatypes.ToscaConceptIdentifier
@@ -357,10 +357,10 @@ node_types:
         type: list
         required: false
         entry_schema:
-          type: org.onap.datatypes.policy.clamp.controlloop.DCAEMicroserviceControlLoopElementConsulInfo
-  org.onap.policy.clamp.controlloop.PolicyControlLoopElement:
+          type: org.onap.datatypes.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElementConsulInfo
+  org.onap.policy.clamp.acm.PolicyAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       policy_type_id:
         type: onap.datatypes.ToscaConceptIdentifier
@@ -368,9 +368,9 @@ node_types:
       policy_id:
         type: onap.datatypes.ToscaConceptIdentifier
         required: false
-  org.onap.policy.clamp.controlloop.CDSControlLoopElement:
+  org.onap.policy.clamp.acm.CDSAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       cds_blueprint_id:
         type: onap.datatypes.ToscaConceptIdentifier
@@ -390,36 +390,36 @@ topology_template:
         name: operational.apex.pmcontrol
         version: 1.0.0
   node_templates:
-    org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant:
+    org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant:
       version: 2.3.4
-      type: org.onap.policy.clamp.controlloop.Participant
+      type: org.onap.policy.clamp.acm.Participant
       type_version: 1.0.1
       description: Participant for DCAE microservices
       properties:
         provider: ONAP
-    org.onap.policy.controlloop.PolicyControlLoopParticipant:
+    org.onap.policy.acm.PolicyAutomationCompositionParticipant:
       version: 2.3.1
-      type: org.onap.policy.clamp.controlloop.Participant
+      type: org.onap.policy.clamp.acm.Participant
       type_version: 1.0.1
       description: Participant for DCAE microservices
       properties:
         provider: ONAP
-    org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant:
+    org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant:
       version: 2.2.1
-      type: org.onap.policy.clamp.controlloop.Participant
+      type: org.onap.policy.clamp.acm.Participant
       type_version: 1.0.1
       description: Participant for DCAE microservices
       properties:
         provider: ONAP
     org.onap.domain.pmsh.PMSH_DCAEMicroservice:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement
+      type: org.onap.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the DCAE microservice for Performance Management Subscription Handling
+      description: Automation composition element for the DCAE microservice for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant
+          name: org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant
           version: 2.3.4
         dcae_blueprint:
           tosca_definitions_version: cloudify_dsl_1_3
@@ -635,64 +635,64 @@ topology_template:
                   managedObjectDNsBasic:
                   - DN: dnc
                   - DN: dnd
-    org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement:
+    org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
+      type: org.onap.policy.clamp.acm.PolicyAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the monitoring policy for Performance Management Subscription Handling
+      description: Automation composition element for the monitoring policy for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
+          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
           version: 2.3.1
         policy_type_id:
           name: onap.policies.monitoring.pm-subscription-handler
           version: 1.0.0
         policy_id:
           get_input: pmsh_monitoring_policy
-    org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement:
+    org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
+      type: org.onap.policy.clamp.acm.PolicyAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the operational policy for Performance Management Subscription Handling
+      description: Automation composition element for the operational policy for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
+          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
           version: 2.2.1
         policy_type_id:
           name: onap.policies.operational.pm-subscription-handler
           version: 1.0.0
         policy_id:
           get_input: pmsh_operational_policy
-    org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement:
+    org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.CDSControlLoopElement
+      type: org.onap.policy.clamp.acm.CDSAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for CDS for Performance Management Subscription Handling
+      description: Automation composition element for CDS for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant
+          name: org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant
           version: 3.2.1
         cds_blueprint_id:
           name: org.onap.ccsdk.cds.PMSHCdsBlueprint
           version: 1.0.0
-    org.onap.domain.pmsh.PMSHControlLoopDefinition:
+    org.onap.domain.pmsh.PMSHAutomationCompositionDefinition:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoop
+      type: org.onap.policy.clamp.acm.AutomationComposition
       type_version: 1.0.0
-      description: Control loop for Performance Management Subscription Handling
+      description: Automation composition for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         elements:
         - name: org.onap.domain.pmsh.PMSH_DCAEMicroservice
           version: 1.2.3
-        - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement
+        - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement
           version: 1.2.3
-        - name: org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement
+        - name: org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement
           version: 1.2.3
-        - name: org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement
+        - name: org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement
           version: 1.2.3
   policies:
   - MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test:
@@ -753,7 +753,7 @@ topology_template:
                     onap.datatypes.monitoring.managedObjectDNsBasic:
                       DN: dnd
   - operational.apex.pmcontrol:
-      type: onap.policies.controlloop.operational.common.Apex
+      type: onap.policies.acm.operational.common.Apex
       type_version: 1.0.0
       version: 1.0.0
       metadata:
@@ -3212,7 +3212,7 @@ topology_template:
                   jsonAdapters:
                     Instant:
                       adaptedClass: java.time.Instant
-                      adaptorClass: org.onap.policy.controlloop.util.Serialization$GsonInstantAdapter
+                      adaptorClass: org.onap.policy.acm.util.Serialization$GsonInstantAdapter
         eventInputParameters:
           DCAEConsumer:
             carrierTechnologyParameters:
@@ -1,7 +1,7 @@
 {
     "id": "a95757ba-b34a-4049-a2a8-46773abcbe5e",
     "definition": {
-        "name": "cleDef",
+        "name": "aceDef",
         "version": "0.0.1"
     },
     "participantType": {
@@ -1,12 +1,12 @@
 {
     "definition": {
-        "name": "controlLoopDefinitionName",
+        "name": "automationCompositionDefinitionName",
         "version": "0.0.1"
     },
     "state": "UNINITIALISED",
     "orderedState": null,
     "elements": [
     ],
-    "name": "control-loop",
+    "name": "automation-composition",
     "version": "0.0.1"
 }
@@ -1,5 +1,5 @@
 {
-  "clElementStatistics":[
+  "acElementStatistics":[
     {
       "participantId":{
         "name":"name1",
@@ -7,8 +7,8 @@
       },
       "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
       "timeStamp": "2021-01-10T13:45:00.000Z",
-      "controlLoopState": "UNINITIALISED",
-      "clElementUptime":250
+      "state": "UNINITIALISED",
+      "acElementUptime":250
     },
     {
       "participantId":{
@@ -17,8 +17,8 @@
       },
       "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
       "timeStamp": "2021-01-10T14:25:00.000Z",
-      "controlLoopState": "UNINITIALISED",
-      "clElementUptime":330
+      "state": "UNINITIALISED",
+      "acElementUptime":330
     }
   ]
 }
@@ -1,8 +1,8 @@
 {
-    "controlLoopList": [
+    "automationCompositionList": [
         {
             "definition": {
-                "name": "org.onap.domain.pmsh.PMSHControlLoopDefinition",
+                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
                 "version": "1.0.0"
             },
             "state": "UNINITIALISED",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "DCAE Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "DCAE automation composition element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-e21eb79c6c21": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Monitoring Policy Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "Monitoring Policy element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-e21eb79c6c22": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c22",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Operational Policy Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "Operational Policy element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-e21eb79c6c23": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c23",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "CDS Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "CDS automation composition element for the PMSH instance 0 automation composition"
                 }
             },
             "name": "PMSHInstance0",
             "version": "1.0.1",
-            "description": "PMSH control loop instance 0"
+            "description": "PMSH automation composition instance 0"
         },
         {
             "definition": {
-                "name": "org.onap.domain.pmsh.PMSHControlLoopDefinition",
+                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
                 "version": "1.0.0"
             },
             "state": "UNINITIALISED",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "DCAE Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "DCAE automation composition element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-e21eb79c6c25": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c25",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Monitoring Policy Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "Monitoring Policy element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-e21eb79c6c26": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c26",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Operational Policy Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "Operational Policy element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-e21eb79c6c27": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c27",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "CDS Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "CDS element for the PMSH instance 1 automation composition"
                 }
             },
             "name": "PMSHInstance1",
             "version": "1.0.1",
-            "description": "PMSH control loop instance 1"
+            "description": "PMSH automation composition instance 1"
         }
     ]
 }
index 4722ead..7e4f954 100644 (file)
@@ -2,14 +2,14 @@
   "name": "dummy_participant1",
   "version": "1.0.1",
   "definition":{
-    "name": "org.onap.domain.pmsh.PMSHControlLoopDefinition",
+    "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
     "version": "1.0.0"
   },
   "participantState": "PASSIVE",
   "healthStatus": "HEALTHY",
   "description": "A dummy PMSH participant1",
   "participantType":{
-    "name": "org.onap.domain.pmsh.PolicyControlLoopDefinition",
+    "name": "org.onap.domain.pmsh.PolicyAutomationCompositionDefinition",
     "version": "1.0.0"
   }
 }
@@ -1,15 +1,15 @@
 {
-    "controlLoopList": [
+    "automationCompositionList": [
         {
             "name": "PMSHInstance0",
             "version": "1.0.1",
             "definition": {
-                "name": "org.onap.domain.pmsh.PMSHControlLoopDefinition",
+                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
                 "version": "1.0.0"
             },
             "state": "RUNNING",
             "orderedState": "RUNNING",
-            "description": "PMSH control loop instance 0",
+            "description": "PMSH automation composition instance 0",
             "elements": {
                 "709c62b3-8918-41b9-a747-d21eb79c6c20": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "state": "RUNNING",
                     "orderedState": "RUNNING",
-                    "description": "DCAE Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "DCAE element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c21": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "RUNNING",
                     "orderedState": "RUNNING",
-                    "description": "Monitoring Policy Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "Monitoring Policy element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c22": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c22",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement",
                         "version": "2.3.1"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "1.0.0"
                     },
                     "state": "RUNNING",
                     "orderedState": "RUNNING",
-                    "description": "Operational Policy Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "Operational Policy element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c23": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c23",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "state": "RUNNING",
                     "orderedState": "RUNNING",
-                    "description": "CDS Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "CDS element for the PMSH instance 0 automation composition"
                 }
             }
         }
index 08511e0..6415d2d 100644 (file)
 
                     <images>
                         <image>
-                            <name>onap/policy-clamp-cl-runtime</name>
+                            <name>onap/policy-clamp-runtime-acm</name>
                             <build>
                                 <cleanup>try</cleanup>
-                                <dockerFile>ClRuntimeDockerfile</dockerFile>
+                                <dockerFile>AcmRuntimeDockerfile</dockerFile>
                                 <tags>
                                     <tag>${project.version}</tag>
                                     <tag>${project.version}-${maven.build.timestamp}</tag>
                                                     <include>org.onap.policy.clamp:policy-clamp-tarball</include>
                                                 </includes>
                                                 <outputDirectory>/lib</outputDirectory>
-                                                <outputFileNameMapping>policy-controlloop-runtime.tar.gz</outputFileNameMapping>
+                                                <outputFileNameMapping>policy-clamp-runtime-acm.tar.gz</outputFileNameMapping>
                                             </dependencySet>
                                             <dependencySet>
                                                 <includes>
-                                                    <include>org.onap.policy.clamp:policy-clamp-runtime-controlloop</include>
+                                                    <include>org.onap.policy.clamp:policy-clamp-runtime-acm</include>
                                                 </includes>
                                                 <outputFileNameMapping>app.jar</outputFileNameMapping>
                                             </dependencySet>
                             </build>
                         </image>
                         <image>
-                            <name>onap/policy-clamp-cl-pf-ppnt</name>
-                            <alias>onap-policy-clamp-cl-pf-ppnt</alias>
+                            <name>onap/policy-clamp-ac-pf-ppnt</name>
+                            <alias>onap-policy-clamp-ac-pf-ppnt</alias>
                             <build>
                                 <cleanup>try</cleanup>
                                 <dockerFile>PolicyParticipantDockerfile</dockerFile>
                             </build>
                         </image>
                         <image>
-                            <name>onap/policy-clamp-cl-k8s-ppnt</name>
-                            <alias>onap-policy-clamp-cl-k8s-ppnt</alias>
+                            <name>onap/policy-clamp-ac-k8s-ppnt</name>
+                            <alias>onap-policy-clamp-ac-k8s-ppnt</alias>
                             <build>
                                 <cleanup>try</cleanup>
                                 <dockerFile>KubernetesParticipantDockerfile</dockerFile>
                             </build>
                         </image>
                         <image>
-                            <name>onap/policy-clamp-cl-http-ppnt</name>
-                            <alias>onap-policy-clamp-cl-http-ppnt</alias>
+                            <name>onap/policy-clamp-ac-http-ppnt</name>
+                            <alias>onap-policy-clamp-ac-http-ppnt</alias>
                             <build>
                                 <cleanup>try</cleanup>
                                 <dockerFile>HttpParticipantDockerfile</dockerFile>
                             <goal>build</goal>
                             <goal>push</goal>
                         </goals>
-                        <configuration>
-                            <image>onap/policy-clamp</image>
-                        </configuration>
                     </execution>
                 </executions>
             </plugin>
@@ -19,7 +19,7 @@
 #-------------------------------------------------------------------------------
 
 #
-# Docker file to build an image that runs CLAMP on Java 11 or better in alpine
+# Docker file to build an image that runs the CLAMP ACM runtime on Java 11 or better in alpine
 #
 FROM onap/policy-jre-alpine:2.4.0
 
@@ -33,13 +33,13 @@ ENV POLICY_HOME=$POLICY_HOME/clamp
 RUN mkdir -p $POLICY_LOGS $POLICY_HOME $POLICY_HOME/bin && \
     chown -R policy:policy $POLICY_HOME $POLICY_LOGS && \
     mkdir /packages
-COPY /maven/lib/policy-controlloop-runtime.tar.gz /packages
+COPY /maven/lib/policy-clamp-runtime-acm.tar.gz /packages
 
-RUN tar xvfz /packages/policy-controlloop-runtime.tar.gz --directory $POLICY_HOME && \
-    rm /packages/policy-controlloop-runtime.tar.gz
+RUN tar xvfz /packages/policy-clamp-runtime-acm.tar.gz --directory $POLICY_HOME && \
+    rm /packages/policy-clamp-runtime-acm.tar.gz
 
 WORKDIR $POLICY_HOME
-COPY controlloop-runtime.sh  bin/.
+COPY acm-runtime.sh  bin/.
 COPY /maven/app.jar /app
 
 RUN chown -R policy:policy * && \
@@ -50,4 +50,4 @@ EXPOSE 6969
 
 USER policy
 WORKDIR $POLICY_HOME/bin
-ENTRYPOINT [ "./controlloop-runtime.sh" ]
+ENTRYPOINT [ "./acm-runtime.sh" ]
index 2497f5d..b6f2c44 100644 (file)
@@ -19,7 +19,7 @@
 #-------------------------------------------------------------------------------
 
 #
-# Docker file to build an image that runs CLAMP on Java 11 or better in alpine
+# Docker file to build an image that runs the CLAMP ACM HTTP Participant on Java 11 or better in alpine
 #
 
 FROM onap/policy-jre-alpine:2.4.0
index e7fc890..688e68d 100644 (file)
@@ -19,7 +19,7 @@
 #-------------------------------------------------------------------------------
 
 #
-# Docker file to build an image that runs CLAMP on Java 11 or better in alpine
+# Docker file to build an image that runs the CLAMP ACM K8S Participant on Java 11 or better in alpine
 #
 FROM onap/policy-jre-alpine:2.4.0
 
index a0d0032..50d4210 100644 (file)
@@ -19,7 +19,7 @@
 #-------------------------------------------------------------------------------
 
 #
-# Docker file to build an image that runs CLAMP on Java 11 or better in alpine
+# Docker file to build an image that runs the CLAMP ACM Policy Framework Participant on Java 11 or better in alpine
 #
 FROM onap/policy-jre-alpine:2.4.0
 
@@ -32,7 +32,7 @@ else
 fi
 
 if [ -z "$CONFIG_FILE" ]; then
-    CONFIG_FILE="${POLICY_HOME}/etc/ClRuntimeParameters.yaml"
+    CONFIG_FILE="${POLICY_HOME}/etc/AcRuntimeParameters.yaml"
 fi
 
 echo "Policy clamp config file: $CONFIG_FILE"
@@ -54,7 +54,7 @@ fi
 
 touch /app/app.jar
 mkdir -p "${POLICY_HOME}"/config/
-cp -f "${CONFIG_FILE}" "${POLICY_HOME}"/config/ClRuntimeParameters.yaml
+cp -f "${CONFIG_FILE}" "${POLICY_HOME}"/config/AcRuntimeParameters.yaml
 
 $JAVA_HOME/bin/java -Dserver.ssl.enabled="true" \
     -Dserver.ssl.keyStore="${KEYSTORE}" \
@@ -68,4 +68,4 @@ $JAVA_HOME/bin/java -Dserver.ssl.enabled="true" \
     -Dcom.sun.management.jmxremote.authenticate=false \
     -Dcom.sun.management.jmxremote.local.only=false \
     -jar /app/app.jar \
-    --spring.config.location="${POLICY_HOME}/config/ClRuntimeParameters.yaml"
+    --spring.config.location="${POLICY_HOME}/config/AcRuntimeParameters.yaml"
index 6b4a370..36aab6b 100644 (file)
@@ -34,7 +34,7 @@
     <dependencies>
         <dependency>
             <groupId>org.onap.policy.clamp</groupId>
-            <artifactId>policy-clamp-runtime-controlloop</artifactId>
+            <artifactId>policy-clamp-runtime-acm</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
@@ -7,7 +7,7 @@ spring:
     converters:
       preferred-json-mapper: gson
   datasource:
-    url: jdbc:mariadb://${mariadb.host:mariadb}:${mariadb.port:3306}/controlloop
+    url: jdbc:mariadb://${mariadb.host:mariadb}:${mariadb.port:3306}/clamp-acm
     driverClassName: org.mariadb.jdbc.Driver
     username: policy_user
     password: policy_user
@@ -33,11 +33,10 @@ security:
 server:
   port: 6969
   servlet:
-    context-path: /onap/controlloop
+    context-path: /onap/policy/clamp/acm
   error:
     path: /error
 
-
 runtime:
   participantParameters:
     heartBeatMs: 20000
@@ -48,7 +47,7 @@ runtime:
   topicParameterGroup:
     topicSources:
       -
-        topic: POLICY-CLRUNTIME-PARTICIPANT
+        topic: POLICY-ACRUNTIME-PARTICIPANT
         servers:
           - ${topicServer:message-router}
         topicCommInfrastructure: dmaap
@@ -56,7 +55,7 @@ runtime:
         useHttps: true
     topicSinks:
       -
-        topic: POLICY-CLRUNTIME-PARTICIPANT
+        topic: POLICY-ACRUNTIME-PARTICIPANT
         servers:
           - ${topicServer:message-router}
         topicCommInfrastructure: dmaap
index b13059a..529b095 100644 (file)
@@ -13,18 +13,18 @@ participant:
       name: HttpParticipant0
       version: 1.0.0
     participantType:
-      name: org.onap.k8s.controlloop.HttpControlLoopParticipant
+      name: org.onap.policy.clamp.acm.HttpParticipant
       version: 2.3.4
-    clampControlLoopTopics:
+    clampAutomationCompositionTopics:
       topicSources:
-        - topic: POLICY-CLRUNTIME-PARTICIPANT
+        - topic: POLICY-ACRUNTIME-PARTICIPANT
           servers:
             - ${topicServer:message-router}
           topicCommInfrastructure: dmaap
           fetchTimeout: 15000
           useHttps: true
       topicSinks:
-        - topic: POLICY-CLRUNTIME-PARTICIPANT
+        - topic: POLICY-ACRUNTIME-PARTICIPANT
           servers:
             - ${topicServer:message-router}
           topicCommInfrastructure: dmaap
@@ -37,4 +37,4 @@ management:
 server:
   port: 8084
   servlet:
-    context-path: /onap/httpparticipant
+    context-path: /onap/policy/clamp/acm/httpparticipant
index 0d94e2e..c6acf40 100644 (file)
@@ -16,12 +16,12 @@ participant:
       name: K8sParticipant0
       version: 1.0.0
     participantType:
-      name: org.onap.k8s.controlloop.K8SControlLoopParticipant
+      name: org.onap.policy.clamp.acm.KubernetesParticipant
       version: 2.3.4
-    clampControlLoopTopics:
+    clampAutomationCompositionTopics:
       topicSources:
         -
-          topic: POLICY-CLRUNTIME-PARTICIPANT
+          topic: POLICY-ACRUNTIME-PARTICIPANT
           servers:
             - ${topicServer:message-router}
           topicCommInfrastructure: dmaap
@@ -29,7 +29,7 @@ participant:
           useHttps: true
       topicSinks:
         -
-          topic: POLICY-CLRUNTIME-PARTICIPANT
+          topic: POLICY-ACRUNTIME-PARTICIPANT
           servers:
             - ${topicServer:message-router}
           topicCommInfrastructure: dmaap
@@ -43,7 +43,7 @@ management:
 server:
   port: 8083
   servlet:
-    context-path: /onap/k8sparticipant
+    context-path: /onap/policy/clamp/acm/k8sparticipant
 
 logging:
   # Configuration of logging
@@ -52,7 +52,7 @@ logging:
     org.springframework: ERROR
     org.springframework.data: ERROR
     org.springframework.web.reactive.function.client.ExchangeFunctions: ERROR
-    org.onap.policy.clamp.controlloop.participant.kubernetes: INFO
+    org.onap.policy.clamp.acm.participant.kubernetes: INFO
   file:
     name: /var/log/onap/policy/clamp/application.log
 
index 14660a9..1cb4e6d 100644 (file)
@@ -30,12 +30,12 @@ participant:
       name: org.onap.PM_Policy
       version: 1.0.0
     participantType:
-      name: org.onap.policy.controlloop.PolicyControlLoopParticipant
+      name: org.onap.policy.clamp.acm.PolicyParticipant
       version: 2.3.1
-    clampControlLoopTopics:
+    clampAutomationCompositionTopics:
       topicSources:
         -
-          topic: POLICY-CLRUNTIME-PARTICIPANT
+          topic: POLICY-ACRUNTIME-PARTICIPANT
           servers:
             - ${topicServer:message-router}
           topicCommInfrastructure: dmaap
@@ -43,7 +43,7 @@ participant:
           useHttps: true
       topicSinks:
         -
-          topic: POLICY-CLRUNTIME-PARTICIPANT
+          topic: POLICY-ACRUNTIME-PARTICIPANT
           servers:
             - ${topicServer:message-router}
           topicCommInfrastructure: dmaap
@@ -56,4 +56,4 @@ management:
 server:
   port: 8085
   servlet:
-    context-path: /onap/policyparticipant
+    context-path: /onap/policy/clamp/acm/policyparticipant
index 0f806a6..0b85867 100644 (file)
@@ -30,5 +30,5 @@
 
     <artifactId>policy-clamp-participant-impl-cds</artifactId>
     <name>${project.artifactId}</name>
-    <description>CDS participant, that allows CDS to partake in control loops</description>
+    <description>CDS participant, that allows CDS to partake in automation compositions</description>
 </project>
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.http;
+package org.onap.policy.clamp.acm.participant.http;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -29,10 +29,14 @@ import org.springframework.context.annotation.ComponentScan;
  * Starter.
  *
  */
+// @formatter:off
 @SpringBootApplication
-@ComponentScan({"org.onap.policy.clamp.controlloop.participant.http",
-    "org.onap.policy.clamp.controlloop.participant.intermediary"})
-@ConfigurationPropertiesScan("org.onap.policy.clamp.controlloop.participant.http.parameters")
+@ComponentScan({
+    "org.onap.policy.clamp.acm.participant.http",
+    "org.onap.policy.clamp.acm.participant.intermediary"
+})
+@ConfigurationPropertiesScan("org.onap.policy.clamp.acm.participant.http.parameters")
+//@formatter:on
 public class Application {
     /**
      * Main class.
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.policy.config;
+package org.onap.policy.clamp.acm.participant.http.config;
 
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi;
-import org.onap.policy.clamp.controlloop.participant.policy.main.handler.ControlLoopElementHandler;
+import org.onap.policy.clamp.acm.participant.http.main.handler.AutomationCompositionElementHandler;
+import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
 
@@ -29,15 +29,15 @@ import org.springframework.context.annotation.Configuration;
 public class ParticipantConfig {
 
     /**
-     * Register ControlLoopElementListener.
+     * Register AutomationCompositionElementListener.
      *
      * @param intermediaryApi the ParticipantIntermediaryApi
-     * @param clElementHandler the ControlLoop Element Handler
+     * @param acElementHandler the AutomationComposition Element Handler
      */
     @Autowired
-    public void registerControlLoopElementListener(ParticipantIntermediaryApi intermediaryApi,
-            ControlLoopElementHandler clElementHandler) {
-        intermediaryApi.registerControlLoopElementListener(clElementHandler);
-        clElementHandler.setIntermediaryApi(intermediaryApi);
+    public void registerAutomationCompositionElementListener(ParticipantIntermediaryApi intermediaryApi,
+            AutomationCompositionElementHandler acElementHandler) {
+        intermediaryApi.registerAutomationCompositionElementListener(acElementHandler);
+        acElementHandler.setIntermediaryApi(intermediaryApi);
     }
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.http.main.handler;
+package org.onap.policy.clamp.acm.participant.http.main.handler;
 
 import java.io.Closeable;
 import java.io.IOException;
@@ -38,14 +38,14 @@ import javax.validation.Validation;
 import javax.validation.ValidationException;
 import lombok.Setter;
 import org.apache.commons.lang3.tuple.Pair;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.participant.http.main.models.ConfigRequest;
-import org.onap.policy.clamp.controlloop.participant.http.main.webclient.ClHttpClient;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ControlLoopElementListener;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi;
+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.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
@@ -58,59 +58,60 @@ import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Component;
 
 /**
- * This class handles implementation of controlLoopElement updates.
+ * This class handles implementation of automationCompositionElement updates.
  */
 @Component
-public class ControlLoopElementHandler implements ControlLoopElementListener, Closeable {
+public class AutomationCompositionElementHandler implements AutomationCompositionElementListener, Closeable {
 
     private static final Coder CODER = new StandardCoder();
 
     private static final Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
-    private ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
+    private final ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
 
-    private Map<ToscaConceptIdentifier, Pair<Integer, String>> restResponseMap = new ConcurrentHashMap<>();
+    private final Map<ToscaConceptIdentifier, Pair<Integer, String>> restResponseMap = new ConcurrentHashMap<>();
 
     @Setter
     private ParticipantIntermediaryApi intermediaryApi;
 
     /**
-     * Handle controlLoopElement statistics.
+     * Handle automationCompositionElement statistics.
      *
-     * @param controlLoopElementId controlloop element id
+     * @param automationCompositionElementId automation composition element id
      */
     @Override
-    public void handleStatistics(UUID controlLoopElementId) throws PfModelException {
+    public void handleStatistics(UUID automationCompositionElementId) {
         // Implementation not needed for http participant
 
     }
 
     /**
-     * Handle a control loop element state change.
+     * Handle a automation composition element state change.
      *
-     * @param controlLoopElementId the ID of the control loop element
-     * @param currentState         the current state of the control loop element
-     * @param newState             the state to which the control loop element is changing to
+     * @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 controlLoopElementStateChange(ToscaConceptIdentifier controlLoopId, UUID controlLoopElementId,
-            ControlLoopState currentState, ControlLoopOrderedState newState) throws PfModelException {
+    public void automationCompositionElementStateChange(ToscaConceptIdentifier automationCompositionId,
+        UUID automationCompositionElementId, AutomationCompositionState currentState,
+        AutomationCompositionOrderedState newState) {
         switch (newState) {
             case UNINITIALISED:
-                intermediaryApi.updateControlLoopElementState(controlLoopId,
-                        controlLoopElementId, newState, ControlLoopState.UNINITIALISED,
-                        ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE);
+                intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
+                    automationCompositionElementId, newState, AutomationCompositionState.UNINITIALISED,
+                    ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
                 break;
             case PASSIVE:
-                intermediaryApi.updateControlLoopElementState(controlLoopId,
-                        controlLoopElementId, newState, ControlLoopState.PASSIVE,
-                        ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE);
+                intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
+                    automationCompositionElementId, newState, AutomationCompositionState.PASSIVE,
+                    ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
                 break;
             case RUNNING:
-                intermediaryApi.updateControlLoopElementState(controlLoopId,
-                        controlLoopElementId, newState, ControlLoopState.RUNNING,
-                        ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE);
+                intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
+                    automationCompositionElementId, newState, AutomationCompositionState.RUNNING,
+                    ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
                 break;
             default:
                 LOGGER.warn("Cannot transition from state {} to state {}", currentState, newState);
@@ -119,27 +120,27 @@ public class ControlLoopElementHandler implements ControlLoopElementListener, Cl
     }
 
     /**
-     * Callback method to handle an update on a control loop element.
+     * Callback method to handle an update on a automation composition element.
      *
-     * @param element the information on the control loop element
+     * @param element the information on the automation composition element
      * @param nodeTemplate toscaNodeTemplate
      */
     @Override
-    public void controlLoopElementUpdate(ToscaConceptIdentifier controlLoopId, ControlLoopElement element,
-            ToscaNodeTemplate nodeTemplate) {
+    public void automationCompositionElementUpdate(ToscaConceptIdentifier automationCompositionId,
+        AutomationCompositionElement element, ToscaNodeTemplate nodeTemplate) {
         try {
             var configRequest = CODER.convert(nodeTemplate.getProperties(), ConfigRequest.class);
-            Set<ConstraintViolation<ConfigRequest>> violations = Validation.buildDefaultValidatorFactory()
-                .getValidator().validate(configRequest);
+            Set<ConstraintViolation<ConfigRequest>> violations =
+                Validation.buildDefaultValidatorFactory().getValidator().validate(configRequest);
             if (violations.isEmpty()) {
                 invokeHttpClient(configRequest);
                 List<Pair<Integer, String>> failedResponseStatus = restResponseMap.values().stream()
                         .filter(response -> !HttpStatus.valueOf(response.getKey())
                         .is2xxSuccessful()).collect(Collectors.toList());
                 if (failedResponseStatus.isEmpty()) {
-                    intermediaryApi.updateControlLoopElementState(controlLoopId, element.getId(),
-                            ControlLoopOrderedState.PASSIVE, ControlLoopState.PASSIVE,
-                            ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE);
+                    intermediaryApi.updateAutomationCompositionElementState(automationCompositionId, element.getId(),
+                            AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.PASSIVE,
+                            ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
                 } else {
                     LOGGER.error("Error on Invoking the http request: {}", failedResponseStatus);
                 }
@@ -154,11 +155,12 @@ public class ControlLoopElementHandler implements ControlLoopElementListener, Cl
 
     /**
      * Invoke a runnable thread to execute http requests.
+     *
      * @param configRequest ConfigRequest
      */
     public void invokeHttpClient(ConfigRequest configRequest) throws ExecutionException, InterruptedException {
         // Invoke runnable thread to execute https requests of all config entities
-        Future<Map> result = executor.submit(new ClHttpClient(configRequest, restResponseMap), restResponseMap);
+        Future<Map> result = executor.submit(new AcHttpClient(configRequest, restResponseMap), restResponseMap);
         if (!result.get().isEmpty()) {
             LOGGER.debug("Http Request Completed: {}", result.isDone());
         }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.http.main.webclient;
+package org.onap.policy.clamp.acm.participant.http.main.webclient;
 
 import java.lang.invoke.MethodHandles;
 import java.time.Duration;
@@ -26,10 +26,10 @@ import java.util.Map;
 import java.util.Objects;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
-import org.onap.policy.clamp.controlloop.participant.http.main.exception.HttpWebClientException;
-import org.onap.policy.clamp.controlloop.participant.http.main.models.ConfigRequest;
-import org.onap.policy.clamp.controlloop.participant.http.main.models.ConfigurationEntity;
-import org.onap.policy.clamp.controlloop.participant.http.main.models.RestParams;
+import org.onap.policy.clamp.acm.participant.http.main.exception.HttpWebClientException;
+import org.onap.policy.clamp.acm.participant.http.main.models.ConfigRequest;
+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.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -40,7 +40,7 @@ import org.springframework.web.reactive.function.client.WebClient;
 import org.springframework.web.util.UriComponentsBuilder;
 import reactor.core.publisher.Mono;
 
-public class ClHttpClient implements Runnable {
+public class AcHttpClient implements Runnable {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
@@ -51,7 +51,7 @@ public class ClHttpClient implements Runnable {
     /**
      * Constructor.
      */
-    public ClHttpClient(ConfigRequest configRequest, Map<ToscaConceptIdentifier, Pair<Integer, String>> responseMap) {
+    public AcHttpClient(ConfigRequest configRequest, Map<ToscaConceptIdentifier, Pair<Integer, String>> responseMap) {
         this.configRequest = configRequest;
         this.responseMap = responseMap;
     }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.http.parameters;
+package org.onap.policy.clamp.acm.participant.http.parameters;
 
 import javax.validation.Valid;
 import javax.validation.constraints.NotNull;
 import lombok.Getter;
 import lombok.Setter;
-import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantIntermediaryParameters;
-import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantParameters;
+import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantIntermediaryParameters;
+import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantParameters;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.validation.annotation.Validated;
 
@@ -43,5 +43,4 @@ public class ParticipantHttpParameters implements ParticipantParameters {
     @NotNull
     @Valid
     private ParticipantIntermediaryParameters intermediaryParameters;
-
 }
index df0ad7d..8a3d0fb 100644 (file)
@@ -13,17 +13,17 @@ participant:
       name: HttpParticipant0
       version: 1.0.0
     participantType:
-      name: org.onap.k8s.controlloop.HttpControlLoopParticipant
+      name: org.onap.policy.clamp.acm.HttpParticipant
       version: 2.3.4
-    clampControlLoopTopics:
+    clampAutomationCompositionTopics:
       topicSources:
-        - topic: POLICY-CLRUNTIME-PARTICIPANT
+        - topic: POLICY-ACRUNTIME-PARTICIPANT
           servers:
             - ${topicServer:message-router}
           topicCommInfrastructure: dmaap
           fetchTimeout: 15000
       topicSinks:
-        - topic: POLICY-CLRUNTIME-PARTICIPANT
+        - topic: POLICY-ACRUNTIME-PARTICIPANT
           servers:
             - ${topicServer:message-router}
           topicCommInfrastructure: dmaap
@@ -35,4 +35,4 @@ management:
 server:
   port: 8084
   servlet:
-    context-path: /onap/httpparticipant
+    context-path: /onap/policy/clamp/acm/httpparticipant
diff --git a/participant/participant-impl/participant-impl-http/src/test/java/org/onap/policy/clamp/acm/participant/http/handler/AcElementHandlerTest.java b/participant/participant-impl/participant-impl-http/src/test/java/org/onap/policy/clamp/acm/participant/http/handler/AcElementHandlerTest.java
new file mode 100644 (file)
index 0000000..fbb6894
--- /dev/null
@@ -0,0 +1,106 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.participant.http.handler;
+
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doNothing;
+
+import java.io.IOException;
+import java.util.Map;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.Spy;
+import org.onap.policy.clamp.acm.participant.http.main.handler.AutomationCompositionElementHandler;
+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.AutomationCompositionElement;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+@ExtendWith(SpringExtension.class)
+class AcElementHandlerTest {
+
+    @InjectMocks
+    @Spy
+    private AutomationCompositionElementHandler automationCompositionElementHandler =
+        new AutomationCompositionElementHandler();
+
+    @Mock
+    private ParticipantIntermediaryApi participantIntermediaryApi;
+
+    private CommonTestData commonTestData = new CommonTestData();
+
+    private static ToscaServiceTemplate serviceTemplate;
+    private static final String HTTP_AUTOMATION_COMPOSITION_ELEMENT =
+        "org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement";
+
+    @BeforeAll
+    static void init() throws CoderException {
+        serviceTemplate = ToscaUtils.readAutomationCompositionFromTosca();
+    }
+
+    @Test
+    void test_automationCompositionElementeStateChange() throws IOException {
+        var automationCompositionId = commonTestData.getAutomationCompositionId();
+        var element = commonTestData.getAutomationCompositionElement();
+        var automationCompositionElementId = element.getId();
+
+        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));
+
+        automationCompositionElementHandler.close();
+    }
+
+    @Test
+    void test_AutomationCompositionElementUpdate() throws Exception {
+        doNothing().when(automationCompositionElementHandler).invokeHttpClient(any());
+        AutomationCompositionElement element = commonTestData.getAutomationCompositionElement();
+
+        Map<String, ToscaNodeTemplate> nodeTemplatesMap = serviceTemplate.getToscaTopologyTemplate().getNodeTemplates();
+
+        assertDoesNotThrow(() -> automationCompositionElementHandler.automationCompositionElementUpdate(
+            commonTestData.getAutomationCompositionId(), element,
+            nodeTemplatesMap.get(HTTP_AUTOMATION_COMPOSITION_ELEMENT)));
+    }
+}
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.http.rest;
+package org.onap.policy.clamp.acm.participant.http.rest;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -27,7 +27,7 @@ import javax.ws.rs.core.Response;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
-import org.onap.policy.clamp.controlloop.participant.http.utils.CommonActuatorController;
+import org.onap.policy.clamp.acm.participant.http.utils.CommonActuatorController;
 import org.springframework.boot.test.autoconfigure.actuate.metrics.AutoConfigureMetrics;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes.utils;
+package org.onap.policy.clamp.acm.participant.http.utils;
 
 import static org.junit.Assert.assertEquals;
 
@@ -40,7 +40,7 @@ import org.onap.policy.common.utils.network.NetworkUtil;
 public class CommonActuatorController {
 
     public static final String SELF = NetworkUtil.getHostname();
-    public static final String CONTEXT_PATH = "onap/k8sparticipant";
+    public static final String CONTEXT_PATH = "onap/policy/clamp/acm/httpparticipant";
     public static final String ACTUATOR_ENDPOINT = CONTEXT_PATH + "/actuator/";
 
     private static String httpPrefix;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.http.utils;
+package org.onap.policy.clamp.acm.participant.http.utils;
 
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.participant.http.main.models.ConfigurationEntity;
-import org.onap.policy.clamp.controlloop.participant.http.main.models.RestParams;
+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.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 public class CommonTestData {
 
-    private static final String TEST_KEY_NAME = "org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement";
-
+    private static final String TEST_KEY_NAME =
+        "org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement";
 
     /**
-     * Get a controlLoop Element.
-     * @return controlLoopElement object
+     * Get a automationComposition Element.
+     *
+     * @return automationCompositionElement object
      */
-    public ControlLoopElement getControlLoopElement() {
-        ControlLoopElement element = new ControlLoopElement();
+    public AutomationCompositionElement getAutomationCompositionElement() {
+        AutomationCompositionElement element = new AutomationCompositionElement();
         element.setId(UUID.randomUUID());
         element.setDefinition(new ToscaConceptIdentifier(TEST_KEY_NAME, "1.0.1"));
-        element.setOrderedState(ControlLoopOrderedState.PASSIVE);
+        element.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
         return element;
     }
 
     /**
      * Get query params.
+     *
      * @return Map of query params
      */
     public Map<String, String> getQueryParams() {
@@ -57,6 +59,7 @@ public class CommonTestData {
 
     /**
      * Get path params.
+     *
      * @return Map of path params
      */
     public Map<String, Object> getPathParams() {
@@ -65,88 +68,70 @@ public class CommonTestData {
 
     /**
      * Rest params with GET request.
+     *
      * @return RestParams obj
      */
     public RestParams restParamsWithGet() {
-        return new RestParams(
-            new ToscaConceptIdentifier("getRequest", "1.0"),
-            "GET",
-            "get",
-            200,
-            null,
-            getQueryParams(),
-            null
-        );
+        return new RestParams(new ToscaConceptIdentifier("getRequest", "1.0"), "GET", "get", 200, null,
+            getQueryParams(), null);
     }
 
     /**
      * Rest params with POST request.
+     *
      * @return RestParams obj
      */
     public RestParams restParamsWithPost() {
-        return new RestParams(
-            new ToscaConceptIdentifier("postRequest", "1.0"),
-            "POST",
-            "post",
-            200,
-            null,
-            getQueryParams(),
-            "Test body"
-        );
+        return new RestParams(new ToscaConceptIdentifier("postRequest", "1.0"), "POST", "post", 200, null,
+            getQueryParams(), "Test body");
     }
 
     /**
      * Rest params with POST request.
+     *
      * @return RestParams obj
      */
     public RestParams restParamsWithInvalidPost() {
-        return new RestParams(
-            new ToscaConceptIdentifier("postRequest", "1.0"),
-            "POST",
-            "post/{id}/{name}",
-            200,
-            getPathParams(),
-            getQueryParams(),
-            "Test body"
-        );
+        return new RestParams(new ToscaConceptIdentifier("postRequest", "1.0"), "POST", "post/{id}/{name}", 200,
+            getPathParams(), getQueryParams(), "Test body");
     }
 
     /**
      * Get invalid configuration entity.
+     *
      * @return ConfigurationEntity obj
      */
     public ConfigurationEntity getInvalidConfigurationEntity() {
-        return new ConfigurationEntity(
-            new ToscaConceptIdentifier("config1", "1.0.1"),
-            List.of(restParamsWithGet(), restParamsWithInvalidPost())
-        );
+        return new ConfigurationEntity(new ToscaConceptIdentifier("config1", "1.0.1"),
+            List.of(restParamsWithGet(), restParamsWithInvalidPost()));
     }
 
     /**
      * Get configuration entity.
+     *
      * @return ConfigurationEntity obj
      */
     public ConfigurationEntity getConfigurationEntity() {
-        return new ConfigurationEntity(
-            new ToscaConceptIdentifier("config1", "1.0.1"),
-            List.of(restParamsWithGet(), restParamsWithPost())
-        );
+        return new ConfigurationEntity(new ToscaConceptIdentifier("config1", "1.0.1"),
+            List.of(restParamsWithGet(), restParamsWithPost()));
     }
 
     /**
-     * Get controlloop id.
-     * @return ToscaConceptIdentifier controlLoopId
+     * Get automation composition id.
+     *
+     * @return ToscaConceptIdentifier automationCompositionId
      */
-    public ToscaConceptIdentifier getControlLoopId() {
+    public ToscaConceptIdentifier getAutomationCompositionId() {
         return new ToscaConceptIdentifier("PMSHInstance0", "1.0.0");
     }
 
     /**
      * Get headers for config request.
+     *
      * @return Map of headers
      */
     public Map<String, String> getHeaders() {
-        return  Map.of("Content-Type", "application/json", "Accept", "application/json");
+        return Map.of("Content-Type", "application/json", "Accept", "application/json");
     }
 
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.http.utils;
+package org.onap.policy.clamp.acm.participant.http.utils;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
@@ -40,12 +40,12 @@ public final class ToscaUtils {
      * Read a service template yaml.
      * @return ToscaServiceTemplate
      */
-    public static ToscaServiceTemplate readControlLoopFromTosca() {
-        return serializeControlLoopYaml(TOSCA_TEMPLATE_YAML);
+    public static ToscaServiceTemplate readAutomationCompositionFromTosca() {
+        return serializeAutomationCompositionYaml(TOSCA_TEMPLATE_YAML);
     }
 
-    private static ToscaServiceTemplate serializeControlLoopYaml(String controlLoopFilePath) {
-        String controlLoopString = ResourceUtils.getResourceAsString(controlLoopFilePath);
-        return yamlTranslator.fromYaml(controlLoopString, ToscaServiceTemplate.class);
+    private static ToscaServiceTemplate serializeAutomationCompositionYaml(String automationCompositionFilePath) {
+        String automationCompositionString = ResourceUtils.getResourceAsString(automationCompositionFilePath);
+        return yamlTranslator.fromYaml(automationCompositionString, ToscaServiceTemplate.class);
     }
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.http.webclient;
+package org.onap.policy.clamp.acm.participant.http.webclient;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
@@ -38,16 +38,16 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockserver.integration.ClientAndServer;
 import org.mockserver.model.Parameter;
-import org.onap.policy.clamp.controlloop.participant.http.main.models.ConfigRequest;
-import org.onap.policy.clamp.controlloop.participant.http.main.models.ConfigurationEntity;
-import org.onap.policy.clamp.controlloop.participant.http.main.webclient.ClHttpClient;
-import org.onap.policy.clamp.controlloop.participant.http.utils.CommonTestData;
+import org.onap.policy.clamp.acm.participant.http.main.models.ConfigRequest;
+import org.onap.policy.clamp.acm.participant.http.main.models.ConfigurationEntity;
+import org.onap.policy.clamp.acm.participant.http.main.webclient.AcHttpClient;
+import org.onap.policy.clamp.acm.participant.http.utils.CommonTestData;
 import org.onap.policy.common.utils.network.NetworkUtil;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 @ExtendWith(SpringExtension.class)
-class ClHttpClientTest {
+class AcHttpClientTest {
 
     private static CommonTestData commonTestData;
 
@@ -99,7 +99,7 @@ class ClHttpClientTest {
         ConfigRequest configRequest = new ConfigRequest(testMockUrl + ":" + mockServerPort, headers,
             List.of(configurationEntity), 10);
 
-        ClHttpClient client = new ClHttpClient(configRequest, responseMap);
+        AcHttpClient client = new AcHttpClient(configRequest, responseMap);
         assertDoesNotThrow(client::run);
         assertThat(responseMap).hasSize(2).containsKey(commonTestData
             .restParamsWithGet().getRestRequestId());
@@ -118,7 +118,7 @@ class ClHttpClientTest {
         ConfigRequest configRequest = new ConfigRequest(testMockUrl + ":" + mockServerPort, headers,
             List.of(configurationEntity), 10);
 
-        ClHttpClient client = new ClHttpClient(configRequest, responseMap);
+        AcHttpClient client = new AcHttpClient(configRequest, responseMap);
         assertDoesNotThrow(client::run);
         assertThat(responseMap).hasSize(2).containsKey(commonTestData
             .restParamsWithGet().getRestRequestId());
diff --git a/participant/participant-impl/participant-impl-http/src/test/java/org/onap/policy/clamp/controlloop/participant/http/handler/ClElementHandlerTest.java b/participant/participant-impl/participant-impl-http/src/test/java/org/onap/policy/clamp/controlloop/participant/http/handler/ClElementHandlerTest.java
deleted file mode 100644 (file)
index 08f008e..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.participant.http.handler;
-
-import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doNothing;
-
-import java.io.IOException;
-import java.util.Map;
-import java.util.concurrent.ExecutionException;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.Spy;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.participant.http.main.handler.ControlLoopElementHandler;
-import org.onap.policy.clamp.controlloop.participant.http.main.models.ConfigRequest;
-import org.onap.policy.clamp.controlloop.participant.http.utils.CommonTestData;
-import org.onap.policy.clamp.controlloop.participant.http.utils.ToscaUtils;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-import org.springframework.test.context.junit.jupiter.SpringExtension;
-
-
-@ExtendWith(SpringExtension.class)
-class ClElementHandlerTest {
-
-    @InjectMocks
-    @Spy
-    private ControlLoopElementHandler controlLoopElementHandler = new ControlLoopElementHandler();
-
-    @Mock
-    private ParticipantIntermediaryApi participantIntermediaryApi;
-
-    private CommonTestData commonTestData = new CommonTestData();
-
-    private static ToscaServiceTemplate serviceTemplate;
-    private static final String HTTP_CONTROL_LOOP_ELEMENT =
-            "org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement";
-
-    @BeforeAll
-    static void init() throws CoderException {
-        serviceTemplate = ToscaUtils.readControlLoopFromTosca();
-    }
-
-    @Test
-    void test_controlLoopElementeStateChange() throws IOException {
-        var controlLoopId = commonTestData.getControlLoopId();
-        var element = commonTestData.getControlLoopElement();
-        var controlLoopElementId = element.getId();
-
-        var config = Mockito.mock(ConfigRequest.class);
-        assertDoesNotThrow(() -> controlLoopElementHandler.invokeHttpClient(config));
-
-        assertDoesNotThrow(() -> controlLoopElementHandler
-                .controlLoopElementStateChange(controlLoopId,
-                        controlLoopElementId, ControlLoopState.PASSIVE, ControlLoopOrderedState.PASSIVE));
-
-        assertDoesNotThrow(() -> controlLoopElementHandler
-                .controlLoopElementStateChange(controlLoopId,
-                        controlLoopElementId, ControlLoopState.PASSIVE, ControlLoopOrderedState.UNINITIALISED));
-
-        assertDoesNotThrow(() -> controlLoopElementHandler
-                .controlLoopElementStateChange(controlLoopId,
-                        controlLoopElementId, ControlLoopState.PASSIVE, ControlLoopOrderedState.RUNNING));
-
-        controlLoopElementHandler.close();
-    }
-
-    @Test
-    void test_ControlLoopElementUpdate() throws ExecutionException, InterruptedException {
-        doNothing().when(controlLoopElementHandler).invokeHttpClient(any());
-        ControlLoopElement element = commonTestData.getControlLoopElement();
-
-        Map<String, ToscaNodeTemplate> nodeTemplatesMap =
-            serviceTemplate.getToscaTopologyTemplate().getNodeTemplates();
-
-        assertDoesNotThrow(() -> controlLoopElementHandler
-            .controlLoopElementUpdate(commonTestData.getControlLoopId(), element,
-                nodeTemplatesMap.get(HTTP_CONTROL_LOOP_ELEMENT)));
-    }
-}
index f221bcb..57c6e40 100644 (file)
@@ -27,7 +27,7 @@ data_types:
         type: string
         required: true
 
-  org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.RestRequest:
+  org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.RestRequest:
     version: 1.0.0
     derived_from: tosca.datatypes.Root
     properties:
@@ -56,7 +56,7 @@ data_types:
         constraints:
           - in_range: [100, 599]
         description: THe expected HTTP status code for the REST request
-    org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.ConfigurationEntity:
+    org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity:
       version: 1.0.0
       derived_from: tosca.datatypes.Root
       properties:
@@ -64,24 +64,24 @@ data_types:
           type:  onap.datatypes.ToscaConceptIdentifier
           typeVersion: 1.0.0
           required: true
-          description: The name and version of a Configuration Entity to be handled by the HTTP Control Loop Element
+          description: The name and version of a Configuration Entity to be handled by the HTTP Automation Composition Element
         restSequence:
           type: list
           entry_schema:
-            type: org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.RestRequest
+            type: org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.RestRequest
             typeVersion: 1.0.0
           description: A sequence of REST commands to send to the REST endpoint
 
 
 node_types:
-  org.onap.policy.clamp.controlloop.Participant:
+  org.onap.policy.clamp.acm.Participant:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
       provider:
         type: string
         requred: false
-  org.onap.policy.clamp.controlloop.ControlLoopElement:
+  org.onap.policy.clamp.acm.AutomationCompositionElement:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
@@ -98,11 +98,11 @@ node_types:
         - greater-or-equal: 0
         metadata:
             common: true
-        description: A value indicating the start phase in which this control loop element will be started, the
-                     first start phase is zero. Control Loop Elements are started in their start_phase order and stopped
-                     in reverse start phase order. Control Loop Elements with the same start phase are started and
+        description: A value indicating the start phase in which this automation composition element will be started, the
+                     first start phase is zero. Automation Composition Elements are started in their start_phase order and stopped
+                     in reverse start phase order. Automation Composition Elements with the same start phase are started and
                      stopped simultaneously
-  org.onap.policy.clamp.controlloop.ControlLoop:
+  org.onap.policy.clamp.acm.AutomationComposition:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
@@ -114,9 +114,9 @@ node_types:
         required: true
         entry_schema:
           type: onap.datatypes.ToscaConceptIdentifier
-  org.onap.policy.clamp.controlloop.HttpControlLoopElement:
+  org.onap.policy.clamp.acm.HttpAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       baseUrl:
         type: string
@@ -132,29 +132,29 @@ node_types:
         type: map
         required: true
         entry_schema:
-          type: org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.ConfigurationEntity
+          type: org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity
           typeVersion: 1.0.0
-        description: The connfiguration entities the Control Loop Element is managing and their associated REST requests
+        description: The connfiguration entities the Automation Composition Element is managing and their associated REST requests
 topology_template:
   node_templates:
-    org.onap.k8s.controlloop.HttpControlLoopParticipant:
+    org.onap.k8s.acm.HttpAutomationCompositionParticipant:
       version: 2.3.4
-      type: org.onap.policy.clamp.controlloop.Participant
+      type: org.onap.policy.clamp.acm.Participant
       type_version: 1.0.1
       description: Participant for Http requests
       properties:
         provider: ONAP
 
-    org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement:
+    org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement:
       # Http config for PMSH.
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.HttpControlLoopElement
+      type: org.onap.policy.clamp.acm.HttpAutomationCompositionElement
       type_version: 1.0.1
-      description: Control loop element for the http requests of PMSH microservice
+      description: Automation composition element for the http requests of PMSH microservice
       properties:
         provider: ONAP
         participantType:
-          name: org.onap.controlloop.HttpControlLoopParticipant
+          name: org.onap.acm.HttpAutomationCompositionParticipant
           version: 2.3.4
         startPhase: 1
         uninitializedToPassiveTimeout: 180
@@ -208,13 +208,13 @@ topology_template:
                 expectedResponse: 200
 
 
-    org.onap.domain.sample.GenericK8s_ControlLoopDefinition:
+    org.onap.domain.sample.GenericK8s_AutomationCompositionDefinition:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoop
+      type: org.onap.policy.clamp.acm.AutomationComposition
       type_version: 1.0.0
-      description: Control loop for HTTP request
+      description: Automation composition for HTTP request
       properties:
         provider: ONAP
         elements:
-          - name: org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement
+          - name: org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement
             version: 1.2.3
index 698a965..e9f3b37 100644 (file)
@@ -1,24 +1,24 @@
 spring.security.user.name=participantUser
 spring.security.user.password=zb!XztG34
 
-server.servlet.context-path=/onap/httpparticipant
+server.servlet.context-path=/onap/policy/clamp/acm/httpparticipant
 server.error.path=/error
 server.http-port=8084
 
-participant.name=ControlLoopParticipant Http Test
+participant.name=AutomationCompositionParticipant Http Test
 participant.intermediaryParameters.name=Participant parameters
 participant.intermediaryParameters.reportingTimeInterval=120000
 participant.intermediaryParameters.description=Participant Description
 participant.intermediaryParameters.participantId.name=HttpParticipant0
 participant.intermediaryParameters.participantId.version=1.0.0
-participant.intermediaryParameters.participantType.name=org.onap.k8s.controlloop.HttpControlLoopParticipant
+participant.intermediaryParameters.participantType.name=org.onap.clamp.acm.HttpParticipant
 participant.intermediaryParameters.participantType.version=2.3.4
-participant.intermediaryParameters.clampControlLoopTopics.name=ControlLoop Topics
-participant.intermediaryParameters.clampControlLoopTopics.topicSources[0].topic=POLICY-CLRUNTIME-PARTICIPANT
-participant.intermediaryParameters.clampControlLoopTopics.topicSources[0].servers[0]=localhost
-participant.intermediaryParameters.clampControlLoopTopics.topicSources[0].topicCommInfrastructure=dmaap
-participant.intermediaryParameters.clampControlLoopTopics.topicSources[0].fetchTimeout=15000
-participant.intermediaryParameters.clampControlLoopTopics.topicSinks[0].topic=POLICY-CLRUNTIME-PARTICIPANT
-participant.intermediaryParameters.clampControlLoopTopics.topicSinks[0].servers[0]=localhost
-participant.intermediaryParameters.clampControlLoopTopics.topicSinks[0].topicCommInfrastructure=dmaap
+participant.intermediaryParameters.clampAutomationCompositionTopics.name=AutomationComposition Topics
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSources[0].topic=POLICY-ACRUNTIME-PARTICIPANT
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSources[0].servers[0]=localhost
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSources[0].topicCommInfrastructure=dmaap
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSources[0].fetchTimeout=15000
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSinks[0].topic=POLICY-ACRUNTIME-PARTICIPANT
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSinks[0].servers[0]=localhost
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSinks[0].topicCommInfrastructure=dmaap
 management.endpoints.web.exposure.include=health,metrics,prometheus
index 6bbf017..e92021b 100644 (file)
@@ -30,7 +30,7 @@
 
     <artifactId>policy-clamp-participant-impl-kubernetes</artifactId>
     <name>${project.artifactId}</name>
-    <description>Kubernetes participant, that allows k8s pods to partake in control loops</description>
+    <description>Kubernetes participant, that allows k8s pods to partake in automation compositions</description>
 
     <!-- Dependency added here to take precedence over Mockito-core in parent pom-->
     <dependencies>
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes;
+package org.onap.policy.clamp.acm.participant.kubernetes;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -29,10 +29,14 @@ import org.springframework.context.annotation.ComponentScan;
  * Starter.
  *
  */
+// @formatter:off
 @SpringBootApplication
-@ComponentScan({"org.onap.policy.clamp.controlloop.participant.kubernetes",
-    "org.onap.policy.clamp.controlloop.participant.intermediary"})
-@ConfigurationPropertiesScan("org.onap.policy.clamp.controlloop.participant.kubernetes.parameters")
+@ComponentScan({
+    "org.onap.policy.clamp.acm.participant.kubernetes",
+    "org.onap.policy.clamp.acm.participant.intermediary"
+})
+@ConfigurationPropertiesScan("org.onap.policy.clamp.acm.participant.kubernetes.parameters")
+//@formatter:on
 public class Application {
     /**
      * Main class.
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes.configurations;
+package org.onap.policy.clamp.acm.participant.kubernetes.configurations;
 
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.handler.ControlLoopElementHandler;
+import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
+import org.onap.policy.clamp.acm.participant.kubernetes.handler.AutomationCompositionElementHandler;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
 
@@ -29,15 +29,15 @@ import org.springframework.context.annotation.Configuration;
 public class ParticipantIntermediaryConfig {
 
     /**
-     * Register ControlLoopElementListener.
+     * Register AutomationCompositionElementListener.
      *
      * @param intermediaryApi the ParticipantIntermediaryApi
-     * @param clElementHandler the ControlLoop Element Handler
+     * @param acElementHandler the AutomationComposition Element Handler
      */
     @Autowired
-    public void registerControlLoopElementListener(ParticipantIntermediaryApi intermediaryApi,
-            ControlLoopElementHandler clElementHandler) {
-        intermediaryApi.registerControlLoopElementListener(clElementHandler);
-        clElementHandler.setIntermediaryApi(intermediaryApi);
+    public void registerAutomationCompositionElementListener(ParticipantIntermediaryApi intermediaryApi,
+            AutomationCompositionElementHandler acElementHandler) {
+        intermediaryApi.registerAutomationCompositionElementListener(acElementHandler);
+        acElementHandler.setIntermediaryApi(intermediaryApi);
     }
 }
@@ -18,9 +18,9 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes.configurations;
+package org.onap.policy.clamp.acm.participant.kubernetes.configurations;
 
-import org.onap.policy.clamp.controlloop.participant.kubernetes.controller.ChartController;
+import org.onap.policy.clamp.acm.participant.kubernetes.controller.ChartController;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import springfox.documentation.builders.PathSelectors;
@@ -16,7 +16,7 @@
  * ========================LICENSE_END===================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes.controller;
+package org.onap.policy.clamp.acm.participant.kubernetes.controller;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -24,12 +24,12 @@ import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
 import java.io.IOException;
 import java.util.ArrayList;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.exception.ServiceException;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.ChartInfo;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.ChartList;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.HelmRepository;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.InstallationInfo;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.service.ChartService;
+import org.onap.policy.clamp.acm.participant.kubernetes.exception.ServiceException;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartInfo;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartList;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.HelmRepository;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.InstallationInfo;
+import org.onap.policy.clamp.acm.participant.kubernetes.service.ChartService;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes.handler;
+package org.onap.policy.clamp.acm.participant.kubernetes.handler;
 
 import java.io.IOException;
 import java.lang.invoke.MethodHandles;
@@ -34,17 +34,17 @@ import java.util.concurrent.Future;
 import lombok.AccessLevel;
 import lombok.Getter;
 import lombok.Setter;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ControlLoopElementListener;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.exception.ServiceException;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.helm.PodStatusValidator;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.ChartInfo;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.service.ChartService;
+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.kubernetes.exception.ServiceException;
+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.AcElementStatistics;
+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.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
@@ -57,10 +57,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 /**
- * This class handles implementation of controlLoopElement updates.
+ * This class handles implementation of automationCompositionElement updates.
  */
 @Component
-public class ControlLoopElementHandler implements ControlLoopElementListener {
+public class AutomationCompositionElementHandler implements AutomationCompositionElementListener {
     private static final Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
     private ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
@@ -76,7 +76,7 @@ public class ControlLoopElementHandler implements ControlLoopElementListener {
     @Setter
     private ParticipantIntermediaryApi intermediaryApi;
 
-    // Map of CLElement Id and installed Helm charts
+    // Map of acElement Id and installed Helm charts
     @Getter(AccessLevel.PACKAGE)
     private final Map<UUID, ChartInfo> chartMap = new HashMap<>();
 
@@ -87,26 +87,27 @@ public class ControlLoopElementHandler implements ControlLoopElementListener {
     }
 
     /**
-     * Callback method to handle a control loop element state change.
+     * Callback method to handle a automation composition element state change.
      *
-     * @param controlLoopElementId the ID of the control loop element
-     * @param currentState the current state of the control loop element
-     * @param newState the state to which the control loop element is changing to
+     * @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 controlLoopElementStateChange(ToscaConceptIdentifier controlLoopId,
-            UUID controlLoopElementId, ControlLoopState currentState, ControlLoopOrderedState newState) {
+    public synchronized void automationCompositionElementStateChange(ToscaConceptIdentifier automationCompositionId,
+        UUID automationCompositionElementId, AutomationCompositionState currentState,
+        AutomationCompositionOrderedState newState) {
         switch (newState) {
             case UNINITIALISED:
-                ChartInfo chart = chartMap.get(controlLoopElementId);
+                ChartInfo chart = chartMap.get(automationCompositionElementId);
                 if (chart != null) {
                     LOGGER.info("Helm deployment to be deleted {} ", chart.getReleaseName());
                     try {
                         chartService.uninstallChart(chart);
-                        intermediaryApi.updateControlLoopElementState(controlLoopId,
-                            controlLoopElementId, newState, ControlLoopState.UNINITIALISED,
-                            ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE);
-                        chartMap.remove(controlLoopElementId);
+                        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);
@@ -114,14 +115,14 @@ public class ControlLoopElementHandler implements ControlLoopElementListener {
                 }
                 break;
             case PASSIVE:
-                intermediaryApi.updateControlLoopElementState(controlLoopId,
-                    controlLoopElementId, newState, ControlLoopState.PASSIVE,
-                    ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE);
+                intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
+                    automationCompositionElementId, newState, AutomationCompositionState.PASSIVE,
+                    ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
                 break;
             case RUNNING:
-                intermediaryApi.updateControlLoopElementState(controlLoopId,
-                    controlLoopElementId, newState, ControlLoopState.RUNNING,
-                    ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE);
+                intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
+                    automationCompositionElementId, newState, AutomationCompositionState.RUNNING,
+                    ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
                 break;
             default:
                 LOGGER.warn("Cannot transition from state {} to state {}", currentState, newState);
@@ -129,29 +130,27 @@ public class ControlLoopElementHandler implements ControlLoopElementListener {
         }
     }
 
-
     /**
-     * Callback method to handle an update on a control loop element.
+     * Callback method to handle an update on a automation composition element.
      *
-     * @param element the information on the control loop element
+     * @param element the information on the automation composition element
      * @param nodeTemplate toscaNodeTemplate
      * @throws PfModelException in case of an exception
      */
     @Override
-    public synchronized void controlLoopElementUpdate(ToscaConceptIdentifier controlLoopId,
-            ControlLoopElement element, ToscaNodeTemplate nodeTemplate) throws PfModelException {
+    public synchronized void automationCompositionElementUpdate(ToscaConceptIdentifier automationCompositionId,
+        AutomationCompositionElement element, ToscaNodeTemplate nodeTemplate) throws PfModelException {
         @SuppressWarnings("unchecked")
-        Map<String, Object> chartData =
-            (Map<String, Object>) nodeTemplate.getProperties().get("chart");
+        Map<String, Object> chartData = (Map<String, Object>) nodeTemplate.getProperties().get("chart");
 
         LOGGER.info("Installation request received for the Helm Chart {} ", chartData);
         try {
-            var chartInfo =  CODER.convert(chartData, ChartInfo.class);
+            var chartInfo = CODER.convert(chartData, ChartInfo.class);
             chartService.installChart(chartInfo);
             chartMap.put(element.getId(), chartInfo);
 
             var config = CODER.convert(nodeTemplate.getProperties(), ThreadConfig.class);
-            checkPodStatus(controlLoopId, element.getId(), chartInfo, config.uninitializedToPassiveTimeout,
+            checkPodStatus(automationCompositionId, element.getId(), chartInfo, config.uninitializedToPassiveTimeout,
                     config.podStatusCheckInterval);
 
         } catch (ServiceException | CoderException | IOException | ExecutionException
@@ -162,6 +161,7 @@ public class ControlLoopElementHandler implements ControlLoopElementListener {
 
     /**
      * Invoke a new thread to check the status of deployed pods.
+     *
      * @param chart ChartInfo
      */
     public void checkPodStatus(ToscaConceptIdentifier controlLoopId, UUID elementId,
@@ -171,26 +171,27 @@ public class ControlLoopElementHandler implements ControlLoopElementListener {
                 podStatusCheckInterval), "Done");
         if (!result.get().isEmpty()) {
             LOGGER.info("Pod Status Validator Completed: {}", result.isDone());
-            intermediaryApi.updateControlLoopElementState(controlLoopId, elementId,
-                ControlLoopOrderedState.PASSIVE, ControlLoopState.PASSIVE,
-                ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE);
+            intermediaryApi.updateAutomationCompositionElementState(controlLoopId, elementId,
+                AutomationCompositionOrderedState.PASSIVE, AutomationCompositionState.PASSIVE,
+                ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
         }
     }
 
     /**
      * Overridden method.
      *
-     * @param controlLoopElementId controlLoopElement id
+     * @param automationCompositionElementId automationCompositionElement id
      * @throws PfModelException in case of error
      */
     @Override
-    public synchronized void handleStatistics(UUID controlLoopElementId) throws PfModelException {
-        var clElement = intermediaryApi.getControlLoopElement(controlLoopElementId);
-        if (clElement != null) {
-            var clElementStatistics = new ClElementStatistics();
-            clElementStatistics.setControlLoopState(clElement.getState());
-            clElementStatistics.setTimeStamp(Instant.now());
-            intermediaryApi.updateControlLoopElementStatistics(controlLoopElementId, clElementStatistics);
+    public synchronized void handleStatistics(UUID automationCompositionElementId) throws PfModelException {
+        var acElement = intermediaryApi.getAutomationCompositionElement(automationCompositionElementId);
+        if (acElement != null) {
+            var acElementStatistics = new AcElementStatistics();
+            acElementStatistics.setState(acElement.getState());
+            acElementStatistics.setTimeStamp(Instant.now());
+            intermediaryApi.updateAutomationCompositionElementStatistics(automationCompositionElementId,
+                acElementStatistics);
         }
     }
 }
@@ -18,7 +18,7 @@
  * ========================LICENSE_END===================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes.helm;
+package org.onap.policy.clamp.acm.participant.kubernetes.helm;
 
 import java.io.File;
 import java.io.IOException;
@@ -28,10 +28,10 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import org.apache.commons.io.IOUtils;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.exception.ServiceException;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.ChartInfo;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.HelmRepository;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.service.ChartStore;
+import org.onap.policy.clamp.acm.participant.kubernetes.exception.ServiceException;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartInfo;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.HelmRepository;
+import org.onap.policy.clamp.acm.participant.kubernetes.service.ChartStore;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,7 +16,7 @@
  * ========================LICENSE_END===================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes.helm;
+package org.onap.policy.clamp.acm.participant.kubernetes.helm;
 
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -27,9 +27,9 @@ import java.util.HashMap;
 import java.util.Map;
 import lombok.SneakyThrows;
 import org.apache.commons.io.IOUtils;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.exception.ServiceException;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.handler.ControlLoopElementHandler;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.ChartInfo;
+import org.onap.policy.clamp.acm.participant.kubernetes.exception.ServiceException;
+import org.onap.policy.clamp.acm.participant.kubernetes.handler.AutomationCompositionElementHandler;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -77,12 +77,12 @@ public class PodStatusValidator implements Runnable {
                 if (! isVerified) {
                     logger.info("Waiting for the pods to be active for the chart {}", chart.getChartId().getName());
                     podStatusMap.forEach((key, value) -> logger.info("Pod: {} , state: {}", key, value));
-                    ControlLoopElementHandler.getPodStatusMap().put(chart.getReleaseName(), podStatusMap);
+                    AutomationCompositionElementHandler.getPodStatusMap().put(chart.getReleaseName(), podStatusMap);
                     // Recheck status of pods in specific intervals.
                     Thread.sleep(statusCheckInterval * 1000L);
                 } else {
                     logger.info("All pods are in running state for the helm chart {}", chart.getChartId().getName());
-                    ControlLoopElementHandler.getPodStatusMap().put(chart.getReleaseName(), podStatusMap);
+                    AutomationCompositionElementHandler.getPodStatusMap().put(chart.getReleaseName(), podStatusMap);
                 }
             } catch (ServiceException | IOException  e) {
                 throw new ServiceException("Error verifying the status of the pod. Exiting", e);
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes.parameters;
+package org.onap.policy.clamp.acm.participant.kubernetes.parameters;
 
 import javax.validation.Valid;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import lombok.Getter;
 import lombok.Setter;
-import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantIntermediaryParameters;
-import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantParameters;
+import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantIntermediaryParameters;
+import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantParameters;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.validation.annotation.Validated;
 
  * ========================LICENSE_END===================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes.service;
+package org.onap.policy.clamp.acm.participant.kubernetes.service;
 
 import java.io.IOException;
 import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.exception.ServiceException;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.helm.HelmClient;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.ChartInfo;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.HelmRepository;
+import org.onap.policy.clamp.acm.participant.kubernetes.exception.ServiceException;
+import org.onap.policy.clamp.acm.participant.kubernetes.helm.HelmClient;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartInfo;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.HelmRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,7 +18,7 @@
  * ========================LICENSE_END===================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes.service;
+package org.onap.policy.clamp.acm.participant.kubernetes.service;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -37,9 +37,9 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import lombok.AccessLevel;
 import lombok.Getter;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.exception.ServiceException;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.ChartInfo;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.parameters.ParticipantK8sParameters;
+import org.onap.policy.clamp.acm.participant.kubernetes.exception.ServiceException;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartInfo;
+import org.onap.policy.clamp.acm.participant.kubernetes.parameters.ParticipantK8sParameters;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
index b266fe3..3be0fb2 100644 (file)
@@ -13,22 +13,22 @@ participant:
     reportingTimeIntervalMs: 120000
     description: Participant Description
     participantId:
-      name: K8sParticipant0
-      version: 1.0.0
+      name: org.onap.policy.clamp.acm.KubernetesParticipant
+      version: 2.3.4
     participantType:
-      name: org.onap.k8s.controlloop.K8sControlLoopParticipant
+      name: org.onap.k8s.acm.K8SAutomationCompositionParticipant
       version: 2.3.4
-    clampControlLoopTopics:
+    clampAutomationCompositionTopics:
       topicSources:
         -
-          topic: POLICY-CLRUNTIME-PARTICIPANT
+          topic: POLICY-ACRUNTIME-PARTICIPANT
           servers:
             - ${topicServer:localhost}
           topicCommInfrastructure: dmaap
           fetchTimeout: 15000
       topicSinks:
         -
-          topic: POLICY-CLRUNTIME-PARTICIPANT
+          topic: POLICY-ACRUNTIME-PARTICIPANT
           servers:
             - ${topicServer:localhost}
           topicCommInfrastructure: dmaap
@@ -41,7 +41,7 @@ management:
 server:
   port: 8083
   servlet:
-    context-path: /onap/k8sparticipant
+    context-path: /onap/policy/clamp/acm/k8sparticipant
 
 logging:
   # Configuration of logging
@@ -50,7 +50,7 @@ logging:
     org.springframework: ERROR
     org.springframework.data: ERROR
     org.springframework.web.reactive.function.client.ExchangeFunctions: ERROR
-    org.onap.policy.clamp.controlloop.participant.kubernetes: INFO
+    org.onap.policy.clamp.acm.participant.kubernetes: INFO
 
   file:
     name: /var/log/onap/policy/clamp/application.log
diff --git a/participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/handler/AutomationCompositionElementHandlerTest.java b/participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/acm/participant/kubernetes/handler/AutomationCompositionElementHandlerTest.java
new file mode 100644 (file)
index 0000000..dc74afc
--- /dev/null
@@ -0,0 +1,182 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.participant.kubernetes.handler;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.when;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.Spy;
+import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
+import org.onap.policy.clamp.acm.participant.kubernetes.exception.ServiceException;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartInfo;
+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.AutomationCompositionElement;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
+import org.onap.policy.common.utils.coder.Coder;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.common.utils.coder.StandardCoder;
+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;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+@ExtendWith(SpringExtension.class)
+class AutomationCompositionElementHandlerTest {
+
+    private static final Coder CODER = new StandardCoder();
+    private static final String CHART_INFO_YAML = "src/test/resources/ChartList.json";
+    private static final String KEY_NAME =
+        "org.onap.domain.database.HelloWorld_K8SMicroserviceAutomationCompositionElement";
+    private static List<ChartInfo> charts;
+    private static ToscaServiceTemplate toscaServiceTemplate;
+    private static final String K8S_AUTOMATION_COMPOSITION_ELEMENT =
+        "org.onap.domain.database.PMSH_K8SMicroserviceAutomationCompositionElement";
+    private CommonTestData commonTestData = new CommonTestData();
+
+    @InjectMocks
+    @Spy
+    private AutomationCompositionElementHandler automationCompositionElementHandler =
+        new AutomationCompositionElementHandler();
+
+    @Mock
+    private ChartService chartService;
+
+    @Mock
+    private ParticipantIntermediaryApi participantIntermediaryApi;
+
+    @Mock
+    private ExecutorService executor;
+    @Mock
+    private Future<String> result;
+
+    @BeforeAll
+    static void init() throws CoderException {
+        charts = CODER.decode(new File(CHART_INFO_YAML), ChartList.class).getCharts();
+        toscaServiceTemplate = TestUtils.testAutomationCompositionRead();
+    }
+
+    @Test
+    void test_AutomationCompositionElementStateChange() throws ServiceException {
+        UUID automationCompositionElementId1 = UUID.randomUUID();
+        UUID automationCompositionElementId2 = UUID.randomUUID();
+
+        automationCompositionElementHandler.getChartMap().put(automationCompositionElementId1, charts.get(0));
+        automationCompositionElementHandler.getChartMap().put(automationCompositionElementId2, charts.get(1));
+
+        doNothing().when(chartService).uninstallChart(charts.get(0));
+
+        automationCompositionElementHandler.automationCompositionElementStateChange(
+            commonTestData.getAutomationCompositionId(), automationCompositionElementId1,
+            AutomationCompositionState.PASSIVE, AutomationCompositionOrderedState.UNINITIALISED);
+
+        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));
+
+    }
+
+    @Test
+    void test_AutomationCompositionElementUpdate() throws PfModelException, IOException, ServiceException,
+        ExecutionException, InterruptedException {
+        doNothing().when(automationCompositionElementHandler).checkPodStatus(any(), any(), any(), anyInt(), anyInt());
+        UUID elementId1 = UUID.randomUUID();
+        AutomationCompositionElement element = new AutomationCompositionElement();
+        element.setId(elementId1);
+        element.setDefinition(new ToscaConceptIdentifier(KEY_NAME, "1.0.1"));
+        element.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
+
+        Map<String, ToscaNodeTemplate> nodeTemplatesMap =
+            toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates();
+        automationCompositionElementHandler.automationCompositionElementUpdate(
+            commonTestData.getAutomationCompositionId(), element,
+            nodeTemplatesMap.get(K8S_AUTOMATION_COMPOSITION_ELEMENT));
+
+        assertThat(automationCompositionElementHandler.getChartMap()).hasSize(1).containsKey(elementId1);
+
+        doThrow(new ServiceException("Error installing the chart")).when(chartService).installChart(Mockito.any());
+
+        UUID elementId2 = UUID.randomUUID();
+        element.setId(elementId2);
+        automationCompositionElementHandler.automationCompositionElementUpdate(
+            commonTestData.getAutomationCompositionId(), element,
+            nodeTemplatesMap.get(K8S_AUTOMATION_COMPOSITION_ELEMENT));
+
+        assertThat(automationCompositionElementHandler.getChartMap().containsKey(elementId2)).isFalse();
+    }
+
+    @Test
+    void test_handleStatistics() throws PfModelException {
+        UUID elementId1 = UUID.randomUUID();
+        automationCompositionElementHandler.getChartMap().put(elementId1, charts.get(0));
+        when(participantIntermediaryApi.getAutomationCompositionElement(elementId1))
+            .thenReturn(new AutomationCompositionElement());
+        assertDoesNotThrow(() -> automationCompositionElementHandler.handleStatistics(elementId1));
+    }
+
+    @Test
+    void test_checkPodStatus() throws ExecutionException, InterruptedException {
+        doReturn(result).when(executor).submit(any(Runnable.class), any());
+        doReturn("Done").when(result).get();
+        doReturn(true).when(result).isDone();
+        var chartInfo = charts.get(0);
+        ToscaConceptIdentifier controlLoopId = new ToscaConceptIdentifier();
+        AutomationCompositionElement element = new AutomationCompositionElement();
+        assertDoesNotThrow(
+            () -> automationCompositionElementHandler.checkPodStatus(controlLoopId, element.getId(), chartInfo,
+                1, 1));
+    }
+}
@@ -19,7 +19,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes.helm;
+package org.onap.policy.clamp.acm.participant.kubernetes.helm;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -44,11 +44,11 @@ import org.mockito.Mock;
 import org.mockito.MockedStatic;
 import org.mockito.Mockito;
 import org.mockito.Spy;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.exception.ServiceException;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.ChartInfo;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.ChartList;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.HelmRepository;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.service.ChartStore;
+import org.onap.policy.clamp.acm.participant.kubernetes.exception.ServiceException;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartInfo;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartList;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.HelmRepository;
+import org.onap.policy.clamp.acm.participant.kubernetes.service.ChartStore;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
@@ -19,9 +19,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes.helm;
-
-
+package org.onap.policy.clamp.acm.participant.kubernetes.helm;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -39,10 +37,10 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.InjectMocks;
 import org.mockito.MockedStatic;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.exception.ServiceException;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.handler.ControlLoopElementHandler;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.ChartInfo;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.ChartList;
+import org.onap.policy.clamp.acm.participant.kubernetes.exception.ServiceException;
+import org.onap.policy.clamp.acm.participant.kubernetes.handler.AutomationCompositionElementHandler;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartInfo;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartList;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
@@ -74,7 +72,7 @@ class PodStatusValidatorTest {
 
     @AfterEach
     void clearPodStatusMap() {
-        ControlLoopElementHandler.getPodStatusMap().clear();
+        AutomationCompositionElementHandler.getPodStatusMap().clear();
     }
 
     @AfterAll
@@ -89,9 +87,9 @@ class PodStatusValidatorTest {
         mockedClient.when(() -> HelmClient.executeCommand(any()))
             .thenReturn(runningPod);
         assertDoesNotThrow(() -> podStatusValidator.run());
-        assertThat(ControlLoopElementHandler.getPodStatusMap()).hasSize(1);
-        assertThat(ControlLoopElementHandler.getPodStatusMap()).containsKey(charts.get(0).getReleaseName());
-        assertThat(ControlLoopElementHandler.getPodStatusMap())
+        assertThat(AutomationCompositionElementHandler.getPodStatusMap()).hasSize(1);
+        assertThat(AutomationCompositionElementHandler.getPodStatusMap()).containsKey(charts.get(0).getReleaseName());
+        assertThat(AutomationCompositionElementHandler.getPodStatusMap())
             .containsValue(Map.of("HelloWorld-54777df9f8-qpzqr", "Running"));
     }
 
@@ -103,7 +101,7 @@ class PodStatusValidatorTest {
             .thenReturn(invalidPod);
         assertThatThrownBy(() -> podStatusValidator.run())
             .isInstanceOf(ServiceException.class).hasMessage("Error verifying the status of the pod. Exiting");
-        assertThat(ControlLoopElementHandler.getPodStatusMap()).isEmpty();
+        assertThat(AutomationCompositionElementHandler.getPodStatusMap()).isEmpty();
     }
 
 }
@@ -19,7 +19,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes.parameters;
+package org.onap.policy.clamp.acm.participant.kubernetes.parameters;
 
 import java.util.Arrays;
 import java.util.List;
@@ -33,7 +33,7 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 public class CommonTestData {
 
-    public static final String PARTICIPANT_GROUP_NAME = "ControlLoopParticipantGroup";
+    public static final String PARTICIPANT_GROUP_NAME = "AutomationCompositionParticipantGroup";
     public static final String DESCRIPTION = "Participant description";
     public static final long TIME_INTERVAL = 2000;
     public static final List<TopicParameters> TOPIC_PARAMS = Arrays.asList(getTopicParams());
@@ -104,7 +104,7 @@ public class CommonTestData {
             map.put("description", DESCRIPTION);
             map.put("participantId", getParticipantId());
             map.put("participantType", getParticipantId());
-            map.put("clampControlLoopTopics", getTopicParametersMap(false));
+            map.put("clampAutomationCompositionTopics", getTopicParametersMap(false));
         }
 
         return map;
@@ -145,17 +145,17 @@ public class CommonTestData {
      */
     public static TopicParameters getTopicParams() {
         final TopicParameters topicParams = new TopicParameters();
-        topicParams.setTopic("POLICY-CLRUNTIME-PARTICIPANT");
+        topicParams.setTopic("POLICY-ACRUNTIME-PARTICIPANT");
         topicParams.setTopicCommInfrastructure("dmaap");
         topicParams.setServers(Arrays.asList("localhost"));
         return topicParams;
     }
 
     /**
-     * Get controlloop id.
-     * @return ToscaConceptIdentifier controlLoopId
+     * Get automation composition id.
+     * @return ToscaConceptIdentifier automationCompositionId
      */
-    public ToscaConceptIdentifier getControlLoopId() {
+    public ToscaConceptIdentifier getAutomationCompositionId() {
         return new ToscaConceptIdentifier("PMSHInstance0", "1.0.0");
     }
 }
@@ -19,7 +19,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes.parameters;
+package org.onap.policy.clamp.acm.participant.kubernetes.parameters;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -43,14 +43,14 @@ class ParticipantK8sParametersTest {
     @Test
     void testParticipantK8sParameters_NullTopicSinks() {
         final ParticipantK8sParameters participantParameters = commonTestData.getParticipantK8sParameters();
-        participantParameters.getIntermediaryParameters().getClampControlLoopTopics().setTopicSinks(null);
+        participantParameters.getIntermediaryParameters().getClampAutomationCompositionTopics().setTopicSinks(null);
         assertThat(validatorFactory.getValidator().validate(participantParameters)).isNotEmpty();
     }
 
     @Test
     void testParticipantK8sParameters_NullTopicSources() {
         final ParticipantK8sParameters participantParameters = commonTestData.getParticipantK8sParameters();
-        participantParameters.getIntermediaryParameters().getClampControlLoopTopics().setTopicSources(null);
+        participantParameters.getIntermediaryParameters().getClampAutomationCompositionTopics().setTopicSources(null);
         assertThat(validatorFactory.getValidator().validate(participantParameters)).isNotEmpty();
     }
 
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes.rest;
+package org.onap.policy.clamp.acm.participant.kubernetes.rest;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -27,7 +27,7 @@ import javax.ws.rs.core.Response;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.utils.CommonActuatorController;
+import org.onap.policy.clamp.acm.participant.kubernetes.utils.CommonActuatorController;
 import org.springframework.boot.test.autoconfigure.actuate.metrics.AutoConfigureMetrics;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
@@ -19,7 +19,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes.rest;
+package org.onap.policy.clamp.acm.participant.kubernetes.rest;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.mockito.Mockito.doNothing;
@@ -38,11 +38,11 @@ import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.controller.ChartController;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.ChartInfo;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.ChartList;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.parameters.ParticipantK8sParameters;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.service.ChartService;
+import org.onap.policy.clamp.acm.participant.kubernetes.controller.ChartController;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartInfo;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartList;
+import org.onap.policy.clamp.acm.participant.kubernetes.parameters.ParticipantK8sParameters;
+import org.onap.policy.clamp.acm.participant.kubernetes.service.ChartService;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
@@ -19,7 +19,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes.service;
+package org.onap.policy.clamp.acm.participant.kubernetes.service;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -42,10 +42,10 @@ import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Spy;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.exception.ServiceException;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.helm.HelmClient;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.ChartInfo;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.ChartList;
+import org.onap.policy.clamp.acm.participant.kubernetes.exception.ServiceException;
+import org.onap.policy.clamp.acm.participant.kubernetes.helm.HelmClient;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartInfo;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartList;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
@@ -19,7 +19,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes.service;
+package org.onap.policy.clamp.acm.participant.kubernetes.service;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -40,10 +40,10 @@ import org.mockito.Mockito;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.mockito.junit.jupiter.MockitoSettings;
 import org.mockito.quality.Strictness;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.exception.ServiceException;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.ChartInfo;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.ChartList;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.parameters.ParticipantK8sParameters;
+import org.onap.policy.clamp.acm.participant.kubernetes.exception.ServiceException;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartInfo;
+import org.onap.policy.clamp.acm.participant.kubernetes.models.ChartList;
+import org.onap.policy.clamp.acm.participant.kubernetes.parameters.ParticipantK8sParameters;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.policy.main.utils;
+package org.onap.policy.clamp.acm.participant.kubernetes.utils;
 
 import static org.junit.Assert.assertEquals;
 
@@ -40,7 +40,7 @@ import org.onap.policy.common.utils.network.NetworkUtil;
 public class CommonActuatorController {
 
     public static final String SELF = NetworkUtil.getHostname();
-    public static final String CONTEXT_PATH = "onap/policyparticipant";
+    public static final String CONTEXT_PATH = "onap/policy/clamp/acm/k8sparticipant";
     public static final String ACTUATOR_ENDPOINT = CONTEXT_PATH + "/actuator/";
 
     private static String httpPrefix;
@@ -19,7 +19,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.kubernetes.utils;
+package org.onap.policy.clamp.acm.participant.kubernetes.utils;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
@@ -33,15 +33,15 @@ public final class TestUtils {
     private static final YamlJsonTranslator yamlTranslator = new YamlJsonTranslator();
     private static final String TOSCA_TEMPLATE_YAML = "src/test/resources/servicetemplates/KubernetesHelm.yaml";
 
-
-    public static ToscaServiceTemplate testControlLoopRead() {
-        return testControlLoopYamlSerialization(TOSCA_TEMPLATE_YAML);
+    public static ToscaServiceTemplate testAutomationCompositionRead() {
+        return testAutomationCompositionYamlSerialization(TOSCA_TEMPLATE_YAML);
     }
 
-
-    private static ToscaServiceTemplate testControlLoopYamlSerialization(String controlLoopFilePath) {
-        String controlLoopString = ResourceUtils.getResourceAsString(controlLoopFilePath);
-        ToscaServiceTemplate serviceTemplate = yamlTranslator.fromYaml(controlLoopString, ToscaServiceTemplate.class);
+    private static ToscaServiceTemplate testAutomationCompositionYamlSerialization(
+        String automationCompositionFilePath) {
+        String automationCompositionString = ResourceUtils.getResourceAsString(automationCompositionFilePath);
+        ToscaServiceTemplate serviceTemplate =
+            yamlTranslator.fromYaml(automationCompositionString, ToscaServiceTemplate.class);
         return serviceTemplate;
     }
 }
diff --git a/participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/controlloop/participant/kubernetes/handler/ControlLoopElementHandlerTest.java b/participant/participant-impl/participant-impl-kubernetes/src/test/java/org/onap/policy/clamp/controlloop/participant/kubernetes/handler/ControlLoopElementHandlerTest.java
deleted file mode 100644 (file)
index 805404b..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
- *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.participant.kubernetes.handler;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.when;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Future;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.Spy;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.exception.ServiceException;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.ChartInfo;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.models.ChartList;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.parameters.CommonTestData;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.service.ChartService;
-import org.onap.policy.clamp.controlloop.participant.kubernetes.utils.TestUtils;
-import org.onap.policy.common.utils.coder.Coder;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.common.utils.coder.StandardCoder;
-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;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-import org.springframework.test.context.junit.jupiter.SpringExtension;
-
-
-@ExtendWith(SpringExtension.class)
-class ControlLoopElementHandlerTest {
-
-    private static final Coder CODER = new StandardCoder();
-    private static final String CHART_INFO_YAML = "src/test/resources/ChartList.json";
-    private static final String KEY_NAME = "org.onap.domain.database.HelloWorld_K8SMicroserviceControlLoopElement";
-    private static List<ChartInfo> charts;
-    private static ToscaServiceTemplate toscaServiceTemplate;
-    private static final String K8S_CONTROL_LOOP_ELEMENT =
-        "org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement";
-    private CommonTestData commonTestData = new CommonTestData();
-
-    @InjectMocks
-    @Spy
-    private ControlLoopElementHandler controlLoopElementHandler = new ControlLoopElementHandler();
-
-    @Mock
-    private ChartService chartService;
-
-    @Mock
-    private ParticipantIntermediaryApi participantIntermediaryApi;
-
-    @Mock
-    private ExecutorService executor;
-
-    @Mock
-    private Future<String> result;
-
-    @BeforeAll
-    static void init() throws CoderException {
-        charts = CODER.decode(new File(CHART_INFO_YAML), ChartList.class).getCharts();
-        toscaServiceTemplate = TestUtils.testControlLoopRead();
-    }
-
-
-    @Test
-    void test_ControlLoopElementStateChange() throws ServiceException {
-        UUID controlLoopElementId1 = UUID.randomUUID();
-        UUID controlLoopElementId2 = UUID.randomUUID();
-
-        controlLoopElementHandler.getChartMap().put(controlLoopElementId1, charts.get(0));
-        controlLoopElementHandler.getChartMap().put(controlLoopElementId2, charts.get(1));
-
-        doNothing().when(chartService).uninstallChart(charts.get(0));
-
-        controlLoopElementHandler.controlLoopElementStateChange(commonTestData.getControlLoopId(),
-            controlLoopElementId1, ControlLoopState.PASSIVE, ControlLoopOrderedState.UNINITIALISED);
-
-        doThrow(new ServiceException("Error uninstalling the chart")).when(chartService)
-            .uninstallChart(charts.get(0));
-
-        assertDoesNotThrow(() -> controlLoopElementHandler
-                .controlLoopElementStateChange(commonTestData.getControlLoopId(), controlLoopElementId1,
-                    ControlLoopState.PASSIVE, ControlLoopOrderedState.PASSIVE));
-
-        assertDoesNotThrow(() -> controlLoopElementHandler
-            .controlLoopElementStateChange(commonTestData.getControlLoopId(), controlLoopElementId1,
-                ControlLoopState.PASSIVE, ControlLoopOrderedState.UNINITIALISED));
-
-        assertDoesNotThrow(() -> controlLoopElementHandler
-            .controlLoopElementStateChange(commonTestData.getControlLoopId(), controlLoopElementId1,
-                ControlLoopState.PASSIVE, ControlLoopOrderedState.RUNNING));
-
-    }
-
-    @Test
-    void test_ControlLoopElementUpdate() throws PfModelException, IOException, ServiceException,
-            ExecutionException, InterruptedException {
-        doNothing().when(controlLoopElementHandler).checkPodStatus(any(), any(), any(), anyInt(), anyInt());
-        UUID elementId1 = UUID.randomUUID();
-        ControlLoopElement element = new ControlLoopElement();
-        element.setId(elementId1);
-        element.setDefinition(new ToscaConceptIdentifier(KEY_NAME, "1.0.1"));
-        element.setOrderedState(ControlLoopOrderedState.PASSIVE);
-
-        Map<String, ToscaNodeTemplate> nodeTemplatesMap =
-                toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates();
-        controlLoopElementHandler.controlLoopElementUpdate(commonTestData.getControlLoopId(), element,
-            nodeTemplatesMap.get(K8S_CONTROL_LOOP_ELEMENT));
-
-        assertThat(controlLoopElementHandler.getChartMap()).hasSize(1).containsKey(elementId1);
-
-        doThrow(new ServiceException("Error installing the chart")).when(chartService)
-            .installChart(Mockito.any());
-
-        UUID elementId2 = UUID.randomUUID();
-        element.setId(elementId2);
-        controlLoopElementHandler.controlLoopElementUpdate(commonTestData.getControlLoopId(), element,
-            nodeTemplatesMap.get(K8S_CONTROL_LOOP_ELEMENT));
-
-        assertThat(controlLoopElementHandler.getChartMap().containsKey(elementId2)).isFalse();
-    }
-
-    @Test
-    void test_handleStatistics() throws PfModelException {
-        UUID elementId1 = UUID.randomUUID();
-        controlLoopElementHandler.getChartMap().put(elementId1, charts.get(0));
-        when(participantIntermediaryApi.getControlLoopElement(elementId1)).thenReturn(new ControlLoopElement());
-        assertDoesNotThrow(() -> controlLoopElementHandler.handleStatistics(elementId1));
-    }
-
-    @Test
-    void test_checkPodStatus() throws ExecutionException, InterruptedException {
-        doReturn(result).when(executor).submit(any(Runnable.class), any());
-        doReturn("Done").when(result).get();
-        doReturn(true).when(result).isDone();
-        var chartInfo =  charts.get(0);
-        ToscaConceptIdentifier controlLoopId = new ToscaConceptIdentifier();
-        ControlLoopElement element = new ControlLoopElement();
-        assertDoesNotThrow(() -> controlLoopElementHandler.checkPodStatus(controlLoopId, element.getId(), chartInfo,
-                1, 1));
-    }
-}
index b5b209f..2435121 100644 (file)
@@ -1,24 +1,24 @@
 spring.security.user.name=participantUser
 spring.security.user.password=zb!XztG34
 
-server.servlet.context-path=/onap/k8sparticipant
+server.servlet.context-path=/onap/policy/clamp/acm/k8sparticipant
 server.error.path=/error
 server.http-port=8083
 
-participant.name=ControlLoopParticipant Kubernetes Test
+participant.name=AutomationCompositionParticipant Kubernetes Test
 participant.intermediaryParameters.name=Participant parameters
 participant.intermediaryParameters.reportingTimeInterval=120000
 participant.intermediaryParameters.description=Participant Description
 participant.intermediaryParameters.participantId.name=K8sParticipant0
 participant.intermediaryParameters.participantId.version=1.0.0
-participant.intermediaryParameters.participantType.name=org.onap.k8s.controlloop.K8SControlLoopParticipant
+participant.intermediaryParameters.participantType.name=org.onap.k8s.acm.K8SAutomationCompositionParticipant
 participant.intermediaryParameters.participantType.version=2.3.4
-participant.intermediaryParameters.clampControlLoopTopics.name=ControlLoop Topics
-participant.intermediaryParameters.clampControlLoopTopics.topicSources[0].topic=POLICY-CLRUNTIME-PARTICIPANT
-participant.intermediaryParameters.clampControlLoopTopics.topicSources[0].servers[0]=localhost
-participant.intermediaryParameters.clampControlLoopTopics.topicSources[0].topicCommInfrastructure=dmaap
-participant.intermediaryParameters.clampControlLoopTopics.topicSources[0].fetchTimeout=15000
-participant.intermediaryParameters.clampControlLoopTopics.topicSinks[0].topic=POLICY-CLRUNTIME-PARTICIPANT
-participant.intermediaryParameters.clampControlLoopTopics.topicSinks[0].servers[0]=localhost
-participant.intermediaryParameters.clampControlLoopTopics.topicSinks[0].topicCommInfrastructure=dmaap
+participant.intermediaryParameters.clampAutomationCompositionTopics.name=AutomationComposition Topics
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSources[0].topic=POLICY-ACRUNTIME-PARTICIPANT
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSources[0].servers[0]=localhost
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSources[0].topicCommInfrastructure=dmaap
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSources[0].fetchTimeout=15000
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSinks[0].topic=POLICY-ACRUNTIME-PARTICIPANT
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSinks[0].servers[0]=localhost
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSinks[0].topicCommInfrastructure=dmaap
 management.endpoints.web.exposure.include=health,metrics,prometheus
index 7d59401..f5eb623 100644 (file)
@@ -27,14 +27,14 @@ data_types:
         type: string
         required: true
 node_types:
-  org.onap.policy.clamp.controlloop.Participant:
+  org.onap.policy.clamp.acm.Participant:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
       provider:
         type: string
         requred: false
-  org.onap.policy.clamp.controlloop.ControlLoopElement:
+  org.onap.policy.clamp.acm.AutomationCompositionElement:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
@@ -51,11 +51,11 @@ node_types:
         - greater-or-equal: 0
         metadata:
             common: true
-        description: A value indicating the start phase in which this control loop element will be started, the
-                     first start phase is zero. Control Loop Elements are started in their start_phase order and stopped
-                     in reverse start phase order. Control Loop Elements with the same start phase are started and
-                     stopped simultaneously
-  org.onap.policy.clamp.controlloop.ControlLoop:
+        description: A value indicating the start phase in which this automation composition element will be started,
+                     the first start phase is zero. Automation Composition Elements are started in their start_phase
+                     order and stopped in reverse start phase order. Automation Composition Elements with the same start
+                     phase are started and stopped simultaneously
+  org.onap.policy.clamp.acm.AutomationComposition:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
@@ -67,9 +67,9 @@ node_types:
         required: true
         entry_schema:
           type: onap.datatypes.ToscaConceptIdentifier
-  org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement:
+  org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       chart:
         type: string
@@ -89,24 +89,24 @@ node_types:
         requred: true
 topology_template:
   node_templates:
-    org.onap.k8s.controlloop.K8SControlLoopParticipant:
+    org.onap.k8s.acm.K8SAutomationCompositionParticipant:
       version: 2.3.4
-      type: org.onap.policy.clamp.controlloop.Participant
+      type: org.onap.policy.clamp.acm.Participant
       type_version: 1.0.1
       description: Participant for K8S
       properties:
         provider: ONAP
 
-    org.onap.domain.database.HelloWorld_K8SMicroserviceControlLoopElement:
+    org.onap.domain.database.HelloWorld_K8SMicroserviceAutomationCompositionElement:
       # Chart from any chart repository configured on helm client.
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement
+      type: org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the K8S microservice for Hello World
+      description: Automation composition element for the K8S microservice for Hello World
       properties:
         provider: ONAP
         participantType:
-          name: org.onap.k8s.controlloop.K8SControlLoopParticipant
+          name: org.onap.k8s.acm.K8SAutomationCompositionParticipant
           version: 2.3.4
         startPhase: 2
         uninitializedToPassiveTimeout: 180
@@ -119,16 +119,16 @@ topology_template:
           namespace: onap
           repository: chartMuseum
 
-    org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement:
+    org.onap.domain.database.PMSH_K8SMicroserviceAutomationCompositionElement:
       # Chart from local file system
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement
+      type: org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the K8S microservice for PMSH
+      description: Automation composition element for the K8S microservice for PMSH
       properties:
         provider: ONAP
         participantType:
-          name: org.onap.k8s.controlloop.K8SControlLoopParticipant
+          name: org.onap.k8s.acm.K8SAutomationCompositionParticipant
           version: 2.3.4
         startPhase: 2
         uninitializedToPassiveTimeout: 180
@@ -142,16 +142,16 @@ topology_template:
           overrideParams:
             global.masterPassword: test
 
-    org.onap.domain.database.Local_K8SMicroserviceControlLoopElement:
+    org.onap.domain.database.Local_K8SMicroserviceAutomationCompositionElement:
       # Chart installation without passing repository name
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement
+      type: org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the K8S microservice for local chart
+      description: Automation composition element for the K8S microservice for local chart
       properties:
         provider: ONAP
         participantType:
-          name: org.onap.k8s.controlloop.K8SControlLoopParticipant
+          name: org.onap.k8s.acm.K8SAutomationCompositionParticipant
           version: 2.3.4
         startPhase: 2
         uninitializedToPassiveTimeout: 180
@@ -163,17 +163,17 @@ topology_template:
           releaseName: nginxms
           namespace: onap
 
-    org.onap.domain.sample.GenericK8s_ControlLoopDefinition:
+    org.onap.domain.sample.GenericK8s_AutomationCompositionDefinition:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoop
+      type: org.onap.policy.clamp.acm.AutomationComposition
       type_version: 1.0.0
-      description: Control loop for Hello World
+      description: Automation composition for Hello World
       properties:
         provider: ONAP
         elements:
-          - name: org.onap.domain.database.HelloWorld_K8SMicroserviceControlLoopElement
+          - name: org.onap.domain.database.HelloWorld_K8SMicroserviceAutomationCompositionElement
             version: 1.2.3
-          - name: org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement
+          - name: org.onap.domain.database.PMSH_K8SMicroserviceAutomationCompositionElement
             version: 1.2.3
-          - name: org.onap.domain.database.Local_K8SMicroserviceControlLoopElement
+          - name: org.onap.domain.database.Local_K8SMicroserviceAutomationCompositionElement
             version: 1.2.3
index fce29ac..052e959 100644 (file)
@@ -30,7 +30,7 @@
 
     <artifactId>policy-clamp-participant-impl-policy</artifactId>
     <name>${project.artifactId}</name>
-    <description>Policy participant, that allows Policy to partake in control loops</description>
+    <description>Policy participant, that allows Policy to partake in automation compositions</description>
 
     <build>
         <plugins>
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.policy;
+package org.onap.policy.clamp.acm.participant.policy;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -31,9 +31,10 @@ import org.springframework.context.annotation.ComponentScan;
  */
 @SpringBootApplication
 @ComponentScan({
-    "org.onap.policy.clamp.controlloop.participant.policy",
-    "org.onap.policy.clamp.controlloop.participant.intermediary"})
-@ConfigurationPropertiesScan("org.onap.policy.clamp.controlloop.participant.policy.main.parameters")
+    "org.onap.policy.clamp.acm.participant.policy",
+    "org.onap.policy.clamp.acm.participant.intermediary"
+})
+@ConfigurationPropertiesScan("org.onap.policy.clamp.acm.participant.policy.main.parameters")
 public class PolicyParticipantApplication {
 
     public static void main(String[] args) {
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.policy.client;
+package org.onap.policy.clamp.acm.participant.policy.client;
 
 import java.io.Closeable;
 import java.io.IOException;
@@ -29,7 +29,7 @@ import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
-import org.onap.policy.clamp.controlloop.common.exception.ControlLoopRuntimeException;
+import org.onap.policy.clamp.common.acm.exception.AutomationCompositionRuntimeException;
 import org.onap.policy.common.endpoints.event.comm.bus.internal.BusTopicParams;
 import org.onap.policy.common.endpoints.http.client.HttpClient;
 import org.onap.policy.common.endpoints.http.client.HttpClientFactoryInstance;
@@ -45,13 +45,13 @@ public abstract class AbstractHttpClient implements Closeable {
      * Constructor.
      *
      * @param policyParticipantParameters the parameters for the policy participant
-     * @throws ControlLoopRuntimeException on client start errors
+     * @throws AutomationCompositionRuntimeException on client start errors
      */
     protected AbstractHttpClient(BusTopicParams policyParticipantParameters) {
         try {
             httpclient = HttpClientFactoryInstance.getClientFactory().build(policyParticipantParameters);
         } catch (final Exception e) {
-            throw new ControlLoopRuntimeException(Status.INTERNAL_SERVER_ERROR, " Client failed to start", e);
+            throw new AutomationCompositionRuntimeException(Status.INTERNAL_SERVER_ERROR, " Client failed to start", e);
         }
     }
 
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.policy.client;
+package org.onap.policy.clamp.acm.participant.policy.client;
 
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import org.onap.policy.clamp.controlloop.participant.policy.main.parameters.ParticipantPolicyParameters;
+import org.onap.policy.clamp.acm.participant.policy.main.parameters.ParticipantPolicyParameters;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 import org.springframework.stereotype.Component;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.policy.client;
+package org.onap.policy.clamp.acm.participant.policy.client;
 
 import java.util.LinkedList;
 import java.util.List;
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import org.onap.policy.clamp.controlloop.participant.policy.main.parameters.ParticipantPolicyParameters;
+import org.onap.policy.clamp.acm.participant.policy.main.parameters.ParticipantPolicyParameters;
 import org.onap.policy.models.pdp.concepts.DeploymentGroup;
 import org.onap.policy.models.pdp.concepts.DeploymentGroups;
 import org.onap.policy.models.pdp.concepts.DeploymentSubGroup;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.http.config;
+package org.onap.policy.clamp.acm.participant.policy.config;
 
-import org.onap.policy.clamp.controlloop.participant.http.main.handler.ControlLoopElementHandler;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi;
+import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
+import org.onap.policy.clamp.acm.participant.policy.main.handler.AutomationCompositionElementHandler;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
 
@@ -29,15 +29,15 @@ import org.springframework.context.annotation.Configuration;
 public class ParticipantConfig {
 
     /**
-     * Register ControlLoopElementListener.
+     * Register AutomationCompositionElementListener.
      *
      * @param intermediaryApi the ParticipantIntermediaryApi
-     * @param clElementHandler the ControlLoop Element Handler
+     * @param acElementHandler the Aotumation Composition Element Handler
      */
     @Autowired
-    public void registerControlLoopElementListener(ParticipantIntermediaryApi intermediaryApi,
-            ControlLoopElementHandler clElementHandler) {
-        intermediaryApi.registerControlLoopElementListener(clElementHandler);
-        clElementHandler.setIntermediaryApi(intermediaryApi);
+    public void registerAutomationCompositionElementListener(ParticipantIntermediaryApi intermediaryApi,
+            AutomationCompositionElementHandler acElementHandler) {
+        intermediaryApi.registerAutomationCompositionElementListener(acElementHandler);
+        acElementHandler.setIntermediaryApi(intermediaryApi);
     }
 }
diff --git a/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/acm/participant/policy/main/handler/AutomationCompositionElementHandler.java b/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/acm/participant/policy/main/handler/AutomationCompositionElementHandler.java
new file mode 100644 (file)
index 0000000..42d7526
--- /dev/null
@@ -0,0 +1,227 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021,2022 Nordix Foundation.
+ * ================================================================================
+ * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.participant.policy.main.handler;
+
+import java.time.Instant;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.UUID;
+import lombok.Setter;
+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.policy.client.PolicyApiHttpClient;
+import org.onap.policy.clamp.acm.participant.policy.client.PolicyPapHttpClient;
+import org.onap.policy.clamp.models.acm.concepts.AcElementStatistics;
+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.models.base.PfModelException;
+import org.onap.policy.models.base.PfModelRuntimeException;
+import org.onap.policy.models.pdp.concepts.DeploymentSubGroup;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+/**
+ * This class handles implementation of automationCompositionElement updates.
+ */
+@Component
+public class AutomationCompositionElementHandler implements AutomationCompositionElementListener {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AutomationCompositionElementHandler.class);
+    private final Map<String, String> policyTypeMap = new LinkedHashMap<>();
+    private final Map<String, String> policyMap = new LinkedHashMap<>();
+
+    private final PolicyApiHttpClient apiHttpClient;
+    private final PolicyPapHttpClient papHttpClient;
+
+    @Setter
+    private ParticipantIntermediaryApi intermediaryApi;
+
+    /**
+     * constructor.
+     *
+     * @param apiHttpClient the Policy Api Http Client
+     * @param papHttpClient the Policy Pap Http Client
+     */
+    public AutomationCompositionElementHandler(PolicyApiHttpClient apiHttpClient, PolicyPapHttpClient papHttpClient) {
+        this.papHttpClient = papHttpClient;
+        this.apiHttpClient = apiHttpClient;
+    }
+
+    /**
+     * Callback method to handle a automation composition element state change.
+     *
+     * @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(ToscaConceptIdentifier 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.debug("Undeploying/Deleting policy failed {}", automationCompositionElementId, e);
+                }
+                break;
+            case PASSIVE:
+                try {
+                    undeployPolicies(automationCompositionElementId);
+                } catch (PfModelRuntimeException e) {
+                    LOGGER.debug("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;
+        }
+    }
+
+    private void deletePolicyData(ToscaConceptIdentifier automationCompositionId,
+                                  UUID automationCompositionElementId, AutomationCompositionOrderedState newState) {
+        // Delete all policies of this automationComposition from policy framework
+        for (Entry<String, String> policy : policyMap.entrySet()) {
+            apiHttpClient.deletePolicy(policy.getKey(), policy.getValue());
+        }
+        policyMap.clear();
+        // Delete all policy types of this automation composition from policy framework
+        for (Entry<String, String> policyType : policyTypeMap.entrySet()) {
+            apiHttpClient.deletePolicyType(policyType.getKey(), policyType.getValue());
+        }
+        policyTypeMap.clear();
+        intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
+            automationCompositionElementId, newState, AutomationCompositionState.UNINITIALISED,
+            ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
+    }
+
+    private void deployPolicies(ToscaConceptIdentifier automationCompositionId, UUID automationCompositionElementId,
+                                AutomationCompositionOrderedState newState) {
+        // Deploy all policies of this automationComposition from Policy Framework
+        if (!policyMap.entrySet().isEmpty()) {
+            for (Entry<String, String> policy : policyMap.entrySet()) {
+                papHttpClient.handlePolicyDeployOrUndeploy(policy.getKey(), policy.getValue(),
+                    DeploymentSubGroup.Action.POST);
+            }
+            LOGGER.debug("Policies deployed to {} successfully", automationCompositionElementId);
+        } else {
+            LOGGER.debug("No policies to deploy to {}", automationCompositionElementId);
+        }
+        intermediaryApi.updateAutomationCompositionElementState(automationCompositionId,
+            automationCompositionElementId, newState, AutomationCompositionState.PASSIVE,
+            ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE);
+    }
+
+    private void undeployPolicies(UUID automationCompositionElementId) {
+        // Undeploy all policies of this automation composition from Policy Framework
+        if (!policyMap.entrySet().isEmpty()) {
+            for (Entry<String, String> policy : policyMap.entrySet()) {
+                papHttpClient.handlePolicyDeployOrUndeploy(policy.getKey(), policy.getValue(),
+                    DeploymentSubGroup.Action.DELETE);
+            }
+            LOGGER.debug("Undeployed policies from {} successfully", automationCompositionElementId);
+        } else {
+            LOGGER.debug("No policies are deployed to {}", automationCompositionElementId);
+        }
+    }
+
+    /**
+     * Callback method to handle an update on a automation composition element.
+     *
+     * @param element             the information on the automation composition element
+     * @param acElementDefinition toscaNodeTemplate
+     * @throws PfModelException in case of an exception
+     */
+    @Override
+    public void automationCompositionElementUpdate(ToscaConceptIdentifier automationCompositionId,
+                                                   AutomationCompositionElement element,
+                                                   ToscaNodeTemplate acElementDefinition)
+        throws PfModelException {
+        intermediaryApi.updateAutomationCompositionElementState(automationCompositionId, element.getId(),
+            element.getOrderedState(),
+            AutomationCompositionState.PASSIVE, ParticipantMessageType.AUTOMATION_COMPOSITION_UPDATE);
+        ToscaServiceTemplate automationCompositionDefinition = element.getToscaServiceTemplateFragment();
+        if (automationCompositionDefinition.getToscaTopologyTemplate() != null) {
+            if (automationCompositionDefinition.getPolicyTypes() != null) {
+                for (ToscaPolicyType policyType : automationCompositionDefinition.getPolicyTypes().values()) {
+                    policyTypeMap.put(policyType.getName(), policyType.getVersion());
+                }
+                LOGGER.debug("Found Policy Types in automation composition definition: {} , Creating Policy Types",
+                    automationCompositionDefinition.getName());
+                apiHttpClient.createPolicyType(automationCompositionDefinition);
+            }
+            if (automationCompositionDefinition.getToscaTopologyTemplate().getPolicies() != null) {
+                for (Map<String, ToscaPolicy> gotPolicyMap : automationCompositionDefinition.getToscaTopologyTemplate()
+                    .getPolicies()) {
+                    for (ToscaPolicy policy : gotPolicyMap.values()) {
+                        policyMap.put(policy.getName(), policy.getVersion());
+                    }
+                }
+                LOGGER.debug("Found Policies in automation composition definition: {} , Creating Policies",
+                    automationCompositionDefinition.getName());
+                apiHttpClient.createPolicy(automationCompositionDefinition);
+            }
+        }
+        deployPolicies(automationCompositionId, element.getId(), element.getOrderedState());
+    }
+
+    /**
+     * Handle automationCompositionElement statistics.
+     *
+     * @param automationCompositionElementId automation composition element id
+     */
+    @Override
+    public void handleStatistics(UUID automationCompositionElementId) {
+        var acElement = intermediaryApi.getAutomationCompositionElement(automationCompositionElementId);
+        if (acElement != null) {
+            var acElementStatistics = new AcElementStatistics();
+            acElementStatistics.setState(acElement.getState());
+            acElementStatistics.setTimeStamp(Instant.now());
+            intermediaryApi.updateAutomationCompositionElementStatistics(automationCompositionElementId,
+                acElementStatistics);
+        }
+    }
+}
\ No newline at end of file
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.policy.main.parameters;
+package org.onap.policy.clamp.acm.participant.policy.main.parameters;
 
 import javax.validation.Valid;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import lombok.Getter;
 import lombok.Setter;
-import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantIntermediaryParameters;
-import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantParameters;
+import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantIntermediaryParameters;
+import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantParameters;
 import org.onap.policy.common.endpoints.parameters.RestClientParameters;
 import org.onap.policy.common.parameters.validation.ParameterGroupConstraint;
 import org.springframework.boot.context.properties.ConfigurationProperties;
diff --git a/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/main/handler/ControlLoopElementHandler.java b/participant/participant-impl/participant-impl-policy/src/main/java/org/onap/policy/clamp/controlloop/participant/policy/main/handler/ControlLoopElementHandler.java
deleted file mode 100644 (file)
index 663d6d5..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2022 Nordix Foundation.
- * ================================================================================
- * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.participant.policy.main.handler;
-
-import java.time.Instant;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.UUID;
-import lombok.Setter;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ControlLoopElementListener;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi;
-import org.onap.policy.clamp.controlloop.participant.policy.client.PolicyApiHttpClient;
-import org.onap.policy.clamp.controlloop.participant.policy.client.PolicyPapHttpClient;
-import org.onap.policy.models.base.PfModelException;
-import org.onap.policy.models.base.PfModelRuntimeException;
-import org.onap.policy.models.pdp.concepts.DeploymentSubGroup;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-
-/**
- * This class handles implementation of controlLoopElement updates.
- */
-@Component
-public class ControlLoopElementHandler implements ControlLoopElementListener {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(ControlLoopElementHandler.class);
-    private final Map<String, String> policyTypeMap = new LinkedHashMap<>();
-    private final Map<String, String> policyMap = new LinkedHashMap<>();
-
-    private final PolicyApiHttpClient apiHttpClient;
-    private final PolicyPapHttpClient papHttpClient;
-
-    @Setter
-    private ParticipantIntermediaryApi intermediaryApi;
-
-    /**
-     * constructor.
-     *
-     * @param apiHttpClient the Policy Api Http Client
-     * @param papHttpClient the Policy Pap Http Client
-     */
-    public ControlLoopElementHandler(PolicyApiHttpClient apiHttpClient, PolicyPapHttpClient papHttpClient) {
-        this.papHttpClient = papHttpClient;
-        this.apiHttpClient = apiHttpClient;
-    }
-
-    /**
-     * Callback method to handle a control loop element state change.
-     *
-     * @param controlLoopId the ID of the control loop
-     * @param controlLoopElementId the ID of the control loop element
-     * @param currentState the current state of the control loop element
-     * @param orderedState the state to which the control loop element is changing to
-     */
-    @Override
-    public void controlLoopElementStateChange(ToscaConceptIdentifier controlLoopId,
-                UUID controlLoopElementId, ControlLoopState currentState,
-            ControlLoopOrderedState orderedState) {
-        switch (orderedState) {
-            case UNINITIALISED:
-                try {
-                    undeployPolicies(controlLoopElementId);
-                    deletePolicyData(controlLoopId, controlLoopElementId, orderedState);
-                    intermediaryApi.updateControlLoopElementState(controlLoopId,
-                            controlLoopElementId, orderedState, ControlLoopState.UNINITIALISED,
-                            ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE);
-                } catch (PfModelRuntimeException e) {
-                    LOGGER.debug("Undeploying/Deleting policy failed {}", controlLoopElementId, e);
-                }
-                break;
-            case PASSIVE:
-                try {
-                    undeployPolicies(controlLoopElementId);
-                } catch (PfModelRuntimeException e) {
-                    LOGGER.debug("Undeploying policies failed - no policies to undeploy {}", controlLoopElementId);
-                }
-                intermediaryApi.updateControlLoopElementState(controlLoopId,
-                        controlLoopElementId, orderedState, ControlLoopState.PASSIVE,
-                        ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE);
-                break;
-            case RUNNING:
-                LOGGER.info("Running state is not supported");
-                break;
-            default:
-                LOGGER.debug("Unknown orderedstate {}", orderedState);
-                break;
-        }
-    }
-
-    private void deletePolicyData(ToscaConceptIdentifier controlLoopId,
-                                  UUID controlLoopElementId, ControlLoopOrderedState newState) {
-        // Delete all policies of this controlLoop from policy framework
-        for (Entry<String, String> policy : policyMap.entrySet()) {
-            apiHttpClient.deletePolicy(policy.getKey(), policy.getValue());
-        }
-        policyMap.clear();
-        // Delete all policy types of this control loop from policy framework
-        for (Entry<String, String> policyType : policyTypeMap.entrySet()) {
-            apiHttpClient.deletePolicyType(policyType.getKey(), policyType.getValue());
-        }
-        policyTypeMap.clear();
-        intermediaryApi.updateControlLoopElementState(controlLoopId,
-                controlLoopElementId, newState, ControlLoopState.UNINITIALISED,
-                ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE);
-    }
-
-    private void deployPolicies(ToscaConceptIdentifier controlLoopId, UUID controlLoopElementId,
-            ControlLoopOrderedState newState) {
-        // Deploy all policies of this controlLoop from Policy Framework
-        if (policyMap.entrySet() != null) {
-            for (Entry<String, String> policy : policyMap.entrySet()) {
-                papHttpClient.handlePolicyDeployOrUndeploy(policy.getKey(), policy.getValue(),
-                        DeploymentSubGroup.Action.POST);
-            }
-            LOGGER.debug("Policies deployed to {} successfully", controlLoopElementId);
-        } else {
-            LOGGER.debug("No policies to deploy to {}", controlLoopElementId);
-        }
-        intermediaryApi.updateControlLoopElementState(controlLoopId,
-                controlLoopElementId, newState, ControlLoopState.PASSIVE,
-                ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE);
-    }
-
-    private void undeployPolicies(UUID controlLoopElementId) {
-        // Undeploy all policies of this controlloop from Policy Framework
-        if (policyMap.entrySet() != null) {
-            for (Entry<String, String> policy : policyMap.entrySet()) {
-                papHttpClient.handlePolicyDeployOrUndeploy(policy.getKey(), policy.getValue(),
-                        DeploymentSubGroup.Action.DELETE);
-            }
-            LOGGER.debug("Undeployed policies from {} successfully", controlLoopElementId);
-        } else {
-            LOGGER.debug("No policies are deployed to {}", controlLoopElementId);
-        }
-    }
-
-    /**
-     * Callback method to handle an update on a control loop element.
-     *
-     * @param element the information on the control loop element
-     * @param clElementDefinition toscaNodeTemplate
-     * @throws PfModelException in case of an exception
-     */
-    @Override
-    public void controlLoopElementUpdate(ToscaConceptIdentifier controlLoopId, ControlLoopElement element,
-                                         ToscaNodeTemplate clElementDefinition)
-            throws PfModelException {
-        ToscaServiceTemplate controlLoopDefinition = element.getToscaServiceTemplateFragment();
-        if (controlLoopDefinition.getToscaTopologyTemplate() != null) {
-            if (controlLoopDefinition.getPolicyTypes() != null) {
-                for (ToscaPolicyType policyType : controlLoopDefinition.getPolicyTypes().values()) {
-                    policyTypeMap.put(policyType.getName(), policyType.getVersion());
-                }
-                LOGGER.debug("Found Policy Types in control loop definition: {} , Creating Policy Types",
-                        controlLoopDefinition.getName());
-                apiHttpClient.createPolicyType(controlLoopDefinition);
-            }
-            if (controlLoopDefinition.getToscaTopologyTemplate().getPolicies() != null) {
-                for (Map<String, ToscaPolicy> foundPolicyMap : controlLoopDefinition.getToscaTopologyTemplate()
-                        .getPolicies()) {
-                    for (ToscaPolicy policy : foundPolicyMap.values()) {
-                        policyMap.put(policy.getName(), policy.getVersion());
-                    }
-                }
-                LOGGER.debug("Found Policies in control loop definition: {} , Creating Policies",
-                        controlLoopDefinition.getName());
-                apiHttpClient.createPolicy(controlLoopDefinition);
-            }
-        }
-        deployPolicies(controlLoopId, element.getId(), element.getOrderedState());
-    }
-
-    /**
-     * Handle controlLoopElement statistics.
-     *
-     * @param controlLoopElementId controlloop element id
-     */
-    @Override
-    public void handleStatistics(UUID controlLoopElementId) throws PfModelException {
-        var clElement = intermediaryApi.getControlLoopElement(controlLoopElementId);
-        if (clElement != null) {
-            var clElementStatistics = new ClElementStatistics();
-            clElementStatistics.setControlLoopState(clElement.getState());
-            clElementStatistics.setTimeStamp(Instant.now());
-            intermediaryApi.updateControlLoopElementStatistics(controlLoopElementId, clElementStatistics);
-        }
-    }
-}
\ No newline at end of file
index 46db712..383bc74 100644 (file)
         <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate</class>
         <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate</class>
         <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaTrigger</class>
-        <class>org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaControlLoop</class>
-        <class>org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaControlLoopElement</class>
-        <class>org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaParticipant</class>
-        <class>org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaParticipantStatistics</class>
-        <class>org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaClElementStatistics</class>
+        <class>org.onap.policy.clamp.acm.models.acm.persistence.concepts.JpaAutomationComposition</class>
+        <class>org.onap.policy.clamp.acm.models.acm.persistence.concepts.JpaAutomationCompositionElement</class>
+        <class>org.onap.policy.clamp.acm.models.acm.persistence.concepts.JpaParticipant</class>
+        <class>org.onap.policy.clamp.acm.models.acm.persistence.concepts.JpaParticipantStatistics</class>
+        <class>org.onap.policy.clamp.acm.models.acm.persistence.concepts.JpaAcElementStatistics</class>
         <properties>
             <property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
             <property name="eclipselink.ddl-generation.output-mode" value="database" />
index 2aa33c1..c3338a9 100644 (file)
@@ -30,19 +30,19 @@ participant:
       name: org.onap.PM_Policy
       version: 1.0.0
     participantType:
-      name: org.onap.policy.controlloop.PolicyControlLoopParticipant
+      name: org.onap.policy.clamp.acm.PolicyParticipant
       version: 2.3.1
-    clampControlLoopTopics:
+    clampAutomationCompositionTopics:
       topicSources:
         -
-          topic: POLICY-CLRUNTIME-PARTICIPANT
+          topic: POLICY-ACRUNTIME-PARTICIPANT
           servers:
             - ${topicServer:localhost}
           topicCommInfrastructure: dmaap
           fetchTimeout: 15000
       topicSinks:
         -
-          topic: POLICY-CLRUNTIME-PARTICIPANT
+          topic: POLICY-ACRUNTIME-PARTICIPANT
           servers:
             - ${topicServer:localhost}
           topicCommInfrastructure: dmaap
@@ -54,4 +54,4 @@ management:
 server:
   port: 8085
   servlet:
-    context-path: /onap/policyparticipant
+    context-path: /onap/policy/clamp/acm/policyparticipant
@@ -19,7 +19,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.policy.endtoend;
+package org.onap.policy.clamp.acm.participant.policy.endtoend;
 
 import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.junit.Assert.assertEquals;
@@ -30,19 +30,19 @@ import java.util.UUID;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mockito;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregister;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregisterAck;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegister;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegisterAck;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatus;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdate;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdateAck;
-import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ParticipantDeregisterAckListener;
-import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ParticipantMessagePublisher;
-import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ParticipantRegisterAckListener;
-import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ParticipantUpdateListener;
-import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ParticipantHandler;
-import org.onap.policy.clamp.controlloop.participant.policy.main.utils.TestListenerUtils;
+import org.onap.policy.clamp.acm.participant.intermediary.comm.ParticipantDeregisterAckListener;
+import org.onap.policy.clamp.acm.participant.intermediary.comm.ParticipantMessagePublisher;
+import org.onap.policy.clamp.acm.participant.intermediary.comm.ParticipantRegisterAckListener;
+import org.onap.policy.clamp.acm.participant.intermediary.comm.ParticipantUpdateListener;
+import org.onap.policy.clamp.acm.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.acm.participant.policy.main.utils.TestListenerUtils;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregisterAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegisterAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantUpdate;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantUpdateAck;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
@@ -169,6 +169,6 @@ class ParticipantMessagesTest {
     }
 
     private ToscaConceptIdentifier getParticipantType() {
-        return new ToscaConceptIdentifier("org.onap.policy.controlloop.PolicyControlLoopParticipant", "2.3.1");
+        return new ToscaConceptIdentifier("org.onap.policy.acm.PolicyAutomationCompositionParticipant", "2.3.1");
     }
 }
diff --git a/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/acm/participant/policy/main/handler/AutomationCompositionElementHandlerTest.java b/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/acm/participant/policy/main/handler/AutomationCompositionElementHandlerTest.java
new file mode 100644 (file)
index 0000000..0d114db
--- /dev/null
@@ -0,0 +1,102 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.participant.policy.main.handler;
+
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.mockito.Mockito.when;
+
+import java.util.UUID;
+import org.junit.jupiter.api.Test;
+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.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.models.base.PfModelException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+
+class AutomationCompositionElementHandlerTest {
+
+    private static final String ID_NAME = "org.onap.PM_CDS_Blueprint";
+    private static final String ID_VERSION = "1.0.1";
+    private static final UUID automationCompositionElementId = UUID.randomUUID();
+    private static final ToscaConceptIdentifier automationCompositionId =
+        new ToscaConceptIdentifier(ID_NAME, ID_VERSION);
+
+    @Test
+    void testHandlerExceptions() {
+        AutomationCompositionElementHandler handler = getTestingHandler();
+
+        assertDoesNotThrow(() -> handler
+            .automationCompositionElementStateChange(automationCompositionId,
+                automationCompositionElementId,
+                AutomationCompositionState.UNINITIALISED,
+                AutomationCompositionOrderedState.PASSIVE));
+
+        assertDoesNotThrow(() -> handler
+            .automationCompositionElementStateChange(automationCompositionId,
+                automationCompositionElementId,
+                AutomationCompositionState.RUNNING,
+                AutomationCompositionOrderedState.UNINITIALISED));
+
+        assertDoesNotThrow(() -> handler
+            .automationCompositionElementStateChange(automationCompositionId,
+                automationCompositionElementId,
+                AutomationCompositionState.PASSIVE,
+                AutomationCompositionOrderedState.RUNNING));
+        var element = getTestingAcElement();
+        var acElementDefinition = Mockito.mock(ToscaNodeTemplate.class);
+
+        assertDoesNotThrow(() -> handler
+            .automationCompositionElementUpdate(automationCompositionId, element, acElementDefinition));
+
+        assertDoesNotThrow(() -> handler
+            .handleStatistics(automationCompositionElementId));
+    }
+
+    AutomationCompositionElementHandler getTestingHandler() {
+        var api = Mockito.mock(PolicyApiHttpClient.class);
+        var pap = Mockito.mock(PolicyPapHttpClient.class);
+        var handler = new AutomationCompositionElementHandler(api, pap);
+        var intermediaryApi = Mockito.mock(ParticipantIntermediaryApi.class);
+        var element = getTestingAcElement();
+        when(intermediaryApi.getAutomationCompositionElement(automationCompositionElementId)).thenReturn(element);
+        handler.setIntermediaryApi(intermediaryApi);
+        return handler;
+    }
+
+    AutomationCompositionElement getTestingAcElement() {
+        var element = new AutomationCompositionElement();
+        element.setDefinition(automationCompositionId);
+        element.setDescription("Description");
+        element.setId(automationCompositionElementId);
+        element.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+        element.setParticipantId(automationCompositionId);
+        element.setState(AutomationCompositionState.UNINITIALISED);
+        var template = Mockito.mock(ToscaServiceTemplate.class);
+        element.setToscaServiceTemplateFragment(template);
+        return element;
+    }
+}
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.policy.main.parameters;
+package org.onap.policy.clamp.acm.participant.policy.main.parameters;
 
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
+import org.onap.policy.clamp.acm.participant.policy.main.parameters.ParticipantPolicyParameters;
 import org.onap.policy.common.endpoints.parameters.TopicParameters;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
@@ -34,7 +35,7 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
  * Class to hold/create all parameters for test cases.
  */
 public class CommonTestData {
-    public static final String PARTICIPANT_GROUP_NAME = "ControlLoopParticipantGroup";
+    public static final String PARTICIPANT_GROUP_NAME = "AutomationCompositionParticipantGroup";
     public static final String DESCRIPTION = "Participant description";
     public static final long TIME_INTERVAL = 2000;
     public static final List<TopicParameters> TOPIC_PARAMS = Arrays.asList(getTopicParams());
@@ -123,7 +124,7 @@ public class CommonTestData {
             map.put("description", DESCRIPTION);
             map.put("participantId", getParticipantId());
             map.put("participantType", getParticipantId());
-            map.put("clampControlLoopTopics", getTopicParametersMap(false));
+            map.put("clampAutomationCompositionTopics", getTopicParametersMap(false));
         }
 
         return map;
@@ -151,7 +152,7 @@ public class CommonTestData {
      */
     public static TopicParameters getTopicParams() {
         final TopicParameters topicParams = new TopicParameters();
-        topicParams.setTopic("POLICY-CLRUNTIME-PARTICIPANT");
+        topicParams.setTopic("POLICY-ACRUNTIME-PARTICIPANT");
         topicParams.setTopicCommInfrastructure("dmaap");
         topicParams.setServers(Arrays.asList("localhost"));
         return topicParams;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.policy.main.parameters;
+package org.onap.policy.clamp.acm.participant.policy.main.parameters;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
 import javax.validation.Validation;
 import javax.validation.ValidatorFactory;
 import org.junit.jupiter.api.Test;
+import org.onap.policy.clamp.acm.participant.policy.main.parameters.ParticipantPolicyParameters;
 
 class ParticipantPolicyParametersTest {
-    private CommonTestData commonTestData = new CommonTestData();
-    private ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
+    private final CommonTestData commonTestData = new CommonTestData();
+    private final ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
 
     @Test
     void testParticipantPolicyParameters() {
@@ -39,14 +40,14 @@ class ParticipantPolicyParametersTest {
     @Test
     void testParticipantPolicyParameters_NullTopicSinks() {
         final ParticipantPolicyParameters participantParameters = commonTestData.getParticipantPolicyParameters();
-        participantParameters.getIntermediaryParameters().getClampControlLoopTopics().setTopicSinks(null);
+        participantParameters.getIntermediaryParameters().getClampAutomationCompositionTopics().setTopicSinks(null);
         assertThat(validatorFactory.getValidator().validate(participantParameters)).isNotEmpty();
     }
 
     @Test
     void testParticipantPolicyParameters_NullTopicSources() {
         final ParticipantPolicyParameters participantParameters = commonTestData.getParticipantPolicyParameters();
-        participantParameters.getIntermediaryParameters().getClampControlLoopTopics().setTopicSources(null);
+        participantParameters.getIntermediaryParameters().getClampAutomationCompositionTopics().setTopicSources(null);
         assertThat(validatorFactory.getValidator().validate(participantParameters)).isNotEmpty();
     }
 
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.policy.main.rest;
+package org.onap.policy.clamp.acm.participant.policy.main.rest;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -27,7 +27,7 @@ import javax.ws.rs.core.Response;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
-import org.onap.policy.clamp.controlloop.participant.policy.main.utils.CommonActuatorController;
+import org.onap.policy.clamp.acm.participant.policy.main.utils.CommonActuatorController;
 import org.springframework.boot.test.autoconfigure.actuate.metrics.AutoConfigureMetrics;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.http.utils;
+package org.onap.policy.clamp.acm.participant.policy.main.utils;
 
 import static org.junit.Assert.assertEquals;
 
@@ -40,7 +40,7 @@ import org.onap.policy.common.utils.network.NetworkUtil;
 public class CommonActuatorController {
 
     public static final String SELF = NetworkUtil.getHostname();
-    public static final String CONTEXT_PATH = "onap/httpparticipant";
+    public static final String CONTEXT_PATH = "onap/policy/clamp/acm/policyparticipant";
     public static final String ACTUATOR_ENDPOINT = CONTEXT_PATH + "/actuator/";
 
     private static String httpPrefix;
diff --git a/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/acm/participant/policy/main/utils/TestListenerUtils.java b/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/acm/participant/policy/main/utils/TestListenerUtils.java
new file mode 100644 (file)
index 0000000..a29831d
--- /dev/null
@@ -0,0 +1,321 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.participant.policy.main.utils;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.time.Instant;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+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.ParticipantDefinition;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantUpdates;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantUtils;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionStateChange;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionUpdate;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantUpdate;
+import org.onap.policy.clamp.models.acm.utils.AcmUtils;
+import org.onap.policy.common.utils.coder.Coder;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.common.utils.coder.StandardCoder;
+import org.onap.policy.common.utils.coder.YamlJsonTranslator;
+import org.onap.policy.common.utils.resources.ResourceUtils;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class TestListenerUtils {
+
+    private static final YamlJsonTranslator yamlTranslator = new YamlJsonTranslator();
+    private static final Coder CODER = new StandardCoder();
+    private static final Logger LOGGER = LoggerFactory.getLogger(TestListenerUtils.class);
+
+    /**
+     * Method to create a automationComposition from a yaml file.
+     *
+     * @return AutomationComposition automation composition
+     */
+    public static AutomationComposition createAutomationComposition() {
+        AutomationComposition automationComposition = new AutomationComposition();
+        Map<UUID, AutomationCompositionElement> elements = new LinkedHashMap<>();
+        ToscaServiceTemplate toscaServiceTemplate = testAutomationCompositionRead();
+        Map<String, ToscaNodeTemplate> nodeTemplatesMap =
+            toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates();
+        for (Map.Entry<String, ToscaNodeTemplate> toscaInputEntry : nodeTemplatesMap.entrySet()) {
+            AutomationCompositionElement acElement = new AutomationCompositionElement();
+            acElement.setId(UUID.randomUUID());
+
+            ToscaConceptIdentifier acElementParticipantId = new ToscaConceptIdentifier();
+            acElementParticipantId.setName(toscaInputEntry.getKey());
+            acElementParticipantId.setVersion(toscaInputEntry.getValue().getVersion());
+            acElement.setParticipantId(acElementParticipantId);
+
+            acElement.setDefinition(acElementParticipantId);
+            acElement.setState(AutomationCompositionState.UNINITIALISED);
+            acElement.setDescription(toscaInputEntry.getValue().getDescription());
+            acElement.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+            elements.put(acElement.getId(), acElement);
+        }
+        automationComposition.setElements(elements);
+        automationComposition.setName("PMSHInstance0");
+        automationComposition.setVersion("1.0.0");
+
+        ToscaConceptIdentifier definition = new ToscaConceptIdentifier();
+        definition.setName("PMSHInstance0");
+        definition.setVersion("1.0.0");
+        automationComposition.setDefinition(definition);
+
+        return automationComposition;
+    }
+
+    /**
+     * Method to create AutomationCompositionStateChange message from the arguments passed.
+     *
+     * @param automationCompositionOrderedState automationCompositionOrderedState
+     * @return AutomationCompositionStateChange message
+     */
+    public static AutomationCompositionStateChange createAutomationCompositionStateChangeMsg(
+        final AutomationCompositionOrderedState automationCompositionOrderedState) {
+        final AutomationCompositionStateChange acStateChangeMsg = new AutomationCompositionStateChange();
+
+        ToscaConceptIdentifier automationCompositionId = new ToscaConceptIdentifier();
+        automationCompositionId.setName("PMSHInstance0");
+        automationCompositionId.setVersion("1.0.0");
+
+        ToscaConceptIdentifier participantId = new ToscaConceptIdentifier();
+        participantId.setName("org.onap.PM_Policy");
+        participantId.setVersion("0.0.0");
+
+        acStateChangeMsg.setAutomationCompositionId(automationCompositionId);
+        acStateChangeMsg.setParticipantId(participantId);
+        acStateChangeMsg.setTimestamp(Instant.now());
+        acStateChangeMsg.setOrderedState(automationCompositionOrderedState);
+
+        return acStateChangeMsg;
+    }
+
+    /**
+     * Method to create AutomationCompositionUpdateMsg.
+     *
+     * @return AutomationCompositionUpdate message
+     */
+    public static AutomationCompositionUpdate createAutomationCompositionUpdateMsg() {
+        final AutomationCompositionUpdate acUpdateMsg = new AutomationCompositionUpdate();
+        ToscaConceptIdentifier automationCompositionId = new ToscaConceptIdentifier("PMSHInstance0", "1.0.0");
+        ToscaConceptIdentifier participantId = new ToscaConceptIdentifier("org.onap.PM_Policy", "0.0.0");
+
+        acUpdateMsg.setAutomationCompositionId(automationCompositionId);
+        acUpdateMsg.setParticipantId(participantId);
+        acUpdateMsg.setMessageId(UUID.randomUUID());
+        acUpdateMsg.setTimestamp(Instant.now());
+
+        Map<UUID, AutomationCompositionElement> elements = new LinkedHashMap<>();
+        ToscaServiceTemplate toscaServiceTemplate = testAutomationCompositionRead();
+        TestListenerUtils.addPoliciesToToscaServiceTemplate(toscaServiceTemplate);
+        Map<String, ToscaNodeTemplate> nodeTemplatesMap =
+            toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates();
+        for (Map.Entry<String, ToscaNodeTemplate> toscaInputEntry : nodeTemplatesMap.entrySet()) {
+            if (ParticipantUtils.checkIfNodeTemplateIsAutomationCompositionElement(toscaInputEntry.getValue(),
+                toscaServiceTemplate)) {
+                AutomationCompositionElement acElement = new AutomationCompositionElement();
+                acElement.setId(UUID.randomUUID());
+                var acParticipantType =
+                    ParticipantUtils.findParticipantType(toscaInputEntry.getValue().getProperties());
+
+                acElement.setParticipantId(acParticipantType);
+                acElement.setParticipantType(acParticipantType);
+
+                acElement.setDefinition(
+                    new ToscaConceptIdentifier(toscaInputEntry.getKey(), toscaInputEntry.getValue().getVersion()));
+                acElement.setState(AutomationCompositionState.UNINITIALISED);
+                acElement.setDescription(toscaInputEntry.getValue().getDescription());
+                acElement.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
+                elements.put(acElement.getId(), acElement);
+            }
+        }
+
+        List<ParticipantUpdates> participantUpdates = new ArrayList<>();
+        for (AutomationCompositionElement element : elements.values()) {
+            AcmUtils.setServiceTemplatePolicyInfo(element, toscaServiceTemplate);
+            AcmUtils.prepareParticipantUpdate(element, participantUpdates);
+        }
+        acUpdateMsg.setParticipantUpdatesList(participantUpdates);
+        return acUpdateMsg;
+    }
+
+    /**
+     * Method to create participantUpdateMsg.
+     *
+     * @return ParticipantUpdate message
+     */
+    public static ParticipantUpdate createParticipantUpdateMsg() {
+        final ParticipantUpdate participantUpdateMsg = new ParticipantUpdate();
+        ToscaConceptIdentifier participantId = new ToscaConceptIdentifier("org.onap.PM_Policy", "1.0.0");
+        ToscaConceptIdentifier participantType =
+            new ToscaConceptIdentifier("org.onap.policy.acm.PolicyAutomationCompositionParticipant", "2.3.1");
+
+        participantUpdateMsg.setParticipantId(participantId);
+        participantUpdateMsg.setTimestamp(Instant.now());
+        participantUpdateMsg.setParticipantType(participantType);
+        participantUpdateMsg.setTimestamp(Instant.ofEpochMilli(3000));
+        participantUpdateMsg.setMessageId(UUID.randomUUID());
+
+        ToscaServiceTemplate toscaServiceTemplate = testAutomationCompositionRead();
+        // Add policies to the toscaServiceTemplate
+        TestListenerUtils.addPoliciesToToscaServiceTemplate(toscaServiceTemplate);
+
+        List<ParticipantDefinition> participantDefinitionUpdates = new ArrayList<>();
+        for (Map.Entry<String, ToscaNodeTemplate> toscaInputEntry : toscaServiceTemplate.getToscaTopologyTemplate()
+            .getNodeTemplates().entrySet()) {
+            if (ParticipantUtils.checkIfNodeTemplateIsAutomationCompositionElement(toscaInputEntry.getValue(),
+                toscaServiceTemplate)) {
+                AcmUtils.prepareParticipantDefinitionUpdate(
+                    ParticipantUtils.findParticipantType(toscaInputEntry.getValue().getProperties()),
+                    toscaInputEntry.getKey(), toscaInputEntry.getValue(),
+                    participantDefinitionUpdates, null);
+            }
+        }
+
+        participantUpdateMsg.setParticipantDefinitionUpdates(participantDefinitionUpdates);
+        return participantUpdateMsg;
+    }
+
+    /**
+     * Method to create AutomationCompositionUpdate using the arguments passed.
+     *
+     * @param jsonFilePath the path of the automation composition content
+     * @return AutomationCompositionUpdate message
+     * @throws CoderException exception while reading the file to object
+     */
+    public static AutomationCompositionUpdate createParticipantAcUpdateMsgFromJson(String jsonFilePath)
+        throws CoderException {
+        AutomationCompositionUpdate automationCompositionUpdateMsg =
+            CODER.decode(new File(jsonFilePath), AutomationCompositionUpdate.class);
+        return automationCompositionUpdateMsg;
+    }
+
+    private static ToscaServiceTemplate testAutomationCompositionRead() {
+        Set<String> automationCompositionDirectoryContents =
+            ResourceUtils.getDirectoryContents("src/test/resources/utils/servicetemplates");
+
+        boolean atLeastOneAutomationCompositionTested = false;
+        ToscaServiceTemplate toscaServiceTemplate = null;
+
+        for (String automationCompositionFilePath : automationCompositionDirectoryContents) {
+            if (!automationCompositionFilePath.endsWith(".yaml")) {
+                continue;
+            }
+            atLeastOneAutomationCompositionTested = true;
+            toscaServiceTemplate = testAutomationCompositionYamlSerialization(automationCompositionFilePath);
+        }
+
+        // Add policy_types to the toscaServiceTemplate
+        addPolicyTypesToToscaServiceTemplate(toscaServiceTemplate);
+
+        assertTrue(atLeastOneAutomationCompositionTested);
+        return toscaServiceTemplate;
+    }
+
+    private static void addPolicyTypesToToscaServiceTemplate(ToscaServiceTemplate toscaServiceTemplate) {
+        Set<String> policyTypeDirectoryContents = ResourceUtils.getDirectoryContents("policytypes");
+
+        for (String policyTypeFilePath : policyTypeDirectoryContents) {
+            String policyTypeString = ResourceUtils.getResourceAsString(policyTypeFilePath);
+
+            ToscaServiceTemplate foundPolicyTypeSt =
+                yamlTranslator.fromYaml(policyTypeString, ToscaServiceTemplate.class);
+
+            toscaServiceTemplate.setDerivedFrom(foundPolicyTypeSt.getDerivedFrom());
+            toscaServiceTemplate.setDescription(foundPolicyTypeSt.getDescription());
+            toscaServiceTemplate.setMetadata(foundPolicyTypeSt.getMetadata());
+            toscaServiceTemplate.setName(foundPolicyTypeSt.getName());
+            toscaServiceTemplate.setToscaDefinitionsVersion(foundPolicyTypeSt.getToscaDefinitionsVersion());
+            toscaServiceTemplate.setVersion(foundPolicyTypeSt.getVersion());
+
+            if (foundPolicyTypeSt.getDataTypes() != null) {
+                if (toscaServiceTemplate.getDataTypes() == null) {
+                    toscaServiceTemplate.setDataTypes(foundPolicyTypeSt.getDataTypes());
+                } else {
+                    toscaServiceTemplate.getDataTypes().putAll(foundPolicyTypeSt.getDataTypes());
+                }
+            }
+
+            if (toscaServiceTemplate.getPolicyTypes() == null) {
+                toscaServiceTemplate.setPolicyTypes(foundPolicyTypeSt.getPolicyTypes());
+            } else {
+                toscaServiceTemplate.getPolicyTypes().putAll(foundPolicyTypeSt.getPolicyTypes());
+            }
+        }
+    }
+
+    /**
+     * Method to add polcies to the toscaServiceTemplate.
+     *
+     * @param toscaServiceTemplate to add policies
+     */
+    public static void addPoliciesToToscaServiceTemplate(ToscaServiceTemplate toscaServiceTemplate) {
+        Set<String> policiesDirectoryContents = ResourceUtils.getDirectoryContents("policies");
+
+        for (String policiesFilePath : policiesDirectoryContents) {
+            if (!policiesFilePath.endsWith("yaml")) {
+                continue;
+            }
+
+            String policiesString = ResourceUtils.getResourceAsString(policiesFilePath);
+
+            ToscaServiceTemplate foundPoliciesSt =
+                yamlTranslator.fromYaml(policiesString, ToscaServiceTemplate.class);
+            toscaServiceTemplate.getToscaTopologyTemplate()
+                .setPolicies(foundPoliciesSt.getToscaTopologyTemplate().getPolicies());
+        }
+    }
+
+    private static ToscaServiceTemplate testAutomationCompositionYamlSerialization(
+        String automationCompositionFilePath) {
+        try {
+            String automationCompositionString = ResourceUtils.getResourceAsString(automationCompositionFilePath);
+            if (automationCompositionString == null) {
+                throw new FileNotFoundException(automationCompositionFilePath);
+            }
+
+            ToscaServiceTemplate serviceTemplate =
+                yamlTranslator.fromYaml(automationCompositionString, ToscaServiceTemplate.class);
+            return serviceTemplate;
+        } catch (FileNotFoundException e) {
+            LOGGER.error("cannot find YAML file", automationCompositionFilePath);
+            throw new IllegalArgumentException(e);
+        }
+    }
+}
diff --git a/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/handler/ControlLoopElementHandlerTest.java b/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/handler/ControlLoopElementHandlerTest.java
deleted file mode 100644 (file)
index b5c5e19..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.participant.policy.main.handler;
-
-import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
-import static org.mockito.Mockito.when;
-
-import java.util.UUID;
-import org.junit.jupiter.api.Test;
-import org.mockito.Mockito;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi;
-import org.onap.policy.clamp.controlloop.participant.policy.client.PolicyApiHttpClient;
-import org.onap.policy.clamp.controlloop.participant.policy.client.PolicyPapHttpClient;
-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;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-
-class ControlLoopElementHandlerTest {
-
-    private static final String ID_NAME = "org.onap.PM_CDS_Blueprint";
-    private static final String ID_VERSION = "1.0.1";
-    private static final UUID controlLoopElementId = UUID.randomUUID();
-    private static final ToscaConceptIdentifier controlLoopId = new ToscaConceptIdentifier(ID_NAME, ID_VERSION);
-
-    @Test
-    void testHandlerExceptions() throws PfModelException {
-        ControlLoopElementHandler handler = getTestingHandler();
-
-        assertDoesNotThrow(() -> handler
-                .controlLoopElementStateChange(controlLoopId,
-                        controlLoopElementId,
-                        ControlLoopState.UNINITIALISED,
-                        ControlLoopOrderedState.PASSIVE));
-
-        assertDoesNotThrow(() -> handler
-                .controlLoopElementStateChange(controlLoopId,
-                        controlLoopElementId,
-                        ControlLoopState.RUNNING,
-                        ControlLoopOrderedState.UNINITIALISED));
-
-        assertDoesNotThrow(() -> handler
-                .controlLoopElementStateChange(controlLoopId,
-                        controlLoopElementId,
-                        ControlLoopState.PASSIVE,
-                        ControlLoopOrderedState.RUNNING));
-        var element = getTestingClElement();
-        var clElementDefinition = Mockito.mock(ToscaNodeTemplate.class);
-
-        assertDoesNotThrow(() -> handler
-                .controlLoopElementUpdate(controlLoopId, element, clElementDefinition));
-
-        assertDoesNotThrow(() -> handler
-                .handleStatistics(controlLoopElementId));
-    }
-
-    ControlLoopElementHandler getTestingHandler() {
-        var api = Mockito.mock(PolicyApiHttpClient.class);
-        var pap = Mockito.mock(PolicyPapHttpClient.class);
-        var handler = new ControlLoopElementHandler(api, pap);
-        var intermediaryApi = Mockito.mock(ParticipantIntermediaryApi.class);
-        var element = getTestingClElement();
-        when(intermediaryApi.getControlLoopElement(controlLoopElementId)).thenReturn(element);
-        handler.setIntermediaryApi(intermediaryApi);
-        return handler;
-    }
-
-    ControlLoopElement getTestingClElement() {
-        var element = new ControlLoopElement();
-        element.setDefinition(controlLoopId);
-        element.setDescription("Description");
-        element.setId(controlLoopElementId);
-        element.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
-        element.setParticipantId(controlLoopId);
-        element.setState(ControlLoopState.UNINITIALISED);
-        var template = Mockito.mock(ToscaServiceTemplate.class);
-        element.setToscaServiceTemplateFragment(template);
-        return element;
-    }
-
-}
diff --git a/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/utils/TestListenerUtils.java b/participant/participant-impl/participant-impl-policy/src/test/java/org/onap/policy/clamp/controlloop/participant/policy/main/utils/TestListenerUtils.java
deleted file mode 100644 (file)
index d517ef6..0000000
+++ /dev/null
@@ -1,317 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.participant.policy.main.utils;
-
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.time.Instant;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import org.onap.policy.clamp.controlloop.common.utils.CommonUtils;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantDefinition;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantUpdates;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantUtils;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopStateChange;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopUpdate;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdate;
-import org.onap.policy.clamp.controlloop.participant.policy.main.parameters.CommonTestData;
-import org.onap.policy.common.utils.coder.Coder;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.common.utils.coder.StandardCoder;
-import org.onap.policy.common.utils.coder.YamlJsonTranslator;
-import org.onap.policy.common.utils.resources.ResourceUtils;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class TestListenerUtils {
-
-    private static final YamlJsonTranslator yamlTranslator = new YamlJsonTranslator();
-    private static final Coder CODER = new StandardCoder();
-    static CommonTestData commonTestData = new CommonTestData();
-    private static final Logger LOGGER = LoggerFactory.getLogger(TestListenerUtils.class);
-
-    /**
-     * Method to create a controlLoop from a yaml file.
-     *
-     * @return ControlLoop controlloop
-     */
-    public static ControlLoop createControlLoop() {
-        ControlLoop controlLoop = new ControlLoop();
-        Map<UUID, ControlLoopElement> elements = new LinkedHashMap<>();
-        ToscaServiceTemplate toscaServiceTemplate = testControlLoopRead();
-        Map<String, ToscaNodeTemplate> nodeTemplatesMap =
-                toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates();
-        for (Map.Entry<String, ToscaNodeTemplate> toscaInputEntry : nodeTemplatesMap.entrySet()) {
-            ControlLoopElement clElement = new ControlLoopElement();
-            clElement.setId(UUID.randomUUID());
-
-            ToscaConceptIdentifier clElementParticipantId = new ToscaConceptIdentifier();
-            clElementParticipantId.setName(toscaInputEntry.getKey());
-            clElementParticipantId.setVersion(toscaInputEntry.getValue().getVersion());
-            clElement.setParticipantId(clElementParticipantId);
-
-            clElement.setDefinition(clElementParticipantId);
-            clElement.setState(ControlLoopState.UNINITIALISED);
-            clElement.setDescription(toscaInputEntry.getValue().getDescription());
-            clElement.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
-            elements.put(clElement.getId(), clElement);
-        }
-        controlLoop.setElements(elements);
-        controlLoop.setName("PMSHInstance0");
-        controlLoop.setVersion("1.0.0");
-
-        ToscaConceptIdentifier definition = new ToscaConceptIdentifier();
-        definition.setName("PMSHInstance0");
-        definition.setVersion("1.0.0");
-        controlLoop.setDefinition(definition);
-
-        return controlLoop;
-    }
-
-    /**
-     * Method to create ControlLoopStateChange message from the arguments passed.
-     *
-     * @param controlLoopOrderedState controlLoopOrderedState
-     *
-     * @return ControlLoopStateChange message
-     */
-    public static ControlLoopStateChange createControlLoopStateChangeMsg(
-            final ControlLoopOrderedState controlLoopOrderedState) {
-        final ControlLoopStateChange clStateChangeMsg = new ControlLoopStateChange();
-
-        ToscaConceptIdentifier controlLoopId = new ToscaConceptIdentifier();
-        controlLoopId.setName("PMSHInstance0");
-        controlLoopId.setVersion("1.0.0");
-
-        ToscaConceptIdentifier participantId = new ToscaConceptIdentifier();
-        participantId.setName("org.onap.PM_Policy");
-        participantId.setVersion("0.0.0");
-
-        clStateChangeMsg.setControlLoopId(controlLoopId);
-        clStateChangeMsg.setParticipantId(participantId);
-        clStateChangeMsg.setTimestamp(Instant.now());
-        clStateChangeMsg.setOrderedState(controlLoopOrderedState);
-
-        return clStateChangeMsg;
-    }
-
-    /**
-     * Method to create ControlLoopUpdateMsg.
-     *
-     * @return ControlLoopUpdate message
-     */
-    public static ControlLoopUpdate createControlLoopUpdateMsg() {
-        final ControlLoopUpdate clUpdateMsg = new ControlLoopUpdate();
-        ToscaConceptIdentifier controlLoopId = new ToscaConceptIdentifier("PMSHInstance0", "1.0.0");
-        ToscaConceptIdentifier participantId = new ToscaConceptIdentifier("org.onap.PM_Policy", "0.0.0");
-
-        clUpdateMsg.setControlLoopId(controlLoopId);
-        clUpdateMsg.setParticipantId(participantId);
-        clUpdateMsg.setMessageId(UUID.randomUUID());
-        clUpdateMsg.setTimestamp(Instant.now());
-
-        Map<UUID, ControlLoopElement> elements = new LinkedHashMap<>();
-        ToscaServiceTemplate toscaServiceTemplate = testControlLoopRead();
-        TestListenerUtils.addPoliciesToToscaServiceTemplate(toscaServiceTemplate);
-        Map<String, ToscaNodeTemplate> nodeTemplatesMap =
-                toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates();
-        for (Map.Entry<String, ToscaNodeTemplate> toscaInputEntry : nodeTemplatesMap.entrySet()) {
-            if (ParticipantUtils.checkIfNodeTemplateIsControlLoopElement(toscaInputEntry.getValue(),
-                    toscaServiceTemplate)) {
-                ControlLoopElement clElement = new ControlLoopElement();
-                clElement.setId(UUID.randomUUID());
-                var clParticipantType =
-                        ParticipantUtils.findParticipantType(toscaInputEntry.getValue().getProperties());
-
-                clElement.setParticipantId(clParticipantType);
-                clElement.setParticipantType(clParticipantType);
-
-                clElement.setDefinition(
-                        new ToscaConceptIdentifier(toscaInputEntry.getKey(), toscaInputEntry.getValue().getVersion()));
-                clElement.setState(ControlLoopState.UNINITIALISED);
-                clElement.setDescription(toscaInputEntry.getValue().getDescription());
-                clElement.setOrderedState(ControlLoopOrderedState.PASSIVE);
-                elements.put(clElement.getId(), clElement);
-            }
-        }
-
-        List<ParticipantUpdates> participantUpdates = new ArrayList<>();
-        for (ControlLoopElement element : elements.values()) {
-            CommonUtils.setServiceTemplatePolicyInfo(element, toscaServiceTemplate);
-            CommonUtils.prepareParticipantUpdate(element, participantUpdates);
-        }
-        clUpdateMsg.setParticipantUpdatesList(participantUpdates);
-        return clUpdateMsg;
-    }
-
-    /**
-     * Method to create participantUpdateMsg.
-     *
-     * @return ParticipantUpdate message
-     */
-    public static ParticipantUpdate createParticipantUpdateMsg() {
-        final ParticipantUpdate participantUpdateMsg = new ParticipantUpdate();
-        ToscaConceptIdentifier participantId = new ToscaConceptIdentifier("org.onap.PM_Policy", "1.0.0");
-        ToscaConceptIdentifier participantType =
-                new ToscaConceptIdentifier("org.onap.policy.controlloop.PolicyControlLoopParticipant", "2.3.1");
-
-        participantUpdateMsg.setParticipantId(participantId);
-        participantUpdateMsg.setTimestamp(Instant.now());
-        participantUpdateMsg.setParticipantType(participantType);
-        participantUpdateMsg.setTimestamp(Instant.ofEpochMilli(3000));
-        participantUpdateMsg.setMessageId(UUID.randomUUID());
-
-        ToscaServiceTemplate toscaServiceTemplate = testControlLoopRead();
-        // Add policies to the toscaServiceTemplate
-        TestListenerUtils.addPoliciesToToscaServiceTemplate(toscaServiceTemplate);
-
-        List<ParticipantDefinition> participantDefinitionUpdates = new ArrayList<>();
-        for (Map.Entry<String, ToscaNodeTemplate> toscaInputEntry : toscaServiceTemplate.getToscaTopologyTemplate()
-                .getNodeTemplates().entrySet()) {
-            if (ParticipantUtils.checkIfNodeTemplateIsControlLoopElement(toscaInputEntry.getValue(),
-                    toscaServiceTemplate)) {
-                CommonUtils.prepareParticipantDefinitionUpdate(
-                        ParticipantUtils.findParticipantType(toscaInputEntry.getValue().getProperties()),
-                        toscaInputEntry.getKey(), toscaInputEntry.getValue(),
-                        participantDefinitionUpdates, null);
-            }
-        }
-
-        participantUpdateMsg.setParticipantDefinitionUpdates(participantDefinitionUpdates);
-        return participantUpdateMsg;
-    }
-
-    /**
-     * Method to create ControlLoopUpdate using the arguments passed.
-     *
-     * @param jsonFilePath the path of the controlloop content
-     *
-     * @return ControlLoopUpdate message
-     * @throws CoderException exception while reading the file to object
-     */
-    public static ControlLoopUpdate createParticipantClUpdateMsgFromJson(String jsonFilePath) throws CoderException {
-        ControlLoopUpdate controlLoopUpdateMsg = CODER.decode(new File(jsonFilePath), ControlLoopUpdate.class);
-        return controlLoopUpdateMsg;
-    }
-
-    private static ToscaServiceTemplate testControlLoopRead() {
-        Set<String> controlLoopDirectoryContents =
-                ResourceUtils.getDirectoryContents("src/test/resources/utils/servicetemplates");
-
-        boolean atLeastOneControlLoopTested = false;
-        ToscaServiceTemplate toscaServiceTemplate = null;
-
-        for (String controlLoopFilePath : controlLoopDirectoryContents) {
-            if (!controlLoopFilePath.endsWith(".yaml")) {
-                continue;
-            }
-            atLeastOneControlLoopTested = true;
-            toscaServiceTemplate = testControlLoopYamlSerialization(controlLoopFilePath);
-        }
-
-        // Add policy_types to the toscaServiceTemplate
-        addPolicyTypesToToscaServiceTemplate(toscaServiceTemplate);
-
-        assertTrue(atLeastOneControlLoopTested);
-        return toscaServiceTemplate;
-    }
-
-    private static void addPolicyTypesToToscaServiceTemplate(ToscaServiceTemplate toscaServiceTemplate) {
-        Set<String> policyTypeDirectoryContents = ResourceUtils.getDirectoryContents("policytypes");
-
-        for (String policyTypeFilePath : policyTypeDirectoryContents) {
-            String policyTypeString = ResourceUtils.getResourceAsString(policyTypeFilePath);
-
-            ToscaServiceTemplate foundPolicyTypeSt =
-                    yamlTranslator.fromYaml(policyTypeString, ToscaServiceTemplate.class);
-
-            toscaServiceTemplate.setDerivedFrom(foundPolicyTypeSt.getDerivedFrom());
-            toscaServiceTemplate.setDescription(foundPolicyTypeSt.getDescription());
-            toscaServiceTemplate.setMetadata(foundPolicyTypeSt.getMetadata());
-            toscaServiceTemplate.setName(foundPolicyTypeSt.getName());
-            toscaServiceTemplate.setToscaDefinitionsVersion(foundPolicyTypeSt.getToscaDefinitionsVersion());
-            toscaServiceTemplate.setVersion(foundPolicyTypeSt.getVersion());
-
-            if (foundPolicyTypeSt.getDataTypes() != null) {
-                if (toscaServiceTemplate.getDataTypes() == null) {
-                    toscaServiceTemplate.setDataTypes(foundPolicyTypeSt.getDataTypes());
-                } else {
-                    toscaServiceTemplate.getDataTypes().putAll(foundPolicyTypeSt.getDataTypes());
-                }
-            }
-
-            if (toscaServiceTemplate.getPolicyTypes() == null) {
-                toscaServiceTemplate.setPolicyTypes(foundPolicyTypeSt.getPolicyTypes());
-            } else {
-                toscaServiceTemplate.getPolicyTypes().putAll(foundPolicyTypeSt.getPolicyTypes());
-            }
-        }
-    }
-
-    /**
-     * Method to add polcies to the toscaServiceTemplate.
-     *
-     * @param toscaServiceTemplate to add policies
-     */
-    public static void addPoliciesToToscaServiceTemplate(ToscaServiceTemplate toscaServiceTemplate) {
-        Set<String> policiesDirectoryContents = ResourceUtils.getDirectoryContents("policies");
-
-        for (String policiesFilePath : policiesDirectoryContents) {
-            String policiesString = ResourceUtils.getResourceAsString(policiesFilePath);
-
-            ToscaServiceTemplate foundPoliciesSt = yamlTranslator.fromYaml(policiesString, ToscaServiceTemplate.class);
-            toscaServiceTemplate.getToscaTopologyTemplate()
-                    .setPolicies(foundPoliciesSt.getToscaTopologyTemplate().getPolicies());
-        }
-    }
-
-    private static ToscaServiceTemplate testControlLoopYamlSerialization(String controlLoopFilePath) {
-        try {
-            String controlLoopString = ResourceUtils.getResourceAsString(controlLoopFilePath);
-            if (controlLoopString == null) {
-                throw new FileNotFoundException(controlLoopFilePath);
-            }
-
-            ToscaServiceTemplate serviceTemplate =
-                    yamlTranslator.fromYaml(controlLoopString, ToscaServiceTemplate.class);
-            return serviceTemplate;
-        } catch (FileNotFoundException e) {
-            LOGGER.error("cannot find YAML file", controlLoopFilePath);
-            throw new IllegalArgumentException(e);
-        }
-    }
-}
index 4978140..932d9f2 100644 (file)
@@ -1,6 +1,6 @@
 spring.security.user.name=participantUser
 spring.security.user.password=zb!XztG34
-server.servlet.context-path=/onap/policyparticipant
+server.servlet.context-path=/onap/policy/clamp/acm/policyparticipant
 server.error.path=/error
 server.http-port=8085
 
@@ -15,14 +15,14 @@ participant.intermediaryParameters.reportingTimeInterval: 120000
 participant.intermediaryParameters.description: Participant Description
 participant.intermediaryParameters.participantId.name: org.onap.PM_Policy
 participant.intermediaryParameters.participantId.version: 1.0.0
-participant.intermediaryParameters.participantType.name: org.onap.policy.controlloop.PolicyControlLoopParticipant
+participant.intermediaryParameters.participantType.name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
 participant.intermediaryParameters.participantType.version: 2.3.1
-participant.intermediaryParameters.clampControlLoopTopics.name=ControlLoop Topics
-participant.intermediaryParameters.clampControlLoopTopics.topicSources[0].topic=POLICY-CLRUNTIME-PARTICIPANT
-participant.intermediaryParameters.clampControlLoopTopics.topicSources[0].servers[0]=localhost
-participant.intermediaryParameters.clampControlLoopTopics.topicSources[0].topicCommInfrastructure=dmaap
-participant.intermediaryParameters.clampControlLoopTopics.topicSources[0].fetchTimeout=15000
-participant.intermediaryParameters.clampControlLoopTopics.topicSinks[0].topic=POLICY-CLRUNTIME-PARTICIPANT
-participant.intermediaryParameters.clampControlLoopTopics.topicSinks[0].servers[0]=localhost
-participant.intermediaryParameters.clampControlLoopTopics.topicSinks[0].topicCommInfrastructure=dmaap
+participant.intermediaryParameters.clampAutomationCompositionTopics.name=Automation Composition Topics
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSources[0].topic=POLICY-ACRUNTIME-PARTICIPANT
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSources[0].servers[0]=localhost
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSources[0].topicCommInfrastructure=dmaap
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSources[0].fetchTimeout=15000
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSinks[0].topic=POLICY-ACRUNTIME-PARTICIPANT
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSinks[0].servers[0]=localhost
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSinks[0].topicCommInfrastructure=dmaap
 management.endpoints.web.exposure.include=health,metrics,prometheus
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/parameters/TestACParams.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/parameters/TestACParams.yaml
new file mode 100644 (file)
index 0000000..3e5782c
--- /dev/null
@@ -0,0 +1,172 @@
+tosca_definitions_version: "tosca_simple_yaml_1_3"
+data_types:
+  onap.datatypes.ToscaConceptIdentifier:
+    derived_from: tosca.datatypes.Root
+    properties:
+      name:
+        type: string
+        required: true
+      version:
+        type: string
+        required: true
+node_types:
+  org.onap.policy.clamp.acm.Participant:
+    version: 1.0.1
+    derived_from: tosca.nodetypes.Root
+    properties:
+      provider:
+        type: string
+        requred: false
+  org.onap.policy.clamp.acm.AutomationCompositionElement:
+    version: 1.0.1
+    derived_from: tosca.nodetypes.Root
+    properties:
+      provider:
+        type: string
+        requred: false
+      participantType:
+        type: onap.datatypes.ToscaConceptIdentifier
+        requred: true
+      startPhase:
+        type: integer
+        required: false
+        constraints:
+          - greater-or-equal: 0
+        metadata:
+          common: true
+        description: A value indicating the start phase in which this automation composition element will be started,
+          the first start phase is zero. Automation Composition Elements are started in their start_phase
+          order and stopped in reverse start phase order. Automation Composition Elements with the same start phase are
+          started and stopped simultaneously
+  org.onap.policy.clamp.acm.AutomationComposition:
+    version: 1.0.1
+    derived_from: tosca.nodetypes.Root
+    properties:
+      provider:
+        type: string
+        requred: false
+      elements:
+        type: list
+        required: true
+        entry_schema:
+          type: onap.datatypes.ToscaConceptIdentifier
+  org.onap.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElement:
+    version: 1.0.1
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
+    properties:
+      dcae_blueprint_id:
+        type: onap.datatypes.ToscaConceptIdentifier
+        requred: true
+  org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement:
+    version: 1.0.1
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
+    properties:
+      policy_type_id:
+        type: onap.datatypes.ToscaConceptIdentifier
+        requred: true
+  org.onap.policy.clamp.acm.CDSAutomationCompositionElement:
+    version: 1.0.1
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
+    properties:
+      cds_blueprint_id:
+        type: onap.datatypes.ToscaConceptIdentifier
+        requred: true
+topology_template:
+  node_templates:
+    org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant:
+      version: 2.3.4
+      type: org.onap.policy.clamp.acm.Participant
+      type_version: 1.0.1
+      description: Participant for DCAE microservices
+      properties:
+        provider: ONAP
+    org.onap.policy.acm.MonitoringPolicyAutomationCompositionParticipant:
+      version: 2.3.1
+      type: org.onap.policy.clamp.acm.Participant
+      type_version: 1.0.1
+      description: Participant for DCAE microservices
+      properties:
+        provider: ONAP
+    org.onap.policy.acm.OperationalPolicyAutomationCompositionParticipant:
+      version: 3.2.1
+      type: org.onap.policy.clamp.acm.Participant
+      type_version: 1.0.1
+      description: Participant for DCAE microservices
+      properties:
+        provider: ONAP
+    org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant:
+      version: 2.2.1
+      type: org.onap.policy.clamp.acm.Participant
+      type_version: 1.0.1
+      description: Participant for DCAE microservices
+      properties:
+        provider: ONAP
+    org.onap.domain.pmsh.PMSH_DCAEMicroservice:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element, DCAE microservice for Performance Management Subscription Handling
+      properties:
+        provider: Ericsson
+        participantType:
+          name: org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant
+          version: 2.3.4
+        dcae_blueprint_id:
+          name: org.onap.dcae.blueprints.PMSHBlueprint
+          version: 1.0.0
+    org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element, monitoring policy for Performance Management Subscription Handling
+      properties:
+        provider: Ericsson
+        participantType:
+          name: org.onap.policy.acm.MonitoringPolicyAutomationCompositionParticipant
+          version: 2.3.1
+        policy_type_id:
+          name: onap.policies.monitoring.pm-subscription-handler
+          version: 1.0.0
+    org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element, operational policy for Performance Management Subscription Handling
+      properties:
+        provider: Ericsson
+        participantType:
+          name: org.onap.policy.acm.OperationalPolicyAutomationCompositionParticipant
+          version: 2.2.1
+        policy_type_id:
+          name: onap.policies.operational.pm-subscription-handler
+          version: 1.0.0
+    org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.AutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element for CDS for Performance Management Subscription Handling
+      properties:
+        provider: Ericsson
+        participantType:
+          name: org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant
+          version: 3.2.1
+        cds_blueprint_id:
+          name: org.onap.ccsdk.cds.PMSHCdsBlueprint
+          version: 1.0.0
+    org.onap.domain.pmsh.PMSHAutomationCompositionDefinition:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.AutomationComposition
+      type_version: 1.0.0
+      description: Automation composition for Performance Management Subscription Handling
+      properties:
+        provider: Ericsson
+        elements:
+          - name: org.onap.domain.pmsh.PMSH_DCAEMicroservice
+            version: 1.2.3
+          - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement
+            version: 1.2.3
+          - name: org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement
+            version: 1.2.3
+          - name: org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement
+            version: 1.2.3
+
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/parameters/TestCLParams.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/parameters/TestCLParams.yaml
deleted file mode 100644 (file)
index 2ef3c6d..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-tosca_definitions_version: "tosca_simple_yaml_1_3"
-data_types:
-  onap.datatypes.ToscaConceptIdentifier:
-    derived_from: tosca.datatypes.Root
-    properties:
-      name:
-        type: string
-        required: true
-      version:
-        type: string
-        required: true
-node_types:
-  org.onap.policy.clamp.controlloop.Participant:
-    version: 1.0.1
-    derived_from: tosca.nodetypes.Root
-    properties:
-      provider:
-        type: string
-        requred: false
-  org.onap.policy.clamp.controlloop.ControlLoopElement:
-    version: 1.0.1
-    derived_from: tosca.nodetypes.Root
-    properties:
-      provider:
-        type: string
-        requred: false
-      participantType:
-        type: onap.datatypes.ToscaConceptIdentifier
-        requred: true
-      startPhase:
-        type: integer
-        required: false
-        constraints:
-        - greater-or-equal: 0
-        metadata:
-            common: true
-        description: A value indicating the start phase in which this control loop element will be started, the
-                     first start phase is zero. Control Loop Elements are started in their start_phase order and stopped
-                     in reverse start phase order. Control Loop Elements with the same start phase are started and
-                     stopped simultaneously
-  org.onap.policy.clamp.controlloop.ControlLoop:
-    version: 1.0.1
-    derived_from: tosca.nodetypes.Root
-    properties:
-      provider:
-        type: string
-        requred: false
-      elements:
-        type: list
-        required: true
-        entry_schema:
-          type: onap.datatypes.ToscaConceptIdentifier
-  org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement:
-    version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
-    properties:
-      dcae_blueprint_id:
-        type: onap.datatypes.ToscaConceptIdentifier
-        requred: true
-  org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement:
-    version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
-    properties:
-      policy_type_id:
-        type: onap.datatypes.ToscaConceptIdentifier
-        requred: true
-  org.onap.policy.clamp.controlloop.CDSControlLoopElement:
-    version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
-    properties:
-      cds_blueprint_id:
-        type: onap.datatypes.ToscaConceptIdentifier
-        requred: true
-topology_template:
-  node_templates:
-    org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant:
-      version: 2.3.4
-      type: org.onap.policy.clamp.controlloop.Participant
-      type_version: 1.0.1
-      description: Participant for DCAE microservices
-      properties:
-        provider: ONAP
-    org.onap.policy.controlloop.MonitoringPolicyControlLoopParticipant:
-      version: 2.3.1
-      type: org.onap.policy.clamp.controlloop.Participant
-      type_version: 1.0.1
-      description: Participant for DCAE microservices
-      properties:
-        provider: ONAP
-    org.onap.policy.controlloop.OperationalPolicyControlLoopParticipant:
-      version: 3.2.1
-      type: org.onap.policy.clamp.controlloop.Participant
-      type_version: 1.0.1
-      description: Participant for DCAE microservices
-      properties:
-        provider: ONAP
-    org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant:
-      version: 2.2.1
-      type: org.onap.policy.clamp.controlloop.Participant
-      type_version: 1.0.1
-      description: Participant for DCAE microservices
-      properties:
-        provider: ONAP
-    org.onap.domain.pmsh.PMSH_DCAEMicroservice:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement
-      type_version: 1.0.0
-      description: Control loop element for the DCAE microservice for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant
-          version: 2.3.4
-        dcae_blueprint_id:
-          name: org.onap.dcae.blueprints.PMSHBlueprint
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement
-      type_version: 1.0.0
-      description: Control loop element for the monitoring policy for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.policy.controlloop.MonitoringPolicyControlLoopParticipant
-          version: 2.3.1
-        policy_type_id:
-          name: onap.policies.monitoring.pm-subscription-handler
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement
-      type_version: 1.0.0
-      description: Control loop element for the operational policy for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.policy.controlloop.OperationalPolicyControlLoopParticipant
-          version: 2.2.1
-        policy_type_id:
-          name: onap.policies.operational.pm-subscription-handler
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoopElement
-      type_version: 1.0.0
-      description: Control loop element for CDS for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant
-          version: 3.2.1
-        cds_blueprint_id:
-          name: org.onap.ccsdk.cds.PMSHCdsBlueprint
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSHControlLoopDefinition:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoop
-      type_version: 1.0.0
-      description: Control loop for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        elements:
-        - name: org.onap.domain.pmsh.PMSH_DCAEMicroservice
-          version: 1.2.3
-        - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement
-          version: 1.2.3
-        - name: org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement
-          version: 1.2.3
-        - name: org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement
-          version: 1.2.3
-
index cf6b89e..0f1d28b 100644 (file)
@@ -36,7 +36,7 @@
         <appender-ref ref="STDOUT" />
     </root>
 
-    <logger name="org.onap.policy.clamp.controlloop.participant" level="trace" additivity="false">
+    <logger name="org.onap.policy.clamp.acm.participant" level="trace" additivity="false">
         <appender-ref ref="STDOUT" />
     </logger>
 </configuration>
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policies/vCPE.policies.optimization.input.tosca.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policies/vCPE.policies.optimization.input.tosca.yaml
deleted file mode 100644 (file)
index 126e8e6..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-topology_template:
-  policies:
-    -
-        OSDF_CASABLANCA.Affinity_Default:
-            type: onap.policies.optimization.resource.AffinityPolicy
-            version: 1.0.0
-            type_version: 1.0.0
-            name: OSDF_CASABLANCA.Affinity_Default
-            metadata:
-                policy-id: OSDF_CASABLANCA.Affinity_Default
-                policy-version: 1
-            properties:
-                scope: []
-                services: []
-                resources: []
-                geography: []
-                identity: affinity_vCPE
-                applicableResources: any
-                affinityProperties:
-                    qualifier: same
-                    category: complex
-    -
-        OSDF_CASABLANCA.Affinity_Default_US:
-            type: onap.policies.optimization.resource.AffinityPolicy
-            version: 1.0.0
-            type_version: 1.0.0
-            name: OSDF_CASABLANCA.Affinity_Default_US
-            metadata:
-                policy-id: OSDF_CASABLANCA.Affinity_Default_US
-                policy-version: 1
-            properties:
-                scope: []
-                services: []
-                resources: []
-                geography: [US]
-                identity: affinity_vCPE
-                applicableResources: any
-                affinityProperties:
-                    qualifier: same
-                    category: complex
-    -
-        OSDF_CASABLANCA.Affinity_Default_vCPE_US_0:
-            type: onap.policies.optimization.resource.AffinityPolicy
-            version: 1.0.0
-            type_version: 1.0.0
-            name: OSDF_CASABLANCA.Affinity_Default_vCPE_US_0
-            metadata:
-                policy-id: OSDF_CASABLANCA.Affinity_Default_vCPE_US_0
-                policy-version: 1
-            properties:
-                scope: []
-                services: [vCPE]
-                resources: []
-                geography: [US]
-                identity: affinity_vCPE
-                applicableResources: any
-                affinityProperties:
-                    qualifier: different
-                    category: complex
-    -
-        OSDF_CASABLANCA.Affinity_vCPE_US_Gold_1:
-            type: onap.policies.optimization.resource.AffinityPolicy
-            version: 1.0.0
-            type_version: 1.0.0
-            name: OSDF_CASABLANCA.Affinity_vCPE_US_Gold_1
-            metadata:
-                policy-id: OSDF_CASABLANCA.Affinity_vCPE_1
-                policy-version: 1
-            properties:
-                scope: [gold]
-                services: [vCPE]
-                resources: [vGMuxInfra, vG]
-                geography: [US, INTERNATIONAL]
-                identity: affinity_vCPE
-                applicableResources: any
-                affinityProperties:
-                    qualifier: same
-                    category: availabilityZone
-    -
-        OSDF_CASABLANCA.Affinity_vCPE_US_Platinum_1:
-            type: onap.policies.optimization.resource.AffinityPolicy
-            version: 1.0.0
-            type_version: 1.0.0
-            name: OSDF_CASABLANCA.Affinity_vCPE_US_Platinum_1
-            metadata:
-                policy-id: OSDF_CASABLANCA.Affinity_vCPE_1
-                policy-version: 1
-            properties:
-                scope: [platinum]
-                services: [vCPE]
-                resources: [vGMuxInfra, vG]
-                geography: [US, INTERNATIONAL]
-                identity: affinity_vCPE
-                applicableResources: any
-                affinityProperties:
-                    qualifier: different
-                    category: availabilityZone
-    -
-        OSDF_CASABLANCA.Capacity_vG_1:
-            type: onap.policies.optimization.resource.Vim_fit
-            version: 1.0.0
-            type_version: 1.0.0
-            name: OSDF_CASABLANCA.Capacity_vG_1
-            metadata:
-                policy-id: OSDF_CASABLANCA.Capacity_vG_1
-                policy-version: 1
-            properties:
-                scope: []
-                services: [vCPE]
-                resources: [vG]
-                geography: [US, INTERNATIONAL]
-                identity: capacity_vG
-                applicableResources: any
-                capacityProperty:
-                   controller: multicloud
-                   request: "{\"vCPU\": 10, \"Memory\": {\"quantity\": {\"get_param\": \"REQUIRED_MEM\"}, \"unit\": \"GB\"}, \"Storage\": {\"quantity\": {\"get_param\": \"REQUIRED_DISK\"}, \"unit\": \"GB\"}}"
-    -
-        OSDF_CASABLANCA.Capacity_vG_2:
-            type: onap.policies.optimization.resource.Vim_fit
-            version: 1.0.0
-            type_version: 1.0.0
-            name: OSDF_CASABLANCA.Capacity_vG_2
-            metadata:
-                policy-id: OSDF_CASABLANCA.Capacity_vG_2
-                policy-version: 1
-            properties:
-                scope: []
-                services: [vCPE]
-                resources: [vG]
-                geography: [US, INTERNATIONAL]
-                identity: capacity_vG
-                applicableResources: any
-                capacityProperty:
-                   controller: multicloud
-                   request: "{\"vCPU\": 15, \"Memory\": {\"quantity\": {\"get_param\": \"REQUIRED_MEM\"}, \"unit\": \"MB\"}, \"Storage\": {\"quantity\": {\"get_param\": \"REQUIRED_DISK\"}, \"unit\": \"GB\"}}"
-    -
-        OSDF_CASABLANCA.Distance_vG_1:
-            type: onap.policies.optimization.resource.DistancePolicy
-            version: 1.0.0
-            type_version: 1.0.0
-            name: OSDF_CASABLANCA.Distance_vG_1
-            metadata:
-                policy-id: OSDF_CASABLANCA.Distance_vG_1
-                policy-version: 1
-            properties:
-                scope: [platinum]
-                services: [vCPE]
-                resources: [vG]
-                geography: [US, INTERNATIONAL]
-                identity: distance-vG
-                applicableResources: any
-                distanceProperties:
-                    locationInfo: customer_loc
-                    distance:
-                        value: 1500
-                        operator: "<"
-                        unit: km
-    -
-        OSDF_CASABLANCA.hpa_policy_Default:
-            type: onap.policies.optimization.resource.HpaPolicy
-            version: 1.0.0
-            type_version: 1.0.0
-            name: OSDF_CASABLANCA.hpa_policy_Default
-            metadata:
-                policy-id: OSDF_CASABLANCA.hpa_policy_Default
-                policy-version: 1
-            properties:
-                scope: []
-                services: []
-                resources: []
-                geography: []
-                identity: hpa-vG
-                flavorFeatures:
-                    -
-                         id: vg_1
-                         type: vnfc
-                         directives:
-                             -    type: flavor_directives
-                                  attributes:
-                                      -    attribute_name: flavor_label_vm_01
-                                           attribute_value: ""
-                         flavorProperties:
-                             -
-                                  hpa-feature: basicCapabilities
-                                  mandatory: True
-                                  architecture: generic
-                                  directives: []
-                                  hpa-feature-attributes:
-                                      -    hpa-attribute-key: numVirtualCpu
-                                           hpa-attribute-value: 8
-                                           operator: ['>=']
-                                           unit: ""
-                                      -    hpa-attribute-key: virtualMemSize
-                                           hpa-attribute-value: 6
-                                           operator: ['<=']
-                                           unit: ""
-                             -
-                                  hpa-feature: ovsDpdk
-                                  mandatory: False
-                                  architecture: generic
-                                  directives: []
-                                  hpa-feature-attributes:
-                                      -    hpa-attribute-key: dataProcessingAccelerationLibrary
-                                           hpa-attribute-value: ovsDpdk_version
-                                           operator: [=]
-                                           unit: ""
-    -
-        OSDF_CASABLANCA.hpa_policy_vG_1:
-            type: onap.policies.optimization.resource.HpaPolicy
-            version: 1.0.0
-            type_version: 1.0.0
-            name: OSDF_CASABLANCA.hpa_policy_vG_1
-            metadata:
-                policy-id: OSDF_CASABLANCA.hpa_policy_vG_1
-                policy-version: 1
-            properties:
-                scope: []
-                services: [vCPE, vOtherService]
-                resources: [vG]
-                geography: []
-                identity: hpa-vG
-                flavorFeatures:
-                    -
-                         id: vg_1
-                         type: vnfc
-                         directives:
-                             -    type: flavor_directives
-                                  attributes:
-                                      -    attribute_name: flavor_label_vm_01
-                                           attribute_value: ""
-                         flavorProperties:
-                             -
-                                  hpa-feature: basicCapabilities
-                                  mandatory: True
-                                  architecture: generic
-                                  directives: []
-                                  hpa-feature-attributes:
-                                      -    hpa-attribute-key: numVirtualCpu
-                                           hpa-attribute-value: 6
-                                           operator: ['>=']
-                                           unit: ""
-                                      -    hpa-attribute-key: virtualMemSize
-                                           hpa-attribute-value: 4
-                                           operator: ['<=']
-                                           unit: ""
-                             -
-                                  hpa-feature: ovsDpdk
-                                  mandatory: False
-                                  architecture: generic
-                                  directives: []
-                                  hpa-feature-attributes:
-                                      -    hpa-attribute-key: dataProcessingAccelerationLibrary
-                                           hpa-attribute-value: ovsDpdk_version
-                                           operator: [=]
-                                           unit: ""
-    -
-        OSDF_CASABLANCA.queryPolicy_vCPE:
-            type: onap.policies.optimization.service.QueryPolicy
-            version: 1.0.0
-            type_version: 1.0.0
-            name: OSDF_CASABLANCA.queryPolicy_vCPE
-            metadata:
-                policy-id: OSDF_CASABLANCA.queryPolicy_vCPE
-                policy-version: 1
-            properties:
-                scope: []
-                services: [vCPE]
-                geography: [US, INTERNATIONAL]
-                identity: vCPE_Query_Policy
-                queryProperties:
-                    -
-                        attribute: locationId
-                        attribute_location: customerLocation
-                        value: ""
-                    -
-                        attribute: id
-                        attribute_location: "vpnInfo.vpnId"
-                        value: ""
-                    -
-                        attribute: upstreamBW
-                        attribute_location: "vpnInfo.upstreamBW"
-                        value: ""
-                    -
-                        attribute: customerLatitude
-                        attribute_location: customerLatitude
-                        value: 1.1
-                    - 
-                        attribute: customerLongitude
-                        attribute_location: customerLongitude
-                        value: 2.2
-    -
-        OSDF_CASABLANCA.SubscriberPolicy_v1:
-            type: onap.policies.optimization.service.SubscriberPolicy
-            version: 1.0.0
-            type_version: 1.0.0
-            name: OSDF_CASABLANCA.SubscriberPolicy_v1
-            metadata:
-                policy-id: OSDF_CASABLANCA.SubscriberPolicy_v1
-                policy-version: 1
-            properties:
-                scope: []
-                services: [vCPE]
-                identity: subscriber_vCPE
-                subscriberProperties:
-                    subscriberName: [subscriber_x, subscriber_y]
-                    subscriberRole: [platinum]
-                    provStatus: [CAPPED]
-    -
-        OSDF_CASABLANCA.SubscriberPolicy_v2:
-            type: onap.policies.optimization.service.SubscriberPolicy
-            version: 1.0.0
-            type_version: 1.0.0
-            name: OSDF_CASABLANCA.SubscriberPolicy_v2
-            metadata:
-                policy-id: OSDF_CASABLANCA.SubscriberPolicy_v2
-                policy-version: 1
-            properties:
-                scope: []
-                services: [vCPE]
-                identity: subscriber_vCPE
-                subscriberProperties:
-                    subscriberName: [subscriber_a, subscriber_b]
-                    subscriberRole: [gold]
-                    provStatus: [CAPPED]
-    -
-        OSDF_CASABLANCA.vnfPolicy_vG:
-            type: onap.policies.optimization.resource.VnfPolicy
-            version: 1.0.0
-            type_version: 1.0.0
-            name: OSDF_CASABLANCA.vnfPolicy_vG
-            metadata:
-                policy-id: OSDF_CASABLANCA.vnfPolicy_vG
-                policy-version: 1
-            properties:
-                scope: []
-                services: [vCPE]
-                resources: [vG]
-                geography: [US, INTERNATIONAL]
-                identity: vnf_vG
-                applicableResources: any
-                vnfProperties:
-                    -
-                        inventoryProvider: aai
-                        serviceType: ""
-                        inventoryType: cloudRegionId
-                        customerId: ""
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.Match.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.Match.yaml
deleted file mode 100644 (file)
index 88b8705..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-    onap.policies.Match:
-        derived_from: tosca.policies.Root
-        version: 1.0.0
-        name: onap.policies.Match
-        description: Base Policy Type for matchable Policies
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.Naming.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.Naming.yaml
deleted file mode 100644 (file)
index bde730c..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-    onap.policies.Naming:
-        derived_from: tosca.policies.Root
-        version: 1.0.0
-        name: onap.policies.Naming
-        description: Virtual policy node for naming
-        properties:
-            policy-instance-name:
-                type: string
-            naming-models:
-                type: list
-                entry_schema:
-                    type: policy.data.naming-model-entity
-data_types:
-    policy.data.naming-model-entity:
-        derived_from: tosca.datatypes.Root
-        properties:
-            nfRole:
-                type: string
-                required: false
-                metadata:
-                    matchable: true
-            naming-type:
-                type: string
-                required: true
-                metadata:
-                    matchable: true
-            naming-recipe:
-                type: string
-                required: true
-            name-operation:
-                type: string
-                required: false
-            naming-properties:
-                type: list
-                required: true
-                entry_schema:
-                    type: policy.data.naming-property
-    policy.data.naming-property:
-        derived_from: tosca.datatypes.Root
-        properties:
-            property-name:
-                type: string
-                required: true
-                metadata:
-                    matchable: true
-            property-value:
-                type: string
-                required: false
-            property-operation:
-                type: string
-                required: false
-            source-system:
-                type: string
-                required: false
-            source-endpoint:
-                type: string
-                required: false
-            increment-sequence:
-                type: policy.data.increment-sequence
-                required: false
-    policy.data.increment-sequence:
-        derived_from: tosca.datatypes.Root
-        properties:
-            scope:
-                type: list
-                required: true
-                entry_schema:
-                    type: string
-                    constraints:
-                    -   valid_values:
-                        - CLOUD_REGION_ID
-                        - LOCATION_CLLI
-                        - VNF
-                        - VM
-                        - VFMODULE
-                        - PRECEEDING
-                        - TRAILING
-                        - ENTIRETY
-            sequence-type:
-                type: string
-                require: true
-                entry_schema:
-                    type: string
-                    constraints:
-                    -   valid_values:
-                        - numeric
-                        - alpha-numeric
-            start-value:
-                type: string
-                required: true
-            max:
-                type: string
-                required: false
-            increment:
-                type: string
-                required: true
-            length:
-                type: string
-                required: true
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.Optimization.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.Optimization.yaml
deleted file mode 100644 (file)
index 7fe0e59..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-   onap.policies.Optimization:
-      derived_from: tosca.policies.Root
-      version: 1.0.0
-      name: onap.policies.Optimization
-      description: The base policy type for all policies that govern optimization
-      properties:
-         scope:
-            description: Scope for the policy - could be for a specific release.
-            type: list
-            metadata:
-               matchable: true
-            required: true
-            entry_schema:
-               type: string
-         geography:
-            description: One or more geographic regions
-            type: list
-            metadata:
-               matchable: true
-            required: true
-            entry_schema:
-               type: string
-               constraints:
-               -  valid_values:
-                  - US
-                  - International
-         identity:
-            description: Used internally for identification
-            type: string
-            required: true
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.guard.Common.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.guard.Common.yaml
deleted file mode 100644 (file)
index 3dc9792..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-    onap.policies.controlloop.guard.Common:
-        derived_from: tosca.policies.Root
-        version: 1.0.0
-        name: onap.policies.controlloop.guard.Common
-        description: |
-            This is the base Policy Type for Guard policies that guard the execution of Operational
-            Policies.
-        properties:
-            actor:
-                type: string
-                description: Specifies the Actor the guard applies to.
-                required: true
-            operation:
-                type: string
-                description: Specified the operation that the actor is performing the guard applies to.
-                required: true
-            timeRange:
-                type: tosca.datatypes.TimeInterval
-                description: |
-                    An optional range of time during the day the guard policy is valid for.
-                required: false
-            id:
-                type: string
-                description: The Control Loop id this applies to.
-                required: false
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.guard.common.Blacklist.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.guard.common.Blacklist.yaml
deleted file mode 100644 (file)
index f2b67e1..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-    onap.policies.controlloop.guard.common.Blacklist:
-        derived_from: onap.policies.controlloop.guard.Common
-        type_version: 1.0.0
-        version: 1.0.0
-        name: onap.policies.controlloop.guard.common.Blacklist
-        description: Supports blacklist of entity id's from performing control loop actions on.
-        properties:
-            blacklist:
-                type: list
-                description: List of entity id's not allowed to have control loop operations on.
-                required: true
-                entry_schema:
-                    type: string
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.guard.common.Filter.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.guard.common.Filter.yaml
deleted file mode 100644 (file)
index ea8e92a..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-   onap.policies.controlloop.guard.common.Filter:
-      derived_from: onap.policies.controlloop.guard.Common
-      type_version: 1.0.0
-      version: 1.0.0
-      name: onap.policies.controlloop.guard.common.Filter
-      description: Supports filtering of A&AI entities such as vnf-id, type, service, geographic region, etc.
-      properties:
-         algorithm:
-            type: string
-            description: Designates the precendence of blacklist vs whitelist
-            required: true
-            default: blacklist-overrides
-            constraints:
-            - valid_values: ["blacklist-overrides", "whitelist-overrides"]
-         filters:
-            type: list
-            description: List of filters to be applied.
-            required: true
-            entry_schema:
-               type: onap.datatypes.guard.filter
-data_types:
-   onap.datatypes.guard.filter:
-      derived_from: tosca.nodes.Root
-      properties:
-         field:
-            type: string
-            description: Name of the field to perform the filter on using the A&AI <node>.<property> syntax.
-            required: true
-            constraints:
-               - valid_values:
-                  - generic-vnf.vnf-name
-                  - generic-vnf.vnf-id
-                  - generic-vnf.vnf-type
-                  - generic-vnf.nf-naming-code
-                  - vserver.vserver-id
-                  - cloud-region.cloud-region-id
-         filter:
-            type: string
-            description: The filter value itself. For example, "RegionOne" "vFWCL*"
-            required: true
-         function:
-            type: string
-            description: The function applied to the filter.
-            required: true
-            constraints:
-               - valid_values:
-                  - string-equal
-                  - string-equal-ignore-case
-                  - string-regexp-match
-                  - string-contains
-                  - string-greater-than
-                  - string-greater-than-or-equal
-                  - string-less-than
-                  - string-less-than-or-equal
-                  - string-starts-with
-                  - string-ends-with
-         blacklist:
-            type: boolean
-            description: |
-               Indicates if the filter should be treated as a blacklist (true)
-               or whitelist (false).
-            required: true
-            default: true
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.guard.common.FrequencyLimiter.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.guard.common.FrequencyLimiter.yaml
deleted file mode 100644 (file)
index 3e31ec2..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-    onap.policies.controlloop.guard.common.FrequencyLimiter:
-        derived_from: onap.policies.controlloop.guard.Common
-        type_version: 1.0.0
-        version: 1.0.0
-        name: onap.policies.controlloop.guard.common.FrequencyLimiter
-        description: Supports limiting the frequency of actions being taken by a Actor.
-        properties:
-            timeWindow:
-                type: integer
-                description: The time window to count the actions against.
-                required: true
-            timeUnits:
-                type: string
-                description: The units of time the window is counting.
-                required: true
-                constraints:
-                - valid_values: ["second", "minute", "hour", "day", "week", "month", "year"]
-            limit:
-                type: integer
-                description: The limit
-                required: true
-                constraints:
-                -   greater_than: 0
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.guard.common.MinMax.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.guard.common.MinMax.yaml
deleted file mode 100644 (file)
index 8f93572..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-    onap.policies.controlloop.guard.common.MinMax:
-        derived_from: onap.policies.controlloop.guard.Common
-        type_version: 1.0.0
-        version: 1.0.0
-        name: onap.policies.controlloop.guard.common.MinMax
-        description: |
-            Supports Min/Max number of entity for scaling operations. Although min and max fields are marked as not
-            required, you need to have at least one or the other.
-        properties:
-            target:
-                type: string
-                required: true
-                description: The target entity that has scaling restricted
-            min:
-                type: integer
-                required: false
-                description: The minimum instances of this entity
-            max:
-                type: integer
-                required: false
-                description: The maximum instances of this entity
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.guard.coordination.FirstBlocksSecond.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.guard.coordination.FirstBlocksSecond.yaml
deleted file mode 100644 (file)
index eaeee60..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-   onap.policies.controlloop.Guard:
-      derived_from: tosca.policies.Root
-      version: 1.0.0
-      name: onap.policies.controlloop.Guard
-      description: Guard Policies for Control Loop Operational Policies
-   onap.policies.controlloop.guard.Coordination:
-      derived_from: onap.policies.controlloop.Guard
-      version: 1.0.0
-      name: onap.policies.controlloop.guard.Coordination
-      description: Guard Policies for Control Loop Coordination
-   onap.policies.controlloop.guard.coordination.FirstBlocksSecond:
-      derived_from: onap.policies.controlloop.guard.Coordination
-      version: 1.0.0
-      name: onap.policies.controlloop.guard.coordination.FirstBlocksSecond
-      description: Supports one Control Loop blocking another
-      properties:
-         controlLoop:
-            type: list
-            description: Specific Control Loops to which to apply this guard
-            required: true
-            constraint:
-               length: 2
-            entry_schema:
-               type: string
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.operational.Common.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.operational.Common.yaml
deleted file mode 100644 (file)
index 9b3b057..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-    onap.policies.controlloop.operational.Common:
-        derived_from: tosca.policies.Root
-        version: 1.0.0
-        name: onap.policies.controlloop.operational.Common
-        description: |
-            Operational Policy for Control Loop execution. Originated in Frankfurt to support TOSCA Compliant
-            Policy Types. This does NOT support the legacy Policy YAML policy type.
-        properties:
-            id:
-                type: string
-                description: The unique control loop id.
-                required: true
-            timeout:
-                type: integer
-                description: |
-                    Overall timeout for executing all the operations. This timeout should equal or exceed the total
-                    timeout for each operation listed.
-                required: true
-            abatement:
-                type: boolean
-                description: Whether an abatement event message will be expected for the control loop from DCAE.
-                required: true
-                default: false
-            trigger:
-                type: string
-                description: Initial operation to execute upon receiving an Onset event message for the Control Loop.
-                required: true
-            operations:
-                type: list
-                description: List of operations to be performed when Control Loop is triggered.
-                required: true
-                entry_schema:
-                    type: onap.datatype.controlloop.Operation
-
-data_types:
-    onap.datatype.controlloop.Target:
-        derived_from: tosca.datatypes.Root
-        description: Definition for a entity in A&AI to perform a control loop operation on
-        properties:
-            targetType:
-                type: string
-                description: Category for the target type
-                required: true
-                constraints:
-                - valid_values: [VNF, VM, VFMODULE, PNF]
-            entityIds:
-                type: map
-                description: |
-                    Map of values that identify the resource. If none are provided, it is assumed that the
-                    entity that generated the ONSET event will be the target.
-                required: false
-                metadata:
-                    clamp_possible_values: ClampExecution:CSAR_RESOURCES
-                entry_schema:
-                    type: string
-
-    onap.datatype.controlloop.Actor:
-        derived_from: tosca.datatypes.Root
-        description: An actor/operation/target definition
-        properties:
-            actor:
-                type: string
-                description: The actor performing the operation.
-                required: true
-                metadata:
-                    clamp_possible_values: Dictionary:DefaultActors,ClampExecution:CDS/actor
-            operation:
-                type: string
-                description: The operation the actor is performing.
-                metadata:
-                    clamp_possible_values: Dictionary:DefaultOperations,ClampExecution:CDS/operation
-                required: true
-            target:
-                type: onap.datatype.controlloop.Target
-                description: The resource the operation should be performed on.
-                required: true
-            payload:
-                type: map
-                description: Name/value pairs of payload information passed by Policy to the actor
-                required: false
-                metadata:
-                    clamp_possible_values: ClampExecution:CDS/payload
-                entry_schema:
-                    type: string
-
-    onap.datatype.controlloop.Operation:
-        derived_from: tosca.datatypes.Root
-        description: An operation supported by an actor
-        properties:
-            id:
-                type: string
-                description: Unique identifier for the operation
-                required: true
-            description:
-                type: string
-                description: A user-friendly description of the intent for the operation
-                required: false
-            operation:
-                type: onap.datatype.controlloop.Actor
-                description: The definition of the operation to be performed.
-                required: true
-            timeout:
-                type: integer
-                description: The amount of time for the actor to perform the operation.
-                required: true
-            retries:
-                type: integer
-                description: The number of retries the actor should attempt to perform the operation.
-                required: true
-                default: 0
-            success:
-                type: string
-                description: Points to the operation to invoke on success. A value of "final_success" indicates and end to the operation.
-                required: false
-                default: final_success
-            failure:
-                type: string
-                description: Points to the operation to invoke on Actor operation failure.
-                required: false
-                default: final_failure
-            failure_timeout:
-                type: string
-                description: Points to the operation to invoke when the time out for the operation occurs.
-                required: false
-                default: final_failure_timeout
-            failure_retries:
-                type: string
-                description: Points to the operation to invoke when the current operation has exceeded its max retries.
-                required: false
-                default: final_failure_retries
-            failure_exception:
-                type: string
-                description: Points to the operation to invoke when the current operation causes an exception.
-                required: false
-                default: final_failure_exception
-            failure_guard:
-                type: string
-                description: Points to the operation to invoke when the current operation is blocked due to guard policy enforcement.
-                required: false
-                default: final_failure_guard
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.operational.common.Apex.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.operational.common.Apex.yaml
deleted file mode 100644 (file)
index a0c5b24..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-    onap.policies.controlloop.operational.common.Apex:
-        derived_from: onap.policies.controlloop.operational.Common
-        type_version: 1.0.0
-        version: 1.0.0
-        name: onap.policies.controlloop.operational.common.Apex
-        description: Operational policies for Apex PDP
-        properties:
-            engineServiceParameters:
-                type: string
-                description: The engine parameters like name, instanceCount, policy implementation, parameters etc.
-                required: true
-            eventInputParameters:
-                type: string
-                description: The event input parameters.
-                required: true
-            eventOutputParameters:
-                type: string
-                description: The event output parameters.
-                required: true
-            javaProperties:
-                type: string
-                description: Name/value pairs of properties to be set for APEX if needed.
-                required: false
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.operational.common.Drools.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.controlloop.operational.common.Drools.yaml
deleted file mode 100644 (file)
index 69d73db..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-    onap.policies.controlloop.operational.common.Drools:
-        derived_from: onap.policies.controlloop.operational.Common
-        type_version: 1.0.0
-        version: 1.0.0
-        name: onap.policies.controlloop.operational.common.Drools
-        description: Operational policies for Drools PDP
-        properties:
-            controllerName:
-                type: string
-                description: Drools controller properties
-                required: false
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.monitoring.dcae-pm-mapper.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.monitoring.dcae-pm-mapper.yaml
deleted file mode 100644 (file)
index c50392e..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-   onap.policies.Monitoring:
-      derived_from: tosca.policies.Root
-      version: 1.0.0
-      name: onap.policies.Monitoring
-      description: a base policy type for all policies that govern monitoring provisioning
-   onap.policies.monitoring.dcae-pm-mapper:
-      derived_from: onap.policies.Monitoring
-      version: 1.0.0
-      properties:
-         pm-mapper-filter:
-            type: map
-            description: PM mapper filter on measInfo, measInfoId, measType, instanceId
-            entry_schema:
-               type: onap.datatypes.monitoring.pm-mapper-filter
-data_types:
-   onap.datatypes.monitoring.pm-mapper-filter:
-      derived_from: tosca.datatypes.Root
-      properties:
-         filters:
-            type: list
-            description: Filter configuration
-            #default: []
-            required: true
-            entry_schema:
-               type: onap.datatypes.monitoring.filters
-   onap.datatypes.monitoring.filters:
-      derived_from: tosca.datatypes.Root
-      properties:
-         pmDefVsn:
-            type: string
-            description: PM Dictionary version
-            required: true
-         nfType:
-            type: string
-            description: NF type
-            required: true
-         vendor:
-            type: string
-            description: Vendor name
-            required: true
-         measTypes:
-            type: list
-            description: Measurement types to collect
-            #default: []
-            required: true
-            entry_schema:
-               type: string
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.monitoring.dcae-pm-subscription-handler.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.monitoring.dcae-pm-subscription-handler.yaml
deleted file mode 100644 (file)
index 8ac9b74..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-   onap.policies.Monitoring:
-      derived_from: tosca.policies.Root
-      version: 1.0.0
-      name: onap.policies.Monitoring
-      description: a base policy type for all policies that govern monitoring provisioning
-   onap.policies.monitoring.dcae-pm-subscription-handler:
-      derived_from: onap.policies.Monitoring
-      version: 1.0.0
-      properties:
-         subscription:
-            type: map
-            description: PM Subscription Handler Subscription
-            entry_schema:
-               type: onap.datatypes.monitoring.subscription
-data_types:
-   onap.datatypes.monitoring.subscription:
-      derived_from: tosca.datatypes.Root
-      properties:
-         subscriptionName:
-            type: string
-            description: Name of the subscription
-            required: true
-         administrativeState:
-            type: string
-            description: State of the subscription
-            required: true
-            constraints:
-            -  valid_values:
-               - LOCKED
-               - UNLOCKED
-         fileBasedGP:
-            type: integer
-            description: File based granularity period
-            required: true
-         fileLocation:
-            type: string
-            description: ROP file location
-            required: true
-         nfTypeModelInvariantId:
-            type: string
-            description: Network function invariant ID
-            required: true
-         nfFilter:
-            type: map
-            description: Network function filter
-            required: true
-            entry_schema:
-               type: onap.datatypes.monitoring.nfFilter
-         measurementGroups:
-            type: list
-            description: Measurement Groups
-            required: true
-            entry_schema:
-               type: onap.datatypes.monitoring.measurementGroups
-   onap.datatypes.monitoring.nfFilter:
-      derived_from: tosca.datatypes.Root
-      properties:
-         nfNames:
-            type: list
-            description: List of network functions
-            required: true
-            #default: []
-            entry_schema:
-               type: string
-         swVersions:
-            type: list
-            description: List of software versions
-            required: true
-            #default: []
-            entry_schema:
-               type: string
-   onap.datatypes.monitoring.measurementGroups:
-      derived_from: tosca.datatypes.Root
-      properties:
-         measurementGroup:
-            type: map
-            description: Measurement Group
-            required: true
-            entry_schema:
-               type: onap.datatypes.monitoring.measurementGroup
-   onap.datatypes.monitoring.measurementGroup:
-      derived_from: tosca.datatypes.Root
-      properties:
-         measurementTypes:
-            type: list
-            description: List of measurement types
-            required: true
-            #default: []
-            entry_schema:
-               type: onap.datatypes.monitoring.measurementTypes
-         managedObjectDNsBasic:
-            type: list
-            description: List of managed object distinguished names
-            required: true
-            #default: []
-            entry_schema:
-               type: onap.datatypes.monitoring.managedObjectDNsBasics
-   onap.datatypes.monitoring.measurementTypes:
-      derived_from: tosca.datatypes.Root
-      properties:
-         measurementType:
-            type: map
-            description: Measurement type object
-            required: true
-            entry_schema:
-               type: onap.datatypes.monitoring.measurementType
-   onap.datatypes.monitoring.measurementType:
-      derived_from: tosca.datatypes.Root
-      properties:
-         measurementType:
-            type: string
-            description: Measurement type
-            required: true
-   onap.datatypes.monitoring.managedObjectDNsBasics:
-      derived_from: tosca.datatypes.Root
-      properties:
-         managedObjectDNsBasic:
-            type: map
-            description: Managed object distinguished name object
-            required: true
-            entry_schema:
-               type: onap.datatypes.monitoring.managedObjectDNsBasic
-   onap.datatypes.monitoring.managedObjectDNsBasic:
-      derived_from: tosca.datatypes.Root
-      properties:
-         DN:
-            type: string
-            description: Managed object distinguished name
-            required: true
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.monitoring.dcae-restconfcollector.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.monitoring.dcae-restconfcollector.yaml
deleted file mode 100644 (file)
index 58e60e9..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-   onap.policies.Monitoring:
-      derived_from: tosca.policies.Root
-      version: 1.0.0
-      name: onap.policies.Monitoring
-      description: a base policy type for all policies that govern monitoring provisioning
-   onap.policies.monitoring.dcae-restconfcollector:
-      derived_from: onap.policies.Monitoring
-      version: 1.0.0
-      properties:
-         rcc_policy:
-            type: list
-            description: RCC Policy JSON
-            entry_schema:
-               type: onap.datatypes.monitoring.rcc_policy
-data_types:
-   onap.datatypes.monitoring.rcc_policy:
-      derived_from: tosca.datatypes.Root
-      properties:
-         controller_name:
-            type: string
-            description: Name of controller
-            required: true
-         controller_restapiUrl:
-            type: string
-            description: Controller's ip and port
-            required: true
-         controller_restapiUser:
-            type: string
-            description: Controller's username
-            required: true
-         controller_restapiPassword:
-            type: string
-            description: Controller's password
-            required: true
-         controller_accessTokenUrl:
-            type: string
-            description: URL to get access token
-            required: true
-         controller_accessTokenFile:
-            type: string
-            description: Access token file path
-            required: true
-         controller_accessTokenMethod:
-            type: string
-            description: Access token method POST/GET/PUT etc
-            required: true
-            constraints:
-            -  valid_values:
-               - post
-               - get
-               - put
-         controller_subsMethod:
-            type: string
-            description: Subscription method POST/GET/PUT etc
-            required: true
-            default: post
-            constraints:
-            -  valid_values:
-               - post
-               - get
-               - put
-         controller_subscriptionUrl:
-            type: string
-            description: URL to establish subscription
-            required: true
-         controller_disableSsl:
-            type: boolean
-            description: Option to disable ssl
-            required: true
-            default: true
-         event_details:
-            type: list
-            description: event details
-            required: true
-            entry_schema:
-               type: onap.datatypes.monitoring.rcc_event_details
-   onap.datatypes.monitoring.rcc_event_details:
-      derived_from: tosca.datatypes.Root
-      properties:
-         event_name:
-            type: string
-            description: event name
-            required: true
-         event_description:
-            type: string
-            description: description of event
-            required: false
-         event_sseventUrlEmbed:
-            type: boolean
-            description: Whether SSE url is embedded in subscription response
-            required: true
-            default: true
-         event_sseventsField:
-            type: string
-            description: Field name to access SSE url in subscription response
-            required: true
-         event_sseventsUrl:
-            type: string
-            description: Explicit SSE url
-            required: true
-         event_subscriptionTemplate:
-            type: string
-            description: Subscription template file path
-            required: true
-         event_unSubscriptionTemplate:
-            type: string
-            description: Unsubscription template file path
-            required: false
-         event_ruleId:
-            type: integer
-            description: Rule Id
-            required: false
-         modifyData:
-            type: boolean
-            description: Whether to modify the received SSE event
-            required: true
-            default: false
-         modifyMethod:
-            type: string
-            description: The java method name to modify data
-            required: false
-         userData:
-            type: string
-            description: The user specific data
-            required: false
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml
deleted file mode 100644 (file)
index 408e8cd..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-   onap.policies.Monitoring:
-      derived_from: tosca.policies.Root
-      description: a base policy type for all policies that govern monitoring provisioning
-      version: 1.0.0
-      name: onap.policies.Monitoring
-   onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server:
-      derived_from: onap.policies.Monitoring
-      version: 1.0.0
-      name: onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server
-      properties:
-         buscontroller_feed_publishing_endpoint:
-            type: string
-            description: DMAAP Bus Controller feed endpoint
-         datafile.policy:
-            type: string
-            description: datafile Policy JSON as string
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.monitoring.tcagen2.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.monitoring.tcagen2.yaml
deleted file mode 100644 (file)
index 04026b3..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-   onap.policies.Monitoring:
-      derived_from: tosca.policies.Root
-      version: 1.0.0
-      name: onap.policies.Monitoring
-      description: a base policy type for all policies that govern monitoring provisioning
-   onap.policies.monitoring.tcagen2:
-      derived_from: onap.policies.Monitoring
-      version: 1.0.0
-      name: onap.policies.monitoring.tcagen2
-      properties:
-         tca.policy:
-            type: onap.datatypes.monitoring.tca_policy
-            description: TCA Policy JSON
-            required: true
-data_types:
-   onap.datatypes.monitoring.metricsPerEventName:
-      derived_from: tosca.datatypes.Root
-      properties:
-         controlLoopSchemaType:
-            type: string
-            required: true
-            description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM
-            constraints:
-            -  valid_values:
-               - VM
-               - VNF
-         eventName:
-            type: string
-            required: true
-            description: Event name to which thresholds need to be applied
-         policyName:
-            type: string
-            required: true
-            description: TCA Policy Scope Name
-         policyScope:
-            type: string
-            required: true
-            description: TCA Policy Scope
-         policyVersion:
-            type: string
-            required: true
-            description: TCA Policy Scope Version
-         thresholds:
-            type: list
-            required: true
-            description: Thresholds associated with eventName
-            entry_schema:
-               type: onap.datatypes.monitoring.thresholds
-   onap.datatypes.monitoring.tca_policy:
-      derived_from: tosca.datatypes.Root
-      properties:
-         domain:
-            type: string
-            required: true
-            description: Domain name to which TCA needs to be applied
-            default: measurementsForVfScaling
-            constraints:
-            -  equal: measurementsForVfScaling
-         metricsPerEventName:
-            type: list
-            required: true
-            description: Contains eventName and threshold details that need to be applied to given eventName
-            entry_schema:
-               type: onap.datatypes.monitoring.metricsPerEventName
-   onap.datatypes.monitoring.thresholds:
-      derived_from: tosca.datatypes.Root
-      properties:
-         closedLoopControlName:
-            type: string
-            required: true
-            description: Closed Loop Control Name associated with the threshold
-         closedLoopEventStatus:
-            type: string
-            required: true
-            description: Closed Loop Event Status of the threshold
-            constraints:
-            -  valid_values:
-               - ONSET
-               - ABATED
-         direction:
-            type: string
-            required: true
-            description: Direction of the threshold
-            constraints:
-            -  valid_values:
-               - LESS
-               - LESS_OR_EQUAL
-               - GREATER
-               - GREATER_OR_EQUAL
-               - EQUAL
-         fieldPath:
-            type: string
-            required: true
-            description: Json field Path as per CEF message which needs to be analyzed for TCA
-            constraints:
-            -  valid_values:
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated
-               - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated
-               - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle
-               - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt
-               - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice
-               - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq
-               - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal
-               - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem
-               - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait
-               - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage
-               - $.event.measurementsForVfScalingFields.meanRequestLatency
-               - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered
-               - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached
-               - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured
-               - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree
-               - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed
-               - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value
-         severity:
-            type: string
-            required: true
-            description: Threshold Event Severity
-            constraints:
-            -  valid_values:
-               - CRITICAL
-               - MAJOR
-               - MINOR
-               - WARNING
-               - NORMAL
-         thresholdValue:
-            type: integer
-            required: true
-            description: Threshold value for the field Path inside CEF message
-         version:
-            type: string
-            required: true
-            description: Version number associated with the threshold
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.native.Apex.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.native.Apex.yaml
deleted file mode 100644 (file)
index d2a7632..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-    onap.policies.Native:
-        derived_from: tosca.policies.Root
-        description: a base policy type for all native PDP policies
-        version: 1.0.0
-        name: onap.policies.Native
-    onap.policies.native.Apex:
-        derived_from: onap.policies.Native
-        description: a policy type for native apex policies
-        version: 1.0.0
-        name: onap.policies.native.Apex
-        properties:
-            engine_service:
-                type: onap.datatypes.native.apex.EngineService
-                description: APEX Engine Service Parameters
-            inputs:
-                type: map
-                description: Inputs for handling events coming into the APEX engine
-                entry_schema:
-                    type: onap.datatypes.native.apex.EventHandler
-            outputs:
-                type: map
-                description: Outputs for handling events going out of the APEX engine
-                entry_schema:
-                    type: onap.datatypes.native.apex.EventHandler
-            environment:
-                type: list
-                description: Envioronmental parameters for the APEX engine
-                entry_schema:
-                    type: onap.datatypes.native.apex.Environment
-
-data_types:
-    onap.datatypes.native.apex.EngineService:
-        derived_from: tosca.datatypes.Root
-        properties:
-            name:
-                type: string
-                description: Specifies the engine name
-                required: false
-                default: "ApexEngineService"
-            version:
-                type: string
-                description: Specifies the engine version in double dotted format
-                required: false
-                default: "1.0.0"
-            id:
-                type: integer
-                description: Specifies the engine id
-                required: true
-            instance_count:
-                type: integer
-                description: Specifies the number of engine threads that should be run
-                required: true
-            deployment_port:
-                type: integer
-                description: Specifies the port to connect to for engine administration
-                required: false
-                default: 1
-            policy_model_file_name:
-                type: string
-                description: The name of the file from which to read the APEX policy model
-                required: false
-            policy_type_impl:
-                type: string
-                description: The policy type implementation from which to read the APEX policy model
-                required: false
-            periodic_event_period:
-                type: string
-                description: The time interval in milliseconds for the periodic scanning event, 0 means don't scan
-                required: false
-            engine:
-                type: onap.datatypes.native.apex.engineservice.Engine
-                description: The parameters for all engines in the APEX engine service
-                required: true
-    onap.datatypes.native.apex.EventHandler:
-        derived_from: tosca.datatypes.Root
-        properties:
-            name:
-                type: string
-                description: Specifies the event handler name, if not specified this is set to the key name
-                required: false
-            carrier_technology:
-                type: onap.datatypes.native.apex.CarrierTechnology
-                description: Specifies the carrier technology of the event handler (such as REST/Web Socket/Kafka)
-                required: true
-            event_protocol:
-                type: onap.datatypes.native.apex.EventProtocol
-                description: Specifies the event protocol of events for the event handler (such as Yaml/JSON/XML/POJO)
-                required: true
-            event_name:
-                type: string
-                description: Specifies the event name for events on this event handler, if not specified, the event name is read from or written to the event being received or sent
-                required: false
-            event_name_filter:
-                type: string
-                description: Specifies a filter as a regular expression, events that do not match the filter are dropped, the default is to let all events through
-                required: false
-            synchronous_mode:
-                type: boolean
-                description: Specifies the event handler is syncronous (receive event and send response)
-                required: false
-                default: false
-            synchronous_peer:
-                type: string
-                description: The peer event handler (output for input or input for output) of this event handler in synchronous mode, this parameter is mandatory if the event handler is in synchronous mode
-                required: false
-            synchronous_timeout:
-                type: integer
-                description: The timeout in milliseconds for responses to be issued by APEX torequests, this parameter is mandatory if the event handler is in synchronous mode
-                required: false
-            requestor_mode:
-                type: boolean
-                description: Specifies the event handler is in requestor mode (send event and wait for response mode)
-                required: false
-                default: false
-            requestor_peer:
-                type: string
-                description: The peer event handler (output for input or input for output) of this event handler in requestor mode, this parameter is mandatory if the event handler is in requestor mode
-                required: false
-            requestor_timeout:
-                type: integer
-                description: The timeout in milliseconds for wait for responses to requests, this parameter is mandatory if the event handler is in requestor mode
-                required: false
-    onap.datatypes.native.apex.CarrierTechnology:
-        derived_from: tosca.datatypes.Root
-        properties:
-            label:
-                type: string
-                description: The label (name) of the carrier technology (such as REST, Kafka, WebSocket)
-                required: true
-            plugin_parameter_class_name:
-                type: string
-                description: The class name of the class that overrides default handling of event input or output for this carrier technology, defaults to the supplied input or output class
-                required: false
-    onap.datatypes.native.apex.EventProtocol:
-        derived_from: tosca.datatypes.Root
-        properties:
-            label:
-                type: string
-                description: The label (name) of the event protocol (such as Yaml, JSON, XML, or POJO)
-                required: true
-            event_protocol_plugin_class:
-                type: string
-                description: The class name of the class that overrides default handling of the event protocol for this carrier technology, defaults to the supplied event protocol class
-                required: false
-    onap.datatypes.native.apex.Environment:
-        derived_from: tosca.datatypes.Root
-        properties:
-            name:
-                type: string
-                description: The name of the environment variable
-                required: true
-            value:
-                type: string
-                description: The value of the environment variable
-                required: true
-    onap.datatypes.native.apex.engineservice.Engine:
-        derived_from: tosca.datatypes.Root
-        properties:
-            context:
-                type: onap.datatypes.native.apex.engineservice.engine.Context
-                description: The properties for handling context in APEX engines, defaults to using Java maps for context
-                required: false
-            executors:
-                type: map
-                description: The plugins for policy executors used in engines such as javascript, MVEL, Jython
-                required: true
-                entry_schema:
-                    description: The plugin class path for this policy executor
-                    type: string
-    onap.datatypes.native.apex.engineservice.engine.Context:
-        derived_from: tosca.datatypes.Root
-        properties:
-            distributor:
-                type: onap.datatypes.native.apex.Plugin
-                description: The plugin to be used for distributing context between APEX PDPs at runtime
-                required: false
-            schemas:
-                type: map
-                description: The plugins for context schemas available in APEX PDPs such as Java and Avro
-                required: false
-                entry_schema:
-                    type: onap.datatypes.native.apex.Plugin
-            locking:
-                type: onap.datatypes.native.apex.Plugin
-                description: The plugin to be used for locking context in and between APEX PDPs at runtime
-                required: false
-            persistence:
-                type: onap.datatypes.native.apex.Plugin
-                description: The plugin to be used for persisting context for APEX PDPs at runtime
-                required: false
-    onap.datatypes.native.apex.Plugin:
-        derived_from: tosca.datatypes.Root
-        properties:
-            name:
-                type: string
-                description: The name of the executor such as Javascript, Jython or MVEL
-                required: true
-            plugin_class_name:
-                type: string
-                description: The class path of the plugin class for this executor
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.native.Drools.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.native.Drools.yaml
deleted file mode 100644 (file)
index 0ae96db..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-    onap.policies.Native:
-        derived_from: tosca.policies.Root
-        description: a base policy type for all native PDP policies
-        version: 1.0.0
-        name: onap.policies.Native
-    onap.policies.native.Drools:
-        derived_from: onap.policies.Native
-        description: a base policy type for all native PDP policies
-        version: 1.0.0
-        name: onap.policies.native.Drools
-    onap.policies.native.drools.Controller:
-        derived_from: onap.policies.native.Drools
-        description: a policy type for a drools controller configuration
-        version: 1.0.0
-        name: onap.policies.native.drools.Controller
-        properties:
-            controllerName:
-                type: string
-                required: true
-                description: the drools controller name
-            sourceTopics:
-                type: list
-                required: false
-                description: source topics and applicable events
-                entry_schema:
-                    type: onap.datatypes.dmaap.topic
-            sinkTopics:
-                type: list
-                required: false
-                description: sink topics and applicable events
-                entry_schema:
-                    type: onap.datatypes.dmaap.topic
-            customConfig:
-                type: map
-                required: false
-                description: any use case specific configurations relevant to the drools controller
-                entry_schema:
-                    type: string
-    onap.policies.native.drools.Artifact:
-        derived_from: onap.policies.native.Drools
-        description: a policy type for native drools artifact policies
-        version: 1.0.0
-        name: onap.policies.native.drools.Artifact
-        properties:
-            rulesArtifact:
-                type: onap.datatypes.native.rules_artifact
-                required: true
-                description: the GAV information of the maven artifact
-            controller:
-                type: onap.datatypes.drools.controller.relation
-                required: true
-                description: the drools controller to which the current native policy is assigned
-
-data_types:
-    onap.datatypes.dmaap.topic:
-        derived_from: tosca.datatypes.Root
-        properties:
-            topicName:
-                type: string
-                required: true
-                description: the dmaap topic name
-            events:
-                type: list
-                required: true
-                description: events used by this topic
-                entry_schema:
-                    type: onap.datatypes.dmaap.events
-    onap.datatypes.dmaap.events:
-        derived_from: tosca.datatypes.Root
-        properties:
-            eventClass:
-                type: string
-                required: true
-                description: the event canonical class for serialization
-            eventFilter:
-                type: string
-                required: false
-                description: the JSONPath based condition to filter out the events to serialize
-            customSerialization:
-                type: onap.datatypes.dmaap.custom_serialization
-                required: false
-                description:  overrides the default serialization/deserialization mechanisms with custom ones
-    onap.datatypes.dmaap.custom_serialization:
-        derived_from: tosca.datatypes.Root
-        properties:
-            customSerializerClass:
-                type: string
-                required: true
-                description: the class that contains the JSON parser serializer/deserializer.
-            jsonParser:
-                type: string
-                required: true
-                description: static field in customSerialized class with the json parser (currently only gson supported)
-    onap.datatypes.native.rules_artifact:
-        derived_from: tosca.datatypes.Root
-        properties:
-            groupId:
-                type: string
-                required: true
-                description: the groupId of the maven artifact
-            artifactId:
-                type: string
-                required: true
-                description: the artifactId of the maven artifact
-            version:
-                type: string
-                required: true
-                description: the version of the maven artifact
-    onap.datatypes.drools.controller.relation:
-        derived_from: tosca.datatypes.Root
-        properties:
-            name:
-                type: string
-                required: true
-                description: the name of drools controller policy
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.native.Xacml.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.native.Xacml.yaml
deleted file mode 100644 (file)
index eb25cdb..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-    onap.policies.Native:
-        derived_from: tosca.policies.Root
-        description: a base policy type for all native PDP policies
-        version: 1.0.0
-        name: onap.policies.Native
-    onap.policies.native.Xacml:
-        derived_from: onap.policies.Native
-        description: a policy type for native xacml policies
-        version: 1.0.0
-        name: onap.policies.native.Xacml
-        properties:
-            policy:
-                type: string
-                required: true
-                description: The XML XACML 3.0 PolicySet or Policy
-                metadata:
-                    encoding: Base64
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.Resource.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.Resource.yaml
deleted file mode 100644 (file)
index 6b3a246..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-   onap.policies.optimization.Resource:
-      derived_from: onap.policies.Optimization
-      version: 1.0.0
-      name: onap.policies.optimization.Resource
-      description: The base policy type for all policies that govern optimization for a Resource in a Service.
-      properties:
-         services:
-            description: One or more services that the policy applies to.
-            type: list
-            metadata:
-               matchable: true
-            required: true
-            entry_schema:
-               type: string
-         resources:
-            description: One or more VNF resources that the policy applies to.
-            type: list
-            metadata:
-               matchable: true
-            required: true
-            entry_schema:
-               type: string
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.Service.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.Service.yaml
deleted file mode 100644 (file)
index 8b37a67..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-   onap.policies.optimization.Service:
-      derived_from: onap.policies.Optimization
-      version: 1.0.0
-      name: onap.policies.optimization.Service
-      description: The base policy type for all policies that govern optimization for a Service.
-      properties:
-         services:
-            description: One or more services that the policy applies to.
-            type: list
-            metadata:
-               matchable: true
-            required: true
-            entry_schema:
-               type: string
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.AffinityPolicy.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.AffinityPolicy.yaml
deleted file mode 100644 (file)
index bb6adb0..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-   onap.policies.optimization.resource.AffinityPolicy:
-      derived_from: onap.policies.optimization.Resource
-      version: 1.0.0
-      name: onap.policies.optimization.resource.AffinityPolicy
-      properties:
-         applicableResources:
-            type: list
-            required: true
-            entry_schema:
-               type: string
-               constraints:
-               -  valid_values:
-                  - any
-                  - all
-         affinityProperties:
-            type: policy.data.affinityProperties_properties
-            required: true
-data_types:
-   policy.data.affinityProperties_properties:
-      derived_from: tosca.nodes.Root
-      properties:
-         qualifier:
-            type: string
-            constraints:
-            -  valid_values:
-               - same
-               - different
-         category:
-            type: string
-            required: true
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.DistancePolicy.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.DistancePolicy.yaml
deleted file mode 100644 (file)
index f41dcfd..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-   onap.policies.optimization.resource.DistancePolicy:
-      derived_from: onap.policies.optimization.Resource
-      version: 1.0.0
-      name: onap.policies.optimization.resource.DistancePolicy
-      properties:
-         applicableResources:
-            type: list
-            required: true
-            entry_schema:
-               type: string
-               constraints:
-               -  valid_values:
-                  - any
-                  - all
-         distanceProperties:
-            type: policy.data.distanceProperties_properties
-            required: true
-data_types:
-   policy.data.distanceProperties_properties:
-      derived_from: tosca.nodes.Root
-      properties:
-         locationInfo:
-            type: string
-            required: true
-         distance:
-            type: policy.data.distance_properties
-            required: true
-            entry_schema:
-               type: policy.data.distance_properties
-   policy.data.distance_properties:
-      derived_from: tosca.nodes.Root
-      properties:
-         value:
-            type: string
-            required: true
-         operator:
-            type: list
-            required: true
-            entry_schema:
-               type: string
-               constraints:
-               -  valid_values:
-                  - <
-                  - <=
-                  - '>'
-                  - '>='
-                  - =
-         unit:
-            type: list
-            required: true
-            entry_schema:
-               type: string
-               constraints:
-               -  valid_values:
-                  - km
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.HpaPolicy.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.HpaPolicy.yaml
deleted file mode 100644 (file)
index dfe3077..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-   onap.policies.optimization.resource.HpaPolicy:
-      derived_from: onap.policies.optimization.Resource
-      version: 1.0.0
-      name: onap.policies.optimization.resource.HpaPolicy
-      properties:
-         flavorFeatures:
-            type: list
-            required: true
-            entry_schema:
-               type: policy.data.flavorFeatures_properties
-data_types:
-   policy.data.flavorFeatures_properties:
-      derived_from: tosca.nodes.Root
-      properties:
-         id:
-            type: string
-            required: true
-         type:
-            type: string
-            required: true
-         directives:
-            type: list
-            required: true
-            entry_schema:
-               type: policy.data.directives_properties
-         flavorProperties:
-            type: list
-            required: true
-            entry_schema:
-               type: policy.data.flavorProperties_properties
-   policy.data.directives_properties:
-      derived_from: tosca.nodes.Root
-      properties:
-         type:
-            type: string
-         attributes:
-            type: list
-            entry_schema:
-               type: policy.data.directives_attributes_properties
-   policy.data.directives_attributes_properties:
-      derived_from: tosca.nodes.Root
-      properties:
-         attribute_name:
-            type: string
-         attribute_value:
-            type: string
-   policy.data.flavorProperties_properties:
-      derived_from: tosca.nodes.Root
-      properties:
-         hpa-feature:
-            type: string
-            required: true
-         mandatory:
-            type: string
-            required: true
-         score:
-            type: string
-            required: false
-         architecture:
-            type: string
-            required: true
-         hpa-version:
-            type: string
-            required: true
-         directives:
-            type: list
-            required: true
-            entry_schema:
-               type: policy.data.directives_properties
-         hpa-feature-attributes:
-            type: list
-            required: true
-            entry_schema:
-               type: policy.data.hpa-feature-attributes_properties
-   policy.data.hpa-feature-attributes_properties:
-      derived_from: tosca.nodes.Root
-      properties:
-         hpa-attribute-key:
-            type: string
-            required: true
-         hpa-attribute-value:
-            type: string
-            required: true
-         operator:
-            type: list
-            required: true
-            entry_schema:
-               type: string
-               constraints:
-               -  valid_values:
-                  - <
-                  - <=
-                  - '>'
-                  - '>='
-                  - =
-                  - '!='
-                  - any
-                  - all
-                  - subset
-         unit:
-            type: string
-            required: false
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.OptimizationPolicy.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.OptimizationPolicy.yaml
deleted file mode 100644 (file)
index b0f77d6..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-   onap.policies.optimization.resource.OptimizationPolicy:
-      derived_from: onap.policies.optimization.Resource
-      version: 1.0.0
-      name: onap.policies.optimization.resource.OptimizationPolicy
-      properties:
-         objective:
-            type: list
-            required: true
-            entry_schema:
-               type: string
-               constraints:
-               -  valid_values:
-                  - minimize
-                  - maximize
-         objectiveParameter:
-            type: policy.data.objectiveParameter_properties
-            required: true
-data_types:
-   policy.data.objectiveParameter_properties:
-      derived_from: tosca.nodes.Root
-      properties:
-         parameterAttributes:
-            type: list
-            required: true
-            entry_schema:
-               type: policy.data.parameterAttributes_properties
-         operator:
-            type: list
-            required: true
-            entry_schema:
-               type: string
-               constraints:
-               -  valid_values:
-                  - '*'
-                  - +
-                  - '-'
-                  - /
-                  - '%'
-   policy.data.parameterAttributes_properties:
-      derived_from: tosca.nodes.Root
-      properties:
-         resources:
-            type: string
-            required: true
-         customerLocationInfo:
-            type: string
-            required: true
-         parameter:
-            type: string
-            required: true
-         weight:
-            type: string
-            required: true
-         operator:
-            type: list
-            required: true
-            entry_schema:
-               type: string
-               constraints:
-               -  valid_values:
-                  - '*'
-                  - +
-                  - '-'
-                  - /
-                  - '%'
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.PciPolicy.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.PciPolicy.yaml
deleted file mode 100644 (file)
index e636582..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-   onap.policies.optimization.resource.PciPolicy:
-      derived_from: onap.policies.optimization.Resource
-      version: 1.0.0
-      name: onap.policies.optimization.resource.PciPolicy
-      properties:
-         pciProperties:
-            type: list
-            required: false
-            entry_schema:
-               type: policy.data.pciProperties_properties
-data_types:
-   policy.data.pciProperties_properties:
-      derived_from: tosca.nodes.Root
-      properties:
-         algoCategory:
-            type: string
-            required: false
-         pciOptmizationAlgoName:
-            type: string
-            required: false
-         pciOptimizationNwConstraint:
-            type: string
-            required: false
-         pciOptimizationPriority:
-            type: string
-            required: false
-         pciOptimizationTimeConstraint:
-            type: string
-            required: false
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.Vim_fit.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.Vim_fit.yaml
deleted file mode 100644 (file)
index cb387dd..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-   onap.policies.optimization.resource.Vim_fit:
-      derived_from: onap.policies.optimization.Resource
-      version: 1.0.0
-      name: onap.policies.optimization.resource.Vim_fit
-      properties:
-         applicableResources:
-            type: list
-            required: true
-            entry_schema:
-               type: string
-               constraints:
-               -  valid_values:
-                  - any
-                  - all
-         capacityProperties:
-            type: policy.data.capacityProperties_properties
-            required: true
-data_types:
-   policy.data.capacityProperties_properties:
-      derived_from: tosca.nodes.Root
-      properties:
-         controller:
-            type: string
-            required: true
-         request:
-            type: string
-            required: true
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.VnfPolicy.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.resource.VnfPolicy.yaml
deleted file mode 100644 (file)
index 30b8b72..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-   onap.policies.optimization.resource.VnfPolicy:
-      derived_from: onap.policies.optimization.Resource
-      version: 1.0.0
-      name: onap.policies.optimization.resource.VnfPolicy
-      properties:
-         applicableResources:
-            type: list
-            required: true
-            entry_schema:
-               type: string
-               constraints:
-               -  valid_values:
-                  - any
-                  - all
-         vnfProperties:
-            type: list
-            required: true
-            entry_schema:
-               type: policy.data.vnfProperties_properties
-data_types:
-   policy.data.vnfProperties_properties:
-      derived_from: tosca.nodes.Root
-      properties:
-         inventoryProvider:
-            type: string
-            required: true
-         serviceType:
-            type: string
-            required: true
-         inventoryType:
-            type: list
-            required: true
-            entry_schema:
-               type: string
-               constraints:
-               -  valid_values:
-                  - serviceInstanceId
-                  - vnfName
-                  - cloudRegionId
-                  - vimId
-         customerId:
-            type: string
-            required: true
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.service.QueryPolicy.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.service.QueryPolicy.yaml
deleted file mode 100644 (file)
index 2ff263b..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-   onap.policies.optimization.service.QueryPolicy:
-      derived_from: onap.policies.optimization.Service
-      version: 1.0.0
-      name: onap.policies.optimization.service.QueryPolicy
-      properties:
-         queryProperties:
-            type: list
-            required: true
-            entry_schema:
-               type: policy.data.queryProperties_properties
-data_types:
-   policy.data.queryProperties_properties:
-      derived_from: tosca.nodes.Root
-      properties:
-         attribute:
-            type: string
-            required: true
-         value:
-            type: string
-            required: true
-         attribute_location:
-            type: string
-            required: true
-
diff --git a/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.service.SubscriberPolicy.yaml b/participant/participant-impl/participant-impl-policy/src/test/resources/policytypes/onap.policies.optimization.service.SubscriberPolicy.yaml
deleted file mode 100644 (file)
index 81dea2c..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_1_0
-policy_types:
-    onap.policies.optimization.service.SubscriberPolicy:
-        derived_from: onap.policies.optimization.Service
-        version: 1.0.0
-        name: onap.policies.optimization.service.SubscriberPolicy
-        properties:
-            subscriberProperties:
-                type: policy.data.subscriberProperties_properties
-                required: true
-data_types:
-    policy.data.subscriberProperties_properties:
-        derived_from: tosca.nodes.Root
-        properties:
-            subscriberName:
-                type: list
-                required: true
-                metadata:
-                    contextProvider: true
-                entry_schema:
-                    type: string
-            subscriberRole:
-                type: list
-                required: true
-                metadata:
-                    contextMatchable: scope
-                entry_schema:
-                    type: string
-            provStatus:
-                type: list
-                required: true
-                metadata:
-                    contextAttribute: true
-                entry_schema:
-                    type: string
-
@@ -10,14 +10,14 @@ data_types:
         type: string
         required: true
 node_types:
-  org.onap.policy.clamp.controlloop.Participant:
+  org.onap.policy.clamp.acmParticipant:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
       provider:
         type: string
         requred: false
-  org.onap.policy.clamp.controlloop.ControlLoopElement:
+  org.onap.policy.clamp.acmAutomationCompositionElement:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
@@ -34,11 +34,11 @@ node_types:
         - greater-or-equal: 0
         metadata:
             common: true
-        description: A value indicating the start phase in which this control loop element will be started, the
-                     first start phase is zero. Control Loop Elements are started in their start_phase order and stopped
-                     in reverse start phase order. Control Loop Elements with the same start phase are started and
-                     stopped simultaneously
-  org.onap.policy.clamp.controlloop.ControlLoop:
+        description: A value indicating the start phase in which this automation composition element will be started,
+                     the first start phase is zero. Automation Composition Elements are started in their start_phase
+                     order and stopped in reverse start phase order. Automation Composition Elements with the same start
+                     phase are started and stopped simultaneously
+  org.onap.policy.clamp.acmAutomationComposition:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
@@ -50,115 +50,115 @@ node_types:
         required: true
         entry_schema:
           type: onap.datatypes.ToscaConceptIdentifier
-  org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement:
+  org.onap.policy.clamp.acmDCAEMicroserviceAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acmAutomationCompositionElement
     properties:
       dcae_blueprint_id:
         type: onap.datatypes.ToscaConceptIdentifier
         requred: true
-  org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement:
+  org.onap.policy.clamp.acmPolicyTypeAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acmAutomationCompositionElement
     properties:
       policy_type_id:
         type: onap.datatypes.ToscaConceptIdentifier
         requred: true
-  org.onap.policy.clamp.controlloop.CDSControlLoopElement:
+  org.onap.policy.clamp.acmCDSAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acmAutomationCompositionElement
     properties:
       cds_blueprint_id:
         type: onap.datatypes.ToscaConceptIdentifier
         requred: true
 topology_template:
   node_templates:
-    org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant:
+    org.onap.dcae.acmDCAEMicroserviceAutomationCompositionParticipant:
       version: 2.3.4
-      type: org.onap.policy.clamp.controlloop.Participant
+      type: org.onap.policy.clamp.acmParticipant
       type_version: 1.0.1
       description: Participant for DCAE microservices
       properties:
         provider: ONAP
-    org.onap.policy.controlloop.PolicyControlLoopParticipant:
+    org.onap.policy.acmPolicyAutomationCompositionParticipant:
       version: 2.3.1
-      type: org.onap.policy.clamp.controlloop.Participant
+      type: org.onap.policy.clamp.acmParticipant
       type_version: 1.0.1
       description: Participant for DCAE microservices
       properties:
         provider: ONAP
-    org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant:
+    org.onap.ccsdk.cds.acmCdsAutomationCompositionParticipant:
       version: 2.2.1
-      type: org.onap.policy.clamp.controlloop.Participant
+      type: org.onap.policy.clamp.acmParticipant
       type_version: 1.0.1
       description: Participant for DCAE microservices
       properties:
         provider: ONAP
     org.onap.domain.pmsh.PMSH_DCAEMicroservice:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement
+      type: org.onap.policy.clamp.acmDCAEMicroserviceAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the DCAE microservice for Performance Management Subscription Handling
+      description: Automation composition element for DCAE microservice for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant
+          name: org.onap.dcae.acmDCAEMicroserviceAutomationCompositionParticipant
           version: 2.3.4
         dcae_blueprint_id:
           name: org.onap.dcae.blueprints.PMSHBlueprint
           version: 1.0.0
-    org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement:
+    org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement
+      type: org.onap.policy.clamp.acmPolicyTypeAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the monitoring policy for Performance Management Subscription Handling
+      description: Automation composition element for monitoring policy for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
+          name: org.onap.policy.acmPolicyAutomationCompositionParticipant
           version: 2.3.1
         policy_type_id:
           name: onap.policies.monitoring.pm-subscription-handler
           version: 1.0.0
-    org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement:
+    org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement
+      type: org.onap.policy.clamp.acmPolicyTypeAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the operational policy for Performance Management Subscription Handling
+      description: Automation composition element, operational policy for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
+          name: org.onap.policy.acmPolicyAutomationCompositionParticipant
           version: 2.3.1
         policy_type_id:
           name: onap.policies.operational.pm-subscription-handler
           version: 1.0.0
-    org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement:
+    org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoopElement
+      type: org.onap.policy.clamp.acmAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for CDS for Performance Management Subscription Handling
+      description: Automation composition element for CDS for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant
+          name: org.onap.ccsdk.cds.acmCdsAutomationCompositionParticipant
           version: 3.2.1
         cds_blueprint_id:
           name: org.onap.ccsdk.cds.PMSHCdsBlueprint
           version: 1.0.0
-    org.onap.domain.pmsh.PMSHControlLoopDefinition:
+    org.onap.domain.pmsh.PMSHAutomationCompositionDefinition:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoop
+      type: org.onap.policy.clamp.acmAutomationComposition
       type_version: 1.0.0
-      description: Control loop for Performance Management Subscription Handling
+      description: Automation composition for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         elements:
           - name: org.onap.domain.pmsh.PMSH_DCAEMicroservice
             version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement
+          - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement
             version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement
+          - name: org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement
             version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement
+          - name: org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement
             version: 1.2.3
index c19e45e..5673cb7 100644 (file)
@@ -31,7 +31,7 @@
 
     <artifactId>policy-clamp-participant-impl-simulator</artifactId>
     <name>${project.artifactId}</name>
-    <description>Participant simulator, used to test control loops</description>
+    <description>Participant simulator, used to test automation compositions</description>
 
     <build>
         <plugins>
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================\r
  */\r
 \r
-package org.onap.policy.clamp.controlloop.participant.simulator;\r
+package org.onap.policy.clamp.acm.participant.simulator;\r
 \r
 import org.springframework.boot.SpringApplication;\r
 import org.springframework.boot.autoconfigure.SpringBootApplication;\r
@@ -31,11 +31,11 @@ import org.springframework.context.annotation.ComponentScan;
  */\r
 // @formatter:off\r
 @SpringBootApplication\r
-@ConfigurationPropertiesScan("org.onap.policy.clamp.controlloop.participant.simulator.main.parameters")\r
+@ConfigurationPropertiesScan("org.onap.policy.clamp.acm.participant.simulator.main.parameters")\r
 @ComponentScan({\r
-    "org.onap.policy.clamp.controlloop.participant.simulator",\r
-    "org.onap.policy.clamp.controlloop.participant.intermediary",\r
-    "org.onap.policy.clamp.controlloop.common.rest"\r
+    "org.onap.policy.clamp.acm.participant.simulator",\r
+    "org.onap.policy.clamp.acm.participant.intermediary",\r
+    "org.onap.policy.clamp.acm.common.rest"\r
 })\r
 //@formatter:on\r
 public class ParticipantSimulatorApplication {\r
  *
  */
 
-package org.onap.policy.clamp.controlloop.participant.simulator.config;
+package org.onap.policy.clamp.acm.participant.simulator.config;
 
 import javax.servlet.Filter;
-import org.onap.policy.clamp.controlloop.participant.simulator.main.rest.ParticipantSimulatorAafFilter;
+import org.onap.policy.clamp.acm.participant.simulator.main.rest.ParticipantSimulatorAafFilter;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Profile;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.simulator.config;
+package org.onap.policy.clamp.acm.participant.simulator.config;
 
-import org.onap.policy.clamp.controlloop.common.rest.RequestResponseLoggingFilter;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi;
-import org.onap.policy.clamp.controlloop.participant.simulator.main.handler.ControlLoopElementHandler;
+import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
+import org.onap.policy.clamp.acm.participant.simulator.main.handler.AutomationCompositionElementHandler;
+import org.onap.policy.clamp.common.acm.rest.RequestResponseLoggingFilter;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.web.servlet.FilterRegistrationBean;
 import org.springframework.context.annotation.Bean;
@@ -47,15 +47,15 @@ public class ParticipantConfig {
     }
 
     /**
-     * Register ControlLoopElementListener.
+     * Register AutomationCompositionElementListener.
      *
      * @param intermediaryApi the ParticipantIntermediaryApi
-     * @param clElementHandler the ControlLoop Element Handler
+     * @param acElementHandler the AutomationComposition Element Handler
      */
     @Autowired
-    public void registerControlLoopElementListener(ParticipantIntermediaryApi intermediaryApi,
-            ControlLoopElementHandler clElementHandler) {
-        intermediaryApi.registerControlLoopElementListener(clElementHandler);
-        clElementHandler.setIntermediaryApi(intermediaryApi);
+    public void registerAutomationCompositionElementListener(ParticipantIntermediaryApi intermediaryApi,
+            AutomationCompositionElementHandler acElementHandler) {
+        intermediaryApi.registerAutomationCompositionElementListener(acElementHandler);
+        acElementHandler.setIntermediaryApi(intermediaryApi);
     }
 }
@@ -18,9 +18,9 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.simulator.config;
+package org.onap.policy.clamp.acm.participant.simulator.config;
 
-import org.onap.policy.clamp.controlloop.participant.simulator.simulation.rest.SimulationElementController;
+import org.onap.policy.clamp.acm.participant.simulator.simulation.rest.SimulationElementController;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import springfox.documentation.builders.PathSelectors;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.simulator.config;
+package org.onap.policy.clamp.acm.participant.simulator.config;
 
 import java.util.List;
-import org.onap.policy.clamp.controlloop.common.rest.CoderHttpMesageConverter;
+import org.onap.policy.clamp.common.acm.rest.CoderHttpMesageConverter;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.http.MediaType;
 import org.springframework.http.converter.HttpMessageConverter;
diff --git a/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/simulator/main/handler/AutomationCompositionElementHandler.java b/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/simulator/main/handler/AutomationCompositionElementHandler.java
new file mode 100644 (file)
index 0000000..9e30c88
--- /dev/null
@@ -0,0 +1,112 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.participant.simulator.main.handler;
+
+import java.time.Instant;
+import java.util.UUID;
+import lombok.Setter;
+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.AcElementStatistics;
+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.models.base.PfModelException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+/**
+ * This class handles implementation of automationCompositionElement updates.
+ */
+@Component
+public class AutomationCompositionElementHandler implements AutomationCompositionElementListener {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AutomationCompositionElementHandler.class);
+
+    @Setter
+    private ParticipantIntermediaryApi intermediaryApi;
+
+    /**
+     * 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
+     * @throws PfModelException in case of an exception
+     */
+    @Override
+    public void automationCompositionElementStateChange(ToscaConceptIdentifier automationCompositionId,
+        UUID automationCompositionElementId, AutomationCompositionState currentState,
+        AutomationCompositionOrderedState newState) throws PfModelException {
+        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.debug("Unknown orderedstate {}", newState);
+                break;
+        }
+    }
+
+    /**
+     * Callback method to handle an update on a automation composition element.
+     *
+     * @param element the information on the automation composition element
+     * @param acElementDefinition toscaNodeTemplate
+     * @throws PfModelException in case of an exception
+     */
+    @Override
+    public void automationCompositionElementUpdate(ToscaConceptIdentifier automationCompositionId,
+        AutomationCompositionElement element, ToscaNodeTemplate acElementDefinition) throws PfModelException {
+        intermediaryApi.updateAutomationCompositionElementState(automationCompositionId, element.getId(),
+            element.getOrderedState(), AutomationCompositionState.PASSIVE,
+            ParticipantMessageType.AUTOMATION_COMPOSITION_UPDATE);
+    }
+
+    @Override
+    public void handleStatistics(UUID automationCompositionElementId) throws PfModelException {
+        var acElement = intermediaryApi.getAutomationCompositionElement(automationCompositionElementId);
+        if (acElement != null) {
+            var acElementStatistics = new AcElementStatistics();
+            acElementStatistics.setState(acElement.getState());
+            acElementStatistics.setTimeStamp(Instant.now());
+            intermediaryApi.updateAutomationCompositionElementStatistics(automationCompositionElementId,
+                acElementStatistics);
+        }
+    }
+
+}
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.simulator.main.parameters;
+package org.onap.policy.clamp.acm.participant.simulator.main.parameters;
 
 import javax.validation.Valid;
 import javax.validation.constraints.NotNull;
 import lombok.Getter;
 import lombok.Setter;
-import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantIntermediaryParameters;
-import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantParameters;
+import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantIntermediaryParameters;
+import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantParameters;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.validation.annotation.Validated;
 
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.simulator.main.rest;
+package org.onap.policy.clamp.acm.participant.simulator.main.rest;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.BasicAuthDefinition;
@@ -27,26 +27,38 @@ import io.swagger.annotations.SecurityDefinition;
 import io.swagger.annotations.SwaggerDefinition;
 import io.swagger.annotations.Tag;
 import java.net.HttpURLConnection;
+import java.util.UUID;
 import javax.ws.rs.core.MediaType;
 import lombok.AccessLevel;
 import lombok.Getter;
-import org.onap.policy.clamp.controlloop.participant.simulator.simulation.SimulationProvider;
+import org.onap.policy.clamp.acm.participant.simulator.simulation.SimulationProvider;
+import org.springframework.http.HttpHeaders;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 /**
  * Common superclass to provide REST endpoints for the participant simulator.
  */
 // @formatter:off
-@RequestMapping(value = "/v2", produces = {MediaType.APPLICATION_JSON, AbstractRestController.APPLICATION_YAML})
+@RequestMapping(
+    value = "/v2",
+    produces = {
+        MediaType.APPLICATION_JSON,
+        AbstractRestController.APPLICATION_YAML
+    }
+)
 @Api(value = "Participant Simulator API")
 @SwaggerDefinition(
-    info = @Info(description =
-                    "Participant Simulator", version = "v1.0",
-                    title = "Participant Simulator"),
+    info = @Info(
+        description = "Participant Simulator",
+        version = "v1.0",
+        title = "Participant Simulator"
+    ),
     consumes = {MediaType.APPLICATION_JSON, AbstractRestController.APPLICATION_YAML},
     produces = {MediaType.APPLICATION_JSON, AbstractRestController.APPLICATION_YAML},
     schemes = {SwaggerDefinition.Scheme.HTTP, SwaggerDefinition.Scheme.HTTPS},
-    tags = {@Tag(name = "participantsim", description = "Participant Simulator")},
+    tags = {
+        @Tag(name = "participantsim", description = "Participant Simulator")
+    },
     securityDefinition = @SecurityDefinition(basicAuthDefinitions = {@BasicAuthDefinition(key = "basicAuth")}))
 // @formatter:on
 public abstract class AbstractRestController {
@@ -86,8 +98,8 @@ public abstract class AbstractRestController {
     public static final String AUTHORIZATION_ERROR_MESSAGE = "Authorization Error";
     public static final String SERVER_ERROR_MESSAGE = "Internal Server Error";
 
-    @Getter(AccessLevel.PROTECTED)
     // The provider for simulation requests
+    @Getter(AccessLevel.PROTECTED)
     private SimulationProvider simulationProvider;
 
     /**
@@ -99,4 +111,20 @@ public abstract class AbstractRestController {
         this.simulationProvider = simulationProvider;
     }
 
+    /**
+     * Get the common headers for responses.
+     *
+     * @param requestId  the request ID
+     *
+     * @return the headers
+     */
+    protected HttpHeaders getCommonHeaders(UUID requestId) {
+        HttpHeaders commonHeaders = new HttpHeaders();
+        commonHeaders.add(VERSION_MINOR_NAME, API_VERSION.split("\\.")[1]);
+        commonHeaders.add(VERSION_PATCH_NAME, API_VERSION.split("\\.")[2]);
+        commonHeaders.add(VERSION_LATEST_NAME, API_VERSION);
+        commonHeaders.add(REQUEST_ID_NAME, (requestId != null ? requestId.toString() : null));
+
+        return commonHeaders;
+    }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.simulator.main.rest;
+package org.onap.policy.clamp.acm.participant.simulator.main.rest;
 
-import org.onap.policy.clamp.controlloop.common.exception.ControlLoopException;
-import org.onap.policy.clamp.controlloop.models.messages.rest.SimpleResponse;
-import org.onap.policy.clamp.controlloop.models.rest.RestUtils;
+import org.onap.policy.clamp.common.acm.exception.AutomationCompositionException;
+import org.onap.policy.clamp.models.acm.messages.rest.SimpleResponse;
+import org.onap.policy.clamp.models.acm.rest.RestUtils;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
@@ -33,13 +33,13 @@ import org.springframework.web.bind.annotation.RestControllerAdvice;
 public class GlobalControllerExceptionHandler {
 
     /**
-     * Handle ControlLoopException.
+     * Handle AutomationCompositionException.
      *
-     * @param ex ControlLoopException
+     * @param ex AutomationCompositionException
      * @return ResponseEntity
      */
-    @ExceptionHandler(ControlLoopException.class)
-    public ResponseEntity<SimpleResponse> handleBadRequest(ControlLoopException ex) {
+    @ExceptionHandler(AutomationCompositionException.class)
+    public ResponseEntity<SimpleResponse> handleBadRequest(AutomationCompositionException ex) {
         return RestUtils.toSimpleResponse(ex);
     }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.simulator.main.rest;
+package org.onap.policy.clamp.acm.participant.simulator.main.rest;
 
 import java.util.Map;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.http.HttpServletRequest;
-import org.onap.policy.clamp.controlloop.models.messages.rest.SimpleResponse;
-import org.onap.policy.clamp.controlloop.models.messages.rest.TypedSimpleResponse;
+import org.onap.policy.clamp.models.acm.messages.rest.SimpleResponse;
+import org.onap.policy.clamp.models.acm.messages.rest.TypedSimpleResponse;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.web.error.ErrorAttributeOptions;
 import org.springframework.boot.web.servlet.error.ErrorAttributes;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.simulator.main.rest;
+package org.onap.policy.clamp.acm.participant.simulator.main.rest;
 
 import org.onap.policy.common.endpoints.http.server.aaf.AafGranularAuthFilter;
 import org.onap.policy.common.utils.resources.MessageConstants;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.simulator.simulation;
+package org.onap.policy.clamp.acm.participant.simulator.simulation;
 
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
-import org.onap.policy.clamp.controlloop.common.exception.ControlLoopException;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.models.messages.rest.TypedSimpleResponse;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi;
+import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
+import org.onap.policy.clamp.common.acm.exception.AutomationCompositionException;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions;
+import org.onap.policy.clamp.models.acm.concepts.Participant;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.clamp.models.acm.messages.rest.TypedSimpleResponse;
 import org.springframework.stereotype.Service;
 
 /**
- * This provider class simulation of participants and control loop elements.
+ * This provider class simulation of participants and automation composition elements.
  */
 @Service
 public class SimulationProvider {
@@ -42,6 +42,7 @@ public class SimulationProvider {
 
     /**
      * Create a participant simulation provider.
+     *
      * @param intermediaryApi the intermediary to use for talking to the CLAMP runtime
      */
     public SimulationProvider(ParticipantIntermediaryApi intermediaryApi) {
@@ -49,38 +50,40 @@ public class SimulationProvider {
     }
 
     /**
-     * Get the control loops.
+     * Get the automation compositions.
      *
-     * @param name the controlLoop, null to get all
-     * @param version the controlLoop, null to get all
-     * @return the control loops
-     * @throws ControlLoopException on errors getting the control loops
+     * @param name the automationComposition, null to get all
+     * @param version the automationComposition, null to get all
+     * @return the automation compositions
+     * @throws AutomationCompositionException on errors getting the automation compositions
      */
-    public ControlLoops getControlLoops(String name, String version) throws ControlLoopException {
-        return intermediaryApi.getControlLoops(name, version);
+    public AutomationCompositions getAutomationCompositions(String name, String version)
+        throws AutomationCompositionException {
+        return intermediaryApi.getAutomationCompositions(name, version);
     }
 
     /**
-     * Get the simulated control loop elements.
+     * Get the simulated automation composition elements.
      *
-     * @param name the controlLoopElement, null to get all
-     * @param version the controlLoopElement, null to get all
-     * @return the control loop elements
+     * @param name the automationCompositionElement, null to get all
+     * @param version the automationCompositionElement, null to get all
+     * @return the automation composition elements
      */
-    public Map<UUID, ControlLoopElement> getControlLoopElements(String name, String version) {
-        return intermediaryApi.getControlLoopElements(name, version);
+    public Map<UUID, AutomationCompositionElement> getAutomationCompositionElements(String name, String version) {
+        return intermediaryApi.getAutomationCompositionElements(name, version);
     }
 
     /**
-     * Update the given control loop element in the simulator.
+     * Update the given automation composition element in the simulator.
      *
-     * @param element the control loop element to update
+     * @param element the automation composition element to update
      * @return response simple response returned
      */
-    public TypedSimpleResponse<ControlLoopElement> updateControlLoopElement(ControlLoopElement element) {
-        TypedSimpleResponse<ControlLoopElement> response = new TypedSimpleResponse<>();
-        response.setResponse(intermediaryApi.updateControlLoopElementState(null, element.getId(),
-            element.getOrderedState(), element.getState(), ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE));
+    public TypedSimpleResponse<AutomationCompositionElement> updateAutomationCompositionElement(
+        AutomationCompositionElement element) {
+        TypedSimpleResponse<AutomationCompositionElement> response = new TypedSimpleResponse<>();
+        response.setResponse(intermediaryApi.updateAutomationCompositionElementState(null, element.getId(),
+            element.getOrderedState(), element.getState(), ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE));
         return response;
     }
 
@@ -104,7 +107,7 @@ public class SimulationProvider {
     public TypedSimpleResponse<Participant> updateParticipant(Participant participant) {
         TypedSimpleResponse<Participant> response = new TypedSimpleResponse<>();
         response.setResponse(
-                intermediaryApi.updateParticipantState(participant.getDefinition(), participant.getParticipantState()));
+            intermediaryApi.updateParticipantState(participant.getDefinition(), participant.getParticipantState()));
         return response;
     }
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.simulator.simulation.rest;
+package org.onap.policy.clamp.acm.participant.simulator.simulation.rest;
 
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -30,11 +30,11 @@ import io.swagger.annotations.ExtensionProperty;
 import io.swagger.annotations.ResponseHeader;
 import java.util.Map;
 import java.util.UUID;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
-import org.onap.policy.clamp.controlloop.models.messages.rest.TypedSimpleResponse;
-import org.onap.policy.clamp.controlloop.participant.simulator.main.rest.AbstractRestController;
-import org.onap.policy.clamp.controlloop.participant.simulator.simulation.SimulationProvider;
+import org.onap.policy.clamp.acm.participant.simulator.main.rest.AbstractRestController;
+import org.onap.policy.clamp.acm.participant.simulator.simulation.SimulationProvider;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions;
+import org.onap.policy.clamp.models.acm.messages.rest.TypedSimpleResponse;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -44,7 +44,7 @@ import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RestController;
 
 /**
- * Class to provide REST end points for participant simulator to query/update details of controlLoopElements.
+ * Class to provide REST end points for participant simulator to query/update details of automationCompositionElements.
  */
 @RestController
 public class SimulationElementController extends AbstractRestController {
@@ -59,22 +59,22 @@ public class SimulationElementController extends AbstractRestController {
     }
 
     /**
-     * Queries details of all control loop element within the simulator.
+     * Queries details of all automation composition element within the simulator.
      *
      * @param requestId request ID used in ONAP logging
-     * @param name the name of the Control Loop element to get, null to get all
-     * @param version the version of the Control Loop element to get, null to get all
-     * @return the control loop elements
+     * @param name the name of the Automation Composition element to get, null to get all
+     * @param version the version of the Automation Composition element to get, null to get all
+     * @return the automation composition elements
      */
     // @formatter:off
     @GetMapping("/elements/{name}/{version}")
     @ApiOperation(
-        value = "Query details of the requested simulated control loop elements",
-        notes = "Queries details of the requested simulated control loop elements, "
-                + "returning all control loop element details",
-        response = ControlLoops.class,
+        value = "Query details of the requested simulated automation composition elements",
+        notes = "Queries details of the requested simulated automation composition elements, "
+                + "returning all automation composition element details",
+        response = AutomationCompositions.class,
         tags = {
-            "Clamp Control Loop Participant Simulator API"
+            "Clamp Automation Composition Participant Simulator API"
         },
         authorizations = @Authorization(value = AUTHORIZATION_TYPE),
         responseHeaders = {
@@ -106,33 +106,35 @@ public class SimulationElementController extends AbstractRestController {
         }
     )
     // @formatter:on
-    public ResponseEntity<Map<UUID, ControlLoopElement>> elements(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Control loop element name", required = true) @PathVariable("name") String name,
-            @ApiParam(
-                    value = "Control loop element version",
-                    required = true) @PathVariable("version") String version) {
+    public ResponseEntity<Map<UUID, AutomationCompositionElement>> elements(
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(value = "Automation composition element name", required = true) @PathVariable("name") String name,
+        @ApiParam(
+            value = "Automation composition element version",
+            required = true) @PathVariable("version") String version) {
 
-        return ResponseEntity.ok().body(getSimulationProvider().getControlLoopElements(name, version));
+        return ResponseEntity
+            .ok()
+            .headers(super.getCommonHeaders(requestId))
+            .body(getSimulationProvider().getAutomationCompositionElements(name, version));
     }
 
     /**
-     * Updates a control loop element in the simulator.
+     * Updates a automation composition element in the simulator.
      *
      * @param requestId request ID used in ONAP logging
-     * @param body the body of a control loop element
+     * @param body the body of a automation composition element
      * @return a response
      */
     // @formatter:off
     @PutMapping("/elements")
     @ApiOperation(
-            value = "Updates simulated control loop elements",
-            notes = "Updates simulated control loop elements, returning the updated control loop definition IDs",
+            value = "Updates simulated automation composition elements",
+            notes = "Updates simulated automation composition elements, "
+                + "returning the updated automation composition definition IDs",
             response = TypedSimpleResponse.class,
             tags = {
-                "Clamp Control Loop Participant Simulator API"
+                "Clamp Automation Composition Participant Simulator API"
                 },
             authorizations = @Authorization(value = AUTHORIZATION_TYPE),
             responseHeaders = {
@@ -172,12 +174,15 @@ public class SimulationElementController extends AbstractRestController {
             }
         )
     // @formatter:on
-    public ResponseEntity<TypedSimpleResponse<ControlLoopElement>> update(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Body of a control loop element", required = true) @RequestBody ControlLoopElement body) {
+    public ResponseEntity<TypedSimpleResponse<AutomationCompositionElement>> update(
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(
+            value = "Body of a automation composition element",
+            required = true) @RequestBody AutomationCompositionElement body) {
 
-        return ResponseEntity.ok().body(getSimulationProvider().updateControlLoopElement(body));
+        return ResponseEntity
+            .ok()
+            .headers(super.getCommonHeaders(requestId))
+            .body(getSimulationProvider().updateAutomationCompositionElement(body));
     }
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.simulator.simulation.rest;
+package org.onap.policy.clamp.acm.participant.simulator.simulation.rest;
 
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -30,10 +30,10 @@ import io.swagger.annotations.ExtensionProperty;
 import io.swagger.annotations.ResponseHeader;
 import java.util.List;
 import java.util.UUID;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.clamp.controlloop.models.messages.rest.TypedSimpleResponse;
-import org.onap.policy.clamp.controlloop.participant.simulator.main.rest.AbstractRestController;
-import org.onap.policy.clamp.controlloop.participant.simulator.simulation.SimulationProvider;
+import org.onap.policy.clamp.acm.participant.simulator.main.rest.AbstractRestController;
+import org.onap.policy.clamp.acm.participant.simulator.simulation.SimulationProvider;
+import org.onap.policy.clamp.models.acm.concepts.Participant;
+import org.onap.policy.clamp.models.acm.messages.rest.TypedSimpleResponse;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -72,7 +72,7 @@ public class SimulationParticipantController extends AbstractRestController {
                     + "returning all participant details",
             response = List.class,
             tags = {
-                "Clamp Control Loop Participant Simulator API"
+                "Clamp Automation Composition Participant Simulator API"
             },
             authorizations = @Authorization(value = AUTHORIZATION_TYPE),
             responseHeaders = {
@@ -109,7 +109,10 @@ public class SimulationParticipantController extends AbstractRestController {
         @ApiParam(value = "Participant name", required = true) @PathVariable("name") String name,
         @ApiParam(value = "Participant version", required = true) @PathVariable("version") String version) {
 
-        return ResponseEntity.ok().body(getSimulationProvider().getParticipants(name, version));
+        return ResponseEntity
+            .ok()
+            .headers(super.getCommonHeaders(requestId))
+            .body(getSimulationProvider().getParticipants(name, version));
     }
 
     /**
@@ -123,10 +126,10 @@ public class SimulationParticipantController extends AbstractRestController {
     @PutMapping("/participants")
     @ApiOperation(
             value = "Updates simulated participants",
-            notes = "Updates simulated participants, returning the updated control loop definition IDs",
+            notes = "Updates simulated participants, returning the updated automation composition definition IDs",
             response = TypedSimpleResponse.class,
             tags = {
-                "Clamp Control Loop Participant Simulator API"
+                "Clamp Automation Composition Participant Simulator API"
                 },
             authorizations = @Authorization(value = AUTHORIZATION_TYPE),
             responseHeaders = {
@@ -170,6 +173,9 @@ public class SimulationParticipantController extends AbstractRestController {
         @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
         @ApiParam(value = "Body of a participant", required = true) @RequestBody Participant body) {
 
-        return ResponseEntity.ok().body(getSimulationProvider().updateParticipant(body));
+        return ResponseEntity
+            .ok()
+            .headers(super.getCommonHeaders(requestId))
+            .body(getSimulationProvider().updateParticipant(body));
     }
 }
diff --git a/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/main/handler/ControlLoopElementHandler.java b/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/controlloop/participant/simulator/main/handler/ControlLoopElementHandler.java
deleted file mode 100644 (file)
index fd46faf..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.participant.simulator.main.handler;
-
-import java.time.Instant;
-import java.util.UUID;
-import lombok.Setter;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ControlLoopElementListener;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi;
-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;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-
-/**
- * This class handles implementation of controlLoopElement updates.
- */
-@Component
-public class ControlLoopElementHandler implements ControlLoopElementListener {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(ControlLoopElementHandler.class);
-
-    @Setter
-    private ParticipantIntermediaryApi intermediaryApi;
-
-    /**
-     * Callback method to handle a control loop element state change.
-     *
-     * @param controlLoopElementId the ID of the control loop element
-     * @param currentState the current state of the control loop element
-     * @param newState the state to which the control loop element is changing to
-     * @throws PfModelException in case of an exception
-     */
-    @Override
-    public void controlLoopElementStateChange(ToscaConceptIdentifier controlLoopId,
-                UUID controlLoopElementId, ControlLoopState currentState,
-            ControlLoopOrderedState newState) throws PfModelException {
-        switch (newState) {
-            case UNINITIALISED:
-                intermediaryApi.updateControlLoopElementState(controlLoopId,
-                        controlLoopElementId, newState, ControlLoopState.UNINITIALISED,
-                        ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE);
-                break;
-            case PASSIVE:
-                intermediaryApi.updateControlLoopElementState(controlLoopId,
-                    controlLoopElementId, newState, ControlLoopState.PASSIVE,
-                    ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE);
-                break;
-            case RUNNING:
-                intermediaryApi.updateControlLoopElementState(controlLoopId,
-                    controlLoopElementId, newState, ControlLoopState.RUNNING,
-                    ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE);
-                break;
-            default:
-                LOGGER.debug("Unknown orderedstate {}", newState);
-                break;
-        }
-    }
-
-    /**
-     * Callback method to handle an update on a control loop element.
-     *
-     * @param element the information on the control loop element
-     * @param clElementDefinition toscaNodeTemplate
-     * @throws PfModelException in case of an exception
-     */
-    @Override
-    public void controlLoopElementUpdate(ToscaConceptIdentifier controlLoopId, ControlLoopElement element,
-                ToscaNodeTemplate clElementDefinition)
-            throws PfModelException {
-        intermediaryApi.updateControlLoopElementState(controlLoopId, element.getId(), element.getOrderedState(),
-                ControlLoopState.PASSIVE, ParticipantMessageType.CONTROL_LOOP_UPDATE);
-    }
-
-    @Override
-    public void handleStatistics(UUID controlLoopElementId) throws PfModelException {
-        var clElement = intermediaryApi.getControlLoopElement(controlLoopElementId);
-        if (clElement != null) {
-            var clElementStatistics = new ClElementStatistics();
-            clElementStatistics.setControlLoopState(clElement.getState());
-            clElementStatistics.setTimeStamp(Instant.now());
-            intermediaryApi.updateControlLoopElementStatistics(controlLoopElementId, clElementStatistics);
-        }
-    }
-
-}
index d750d46..e20f0eb 100644 (file)
@@ -21,17 +21,17 @@ participant:
     participantType:
       name: org.onap.PM_CDS_Blueprint
       version: 1.0.0
-    clampControlLoopTopics:
+    clampAutomationCompositionTopics:
       topicSources:
         -
-          topic: POLICY-CLRUNTIME-PARTICIPANT
+          topic: POLICY-ACRUNTIME-PARTICIPANT
           servers:
             - ${topicServer:localhost}
           topicCommInfrastructure: dmaap
           fetchTimeout: 15000
       topicSinks:
         -
-          topic: POLICY-CLRUNTIME-PARTICIPANT
+          topic: POLICY-ACRUNTIME-PARTICIPANT
           servers:
             - ${topicServer:localhost}
           topicCommInfrastructure: dmaap
index dbd6758..5fcdcab 100644 (file)
@@ -1,4 +1,4 @@
-ONAP Tosca defined control loop Participant
+ONAP Tosca defined automation composition Participant
 Version: ${project.version}
 Built (UTC): ${maven.build.timestamp}
 ONAP https://wiki.onap.org
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.simulator.endtoend;
+package org.onap.policy.clamp.acm.participant.simulator.endtoend;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -41,19 +41,19 @@ import org.glassfish.jersey.client.ClientProperties;
 import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopUpdate;
-import org.onap.policy.clamp.controlloop.models.messages.rest.TypedSimpleResponse;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi;
-import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ControlLoopUpdateListener;
-import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ParticipantHandler;
-import org.onap.policy.clamp.controlloop.participant.simulator.main.parameters.CommonTestData;
-import org.onap.policy.clamp.controlloop.participant.simulator.main.rest.AbstractRestController;
-import org.onap.policy.clamp.controlloop.participant.simulator.main.rest.TestListenerUtils;
+import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
+import org.onap.policy.clamp.acm.participant.intermediary.comm.AutomationCompositionUpdateListener;
+import org.onap.policy.clamp.acm.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.acm.participant.simulator.main.parameters.CommonTestData;
+import org.onap.policy.clamp.acm.participant.simulator.main.rest.AbstractRestController;
+import org.onap.policy.clamp.acm.participant.simulator.main.rest.TestListenerUtils;
+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.Participant;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionUpdate;
+import org.onap.policy.clamp.models.acm.messages.rest.TypedSimpleResponse;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.common.gson.GsonMessageBodyHandler;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
@@ -97,10 +97,12 @@ class ParticipantSimulatorTest {
         synchronized (lockit) {
             if (!check) {
                 check = true;
-                ControlLoopUpdateListener clUpdateListener = new ControlLoopUpdateListener(participantHandler);
+                AutomationCompositionUpdateListener acUpdateListener =
+                    new AutomationCompositionUpdateListener(participantHandler);
 
-                ControlLoopUpdate controlLoopUpdateMsg = TestListenerUtils.createControlLoopUpdateMsg();
-                clUpdateListener.onTopicEvent(INFRA, TOPIC, null, controlLoopUpdateMsg);
+                AutomationCompositionUpdate automationCompositionUpdateMsg =
+                    TestListenerUtils.createAutomationCompositionUpdateMsg();
+                acUpdateListener.onTopicEvent(INFRA, TOPIC, null, automationCompositionUpdateMsg);
 
             }
         }
@@ -193,8 +195,8 @@ class ParticipantSimulatorTest {
 
         // GET REST call for querying the participants
         Response response = performGet(
-                PARTICIPANTS_ENDPOINT + "/" + participant.getKey().getName() + "/" + participant.getKey().getVersion(),
-                uuid);
+            PARTICIPANTS_ENDPOINT + "/" + participant.getKey().getName() + "/" + participant.getKey().getVersion(),
+            uuid);
         checkResponseEntity(response, 200, uuid);
 
         Participant[] returnValue = response.readEntity(Participant[].class);
@@ -219,18 +221,18 @@ class ParticipantSimulatorTest {
     }
 
     @Test
-    void testQueryControlLoopElements() throws Exception {
+    void testQueryAutomationCompositionElements() throws Exception {
         setUp();
         UUID uuid = UUID.randomUUID();
         ToscaConceptIdentifier participantId = CommonTestData.getParticipantId();
 
-        // GET REST call for querying the controlLoop elements
+        // GET REST call for querying the automationComposition elements
         Response response =
-                performGet(ELEMENTS_ENDPOINT + "/" + participantId.getName() + "/" + participantId.getVersion(), uuid);
+            performGet(ELEMENTS_ENDPOINT + "/" + participantId.getName() + "/" + participantId.getVersion(), uuid);
         checkResponseEntity(response, 200, uuid);
 
         Map<?, ?> returnValue = response.readEntity(Map.class);
-        // Verify the result of GET controlloop elements with what is stored
+        // Verify the result of GET automation composition elements with what is stored
         assertThat(returnValue).isEmpty();
     }
 
@@ -242,7 +244,7 @@ class ParticipantSimulatorTest {
     void testUpdateParticipant() throws Exception {
         setUp();
         List<Participant> participants = participantIntermediaryApi.getParticipants(
-                CommonTestData.getParticipantId().getName(), CommonTestData.getParticipantId().getVersion());
+            CommonTestData.getParticipantId().getName(), CommonTestData.getParticipantId().getVersion());
         assertEquals(ParticipantState.UNKNOWN, participants.get(0).getParticipantState());
         // Change the state of the participant to PASSIVE from UNKNOWN
         participants.get(0).setParticipantState(ParticipantState.PASSIVE);
@@ -253,7 +255,7 @@ class ParticipantSimulatorTest {
         checkResponseEntity(response, 200, uuid);
 
         TypedSimpleResponse<Participant> resp =
-                response.readEntity(new GenericType<TypedSimpleResponse<Participant>>() {});
+            response.readEntity(new GenericType<TypedSimpleResponse<Participant>>() {});
         assertNotNull(resp.getResponse());
         // Verify the response and state returned by PUT REST call for updating participants
         assertEquals(participants.get(0).getDefinition(), resp.getResponse().getDefinition());
@@ -261,25 +263,26 @@ class ParticipantSimulatorTest {
     }
 
     @Test
-    void testUpdateControlLoopElement() throws Exception {
+    void testUpdateAutomationCompositionElement() throws Exception {
         setUp();
-        ControlLoop controlLoop = TestListenerUtils.createControlLoop();
-        Map<UUID, ControlLoopElement> controlLoopElements = participantIntermediaryApi.getControlLoopElements(
-                controlLoop.getDefinition().getName(), controlLoop.getDefinition().getVersion());
+        AutomationComposition automationComposition = TestListenerUtils.createAutomationComposition();
+        Map<UUID, AutomationCompositionElement> automationCompositionElements =
+            participantIntermediaryApi.getAutomationCompositionElements(automationComposition.getDefinition().getName(),
+                automationComposition.getDefinition().getVersion());
 
-        UUID uuid = controlLoopElements.keySet().iterator().next();
-        ControlLoopElement controlLoopElement = controlLoopElements.get(uuid);
+        UUID uuid = automationCompositionElements.keySet().iterator().next();
+        AutomationCompositionElement automationCompositionElement = automationCompositionElements.get(uuid);
 
-        controlLoopElement.setOrderedState(ControlLoopOrderedState.PASSIVE);
-        // PUT REST call for updating ControlLoopElement
-        Response response = performPut(ELEMENTS_ENDPOINT, Entity.json(controlLoopElement), uuid);
+        automationCompositionElement.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
+        // PUT REST call for updating AutomationCompositionElement
+        Response response = performPut(ELEMENTS_ENDPOINT, Entity.json(automationCompositionElement), uuid);
         checkResponseEntity(response, 200, uuid);
 
-        TypedSimpleResponse<ControlLoopElement> resp =
-                response.readEntity(new GenericType<TypedSimpleResponse<ControlLoopElement>>() {});
+        TypedSimpleResponse<AutomationCompositionElement> resp =
+            response.readEntity(new GenericType<TypedSimpleResponse<AutomationCompositionElement>>() {});
         assertNotNull(resp.getResponse());
         // Verify the response and state returned by PUT REST call for updating participants
-        assertEquals(controlLoopElement.getDefinition(), resp.getResponse().getDefinition());
-        assertEquals(ControlLoopOrderedState.PASSIVE, resp.getResponse().getOrderedState());
+        assertEquals(automationCompositionElement.getDefinition(), resp.getResponse().getDefinition());
+        assertEquals(AutomationCompositionOrderedState.PASSIVE, resp.getResponse().getOrderedState());
     }
 }
diff --git a/participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/acm/participant/simulator/main/handler/AutomationCompositionElementHandlerTest.java b/participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/acm/participant/simulator/main/handler/AutomationCompositionElementHandlerTest.java
new file mode 100644 (file)
index 0000000..360485e
--- /dev/null
@@ -0,0 +1,91 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.participant.simulator.main.handler;
+
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.mockito.Mockito.when;
+
+import java.util.UUID;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+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.models.base.PfModelException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+
+class AutomationCompositionElementHandlerTest {
+
+    private static final String ID_NAME = "org.onap.PM_CDS_Blueprint";
+    private static final String ID_VERSION = "1.0.1";
+    private static final UUID automationCompositionElementId = UUID.randomUUID();
+    private static final ToscaConceptIdentifier automationCompositionId =
+        new ToscaConceptIdentifier(ID_NAME, ID_VERSION);
+
+    @Test
+    void testSimulatorHandlerExceptions() throws PfModelException {
+        AutomationCompositionElementHandler handler = getTestingHandler();
+
+        assertDoesNotThrow(() -> handler.automationCompositionElementStateChange(automationCompositionId,
+            automationCompositionElementId, AutomationCompositionState.UNINITIALISED,
+            AutomationCompositionOrderedState.PASSIVE));
+
+        assertDoesNotThrow(() -> handler.automationCompositionElementStateChange(automationCompositionId,
+            automationCompositionElementId, AutomationCompositionState.RUNNING,
+            AutomationCompositionOrderedState.UNINITIALISED));
+
+        assertDoesNotThrow(() -> handler.automationCompositionElementStateChange(automationCompositionId,
+            automationCompositionElementId, AutomationCompositionState.PASSIVE,
+            AutomationCompositionOrderedState.RUNNING));
+        var element = getTestingAcElement();
+        var acElementDefinition = Mockito.mock(ToscaNodeTemplate.class);
+
+        assertDoesNotThrow(
+            () -> handler.automationCompositionElementUpdate(automationCompositionId, element, acElementDefinition));
+
+        assertDoesNotThrow(() -> handler.handleStatistics(automationCompositionElementId));
+    }
+
+    AutomationCompositionElementHandler getTestingHandler() {
+        var handler = new AutomationCompositionElementHandler();
+        var intermediaryApi = Mockito.mock(ParticipantIntermediaryApi.class);
+        var element = getTestingAcElement();
+        when(intermediaryApi.getAutomationCompositionElement(automationCompositionElementId)).thenReturn(element);
+        handler.setIntermediaryApi(intermediaryApi);
+        return handler;
+    }
+
+    AutomationCompositionElement getTestingAcElement() {
+        var element = new AutomationCompositionElement();
+        element.setDefinition(automationCompositionId);
+        element.setDescription("Description");
+        element.setId(automationCompositionElementId);
+        element.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+        element.setParticipantId(automationCompositionId);
+        element.setState(AutomationCompositionState.UNINITIALISED);
+        var template = Mockito.mock(ToscaServiceTemplate.class);
+        element.setToscaServiceTemplateFragment(template);
+        return element;
+    }
+}
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.simulator.main.parameters;
+package org.onap.policy.clamp.acm.participant.simulator.main.parameters;
 
 import java.util.Arrays;
 import java.util.List;
@@ -34,7 +34,7 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
  * Class to hold/create all parameters for test cases.
  */
 public class CommonTestData {
-    public static final String PARTICIPANT_GROUP_NAME = "ControlLoopParticipantGroup";
+    public static final String PARTICIPANT_GROUP_NAME = "AutomationCompositionParticipantGroup";
     public static final String DESCRIPTION = "Participant description";
     public static final long TIME_INTERVAL = 2000;
     public static final List<TopicParameters> TOPIC_PARAMS = Arrays.asList(getTopicParams());
@@ -83,7 +83,7 @@ public class CommonTestData {
             map.put("description", DESCRIPTION);
             map.put("participantId", getParticipantId());
             map.put("participantType", getParticipantId());
-            map.put("clampControlLoopTopics", getTopicParametersMap(false));
+            map.put("clampAutomationCompositionTopics", getTopicParametersMap(false));
         }
 
         return map;
@@ -111,7 +111,7 @@ public class CommonTestData {
      */
     public static TopicParameters getTopicParams() {
         final TopicParameters topicParams = new TopicParameters();
-        topicParams.setTopic("POLICY-CLRUNTIME-PARTICIPANT");
+        topicParams.setTopic("POLICY-ACRUNTIME-PARTICIPANT");
         topicParams.setTopicCommInfrastructure("dmaap");
         topicParams.setServers(Arrays.asList("localhost"));
         return topicParams;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.simulator.main.parameters;
+package org.onap.policy.clamp.acm.participant.simulator.main.parameters;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -49,14 +49,14 @@ class TestParticipantSimulatorParameters {
     @Test
     void testParticipantPolicyParameters_NullTopicSinks() {
         final ParticipantSimulatorParameters participantParameters = commonTestData.getParticipantSimulatorParameters();
-        participantParameters.getIntermediaryParameters().getClampControlLoopTopics().setTopicSinks(null);
+        participantParameters.getIntermediaryParameters().getClampAutomationCompositionTopics().setTopicSinks(null);
         assertThat(validatorFactory.getValidator().validate(participantParameters)).isNotEmpty();
     }
 
     @Test
     void testParticipantPolicyParameters_NullTopicSources() {
         final ParticipantSimulatorParameters participantParameters = commonTestData.getParticipantSimulatorParameters();
-        participantParameters.getIntermediaryParameters().getClampControlLoopTopics().setTopicSources(null);
+        participantParameters.getIntermediaryParameters().getClampAutomationCompositionTopics().setTopicSources(null);
         assertThat(validatorFactory.getValidator().validate(participantParameters)).isNotEmpty();
     }
 }
diff --git a/participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/acm/participant/simulator/main/rest/TestListenerUtils.java b/participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/acm/participant/simulator/main/rest/TestListenerUtils.java
new file mode 100644 (file)
index 0000000..f434002
--- /dev/null
@@ -0,0 +1,260 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.participant.simulator.main.rest;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.time.Instant;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.onap.policy.clamp.acm.participant.simulator.main.parameters.CommonTestData;
+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.ParticipantDefinition;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantUpdates;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantUtils;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionStateChange;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionUpdate;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantUpdate;
+import org.onap.policy.clamp.models.acm.utils.AcmUtils;
+import org.onap.policy.common.utils.coder.Coder;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.common.utils.coder.StandardCoder;
+import org.onap.policy.common.utils.coder.YamlJsonTranslator;
+import org.onap.policy.common.utils.resources.ResourceUtils;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class TestListenerUtils {
+
+    private static final YamlJsonTranslator yamlTranslator = new YamlJsonTranslator();
+    private static final Coder CODER = new StandardCoder();
+    static CommonTestData commonTestData = new CommonTestData();
+    private static final Logger LOGGER = LoggerFactory.getLogger(TestListenerUtils.class);
+
+    /**
+     * Method to create a automationComposition from a yaml file.
+     *
+     * @return AutomationComposition automation composition
+     */
+    public static AutomationComposition createAutomationComposition() {
+        AutomationComposition automationComposition = new AutomationComposition();
+        Map<UUID, AutomationCompositionElement> elements = new LinkedHashMap<>();
+        ToscaServiceTemplate toscaServiceTemplate = testAutomationCompositionRead();
+        Map<String, ToscaNodeTemplate> nodeTemplatesMap =
+            toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates();
+        for (Map.Entry<String, ToscaNodeTemplate> toscaInputEntry : nodeTemplatesMap.entrySet()) {
+            AutomationCompositionElement acElement = new AutomationCompositionElement();
+            acElement.setId(UUID.randomUUID());
+
+            ToscaConceptIdentifier acElementParticipantId = new ToscaConceptIdentifier();
+            acElementParticipantId.setName(toscaInputEntry.getKey());
+            acElementParticipantId.setVersion(toscaInputEntry.getValue().getVersion());
+            acElement.setParticipantId(acElementParticipantId);
+            acElement.setParticipantType(acElementParticipantId);
+
+            acElement.setDefinition(acElementParticipantId);
+            acElement.setState(AutomationCompositionState.UNINITIALISED);
+            acElement.setDescription(toscaInputEntry.getValue().getDescription());
+            acElement.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+            elements.put(acElement.getId(), acElement);
+        }
+        automationComposition.setElements(elements);
+        automationComposition.setName("PMSHInstance0");
+        automationComposition.setVersion("1.0.0");
+
+        ToscaConceptIdentifier definition = new ToscaConceptIdentifier();
+        definition.setName("PMSHInstance0");
+        definition.setVersion("1.0.0");
+        automationComposition.setDefinition(definition);
+
+        return automationComposition;
+    }
+
+    /**
+     * Method to create AutomationCompositionStateChange message from the arguments passed.
+     *
+     * @param automationCompositionOrderedState automationCompositionOrderedState
+     *
+     * @return AutomationCompositionStateChange message
+     */
+    public static AutomationCompositionStateChange createAutomationCompositionStateChangeMsg(
+        final AutomationCompositionOrderedState automationCompositionOrderedState) {
+        final AutomationCompositionStateChange acStateChangeMsg = new AutomationCompositionStateChange();
+
+        ToscaConceptIdentifier automationCompositionId = new ToscaConceptIdentifier("PMSHInstance0", "1.0.0");
+        ToscaConceptIdentifier participantId = new ToscaConceptIdentifier("org.onap.PM_CDS_Blueprint", "1.0.0");
+
+        acStateChangeMsg.setAutomationCompositionId(automationCompositionId);
+        acStateChangeMsg.setParticipantId(participantId);
+        acStateChangeMsg.setTimestamp(Instant.now());
+        acStateChangeMsg.setOrderedState(automationCompositionOrderedState);
+
+        return acStateChangeMsg;
+    }
+
+    /**
+     * Method to create AutomationCompositionUpdateMsg.
+     *
+     * @return AutomationCompositionUpdate message
+     */
+    public static AutomationCompositionUpdate createAutomationCompositionUpdateMsg() {
+        final AutomationCompositionUpdate acUpdateMsg = new AutomationCompositionUpdate();
+        ToscaConceptIdentifier automationCompositionId = new ToscaConceptIdentifier("PMSHInstance0", "1.0.0");
+        ToscaConceptIdentifier participantId = new ToscaConceptIdentifier("org.onap.PM_Policy", "0.0.0");
+
+        acUpdateMsg.setAutomationCompositionId(automationCompositionId);
+        acUpdateMsg.setParticipantId(participantId);
+        acUpdateMsg.setMessageId(UUID.randomUUID());
+        acUpdateMsg.setTimestamp(Instant.now());
+
+        Map<UUID, AutomationCompositionElement> elements = new LinkedHashMap<>();
+        ToscaServiceTemplate toscaServiceTemplate = testAutomationCompositionRead();
+        Map<String, ToscaNodeTemplate> nodeTemplatesMap =
+            toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates();
+        for (Map.Entry<String, ToscaNodeTemplate> toscaInputEntry : nodeTemplatesMap.entrySet()) {
+            if (ParticipantUtils.checkIfNodeTemplateIsAutomationCompositionElement(toscaInputEntry.getValue(),
+                toscaServiceTemplate)) {
+                AutomationCompositionElement acElement = new AutomationCompositionElement();
+                acElement.setId(UUID.randomUUID());
+                var acParticipantType =
+                    ParticipantUtils.findParticipantType(toscaInputEntry.getValue().getProperties());
+
+                acElement.setParticipantId(acParticipantType);
+                acElement.setParticipantType(acParticipantType);
+
+                acElement.setDefinition(
+                    new ToscaConceptIdentifier(toscaInputEntry.getKey(), toscaInputEntry.getValue().getVersion()));
+                acElement.setState(AutomationCompositionState.UNINITIALISED);
+                acElement.setDescription(toscaInputEntry.getValue().getDescription());
+                acElement.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
+                elements.put(acElement.getId(), acElement);
+            }
+        }
+
+        List<ParticipantUpdates> participantUpdates = new ArrayList<>();
+        for (AutomationCompositionElement element : elements.values()) {
+            AcmUtils.prepareParticipantUpdate(element, participantUpdates);
+        }
+        acUpdateMsg.setParticipantUpdatesList(participantUpdates);
+        return acUpdateMsg;
+    }
+
+    /**
+     * Method to create participantUpdateMsg.
+     *
+     * @return ParticipantUpdate message
+     */
+    public static ParticipantUpdate createParticipantUpdateMsg() {
+        final ParticipantUpdate participantUpdateMsg = new ParticipantUpdate();
+        ToscaConceptIdentifier participantId = new ToscaConceptIdentifier("org.onap.PM_Policy", "1.0.0");
+        ToscaConceptIdentifier participantType =
+            new ToscaConceptIdentifier("org.onap.policy.acm.PolicyAutomationCompositionParticipant", "2.3.1");
+
+        participantUpdateMsg.setParticipantId(participantId);
+        participantUpdateMsg.setTimestamp(Instant.now());
+        participantUpdateMsg.setParticipantType(participantType);
+        participantUpdateMsg.setTimestamp(Instant.ofEpochMilli(3000));
+        participantUpdateMsg.setMessageId(UUID.randomUUID());
+
+        ToscaServiceTemplate toscaServiceTemplate = testAutomationCompositionRead();
+        // Add policies to the toscaServiceTemplate
+        List<ParticipantDefinition> participantDefinitionUpdates = new ArrayList<>();
+        for (Map.Entry<String, ToscaNodeTemplate> toscaInputEntry : toscaServiceTemplate.getToscaTopologyTemplate()
+            .getNodeTemplates().entrySet()) {
+            if (ParticipantUtils.checkIfNodeTemplateIsAutomationCompositionElement(toscaInputEntry.getValue(),
+                toscaServiceTemplate)) {
+                var acParticipantType =
+                    ParticipantUtils.findParticipantType(toscaInputEntry.getValue().getProperties());
+                AcmUtils.prepareParticipantDefinitionUpdate(acParticipantType, toscaInputEntry.getKey(),
+                    toscaInputEntry.getValue(), participantDefinitionUpdates, null);
+            }
+        }
+
+        participantUpdateMsg.setParticipantDefinitionUpdates(participantDefinitionUpdates);
+        return participantUpdateMsg;
+    }
+
+    /**
+     * Method to create AutomationCompositionUpdate using the arguments passed.
+     *
+     * @param jsonFilePath the path of the automation composition content
+     *
+     * @return AutomationCompositionUpdate message
+     * @throws CoderException exception while reading the file to object
+     */
+    public static AutomationCompositionUpdate createParticipantAcUpdateMsgFromJson(String jsonFilePath)
+        throws CoderException {
+        AutomationCompositionUpdate automationCompositionUpdateMsg =
+            CODER.decode(new File(jsonFilePath), AutomationCompositionUpdate.class);
+        return automationCompositionUpdateMsg;
+    }
+
+    private static ToscaServiceTemplate testAutomationCompositionRead() {
+        Set<String> automationCompositionDirectoryContents =
+            ResourceUtils.getDirectoryContents("src/test/resources/rest/servicetemplates");
+
+        boolean atLeastOneAutomationCompositionTested = false;
+        ToscaServiceTemplate toscaServiceTemplate = null;
+
+        for (String automationCompositionFilePath : automationCompositionDirectoryContents) {
+            if (!automationCompositionFilePath.endsWith(".yaml")) {
+                continue;
+            }
+            atLeastOneAutomationCompositionTested = true;
+            toscaServiceTemplate = testAutomationCompositionYamlSerialization(automationCompositionFilePath);
+        }
+
+        assertTrue(atLeastOneAutomationCompositionTested);
+        return toscaServiceTemplate;
+    }
+
+    private static ToscaServiceTemplate testAutomationCompositionYamlSerialization(
+        String automationCompositionFilePath) {
+        try {
+            String automationCompositionString = ResourceUtils.getResourceAsString(automationCompositionFilePath);
+            if (automationCompositionString == null) {
+                throw new FileNotFoundException(automationCompositionFilePath);
+            }
+
+            ToscaServiceTemplate serviceTemplate =
+                yamlTranslator.fromYaml(automationCompositionString, ToscaServiceTemplate.class);
+            return serviceTemplate;
+        } catch (FileNotFoundException e) {
+            LOGGER.error("cannot find YAML file", automationCompositionFilePath);
+            throw new IllegalArgumentException(e);
+        }
+    }
+}
diff --git a/participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/controlloop/participant/simulator/main/handler/ControlLoopElementHandlerTest.java b/participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/controlloop/participant/simulator/main/handler/ControlLoopElementHandlerTest.java
deleted file mode 100644 (file)
index b38adbc..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.participant.simulator.main.handler;
-
-import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
-import static org.mockito.Mockito.when;
-
-import java.util.UUID;
-import org.junit.jupiter.api.Test;
-import org.mockito.Mockito;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi;
-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;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-
-class ControlLoopElementHandlerTest {
-
-    private static final String ID_NAME = "org.onap.PM_CDS_Blueprint";
-    private static final String ID_VERSION = "1.0.1";
-    private static final UUID controlLoopElementId = UUID.randomUUID();
-    private static final ToscaConceptIdentifier controlLoopId = new ToscaConceptIdentifier(ID_NAME, ID_VERSION);
-
-    @Test
-    void testSimulatorHandlerExceptions() throws PfModelException {
-        ControlLoopElementHandler handler = getTestingHandler();
-
-        assertDoesNotThrow(() -> handler
-                .controlLoopElementStateChange(controlLoopId,
-                        controlLoopElementId,
-                        ControlLoopState.UNINITIALISED,
-                        ControlLoopOrderedState.PASSIVE));
-
-        assertDoesNotThrow(() -> handler
-                .controlLoopElementStateChange(controlLoopId,
-                        controlLoopElementId,
-                        ControlLoopState.RUNNING,
-                        ControlLoopOrderedState.UNINITIALISED));
-
-        assertDoesNotThrow(() -> handler
-                .controlLoopElementStateChange(controlLoopId,
-                        controlLoopElementId,
-                        ControlLoopState.PASSIVE,
-                        ControlLoopOrderedState.RUNNING));
-        var element = getTestingClElement();
-        var clElementDefinition = Mockito.mock(ToscaNodeTemplate.class);
-
-        assertDoesNotThrow(() -> handler
-                .controlLoopElementUpdate(controlLoopId, element, clElementDefinition));
-
-        assertDoesNotThrow(() -> handler
-                .handleStatistics(controlLoopElementId));
-    }
-
-    ControlLoopElementHandler getTestingHandler() {
-        var handler = new ControlLoopElementHandler();
-        var intermediaryApi = Mockito.mock(ParticipantIntermediaryApi.class);
-        var element = getTestingClElement();
-        when(intermediaryApi.getControlLoopElement(controlLoopElementId)).thenReturn(element);
-        handler.setIntermediaryApi(intermediaryApi);
-        return handler;
-    }
-
-    ControlLoopElement getTestingClElement() {
-        var element = new ControlLoopElement();
-        element.setDefinition(controlLoopId);
-        element.setDescription("Description");
-        element.setId(controlLoopElementId);
-        element.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
-        element.setParticipantId(controlLoopId);
-        element.setState(ControlLoopState.UNINITIALISED);
-        var template = Mockito.mock(ToscaServiceTemplate.class);
-        element.setToscaServiceTemplateFragment(template);
-        return element;
-    }
-
-}
diff --git a/participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/controlloop/participant/simulator/main/rest/TestListenerUtils.java b/participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/controlloop/participant/simulator/main/rest/TestListenerUtils.java
deleted file mode 100644 (file)
index 9f6a31e..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.participant.simulator.main.rest;
-
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.time.Instant;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import org.onap.policy.clamp.controlloop.common.utils.CommonUtils;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantDefinition;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantUpdates;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantUtils;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopStateChange;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopUpdate;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdate;
-import org.onap.policy.clamp.controlloop.participant.simulator.main.parameters.CommonTestData;
-import org.onap.policy.common.utils.coder.Coder;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.common.utils.coder.StandardCoder;
-import org.onap.policy.common.utils.coder.YamlJsonTranslator;
-import org.onap.policy.common.utils.resources.ResourceUtils;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class TestListenerUtils {
-
-    private static final YamlJsonTranslator yamlTranslator = new YamlJsonTranslator();
-    private static final Coder CODER = new StandardCoder();
-    static CommonTestData commonTestData = new CommonTestData();
-    private static final Logger LOGGER = LoggerFactory.getLogger(TestListenerUtils.class);
-
-    /**
-     * Method to create a controlLoop from a yaml file.
-     *
-     * @return ControlLoop controlloop
-     */
-    public static ControlLoop createControlLoop() {
-        ControlLoop controlLoop = new ControlLoop();
-        Map<UUID, ControlLoopElement> elements = new LinkedHashMap<>();
-        ToscaServiceTemplate toscaServiceTemplate = testControlLoopRead();
-        Map<String, ToscaNodeTemplate> nodeTemplatesMap =
-                toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates();
-        for (Map.Entry<String, ToscaNodeTemplate> toscaInputEntry : nodeTemplatesMap.entrySet()) {
-            ControlLoopElement clElement = new ControlLoopElement();
-            clElement.setId(UUID.randomUUID());
-
-            ToscaConceptIdentifier clElementParticipantId = new ToscaConceptIdentifier();
-            clElementParticipantId.setName(toscaInputEntry.getKey());
-            clElementParticipantId.setVersion(toscaInputEntry.getValue().getVersion());
-            clElement.setParticipantId(clElementParticipantId);
-            clElement.setParticipantType(clElementParticipantId);
-
-            clElement.setDefinition(clElementParticipantId);
-            clElement.setState(ControlLoopState.UNINITIALISED);
-            clElement.setDescription(toscaInputEntry.getValue().getDescription());
-            clElement.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
-            elements.put(clElement.getId(), clElement);
-        }
-        controlLoop.setElements(elements);
-        controlLoop.setName("PMSHInstance0");
-        controlLoop.setVersion("1.0.0");
-
-        ToscaConceptIdentifier definition = new ToscaConceptIdentifier();
-        definition.setName("PMSHInstance0");
-        definition.setVersion("1.0.0");
-        controlLoop.setDefinition(definition);
-
-        return controlLoop;
-    }
-
-    /**
-     * Method to create ControlLoopStateChange message from the arguments passed.
-     *
-     * @param controlLoopOrderedState controlLoopOrderedState
-     *
-     * @return ControlLoopStateChange message
-     */
-    public static ControlLoopStateChange createControlLoopStateChangeMsg(
-            final ControlLoopOrderedState controlLoopOrderedState) {
-        final ControlLoopStateChange clStateChangeMsg = new ControlLoopStateChange();
-
-        ToscaConceptIdentifier controlLoopId = new ToscaConceptIdentifier("PMSHInstance0", "1.0.0");
-        ToscaConceptIdentifier participantId = new ToscaConceptIdentifier("org.onap.PM_CDS_Blueprint", "1.0.0");
-
-        clStateChangeMsg.setControlLoopId(controlLoopId);
-        clStateChangeMsg.setParticipantId(participantId);
-        clStateChangeMsg.setTimestamp(Instant.now());
-        clStateChangeMsg.setOrderedState(controlLoopOrderedState);
-
-        return clStateChangeMsg;
-    }
-
-    /**
-     * Method to create ControlLoopUpdateMsg.
-     *
-     * @return ControlLoopUpdate message
-     */
-    public static ControlLoopUpdate createControlLoopUpdateMsg() {
-        final ControlLoopUpdate clUpdateMsg = new ControlLoopUpdate();
-        ToscaConceptIdentifier controlLoopId = new ToscaConceptIdentifier("PMSHInstance0", "1.0.0");
-        ToscaConceptIdentifier participantId = new ToscaConceptIdentifier("org.onap.PM_Policy", "0.0.0");
-
-        clUpdateMsg.setControlLoopId(controlLoopId);
-        clUpdateMsg.setParticipantId(participantId);
-        clUpdateMsg.setMessageId(UUID.randomUUID());
-        clUpdateMsg.setTimestamp(Instant.now());
-
-        Map<UUID, ControlLoopElement> elements = new LinkedHashMap<>();
-        ToscaServiceTemplate toscaServiceTemplate = testControlLoopRead();
-        Map<String, ToscaNodeTemplate> nodeTemplatesMap =
-                toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates();
-        for (Map.Entry<String, ToscaNodeTemplate> toscaInputEntry : nodeTemplatesMap.entrySet()) {
-            if (ParticipantUtils.checkIfNodeTemplateIsControlLoopElement(toscaInputEntry.getValue(),
-                    toscaServiceTemplate)) {
-                ControlLoopElement clElement = new ControlLoopElement();
-                clElement.setId(UUID.randomUUID());
-                var clParticipantType =
-                        ParticipantUtils.findParticipantType(toscaInputEntry.getValue().getProperties());
-
-                clElement.setParticipantId(clParticipantType);
-                clElement.setParticipantType(clParticipantType);
-
-                clElement.setDefinition(
-                        new ToscaConceptIdentifier(toscaInputEntry.getKey(), toscaInputEntry.getValue().getVersion()));
-                clElement.setState(ControlLoopState.UNINITIALISED);
-                clElement.setDescription(toscaInputEntry.getValue().getDescription());
-                clElement.setOrderedState(ControlLoopOrderedState.PASSIVE);
-                elements.put(clElement.getId(), clElement);
-            }
-        }
-
-        List<ParticipantUpdates> participantUpdates = new ArrayList<>();
-        for (ControlLoopElement element : elements.values()) {
-            CommonUtils.prepareParticipantUpdate(element, participantUpdates);
-        }
-        clUpdateMsg.setParticipantUpdatesList(participantUpdates);
-        return clUpdateMsg;
-    }
-
-    /**
-     * Method to create participantUpdateMsg.
-     *
-     * @return ParticipantUpdate message
-     */
-    public static ParticipantUpdate createParticipantUpdateMsg() {
-        final ParticipantUpdate participantUpdateMsg = new ParticipantUpdate();
-        ToscaConceptIdentifier participantId = new ToscaConceptIdentifier("org.onap.PM_Policy", "1.0.0");
-        ToscaConceptIdentifier participantType =
-                new ToscaConceptIdentifier("org.onap.policy.controlloop.PolicyControlLoopParticipant", "2.3.1");
-
-        participantUpdateMsg.setParticipantId(participantId);
-        participantUpdateMsg.setTimestamp(Instant.now());
-        participantUpdateMsg.setParticipantType(participantType);
-        participantUpdateMsg.setTimestamp(Instant.ofEpochMilli(3000));
-        participantUpdateMsg.setMessageId(UUID.randomUUID());
-
-        ToscaServiceTemplate toscaServiceTemplate = testControlLoopRead();
-        // Add policies to the toscaServiceTemplate
-        List<ParticipantDefinition> participantDefinitionUpdates = new ArrayList<>();
-        for (Map.Entry<String, ToscaNodeTemplate> toscaInputEntry : toscaServiceTemplate.getToscaTopologyTemplate()
-                .getNodeTemplates().entrySet()) {
-            if (ParticipantUtils.checkIfNodeTemplateIsControlLoopElement(toscaInputEntry.getValue(),
-                    toscaServiceTemplate)) {
-                var clParticipantType =
-                        ParticipantUtils.findParticipantType(toscaInputEntry.getValue().getProperties());
-                CommonUtils.prepareParticipantDefinitionUpdate(clParticipantType, toscaInputEntry.getKey(),
-                        toscaInputEntry.getValue(), participantDefinitionUpdates, null);
-            }
-        }
-
-        participantUpdateMsg.setParticipantDefinitionUpdates(participantDefinitionUpdates);
-        return participantUpdateMsg;
-    }
-
-    /**
-     * Method to create ControlLoopUpdate using the arguments passed.
-     *
-     * @param jsonFilePath the path of the controlloop content
-     *
-     * @return ControlLoopUpdate message
-     * @throws CoderException exception while reading the file to object
-     */
-    public static ControlLoopUpdate createParticipantClUpdateMsgFromJson(String jsonFilePath) throws CoderException {
-        ControlLoopUpdate controlLoopUpdateMsg = CODER.decode(new File(jsonFilePath), ControlLoopUpdate.class);
-        return controlLoopUpdateMsg;
-    }
-
-    private static ToscaServiceTemplate testControlLoopRead() {
-        Set<String> controlLoopDirectoryContents =
-                ResourceUtils.getDirectoryContents("src/test/resources/rest/servicetemplates");
-
-        boolean atLeastOneControlLoopTested = false;
-        ToscaServiceTemplate toscaServiceTemplate = null;
-
-        for (String controlLoopFilePath : controlLoopDirectoryContents) {
-            if (!controlLoopFilePath.endsWith(".yaml")) {
-                continue;
-            }
-            atLeastOneControlLoopTested = true;
-            toscaServiceTemplate = testControlLoopYamlSerialization(controlLoopFilePath);
-        }
-
-        assertTrue(atLeastOneControlLoopTested);
-        return toscaServiceTemplate;
-    }
-
-    private static ToscaServiceTemplate testControlLoopYamlSerialization(String controlLoopFilePath) {
-        try {
-            String controlLoopString = ResourceUtils.getResourceAsString(controlLoopFilePath);
-            if (controlLoopString == null) {
-                throw new FileNotFoundException(controlLoopFilePath);
-            }
-
-            ToscaServiceTemplate serviceTemplate =
-                    yamlTranslator.fromYaml(controlLoopString, ToscaServiceTemplate.class);
-            return serviceTemplate;
-        } catch (FileNotFoundException e) {
-            LOGGER.error("cannot find YAML file", controlLoopFilePath);
-            throw new IllegalArgumentException(e);
-        }
-    }
-}
index a4a1f99..ccc5458 100644 (file)
@@ -16,10 +16,10 @@ participant.intermediaryParameters.participantId.name=org.onap.PM_CDS_Blueprint
 participant.intermediaryParameters.participantId.version=1.0.0
 participant.intermediaryParameters.participantType.name=org.onap.PM_CDS_Blueprint
 participant.intermediaryParameters.participantType.version=1.0.0
-participant.intermediaryParameters.clampControlLoopTopics.topicSources[0].topic=POLICY-CLRUNTIME-PARTICIPANT
-participant.intermediaryParameters.clampControlLoopTopics.topicSources[0].servers[0]=localhost
-participant.intermediaryParameters.clampControlLoopTopics.topicSources[0].topicCommInfrastructure=dmaap
-participant.intermediaryParameters.clampControlLoopTopics.topicSources[0].fetchTimeout=15000
-participant.intermediaryParameters.clampControlLoopTopics.topicSinks[0].topic=POLICY-CLRUNTIME-PARTICIPANT
-participant.intermediaryParameters.clampControlLoopTopics.topicSinks[0].servers[0]=localhost
-participant.intermediaryParameters.clampControlLoopTopics.topicSinks[0].topicCommInfrastructure=dmaap
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSources[0].topic=POLICY-ACRUNTIME-PARTICIPANT
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSources[0].servers[0]=localhost
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSources[0].topicCommInfrastructure=dmaap
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSources[0].fetchTimeout=15000
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSinks[0].topic=POLICY-ACRUNTIME-PARTICIPANT
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSinks[0].servers[0]=localhost
+participant.intermediaryParameters.clampAutomationCompositionTopics.topicSinks[0].topicCommInfrastructure=dmaap
@@ -10,14 +10,14 @@ data_types:
         type: string
         required: true
 node_types:
-  org.onap.policy.clamp.controlloop.Participant:
+  org.onap.policy.clamp.acm.Participant:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
       provider:
         type: string
         requred: false
-  org.onap.policy.clamp.controlloop.ControlLoopElement:
+  org.onap.policy.clamp.acm.AutomationCompositionElement:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
@@ -34,11 +34,11 @@ node_types:
         - greater-or-equal: 0
         metadata:
             common: true
-        description: A value indicating the start phase in which this control loop element will be started, the
-                     first start phase is zero. Control Loop Elements are started in their start_phase order and stopped
-                     in reverse start phase order. Control Loop Elements with the same start phase are started and
+        description: A value indicating the start phase in which this automation composition element will be started, the
+                     first start phase is zero. Automation Composition Elements are started in their start_phase order and stopped
+                     in reverse start phase order. Automation Composition Elements with the same start phase are started and
                      stopped simultaneously
-  org.onap.policy.clamp.controlloop.ControlLoop:
+  org.onap.policy.clamp.acm.AutomationComposition:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
@@ -50,94 +50,94 @@ node_types:
         required: true
         entry_schema:
           type: onap.datatypes.ToscaConceptIdentifier
-  org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement:
+  org.onap.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       dcae_blueprint_id:
         type: onap.datatypes.ToscaConceptIdentifier
         requred: true
-  org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement:
+  org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       policy_type_id:
         type: onap.datatypes.ToscaConceptIdentifier
         requred: true
-  org.onap.policy.clamp.controlloop.CDSControlLoopElement:
+  org.onap.policy.clamp.acm.CDSAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       cds_blueprint_id:
         type: onap.datatypes.ToscaConceptIdentifier
         requred: true
 topology_template:
   node_templates:
-    org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant:
+    org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant:
       version: 2.3.4
-      type: org.onap.policy.clamp.controlloop.Participant
+      type: org.onap.policy.clamp.acm.Participant
       type_version: 1.0.1
       description: Participant for DCAE microservices
       properties:
         provider: ONAP
-    org.onap.policy.controlloop.PolicyControlLoopParticipant:
+    org.onap.policy.acm.PolicyAutomationCompositionParticipant:
       version: 2.3.1
-      type: org.onap.policy.clamp.controlloop.Participant
+      type: org.onap.policy.clamp.acm.Participant
       type_version: 1.0.1
       description: Participant for DCAE microservices
       properties:
         provider: ONAP
-    org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant:
+    org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant:
       version: 2.2.1
-      type: org.onap.policy.clamp.controlloop.Participant
+      type: org.onap.policy.clamp.acm.Participant
       type_version: 1.0.1
       description: Participant for DCAE microservices
       properties:
         provider: ONAP
     org.onap.domain.pmsh.PMSH_DCAEMicroservice:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement
+      type: org.onap.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the DCAE microservice for Performance Management Subscription Handling
+      description: Automation composition element for the DCAE microservice for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant
+          name: org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant
           version: 2.3.4
         dcae_blueprint_id:
           name: org.onap.dcae.blueprints.PMSHBlueprint
           version: 1.0.0
-    org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement:
+    org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement
+      type: org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the monitoring policy for Performance Management Subscription Handling
+      description: Automation composition element for the monitoring policy for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
+          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
           version: 2.3.1
         policy_type_id:
           name: onap.policies.monitoring.pm-subscription-handler
           version: 1.0.0
-    org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement:
+    org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement
+      type: org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the operational policy for Performance Management Subscription Handling
+      description: Automation composition element for the operational policy for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
+          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
           version: 2.3.1
         policy_type_id:
           name: onap.policies.operational.pm-subscription-handler
           version: 1.0.0
-    org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement:
+    org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoopElement
+      type: org.onap.policy.clamp.acm.AutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for CDS for Performance Management Subscription Handling
+      description: Automation composition element for CDS for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
@@ -146,19 +146,19 @@ topology_template:
         cds_blueprint_id:
           name: org.onap.ccsdk.cds.PMSHCdsBlueprint
           version: 1.0.0
-    org.onap.domain.pmsh.PMSHControlLoopDefinition:
+    org.onap.domain.pmsh.PMSHAutomationCompositionDefinition:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoop
+      type: org.onap.policy.clamp.acm.AutomationComposition
       type_version: 1.0.0
-      description: Control loop for Performance Management Subscription Handling
+      description: Automation composition for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         elements:
           - name: org.onap.domain.pmsh.PMSH_DCAEMicroservice
             version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement
+          - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement
             version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement
+          - name: org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement
             version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement
+          - name: org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement
             version: 1.2.3
index c607836..936d26b 100644 (file)
@@ -30,7 +30,7 @@
 
     <artifactId>policy-clamp-participant-intermediary</artifactId>
     <name>${project.artifactId}</name>
-    <description>Common intermediary library for managing DMaaP participant messaging and holding participant and control
-     loop state</description>
+    <description>Common intermediary library for managing DMaaP participant messaging and holding participant and
+                 Automation Composition state</description>
 
 </project>
diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/api/AutomationCompositionElementListener.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/api/AutomationCompositionElementListener.java
new file mode 100644 (file)
index 0000000..9affd57
--- /dev/null
@@ -0,0 +1,65 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+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.models.base.PfModelException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
+
+/**
+ * This interface is implemented by participant implementations to receive updates on automation composition elements.
+ */
+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(ToscaConceptIdentifier automationCompositionId,
+        UUID automationCompositionElementId, AutomationCompositionState currentState,
+        AutomationCompositionOrderedState newState) throws PfModelException;
+
+    /**
+     * Handle an update on a automation composition element.
+     *
+     * @param element the information on the automation composition element
+     * @param automationCompositionElementDefinition toscaNodeTemplate
+     * @throws PfModelException from Policy framework
+     */
+    public void automationCompositionElementUpdate(ToscaConceptIdentifier automationCompositionId,
+        AutomationCompositionElement element, ToscaNodeTemplate automationCompositionElementDefinition)
+        throws PfModelException;
+
+    /**
+     * Handle automationCompositionElement statistics.
+     *
+     * @param automationCompositionElementId automationCompositionElement id
+     * @throws PfModelException in case of a model exception
+     */
+    public void handleStatistics(UUID automationCompositionElementId) throws PfModelException;
+}
diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/api/ParticipantIntermediaryApi.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/api/ParticipantIntermediaryApi.java
new file mode 100644 (file)
index 0000000..79f5259
--- /dev/null
@@ -0,0 +1,130 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.participant.intermediary.api;
+
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import org.onap.policy.clamp.models.acm.concepts.AcElementStatistics;
+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.Participant;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantStatistics;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty;
+
+/**
+ * This interface is used by participant implementations to use the participant intermediary.
+ */
+public interface ParticipantIntermediaryApi {
+
+    /**
+     * Register a listener for automation composition elements that are mediated by the intermediary.
+     *
+     * @param automationCompositionElementListener The automation composition element listener to register
+     */
+    void registerAutomationCompositionElementListener(
+        AutomationCompositionElementListener automationCompositionElementListener);
+
+    /**
+     * Get participants loops from the intermediary API.
+     *
+     * @param name the participant name, null for all
+     * @param version the participant version, null for all
+     * @return the participants
+     */
+    List<Participant> getParticipants(String name, String version);
+
+    /**
+     * Get common properties of a automation composition element.
+     *
+     * @param acElementDef the automation composition element definition
+     * @return the common properties
+     */
+    Map<String, ToscaProperty> getAcElementDefinitionCommonProperties(ToscaConceptIdentifier acElementDef);
+
+    /**
+     * Update the state of a participant.
+     *
+     * @param definition the definition of the participant to update the state on
+     * @param state the state of the participant
+     * @return the participant
+     */
+    Participant updateParticipantState(ToscaConceptIdentifier definition, ParticipantState state);
+
+    /**
+     * Update the statistics of a participant.
+     *
+     * @param participantStatistics the statistics of the participant
+     */
+    void updateParticipantStatistics(ParticipantStatistics participantStatistics);
+
+    /**
+     * Get automation compositions from the intermediary API.
+     *
+     * @param name the automation composition element name, null for all
+     * @param version the automation composition element version, null for all
+     * @return the automation composition elements
+     */
+    AutomationCompositions getAutomationCompositions(String name, String version);
+
+    /**
+     * Get automation composition elements from the intermediary API.
+     *
+     * @param name the automation composition element name, null for all
+     * @param version the automation composition element version, null for all
+     * @return the automation composition elements
+     */
+    Map<UUID, AutomationCompositionElement> getAutomationCompositionElements(String name, String version);
+
+    /**
+     * Get automation composition element from the intermediary API.
+     *
+     * @param id automation composition element ID
+     * @return the automation composition element
+     */
+    AutomationCompositionElement getAutomationCompositionElement(UUID id);
+
+    /**
+     * 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(ToscaConceptIdentifier automationCompositionId,
+        UUID id, AutomationCompositionOrderedState currentState, AutomationCompositionState newState,
+        ParticipantMessageType messageType);
+
+    /**
+     * Update the automation composition element statistics.
+     *
+     * @param id the ID of the automation composition element to update the state on
+     * @param elementStatistics the updated statistics
+     */
+    void updateAutomationCompositionElementStatistics(UUID id, AcElementStatistics elementStatistics);
+}
diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/ParticipantIntermediaryApiImpl.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/ParticipantIntermediaryApiImpl.java
new file mode 100644 (file)
index 0000000..1a1f850
--- /dev/null
@@ -0,0 +1,140 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.participant.intermediary.api.impl;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+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.acm.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.models.acm.concepts.AcElementStatistics;
+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.Participant;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantStatistics;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty;
+import org.springframework.stereotype.Component;
+
+/**
+ * This class is api implementation used by participant intermediary.
+ */
+@Component
+public class ParticipantIntermediaryApiImpl implements ParticipantIntermediaryApi {
+
+    // The handler for the participant intermediary
+    private final ParticipantHandler participantHandler;
+
+    // The handler for the automationComposition intermediary
+    private final AutomationCompositionHandler automationCompositionHandler;
+
+    /**
+     * Constructor.
+     *
+     * @param participantHandler ParticipantHandler
+     * @param automationCompositionHandler AutomationCompositionHandler
+     */
+    public ParticipantIntermediaryApiImpl(ParticipantHandler participantHandler,
+        AutomationCompositionHandler automationCompositionHandler) {
+        this.participantHandler = participantHandler;
+        this.automationCompositionHandler = automationCompositionHandler;
+    }
+
+    @Override
+    public void registerAutomationCompositionElementListener(
+        AutomationCompositionElementListener automationCompositionElementListener) {
+        automationCompositionHandler.registerAutomationCompositionElementListener(automationCompositionElementListener);
+    }
+
+    @Override
+    public List<Participant> getParticipants(String name, String version) {
+        return List.of(participantHandler.getParticipant(name, version));
+    }
+
+    @Override
+    public Map<String, ToscaProperty> getAcElementDefinitionCommonProperties(ToscaConceptIdentifier acElementDef) {
+        return participantHandler.getAcElementDefinitionCommonProperties(acElementDef);
+    }
+
+    @Override
+    public Participant updateParticipantState(ToscaConceptIdentifier definition, ParticipantState state) {
+        return participantHandler.updateParticipantState(definition, state);
+    }
+
+    @Override
+    public void updateParticipantStatistics(ParticipantStatistics participantStatistics) {
+        participantHandler.updateParticipantStatistics(participantStatistics);
+    }
+
+    @Override
+    public AutomationCompositions getAutomationCompositions(String name, String version) {
+        return automationCompositionHandler.getAutomationCompositions();
+    }
+
+    @Override
+    public Map<UUID, AutomationCompositionElement> getAutomationCompositionElements(String name, String version) {
+        List<AutomationComposition> automationCompositions =
+            automationCompositionHandler.getAutomationCompositions().getAutomationCompositionList();
+
+        for (AutomationComposition automationComposition : automationCompositions) {
+            if (name.equals(automationComposition.getDefinition().getName())) {
+                return automationComposition.getElements();
+            }
+        }
+        return new LinkedHashMap<>();
+    }
+
+    @Override
+    public AutomationCompositionElement getAutomationCompositionElement(UUID id) {
+        List<AutomationComposition> automationCompositions =
+            automationCompositionHandler.getAutomationCompositions().getAutomationCompositionList();
+
+        for (AutomationComposition automationComposition : automationCompositions) {
+            AutomationCompositionElement acElement = automationComposition.getElements().get(id);
+            if (acElement != null) {
+                return acElement;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public AutomationCompositionElement updateAutomationCompositionElementState(
+        ToscaConceptIdentifier automationCompositionId, UUID id, AutomationCompositionOrderedState currentState,
+        AutomationCompositionState newState, ParticipantMessageType messageType) {
+        return automationCompositionHandler.updateAutomationCompositionElementState(automationCompositionId, id,
+            currentState, newState);
+    }
+
+    @Override
+    public void updateAutomationCompositionElementStatistics(UUID id, AcElementStatistics elementStatistics) {
+        automationCompositionHandler.updateAutomationCompositionElementStatistics(id, elementStatistics);
+    }
+}
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.comm;
+package org.onap.policy.clamp.acm.participant.intermediary.comm;
 
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopStateChange;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.acm.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionStateChange;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
 import org.springframework.stereotype.Component;
 
 /**
  * Listener for Participant State Change messages sent by CLAMP.
  */
 @Component
-public class ControlLoopStateChangeListener extends ParticipantListener<ControlLoopStateChange> {
+public class AutomationCompositionStateChangeListener extends ParticipantListener<AutomationCompositionStateChange> {
 
     /**
      * Constructs the object.
      *
      * @param participantHandler the handler for managing the state of the participant
      */
-    public ControlLoopStateChangeListener(final ParticipantHandler participantHandler) {
-        super(ControlLoopStateChange.class, participantHandler,
-                participantHandler::handleControlLoopStateChange);
+    public AutomationCompositionStateChangeListener(final ParticipantHandler participantHandler) {
+        super(AutomationCompositionStateChange.class, participantHandler,
+                participantHandler::handleAutomationCompositionStateChange);
     }
 
     @Override
     public String getType() {
-        return ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE.name();
+        return ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE.name();
     }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.comm;
+package org.onap.policy.clamp.acm.participant.intermediary.comm;
 
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopUpdate;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.acm.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionUpdate;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
 import org.springframework.stereotype.Component;
 
 /**
- * Listener for Control Loop Update messages sent by CLAMP.
+ * Listener for Automation Composition Update messages sent by ACM.
  */
 @Component
-public class ControlLoopUpdateListener extends ParticipantListener<ControlLoopUpdate> {
+public class AutomationCompositionUpdateListener extends ParticipantListener<AutomationCompositionUpdate> {
 
     /**
      * Constructs the object.
      *
      * @param participantHandler the handler for managing the state of the participant
      */
-    public ControlLoopUpdateListener(final ParticipantHandler participantHandler) {
-        super(ControlLoopUpdate.class, participantHandler, participantHandler::handleControlLoopUpdate);
+    public AutomationCompositionUpdateListener(final ParticipantHandler participantHandler) {
+        super(AutomationCompositionUpdate.class, participantHandler,
+            participantHandler::handleAutomationCompositionUpdate);
     }
 
     @Override
     public String getType() {
-        return ParticipantMessageType.CONTROL_LOOP_UPDATE.name();
+        return ParticipantMessageType.AUTOMATION_COMPOSITION_UPDATE.name();
     }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.comm;
+package org.onap.policy.clamp.acm.participant.intermediary.comm;
 
 import java.io.Closeable;
 import java.util.TimerTask;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
-import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ParticipantHandler;
-import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantParameters;
+import org.onap.policy.clamp.acm.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantParameters;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.comm;
+package org.onap.policy.clamp.acm.participant.intermediary.comm;
 
 import java.util.function.Consumer;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantAckMessage;
-import org.onap.policy.clamp.controlloop.participant.intermediary.handler.Listener;
-import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.acm.participant.intermediary.handler.Listener;
+import org.onap.policy.clamp.acm.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantAckMessage;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.common.endpoints.listeners.ScoListener;
 import org.onap.policy.common.utils.coder.StandardCoderObject;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.comm;
+package org.onap.policy.clamp.acm.participant.intermediary.comm;
 
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregisterAck;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.acm.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregisterAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
 import org.springframework.stereotype.Component;
 
 /**
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.comm;
+package org.onap.policy.clamp.acm.participant.intermediary.comm;
 
 import java.util.function.Consumer;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessage;
-import org.onap.policy.clamp.controlloop.participant.intermediary.handler.Listener;
-import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.acm.participant.intermediary.handler.Listener;
+import org.onap.policy.clamp.acm.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessage;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.common.endpoints.listeners.ScoListener;
 import org.onap.policy.common.utils.coder.StandardCoderObject;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.comm;
+package org.onap.policy.clamp.acm.participant.intermediary.comm;
 
 import java.util.List;
 import javax.ws.rs.core.Response.Status;
-import org.onap.policy.clamp.controlloop.common.exception.ControlLoopRuntimeException;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopAck;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregister;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegister;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatus;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdateAck;
-import org.onap.policy.clamp.controlloop.participant.intermediary.handler.Publisher;
+import org.onap.policy.clamp.acm.participant.intermediary.handler.Publisher;
+import org.onap.policy.clamp.common.acm.exception.AutomationCompositionRuntimeException;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantUpdateAck;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
 import org.onap.policy.common.endpoints.event.comm.client.TopicSinkClient;
 import org.slf4j.Logger;
@@ -69,7 +69,7 @@ public class ParticipantMessagePublisher implements Publisher {
      */
     public void sendParticipantStatus(final ParticipantStatus participantStatus) {
         if (!active) {
-            throw new ControlLoopRuntimeException(Status.NOT_ACCEPTABLE, NOT_ACTIVE_TEXT);
+            throw new AutomationCompositionRuntimeException(Status.NOT_ACCEPTABLE, NOT_ACTIVE_TEXT);
         }
         topicSinkClient.send(participantStatus);
         LOGGER.debug("Sent Participant Status message to CLAMP - {}", participantStatus);
@@ -82,7 +82,7 @@ public class ParticipantMessagePublisher implements Publisher {
      */
     public void sendParticipantRegister(final ParticipantRegister participantRegister) {
         if (!active) {
-            throw new ControlLoopRuntimeException(Status.NOT_ACCEPTABLE, NOT_ACTIVE_TEXT);
+            throw new AutomationCompositionRuntimeException(Status.NOT_ACCEPTABLE, NOT_ACTIVE_TEXT);
         }
         topicSinkClient.send(participantRegister);
         LOGGER.debug("Sent Participant Register message to CLAMP - {}", participantRegister);
@@ -95,7 +95,7 @@ public class ParticipantMessagePublisher implements Publisher {
      */
     public void sendParticipantDeregister(final ParticipantDeregister participantDeregister) {
         if (!active) {
-            throw new ControlLoopRuntimeException(Status.NOT_ACCEPTABLE, NOT_ACTIVE_TEXT);
+            throw new AutomationCompositionRuntimeException(Status.NOT_ACCEPTABLE, NOT_ACTIVE_TEXT);
         }
         topicSinkClient.send(participantDeregister);
         LOGGER.debug("Sent Participant Deregister message to CLAMP - {}", participantDeregister);
@@ -108,23 +108,23 @@ public class ParticipantMessagePublisher implements Publisher {
      */
     public void sendParticipantUpdateAck(final ParticipantUpdateAck participantUpdateAck) {
         if (!active) {
-            throw new ControlLoopRuntimeException(Status.NOT_ACCEPTABLE, NOT_ACTIVE_TEXT);
+            throw new AutomationCompositionRuntimeException(Status.NOT_ACCEPTABLE, NOT_ACTIVE_TEXT);
         }
         topicSinkClient.send(participantUpdateAck);
         LOGGER.debug("Sent Participant Update Ack message to CLAMP - {}", participantUpdateAck);
     }
 
     /**
-     * Method to send ControlLoop Update/StateChange Ack message to runtime.
+     * Method to send AutomationComposition Update/StateChange Ack message to runtime.
      *
-     * @param controlLoopAck ControlLoop Update/StateChange Ack
+     * @param automationCompositionAck AutomationComposition Update/StateChange Ack
      */
-    public void sendControlLoopAck(final ControlLoopAck controlLoopAck) {
+    public void sendAutomationCompositionAck(final AutomationCompositionAck automationCompositionAck) {
         if (!active) {
-            throw new ControlLoopRuntimeException(Status.NOT_ACCEPTABLE, NOT_ACTIVE_TEXT);
+            throw new AutomationCompositionRuntimeException(Status.NOT_ACCEPTABLE, NOT_ACTIVE_TEXT);
         }
-        topicSinkClient.send(controlLoopAck);
-        LOGGER.debug("Sent ControlLoop Update/StateChange Ack to runtime - {}", controlLoopAck);
+        topicSinkClient.send(automationCompositionAck);
+        LOGGER.debug("Sent AutomationComposition Update/StateChange Ack to runtime - {}", automationCompositionAck);
     }
 
     /**
@@ -134,7 +134,7 @@ public class ParticipantMessagePublisher implements Publisher {
      */
     public void sendHeartbeat(final ParticipantStatus participantStatus) {
         if (!active) {
-            throw new ControlLoopRuntimeException(Status.NOT_ACCEPTABLE, NOT_ACTIVE_TEXT);
+            throw new AutomationCompositionRuntimeException(Status.NOT_ACCEPTABLE, NOT_ACTIVE_TEXT);
         }
         topicSinkClient.send(participantStatus);
         LOGGER.debug("Sent Participant heartbeat to CLAMP - {}", participantStatus);
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.comm;
+package org.onap.policy.clamp.acm.participant.intermediary.comm;
 
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegisterAck;
-import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.acm.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegisterAck;
 import org.springframework.stereotype.Component;
 
 /**
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.comm;
+package org.onap.policy.clamp.acm.participant.intermediary.comm;
 
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatusReq;
-import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.acm.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatusReq;
 import org.springframework.stereotype.Component;
 
 /**
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.comm;
+package org.onap.policy.clamp.acm.participant.intermediary.comm;
 
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdate;
-import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.acm.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantUpdate;
 import org.springframework.stereotype.Component;
 
 /**
diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionHandler.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionHandler.java
new file mode 100644 (file)
index 0000000..7e1fb54
--- /dev/null
@@ -0,0 +1,476 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.participant.intermediary.handler;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+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.AcElementStatistics;
+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.AutomationCompositionElementAck;
+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.AutomationCompositions;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantUpdates;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantUtils;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionStateChange;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionUpdate;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+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;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+/*
+ * This class is responsible for managing the state of all automation compositions in the participant.
+ */
+@Component
+public class AutomationCompositionHandler {
+    private static final Logger LOGGER = LoggerFactory.getLogger(AutomationCompositionHandler.class);
+
+    private final ToscaConceptIdentifier participantType;
+    private final ToscaConceptIdentifier participantId;
+    private final ParticipantMessagePublisher publisher;
+
+    @Getter
+    private final Map<ToscaConceptIdentifier, AutomationComposition> automationCompositionMap = new LinkedHashMap<>();
+
+    @Getter
+    private final Map<UUID, AutomationCompositionElement> elementsOnThisParticipant = new LinkedHashMap<>();
+
+    @Getter
+    private List<AutomationCompositionElementListener> listeners = new ArrayList<>();
+
+    /**
+     * Constructor, set the participant ID and messageSender.
+     *
+     * @param parameters the parameters of the participant
+     * @param publisher the ParticipantMessage Publisher
+     */
+    public AutomationCompositionHandler(ParticipantParameters parameters, ParticipantMessagePublisher publisher) {
+        this.participantType = parameters.getIntermediaryParameters().getParticipantType();
+        this.participantId = parameters.getIntermediaryParameters().getParticipantId();
+        this.publisher = publisher;
+    }
+
+    public void registerAutomationCompositionElementListener(AutomationCompositionElementListener listener) {
+        listeners.add(listener);
+    }
+
+    /**
+     * Handle a automation composition element state change message.
+     *
+     * @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
+     */
+    public AutomationCompositionElement updateAutomationCompositionElementState(
+        ToscaConceptIdentifier automationCompositionId, UUID id, AutomationCompositionOrderedState orderedState,
+        AutomationCompositionState newState) {
+
+        if (id == null) {
+            LOGGER.warn("Cannot update Automation composition element state, id is null");
+            return null;
+        }
+
+        // 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);
+            }
+            var checkOpt = automationComposition.getElements().values().stream()
+                .filter(acElement -> !newState.equals(acElement.getState())).findAny();
+            if (checkOpt.isEmpty()) {
+                automationComposition.setState(newState);
+                automationComposition.setOrderedState(orderedState);
+            }
+        }
+
+        // Update states of AutomationCompositionElement in elementsOnThisParticipant
+        var acElement = elementsOnThisParticipant.get(id);
+        if (acElement != null) {
+            var automationCompositionStateChangeAck =
+                new AutomationCompositionAck(ParticipantMessageType.AUTOMATION_COMPOSITION_STATECHANGE_ACK);
+            automationCompositionStateChangeAck.setParticipantId(participantId);
+            automationCompositionStateChangeAck.setParticipantType(participantType);
+            automationCompositionStateChangeAck.setAutomationCompositionId(automationCompositionId);
+            acElement.setOrderedState(orderedState);
+            acElement.setState(newState);
+            automationCompositionStateChangeAck.getAutomationCompositionResultMap().put(acElement.getId(),
+                new AutomationCompositionElementAck(newState, true,
+                    "Automation composition element {} state changed to {}\", id, newState)"));
+            LOGGER.debug("Automation composition element {} state changed to {}", id, newState);
+            automationCompositionStateChangeAck
+                .setMessage("AutomationCompositionElement state changed to {} " + newState);
+            automationCompositionStateChangeAck.setResult(true);
+            publisher.sendAutomationCompositionAck(automationCompositionStateChangeAck);
+            return acElement;
+        }
+        return null;
+    }
+
+    /**
+     * Handle a automation composition element statistics.
+     *
+     * @param id automation composition element id
+     * @param elementStatistics automation composition element Statistics
+     */
+    public void updateAutomationCompositionElementStatistics(UUID id, AcElementStatistics elementStatistics) {
+        var acElement = elementsOnThisParticipant.get(id);
+        if (acElement != null) {
+            elementStatistics.setParticipantId(participantId);
+            elementStatistics.setId(id);
+            acElement.setAcElementStatistics(elementStatistics);
+        }
+    }
+
+    /**
+     * Handle a automation composition state change message.
+     *
+     * @param stateChangeMsg the state change message
+     * @param acElementDefinitions the list of AutomationCompositionElementDefinition
+     */
+    public void handleAutomationCompositionStateChange(AutomationCompositionStateChange stateChangeMsg,
+        List<AutomationCompositionElementDefinition> acElementDefinitions) {
+        if (stateChangeMsg.getAutomationCompositionId() == null) {
+            return;
+        }
+
+        var automationComposition = automationCompositionMap.get(stateChangeMsg.getAutomationCompositionId());
+
+        if (automationComposition == null) {
+            var automationCompositionAck =
+                new AutomationCompositionAck(ParticipantMessageType.AUTOMATION_COMPOSITION_STATECHANGE_ACK);
+            automationCompositionAck.setParticipantId(participantId);
+            automationCompositionAck.setParticipantType(participantType);
+            automationCompositionAck.setMessage("Automation composition " + stateChangeMsg.getAutomationCompositionId()
+                + " does not use this participant " + participantId);
+            automationCompositionAck.setResult(false);
+            automationCompositionAck.setResponseTo(stateChangeMsg.getMessageId());
+            automationCompositionAck.setAutomationCompositionId(stateChangeMsg.getAutomationCompositionId());
+            publisher.sendAutomationCompositionAck(automationCompositionAck);
+            LOGGER.debug("Automation composition {} does not use this participant",
+                stateChangeMsg.getAutomationCompositionId());
+            return;
+        }
+
+        handleState(automationComposition, stateChangeMsg.getOrderedState(), stateChangeMsg.getStartPhase(),
+            acElementDefinitions);
+    }
+
+    /**
+     * 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 handleState(final AutomationComposition automationComposition,
+        AutomationCompositionOrderedState orderedState, Integer startPhaseMsg,
+        List<AutomationCompositionElementDefinition> acElementDefinitions) {
+        switch (orderedState) {
+            case UNINITIALISED:
+                handleUninitialisedState(automationComposition, orderedState, startPhaseMsg, acElementDefinitions);
+                break;
+            case PASSIVE:
+                handlePassiveState(automationComposition, orderedState, startPhaseMsg, acElementDefinitions);
+                break;
+            case RUNNING:
+                handleRunningState(automationComposition, orderedState, startPhaseMsg, acElementDefinitions);
+                break;
+            default:
+                LOGGER.debug("StateChange message has no state, state is null {}",
+                    automationComposition.getDefinition());
+                break;
+        }
+    }
+
+    /**
+     * Handle a automation composition update message.
+     *
+     * @param updateMsg the update message
+     * @param acElementDefinitions the list of AutomationCompositionElementDefinition
+     */
+    public void handleAutomationCompositionUpdate(AutomationCompositionUpdate updateMsg,
+        List<AutomationCompositionElementDefinition> acElementDefinitions) {
+
+        if (!updateMsg.appliesTo(participantType, participantId)) {
+            return;
+        }
+
+        if (0 == updateMsg.getStartPhase()) {
+            handleAcUpdatePhase0(updateMsg, acElementDefinitions);
+        } else {
+            handleAcUpdatePhaseN(updateMsg, acElementDefinitions);
+        }
+    }
+
+    private void handleAcUpdatePhase0(AutomationCompositionUpdate updateMsg,
+        List<AutomationCompositionElementDefinition> acElementDefinitions) {
+        var automationComposition = automationCompositionMap.get(updateMsg.getAutomationCompositionId());
+
+        // 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 AutomationCompositionAck(ParticipantMessageType.AUTOMATION_COMPOSITION_UPDATE_ACK);
+            automationCompositionUpdateAck.setParticipantId(participantId);
+            automationCompositionUpdateAck.setParticipantType(participantType);
+
+            automationCompositionUpdateAck.setMessage("Automation composition " + updateMsg.getAutomationCompositionId()
+                + " already defined on participant " + participantId);
+            automationCompositionUpdateAck.setResult(false);
+            automationCompositionUpdateAck.setResponseTo(updateMsg.getMessageId());
+            automationCompositionUpdateAck.setAutomationCompositionId(updateMsg.getAutomationCompositionId());
+            publisher.sendAutomationCompositionAck(automationCompositionUpdateAck);
+            return;
+        }
+
+        if (updateMsg.getParticipantUpdatesList().isEmpty()) {
+            LOGGER.warn("No AutomationCompositionElement updates in message {}",
+                updateMsg.getAutomationCompositionId());
+            return;
+        }
+
+        var acElements = storeElementsOnThisParticipant(updateMsg.getParticipantUpdatesList());
+
+        var acElementMap = prepareAcElementMap(acElements);
+        automationComposition = new AutomationComposition();
+        automationComposition.setDefinition(updateMsg.getAutomationCompositionId());
+        automationComposition.setElements(acElementMap);
+        automationCompositionMap.put(updateMsg.getAutomationCompositionId(), automationComposition);
+
+        handleAutomationCompositionElementUpdate(acElements, acElementDefinitions, updateMsg.getStartPhase(),
+            updateMsg.getAutomationCompositionId());
+    }
+
+    private void handleAcUpdatePhaseN(AutomationCompositionUpdate updateMsg,
+        List<AutomationCompositionElementDefinition> acElementDefinitions) {
+
+        var acElementList = updateMsg.getParticipantUpdatesList().stream()
+            .flatMap(participantUpdate -> participantUpdate.getAutomationCompositionElementList().stream())
+            .filter(element -> participantType.equals(element.getParticipantType())).collect(Collectors.toList());
+
+        handleAutomationCompositionElementUpdate(acElementList, acElementDefinitions, updateMsg.getStartPhase(),
+            updateMsg.getAutomationCompositionId());
+    }
+
+    private void handleAutomationCompositionElementUpdate(List<AutomationCompositionElement> acElements,
+        List<AutomationCompositionElementDefinition> acElementDefinitions, Integer startPhaseMsg,
+        ToscaConceptIdentifier automationCompositionId) {
+        try {
+            for (var element : acElements) {
+                var acElementNodeTemplate = getAcElementNodeTemplate(acElementDefinitions, element.getDefinition());
+                if (acElementNodeTemplate != null) {
+                    int startPhase = ParticipantUtils.findStartPhase(acElementNodeTemplate.getProperties());
+                    if (startPhaseMsg.equals(startPhase)) {
+                        for (var acElementListener : listeners) {
+                            acElementListener.automationCompositionElementUpdate(automationCompositionId, element,
+                                acElementNodeTemplate);
+                        }
+                    }
+                }
+            }
+        } catch (PfModelException e) {
+            LOGGER.debug("Automation composition element update failed {}", automationCompositionId);
+        }
+
+    }
+
+    private ToscaNodeTemplate getAcElementNodeTemplate(
+        List<AutomationCompositionElementDefinition> acElementDefinitions, ToscaConceptIdentifier acElementDefId) {
+
+        for (var acElementDefinition : acElementDefinitions) {
+            if (acElementDefId.getName().contains(acElementDefinition.getAcElementDefinitionId().getName())) {
+                return acElementDefinition.getAutomationCompositionElementToscaNodeTemplate();
+            }
+        }
+        return null;
+    }
+
+    private List<AutomationCompositionElement> storeElementsOnThisParticipant(
+        List<ParticipantUpdates> participantUpdates) {
+        var acElementList = participantUpdates.stream()
+            .flatMap(participantUpdate -> participantUpdate.getAutomationCompositionElementList().stream())
+            .filter(element -> participantType.equals(element.getParticipantType())).collect(Collectors.toList());
+
+        for (var element : acElementList) {
+            elementsOnThisParticipant.put(element.getId(), element);
+        }
+        return acElementList;
+    }
+
+    private Map<UUID, AutomationCompositionElement> prepareAcElementMap(List<AutomationCompositionElement> acElements) {
+        Map<UUID, AutomationCompositionElement> acElementMap = new LinkedHashMap<>();
+        for (var element : acElements) {
+            acElementMap.put(element.getId(), element);
+        }
+        return acElementMap;
+    }
+
+    /**
+     * 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,
+        List<AutomationCompositionElementDefinition> acElementDefinitions) {
+        handleStateChange(automationComposition, orderedState, startPhaseMsg, acElementDefinitions);
+        boolean isAllUninitialised = automationComposition.getElements().values().stream()
+            .filter(element -> !AutomationCompositionState.UNINITIALISED.equals(element.getState())).findAny()
+            .isEmpty();
+        if (isAllUninitialised) {
+            automationCompositionMap.remove(automationComposition.getDefinition());
+            automationComposition.getElements().values()
+                .forEach(element -> elementsOnThisParticipant.remove(element.getId()));
+        }
+    }
+
+    /**
+     * 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,
+        List<AutomationCompositionElementDefinition> acElementDefinitions) {
+        handleStateChange(automationComposition, orderedState, 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,
+        List<AutomationCompositionElementDefinition> acElementDefinitions) {
+        handleStateChange(automationComposition, orderedState, 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 AutomationCompositionAck(ParticipantMessageType.AUTOMATION_COMPOSITION_STATECHANGE_ACK);
+            automationCompositionAck.setParticipantId(participantId);
+            automationCompositionAck.setParticipantType(participantType);
+            automationCompositionAck.setMessage("Automation composition is already in state " + orderedState);
+            automationCompositionAck.setResult(false);
+            automationCompositionAck.setAutomationCompositionId(automationComposition.getDefinition());
+            publisher.sendAutomationCompositionAck(automationCompositionAck);
+            return;
+        }
+
+        automationComposition.getElements().values().stream()
+            .forEach(acElement -> automationCompositionElementStateChange(automationComposition, orderedState,
+                acElement, startPhaseMsg, acElementDefinitions));
+    }
+
+    private void automationCompositionElementStateChange(AutomationComposition automationComposition,
+        AutomationCompositionOrderedState orderedState, 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)) {
+                for (var acElementListener : listeners) {
+                    try {
+                        acElementListener.automationCompositionElementStateChange(automationComposition.getDefinition(),
+                            acElement.getId(), acElement.getState(), orderedState);
+                    } catch (PfModelException e) {
+                        LOGGER.debug("Automation composition element update failed {}",
+                            automationComposition.getDefinition());
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Get automation compositions as a {@link ConrolLoops} class.
+     *
+     * @return the automation compositions
+     */
+    public AutomationCompositions getAutomationCompositions() {
+        var automationCompositions = new AutomationCompositions();
+        automationCompositions.setAutomationCompositionList(new ArrayList<>(automationCompositionMap.values()));
+        return automationCompositions;
+    }
+
+    /**
+     * Get properties of a automation composition element.
+     *
+     * @param id the automation composition element id
+     * @return the instance properties
+     */
+    public Map<String, ToscaProperty> getAcElementInstanceProperties(UUID id) {
+        Map<String, ToscaProperty> propertiesMap = new HashMap<>();
+        for (var automationComposition : automationCompositionMap.values()) {
+            var element = automationComposition.getElements().get(id);
+            if (element != null) {
+                propertiesMap.putAll(element.getPropertiesMap());
+            }
+        }
+        return propertiesMap;
+    }
+}
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.handler;
+package org.onap.policy.clamp.acm.participant.intermediary.handler;
 
 import java.io.Closeable;
 import java.io.IOException;
 import java.util.List;
 import lombok.Getter;
-import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantParameters;
+import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantParameters;
 import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
 import org.onap.policy.common.endpoints.event.comm.TopicSource;
@@ -61,16 +61,15 @@ public class IntermediaryActivator extends ServiceManagerContainer implements Cl
      * @param publishers list of Publishers
      * @param listeners list of Listeners
      */
-    public <T> IntermediaryActivator(final ParticipantParameters parameters,
-            ParticipantHandler participantHandler, List<Publisher> publishers,
-            List<Listener<T>> listeners) {
+    public <T> IntermediaryActivator(final ParticipantParameters parameters, ParticipantHandler participantHandler,
+        List<Publisher> publishers, List<Listener<T>> listeners) {
         this.participantHandler = participantHandler;
 
-        topicSinks = TopicEndpointManager.getManager()
-                .addTopicSinks(parameters.getIntermediaryParameters().getClampControlLoopTopics().getTopicSinks());
+        topicSinks = TopicEndpointManager.getManager().addTopicSinks(
+            parameters.getIntermediaryParameters().getClampAutomationCompositionTopics().getTopicSinks());
 
-        topicSources = TopicEndpointManager.getManager()
-                .addTopicSources(parameters.getIntermediaryParameters().getClampControlLoopTopics().getTopicSources());
+        topicSources = TopicEndpointManager.getManager().addTopicSources(
+            parameters.getIntermediaryParameters().getClampAutomationCompositionTopics().getTopicSources());
 
         msgDispatcher = new MessageTypeDispatcher(MSG_TYPE_NAMES);
 
@@ -20,7 +20,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.handler;
+package org.onap.policy.clamp.acm.participant.intermediary.handler;
 
 import java.time.Instant;
 import java.util.ArrayList;
@@ -32,33 +32,33 @@ import java.util.UUID;
 import java.util.stream.Collectors;
 import lombok.Getter;
 import lombok.Setter;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatisticsList;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElementDefinition;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopInfo;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantDefinition;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantHealthStatus;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatistics;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopStateChange;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopUpdate;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantAckMessage;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregister;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregisterAck;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessage;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegister;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegisterAck;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatus;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatusReq;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdate;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdateAck;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ControlLoopElementListener;
-import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ParticipantMessagePublisher;
-import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantParameters;
+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.AcElementStatisticsList;
+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.AutomationCompositionInfo;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionStatistics;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions;
+import org.onap.policy.clamp.models.acm.concepts.Participant;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantDefinition;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantStatistics;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionStateChange;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionUpdate;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantAckMessage;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregisterAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessage;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegisterAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatusReq;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantUpdate;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantUpdateAck;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty;
@@ -79,7 +79,7 @@ public class ParticipantHandler {
     @Getter
     private final ToscaConceptIdentifier participantId;
 
-    private final ControlLoopHandler controlLoopHandler;
+    private final AutomationCompositionHandler automationCompositionHandler;
     private final ParticipantStatistics participantStatistics;
     private final ParticipantMessagePublisher publisher;
 
@@ -89,7 +89,7 @@ public class ParticipantHandler {
     @Setter
     private ParticipantHealthStatus healthStatus = ParticipantHealthStatus.UNKNOWN;
 
-    private final List<ControlLoopElementDefinition> clElementDefsOnThisParticipant = new ArrayList<>();
+    private final List<AutomationCompositionElementDefinition> acElementDefsOnThisParticipant = new ArrayList<>();
 
     /**
      * Constructor, set the participant ID and sender.
@@ -98,11 +98,11 @@ public class ParticipantHandler {
      * @param publisher the publisher for sending responses to messages
      */
     public ParticipantHandler(ParticipantParameters parameters, ParticipantMessagePublisher publisher,
-            ControlLoopHandler controlLoopHandler) {
+        AutomationCompositionHandler automationCompositionHandler) {
         this.participantType = parameters.getIntermediaryParameters().getParticipantType();
         this.participantId = parameters.getIntermediaryParameters().getParticipantId();
         this.publisher = publisher;
-        this.controlLoopHandler = controlLoopHandler;
+        this.automationCompositionHandler = automationCompositionHandler;
         this.participantStatistics = new ParticipantStatistics();
         this.participantStatistics.setParticipantId(participantId);
         this.participantStatistics.setState(state);
@@ -121,42 +121,45 @@ public class ParticipantHandler {
     }
 
     /**
-     * Update ControlLoopElement statistics. The control loop elements listening will be
-     * notified to retrieve statistics from respective controlloop elements, and controlloopelements
+     * Update AutomationCompositionElement statistics. The automation composition elements listening will be
+     * notified to retrieve statistics from respective automation composition elements, and automation
+     * compositionelements
      * data on the handler will be updated.
      *
-     * @param controlLoops the control loops
-     * @param clElementListener control loop element listener
+     * @param automationCompositions the automation compositions
+     * @param acElementListener automation composition element listener
      */
-    private void updateClElementStatistics(ControlLoops controlLoops, ControlLoopElementListener clElementListener) {
-        for (ControlLoop controlLoop : controlLoops.getControlLoopList()) {
-            for (ControlLoopElement element : controlLoop.getElements().values()) {
+    private void updateAcElementStatistics(AutomationCompositions automationCompositions,
+        AutomationCompositionElementListener acElementListener) {
+        for (AutomationComposition automationComposition : automationCompositions.getAutomationCompositionList()) {
+            for (AutomationCompositionElement element : automationComposition.getElements().values()) {
                 try {
-                    clElementListener.handleStatistics(element.getId());
+                    acElementListener.handleStatistics(element.getId());
                 } catch (PfModelException e) {
-                    LOGGER.debug("Getting statistics for Control loop element failed for element ID {}",
-                            element.getId(), e);
+                    LOGGER.debug("Getting statistics for automation composition element failed for element ID {}",
+                        element.getId(), e);
                 }
             }
         }
     }
 
     /**
-     * Handle a control loop update message.
+     * Handle a automation composition update message.
      *
      * @param updateMsg the update message
      */
-    public void handleControlLoopUpdate(ControlLoopUpdate updateMsg) {
-        controlLoopHandler.handleControlLoopUpdate(updateMsg, clElementDefsOnThisParticipant);
+    public void handleAutomationCompositionUpdate(AutomationCompositionUpdate updateMsg) {
+        automationCompositionHandler.handleAutomationCompositionUpdate(updateMsg, acElementDefsOnThisParticipant);
     }
 
     /**
-     * Handle a control loop state change message.
+     * Handle a automation composition state change message.
      *
      * @param stateChangeMsg the state change message
      */
-    public void handleControlLoopStateChange(ControlLoopStateChange stateChangeMsg) {
-        controlLoopHandler.handleControlLoopStateChange(stateChangeMsg, clElementDefsOnThisParticipant);
+    public void handleAutomationCompositionStateChange(AutomationCompositionStateChange stateChangeMsg) {
+        automationCompositionHandler.handleAutomationCompositionStateChange(stateChangeMsg,
+            acElementDefsOnThisParticipant);
     }
 
     private void handleStateChange(ParticipantState newParticipantState, ParticipantUpdateAck response) {
@@ -221,15 +224,15 @@ public class ParticipantHandler {
     }
 
     /**
-     * Get common properties of a controlloopelement.
+     * Get common properties of a automation composition element.
      *
-     * @param clElementDef the control loop element definition
+     * @param acElementDef the automation composition element definition
      * @return the common properties
      */
-    public Map<String, ToscaProperty> getClElementDefinitionCommonProperties(ToscaConceptIdentifier clElementDef) {
+    public Map<String, ToscaProperty> getAcElementDefinitionCommonProperties(ToscaConceptIdentifier acElementDef) {
         Map<String, ToscaProperty> commonPropertiesMap = new HashMap<>();
-        clElementDefsOnThisParticipant.stream().forEach(definition -> {
-            if (definition.getClElementDefinitionId().equals(clElementDef)) {
+        acElementDefsOnThisParticipant.stream().forEach(definition -> {
+            if (definition.getAcElementDefinitionId().equals(acElementDef)) {
                 commonPropertiesMap.putAll(definition.getCommonPropertiesMap());
             }
         });
@@ -257,7 +260,7 @@ public class ParticipantHandler {
     }
 
     /**
-     * Method to send ParticipantRegister message to controlloop runtime.
+     * Method to send ParticipantRegister message to automation composition runtime.
      */
     public void sendParticipantRegister() {
         var participantRegister = new ParticipantRegister();
@@ -274,7 +277,7 @@ public class ParticipantHandler {
      */
     public void handleParticipantRegisterAck(ParticipantRegisterAck participantRegisterAckMsg) {
         LOGGER.debug("ParticipantRegisterAck message received as responseTo {}",
-                participantRegisterAckMsg.getResponseTo());
+            participantRegisterAckMsg.getResponseTo());
         statusToPassive();
         publisher.sendParticipantStatus(makeHeartbeat(false));
     }
@@ -291,7 +294,7 @@ public class ParticipantHandler {
     }
 
     /**
-     * Method to send ParticipantDeregister message to controlloop runtime.
+     * Method to send ParticipantDeregister message to automation composition runtime.
      */
     public void sendParticipantDeregister() {
         var participantDeregister = new ParticipantDeregister();
@@ -308,7 +311,7 @@ public class ParticipantHandler {
      */
     public void handleParticipantDeregisterAck(ParticipantDeregisterAck participantDeregisterAckMsg) {
         LOGGER.debug("ParticipantDeregisterAck message received as responseTo {}",
-                participantDeregisterAckMsg.getResponseTo());
+            participantDeregisterAckMsg.getResponseTo());
     }
 
     /**
@@ -318,27 +321,28 @@ public class ParticipantHandler {
      */
     public void handleParticipantUpdate(ParticipantUpdate participantUpdateMsg) {
         LOGGER.debug("ParticipantUpdate message received for participantId {}",
-                participantUpdateMsg.getParticipantId());
+            participantUpdateMsg.getParticipantId());
 
         if (!participantUpdateMsg.getParticipantDefinitionUpdates().isEmpty()) {
             statusToPassive();
-            // This message is to commission the controlloop
+            // This message is to commission the automation composition
             for (ParticipantDefinition participantDefinition : participantUpdateMsg.getParticipantDefinitionUpdates()) {
                 if (participantDefinition.getParticipantType().equals(participantType)) {
-                    clElementDefsOnThisParticipant.addAll(participantDefinition.getControlLoopElementDefinitionList());
+                    acElementDefsOnThisParticipant
+                        .addAll(participantDefinition.getAutomationCompositionElementDefinitionList());
                     break;
                 }
             }
         } else {
-            // This message is to decommission the controlloop
-            clElementDefsOnThisParticipant.clear();
+            // This message is to decommission the automation composition
+            acElementDefsOnThisParticipant.clear();
             this.state = ParticipantState.TERMINATED;
         }
         sendParticipantUpdateAck(participantUpdateMsg.getMessageId());
     }
 
     /**
-     * Method to send ParticipantUpdateAck message to controlloop runtime.
+     * Method to send ParticipantUpdateAck message to automation composition runtime.
      */
     public void sendParticipantUpdateAck(UUID messageId) {
         var participantUpdateAck = new ParticipantUpdateAck();
@@ -359,13 +363,13 @@ public class ParticipantHandler {
     }
 
     /**
-     * Method to send heartbeat to controlloop runtime.
+     * Method to send heartbeat to automation composition runtime.
      */
     public ParticipantStatus makeHeartbeat(boolean responseToParticipantStatusReq) {
         if (!responseToParticipantStatusReq) {
-            var controlLoops = controlLoopHandler.getControlLoops();
-            for (var clElementListener : controlLoopHandler.getListeners()) {
-                updateClElementStatistics(controlLoops, clElementListener);
+            var automationCompositions = automationCompositionHandler.getAutomationCompositions();
+            for (var acElementListener : automationCompositionHandler.getListeners()) {
+                updateAcElementStatistics(automationCompositions, acElementListener);
             }
         }
         this.participantStatistics.setState(state);
@@ -378,38 +382,35 @@ public class ParticipantHandler {
         heartbeat.setParticipantType(participantType);
         heartbeat.setHealthStatus(healthStatus);
         heartbeat.setState(state);
-        heartbeat.setControlLoopInfoList(getControlLoopInfoList());
+        heartbeat.setAutomationCompositionInfoList(getAutomationCompositionInfoList());
 
         if (responseToParticipantStatusReq) {
             ParticipantDefinition participantDefinition = new ParticipantDefinition();
             participantDefinition.setParticipantId(participantId);
             participantDefinition.setParticipantType(participantType);
-            participantDefinition.setControlLoopElementDefinitionList(clElementDefsOnThisParticipant);
+            participantDefinition.setAutomationCompositionElementDefinitionList(acElementDefsOnThisParticipant);
             heartbeat.setParticipantDefinitionUpdates(List.of(participantDefinition));
         }
 
         return heartbeat;
     }
 
-    private List<ControlLoopInfo> getControlLoopInfoList() {
-        List<ControlLoopInfo> controlLoopInfoList = new ArrayList<>();
-        for (var entry : controlLoopHandler.getControlLoopMap().entrySet()) {
-            var clInfo = new ControlLoopInfo();
-            clInfo.setControlLoopId(entry.getKey());
-            var clStatitistics = new ControlLoopStatistics();
-            clStatitistics.setControlLoopId(entry.getKey());
-            var clElementStatisticsList = new ClElementStatisticsList();
-            clElementStatisticsList
-                    .setClElementStatistics(entry.getValue().getElements().values()
-                            .stream()
-                            .map(ControlLoopElement::getClElementStatistics)
-                            .filter(Objects::nonNull)
-                            .collect(Collectors.toList()));
-            clStatitistics.setClElementStatisticsList(clElementStatisticsList);
-            clInfo.setControlLoopStatistics(clStatitistics);
-            clInfo.setState(entry.getValue().getState());
-            controlLoopInfoList.add(clInfo);
+    private List<AutomationCompositionInfo> getAutomationCompositionInfoList() {
+        List<AutomationCompositionInfo> automationCompositionInfoList = new ArrayList<>();
+        for (var entry : automationCompositionHandler.getAutomationCompositionMap().entrySet()) {
+            var acInfo = new AutomationCompositionInfo();
+            acInfo.setAutomationCompositionId(entry.getKey());
+            var acStatitistics = new AutomationCompositionStatistics();
+            acStatitistics.setAutomationCompositionId(entry.getKey());
+            var acElementStatisticsList = new AcElementStatisticsList();
+            acElementStatisticsList.setAcElementStatistics(entry.getValue().getElements().values().stream()
+                .map(AutomationCompositionElement::getAcElementStatistics).filter(Objects::nonNull)
+                .collect(Collectors.toList()));
+            acStatitistics.setAcElementStatisticsList(acElementStatisticsList);
+            acInfo.setAutomationCompositionStatistics(acStatitistics);
+            acInfo.setState(entry.getValue().getState());
+            automationCompositionInfoList.add(acInfo);
         }
-        return controlLoopInfoList;
+        return automationCompositionInfoList;
     }
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.parameters;
+package org.onap.policy.clamp.acm.participant.intermediary.parameters;
 
 import javax.validation.Valid;
 import javax.validation.constraints.NotBlank;
@@ -50,12 +50,12 @@ public class ParticipantIntermediaryParameters {
     @Valid
     private ToscaConceptIdentifier participantType;
 
-    // The time interval for periodic reporting of status to the CLAMP control loop server
+    // The time interval for periodic reporting of status to the CLAMP ACM server
     @Valid
     @Positive
     private long reportingTimeIntervalMs;
 
     @NotNull
     @ParameterGroupConstraint
-    private TopicParameterGroup clampControlLoopTopics;
+    private TopicParameterGroup clampAutomationCompositionTopics;
 }
diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/api/ControlLoopElementListener.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/api/ControlLoopElementListener.java
deleted file mode 100644 (file)
index 58378fa..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.participant.intermediary.api;
-
-import java.util.UUID;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-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;
-
-/**
- * This interface is implemented by participant implementations to receive updates on control loop elements.
- */
-public interface ControlLoopElementListener {
-    /**
-     * Handle a control loop element state change.
-     *
-     * @param controlLoopElementId the ID of the control loop element
-     * @param currentState the current state of the control loop element
-     * @param newState the state to which the control loop element is changing to
-     * @throws PfModelException in case of a model exception
-     */
-    public void controlLoopElementStateChange(ToscaConceptIdentifier controlLoopId, UUID controlLoopElementId,
-        ControlLoopState currentState, ControlLoopOrderedState newState) throws PfModelException;
-
-    /**
-     * Handle an update on a control loop element.
-     *
-     * @param element the information on the control loop element
-     * @param controlLoopElementDefinition toscaNodeTemplate
-     * @throws PfModelException from Policy framework
-     */
-    public void controlLoopElementUpdate(ToscaConceptIdentifier controlLoopId, ControlLoopElement element,
-            ToscaNodeTemplate controlLoopElementDefinition) throws PfModelException;
-
-    /**
-     * Handle controlLoopElement statistics.
-     *
-     * @param controlLoopElementId controlLoopElement id
-     * @throws PfModelException in case of a model exception
-     */
-    public void handleStatistics(UUID controlLoopElementId) throws PfModelException;
-}
diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/api/ParticipantIntermediaryApi.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/api/ParticipantIntermediaryApi.java
deleted file mode 100644 (file)
index 0cb4963..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.participant.intermediary.api;
-
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatistics;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty;
-
-/**
- * This interface is used by participant implementations to use the participant intermediary.
- */
-public interface ParticipantIntermediaryApi {
-
-    /**
-     * Register a listener for control loop elements that are mediated by the intermediary.
-     *
-     * @param controlLoopElementListener The control loop element listener to register
-     */
-    void registerControlLoopElementListener(ControlLoopElementListener controlLoopElementListener);
-
-    /**
-     * Get participants loops from the intermediary API.
-     *
-     * @param name the participant name, null for all
-     * @param version the participant version, null for all
-     * @return the participants
-     */
-    List<Participant> getParticipants(String name, String version);
-
-    /**
-     * Get common properties of a controlloopelement.
-     *
-     * @param clElementDef the control loop element definition
-     * @return the common properties
-     */
-    Map<String, ToscaProperty> getClElementDefinitionCommonProperties(ToscaConceptIdentifier clElementDef);
-
-    /**
-     * Update the state of a participant.
-     *
-     * @param definition the definition of the participant to update the state on
-     * @param state the state of the participant
-     * @return the participant
-     */
-    Participant updateParticipantState(ToscaConceptIdentifier definition, ParticipantState state);
-
-    /**
-     * Update the statistics of a participant.
-     *
-     * @param participantStatistics the statistics of the participant
-     */
-    void updateParticipantStatistics(ParticipantStatistics participantStatistics);
-
-    /**
-     * Get control loops from the intermediary API.
-     *
-     * @param name the control loop element name, null for all
-     * @param version the control loop element version, null for all
-     * @return the control loop elements
-     */
-    ControlLoops getControlLoops(String name, String version);
-
-    /**
-     * Get control loop elements from the intermediary API.
-     *
-     * @param name the control loop element name, null for all
-     * @param version the control loop element version, null for all
-     * @return the control loop elements
-     */
-    Map<UUID, ControlLoopElement> getControlLoopElements(String name, String version);
-
-    /**
-     * Get control loop element from the intermediary API.
-     *
-     * @param id control loop element ID
-     * @return the control loop element
-     */
-    ControlLoopElement getControlLoopElement(UUID id);
-
-    /**
-     * Update the state of a control loop element.
-     *
-     * @param id the ID of the control loop element to update the state on
-     * @param currentState the state of the control loop element
-     * @param newState the state of the control loop element
-     * @return ControlLoopElement updated control loop element
-     */
-    ControlLoopElement updateControlLoopElementState(ToscaConceptIdentifier controlLoopId,
-            UUID id, ControlLoopOrderedState currentState,
-            ControlLoopState newState, ParticipantMessageType messageType);
-
-    /**
-     * Update the control loop element statistics.
-     *
-     * @param id the ID of the control loop element to update the state on
-     * @param elementStatistics the updated statistics
-     */
-    void updateControlLoopElementStatistics(UUID id, ClElementStatistics elementStatistics);
-}
diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/api/impl/ParticipantIntermediaryApiImpl.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/api/impl/ParticipantIntermediaryApiImpl.java
deleted file mode 100644 (file)
index bbafc46..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.participant.intermediary.api.impl;
-
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatistics;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ControlLoopElementListener;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi;
-import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ControlLoopHandler;
-import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ParticipantHandler;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty;
-import org.springframework.stereotype.Component;
-
-/**
- * This class is api implementation used by participant intermediary.
- */
-@Component
-public class ParticipantIntermediaryApiImpl implements ParticipantIntermediaryApi {
-
-    // The handler for the participant intermediary
-    private final ParticipantHandler participantHandler;
-
-    // The handler for the controlLoop intermediary
-    private final ControlLoopHandler controlLoopHandler;
-
-    /**
-     * Constructor.
-     *
-     * @param participantHandler ParticipantHandler
-     * @param controlLoopHandler ControlLoopHandler
-     */
-    public ParticipantIntermediaryApiImpl(ParticipantHandler participantHandler,
-            ControlLoopHandler controlLoopHandler) {
-        this.participantHandler = participantHandler;
-        this.controlLoopHandler = controlLoopHandler;
-    }
-
-    @Override
-    public void registerControlLoopElementListener(ControlLoopElementListener controlLoopElementListener) {
-        controlLoopHandler.registerControlLoopElementListener(controlLoopElementListener);
-    }
-
-    @Override
-    public List<Participant> getParticipants(String name, String version) {
-        return List.of(participantHandler.getParticipant(name, version));
-    }
-
-    @Override
-    public Map<String, ToscaProperty> getClElementDefinitionCommonProperties(ToscaConceptIdentifier clElementDef) {
-        return participantHandler.getClElementDefinitionCommonProperties(clElementDef);
-    }
-
-    @Override
-    public Participant updateParticipantState(ToscaConceptIdentifier definition, ParticipantState state) {
-        return participantHandler.updateParticipantState(definition, state);
-    }
-
-    @Override
-    public void updateParticipantStatistics(ParticipantStatistics participantStatistics) {
-        participantHandler.updateParticipantStatistics(participantStatistics);
-    }
-
-    @Override
-    public ControlLoops getControlLoops(String name, String version) {
-        return controlLoopHandler.getControlLoops();
-    }
-
-    @Override
-    public Map<UUID, ControlLoopElement> getControlLoopElements(String name, String version) {
-        List<ControlLoop> controlLoops = controlLoopHandler.getControlLoops().getControlLoopList();
-
-        for (ControlLoop controlLoop : controlLoops) {
-            if (name.equals(controlLoop.getDefinition().getName())) {
-                return controlLoop.getElements();
-            }
-        }
-        return new LinkedHashMap<>();
-    }
-
-    @Override
-    public ControlLoopElement getControlLoopElement(UUID id) {
-        List<ControlLoop> controlLoops = controlLoopHandler.getControlLoops().getControlLoopList();
-
-        for (ControlLoop controlLoop : controlLoops) {
-            ControlLoopElement clElement = controlLoop.getElements().get(id);
-            if (clElement != null) {
-                return clElement;
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public ControlLoopElement updateControlLoopElementState(ToscaConceptIdentifier controlLoopId,
-            UUID id, ControlLoopOrderedState currentState,
-            ControlLoopState newState, ParticipantMessageType messageType) {
-        return controlLoopHandler.updateControlLoopElementState(controlLoopId,
-            id, currentState, newState);
-    }
-
-    @Override
-    public void updateControlLoopElementStatistics(UUID id, ClElementStatistics elementStatistics) {
-        controlLoopHandler.updateControlLoopElementStatistics(id, elementStatistics);
-    }
-}
diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ControlLoopHandler.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ControlLoopHandler.java
deleted file mode 100644 (file)
index 5a0f498..0000000
+++ /dev/null
@@ -1,454 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.participant.intermediary.handler;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-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.controlloop.models.controlloop.concepts.ClElementStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElementAck;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElementDefinition;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantUpdates;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantUtils;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopAck;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopStateChange;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopUpdate;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ControlLoopElementListener;
-import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ParticipantMessagePublisher;
-import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantParameters;
-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;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-
-/*
- * This class is responsible for managing the state of all control loops in the participant.
- */
-@Component
-public class ControlLoopHandler {
-    private static final Logger LOGGER = LoggerFactory.getLogger(ControlLoopHandler.class);
-
-    private final ToscaConceptIdentifier participantType;
-    private final ToscaConceptIdentifier participantId;
-    private final ParticipantMessagePublisher publisher;
-
-    @Getter
-    private final Map<ToscaConceptIdentifier, ControlLoop> controlLoopMap = new LinkedHashMap<>();
-
-    @Getter
-    private final Map<UUID, ControlLoopElement> elementsOnThisParticipant = new LinkedHashMap<>();
-
-    @Getter
-    private List<ControlLoopElementListener> listeners = new ArrayList<>();
-
-    /**
-     * Constructor, set the participant ID and messageSender.
-     *
-     * @param parameters the parameters of the participant
-     * @param publisher the ParticipantMessage Publisher
-     */
-    public ControlLoopHandler(ParticipantParameters parameters, ParticipantMessagePublisher publisher) {
-        this.participantType = parameters.getIntermediaryParameters().getParticipantType();
-        this.participantId = parameters.getIntermediaryParameters().getParticipantId();
-        this.publisher = publisher;
-    }
-
-    public void registerControlLoopElementListener(ControlLoopElementListener listener) {
-        listeners.add(listener);
-    }
-
-    /**
-     * Handle a control loop element state change message.
-     *
-     * @param controlLoopId the controlLoop Id
-     * @param id the controlLoop UUID
-     * @param orderedState the current state
-     * @param newState the ordered state
-     * @return controlLoopElement the updated controlloop element
-     */
-    public ControlLoopElement updateControlLoopElementState(ToscaConceptIdentifier controlLoopId, UUID id,
-            ControlLoopOrderedState orderedState, ControlLoopState newState) {
-
-        if (id == null) {
-            LOGGER.warn("Cannot update Control loop element state, id is null");
-            return null;
-        }
-
-        // Update states of ControlLoopElement in controlLoopMap
-        for (var controlLoop : controlLoopMap.values()) {
-            var element = controlLoop.getElements().get(id);
-            if (element != null) {
-                element.setOrderedState(orderedState);
-                element.setState(newState);
-            }
-            var checkOpt = controlLoop.getElements().values().stream()
-                    .filter(clElement -> !newState.equals(clElement.getState())).findAny();
-            if (checkOpt.isEmpty()) {
-                controlLoop.setState(newState);
-                controlLoop.setOrderedState(orderedState);
-            }
-        }
-
-        // Update states of ControlLoopElement in elementsOnThisParticipant
-        var clElement = elementsOnThisParticipant.get(id);
-        if (clElement != null) {
-            var controlLoopStateChangeAck = new ControlLoopAck(ParticipantMessageType.CONTROLLOOP_STATECHANGE_ACK);
-            controlLoopStateChangeAck.setParticipantId(participantId);
-            controlLoopStateChangeAck.setParticipantType(participantType);
-            controlLoopStateChangeAck.setControlLoopId(controlLoopId);
-            clElement.setOrderedState(orderedState);
-            clElement.setState(newState);
-            controlLoopStateChangeAck.getControlLoopResultMap().put(clElement.getId(), new ControlLoopElementAck(
-                    newState, true, "Control loop element {} state changed to {}\", id, newState)"));
-            LOGGER.debug("Control loop element {} state changed to {}", id, newState);
-            controlLoopStateChangeAck.setMessage("ControlLoopElement state changed to {} " + newState);
-            controlLoopStateChangeAck.setResult(true);
-            publisher.sendControlLoopAck(controlLoopStateChangeAck);
-            return clElement;
-        }
-        return null;
-    }
-
-    /**
-     * Handle a control loop element statistics.
-     *
-     * @param id controlloop element id
-     * @param elementStatistics control loop element Statistics
-     */
-    public void updateControlLoopElementStatistics(UUID id, ClElementStatistics elementStatistics) {
-        var clElement = elementsOnThisParticipant.get(id);
-        if (clElement != null) {
-            elementStatistics.setParticipantId(participantId);
-            elementStatistics.setId(id);
-            clElement.setClElementStatistics(elementStatistics);
-        }
-    }
-
-    /**
-     * Handle a control loop state change message.
-     *
-     * @param stateChangeMsg the state change message
-     * @param clElementDefinitions the list of ControlLoopElementDefinition
-     */
-    public void handleControlLoopStateChange(ControlLoopStateChange stateChangeMsg,
-            List<ControlLoopElementDefinition> clElementDefinitions) {
-        if (stateChangeMsg.getControlLoopId() == null) {
-            return;
-        }
-
-        var controlLoop = controlLoopMap.get(stateChangeMsg.getControlLoopId());
-
-        if (controlLoop == null) {
-            var controlLoopAck = new ControlLoopAck(ParticipantMessageType.CONTROLLOOP_STATECHANGE_ACK);
-            controlLoopAck.setParticipantId(participantId);
-            controlLoopAck.setParticipantType(participantType);
-            controlLoopAck.setMessage("Control loop " + stateChangeMsg.getControlLoopId()
-                    + " does not use this participant " + participantId);
-            controlLoopAck.setResult(false);
-            controlLoopAck.setResponseTo(stateChangeMsg.getMessageId());
-            controlLoopAck.setControlLoopId(stateChangeMsg.getControlLoopId());
-            publisher.sendControlLoopAck(controlLoopAck);
-            LOGGER.debug("Control loop {} does not use this participant", stateChangeMsg.getControlLoopId());
-            return;
-        }
-
-        handleState(controlLoop, stateChangeMsg.getOrderedState(), stateChangeMsg.getStartPhase(),
-                clElementDefinitions);
-    }
-
-    /**
-     * Method to handle state changes.
-     *
-     * @param controlLoop participant response
-     * @param orderedState controlloop ordered state
-     * @param startPhaseMsg startPhase from message
-     * @param clElementDefinitions the list of ControlLoopElementDefinition
-     */
-    private void handleState(final ControlLoop controlLoop, ControlLoopOrderedState orderedState, Integer startPhaseMsg,
-            List<ControlLoopElementDefinition> clElementDefinitions) {
-        switch (orderedState) {
-            case UNINITIALISED:
-                handleUninitialisedState(controlLoop, orderedState, startPhaseMsg, clElementDefinitions);
-                break;
-            case PASSIVE:
-                handlePassiveState(controlLoop, orderedState, startPhaseMsg, clElementDefinitions);
-                break;
-            case RUNNING:
-                handleRunningState(controlLoop, orderedState, startPhaseMsg, clElementDefinitions);
-                break;
-            default:
-                LOGGER.debug("StateChange message has no state, state is null {}", controlLoop.getDefinition());
-                break;
-        }
-    }
-
-    /**
-     * Handle a control loop update message.
-     *
-     * @param updateMsg the update message
-     * @param clElementDefinitions the list of ControlLoopElementDefinition
-     */
-    public void handleControlLoopUpdate(ControlLoopUpdate updateMsg,
-            List<ControlLoopElementDefinition> clElementDefinitions) {
-
-        if (!updateMsg.appliesTo(participantType, participantId)) {
-            return;
-        }
-
-        if (0 == updateMsg.getStartPhase()) {
-            handleClUpdatePhase0(updateMsg, clElementDefinitions);
-        } else {
-            handleClUpdatePhaseN(updateMsg, clElementDefinitions);
-        }
-    }
-
-    private void handleClUpdatePhase0(ControlLoopUpdate updateMsg,
-            List<ControlLoopElementDefinition> clElementDefinitions) {
-        var controlLoop = controlLoopMap.get(updateMsg.getControlLoopId());
-
-        // TODO: Updates to existing ControlLoops are not supported yet (Addition/Removal of ControlLoop
-        // elements to existing ControlLoop has to be supported).
-        if (controlLoop != null) {
-            var controlLoopUpdateAck = new ControlLoopAck(ParticipantMessageType.CONTROLLOOP_UPDATE_ACK);
-            controlLoopUpdateAck.setParticipantId(participantId);
-            controlLoopUpdateAck.setParticipantType(participantType);
-
-            controlLoopUpdateAck.setMessage("Control loop " + updateMsg.getControlLoopId()
-                    + " already defined on participant " + participantId);
-            controlLoopUpdateAck.setResult(false);
-            controlLoopUpdateAck.setResponseTo(updateMsg.getMessageId());
-            controlLoopUpdateAck.setControlLoopId(updateMsg.getControlLoopId());
-            publisher.sendControlLoopAck(controlLoopUpdateAck);
-            return;
-        }
-
-        if (updateMsg.getParticipantUpdatesList().isEmpty()) {
-            LOGGER.warn("No ControlLoopElement updates in message {}", updateMsg.getControlLoopId());
-            return;
-        }
-
-        var clElements = storeElementsOnThisParticipant(updateMsg.getParticipantUpdatesList());
-
-        var clElementMap = prepareClElementMap(clElements);
-        controlLoop = new ControlLoop();
-        controlLoop.setDefinition(updateMsg.getControlLoopId());
-        controlLoop.setElements(clElementMap);
-        controlLoopMap.put(updateMsg.getControlLoopId(), controlLoop);
-
-        handleControlLoopElementUpdate(clElements, clElementDefinitions, updateMsg.getStartPhase(),
-                updateMsg.getControlLoopId());
-    }
-
-    private void handleClUpdatePhaseN(ControlLoopUpdate updateMsg,
-            List<ControlLoopElementDefinition> clElementDefinitions) {
-
-        var clElementList = updateMsg.getParticipantUpdatesList().stream()
-                .flatMap(participantUpdate -> participantUpdate.getControlLoopElementList().stream())
-                .filter(element -> participantType.equals(element.getParticipantType())).collect(Collectors.toList());
-
-        handleControlLoopElementUpdate(clElementList, clElementDefinitions, updateMsg.getStartPhase(),
-                updateMsg.getControlLoopId());
-    }
-
-    private void handleControlLoopElementUpdate(List<ControlLoopElement> clElements,
-            List<ControlLoopElementDefinition> clElementDefinitions, Integer startPhaseMsg,
-            ToscaConceptIdentifier controlLoopId) {
-        try {
-            for (var element : clElements) {
-                var clElementNodeTemplate = getClElementNodeTemplate(clElementDefinitions, element.getDefinition());
-                if (clElementNodeTemplate != null) {
-                    int startPhase = ParticipantUtils.findStartPhase(clElementNodeTemplate.getProperties());
-                    if (startPhaseMsg.equals(startPhase)) {
-                        for (var clElementListener : listeners) {
-                            clElementListener.controlLoopElementUpdate(controlLoopId, element, clElementNodeTemplate);
-                        }
-                    }
-                }
-            }
-        } catch (PfModelException e) {
-            LOGGER.debug("Control loop element update failed {}", controlLoopId);
-        }
-
-    }
-
-    private ToscaNodeTemplate getClElementNodeTemplate(List<ControlLoopElementDefinition> clElementDefinitions,
-            ToscaConceptIdentifier clElementDefId) {
-
-        for (var clElementDefinition : clElementDefinitions) {
-            if (clElementDefId.getName().contains(clElementDefinition.getClElementDefinitionId().getName())) {
-                return clElementDefinition.getControlLoopElementToscaNodeTemplate();
-            }
-        }
-        return null;
-    }
-
-    private List<ControlLoopElement> storeElementsOnThisParticipant(List<ParticipantUpdates> participantUpdates) {
-        var clElementList = participantUpdates.stream()
-                .flatMap(participantUpdate -> participantUpdate.getControlLoopElementList().stream())
-                .filter(element -> participantType.equals(element.getParticipantType())).collect(Collectors.toList());
-
-        for (var element : clElementList) {
-            elementsOnThisParticipant.put(element.getId(), element);
-        }
-        return clElementList;
-    }
-
-    private Map<UUID, ControlLoopElement> prepareClElementMap(List<ControlLoopElement> clElements) {
-        Map<UUID, ControlLoopElement> clElementMap = new LinkedHashMap<>();
-        for (var element : clElements) {
-            clElementMap.put(element.getId(), element);
-        }
-        return clElementMap;
-    }
-
-    /**
-     * Method to handle when the new state from participant is UNINITIALISED state.
-     *
-     * @param controlLoop participant response
-     * @param orderedState orderedState
-     * @param startPhaseMsg startPhase from message
-     * @param clElementDefinitions the list of ControlLoopElementDefinition
-     */
-    private void handleUninitialisedState(final ControlLoop controlLoop, final ControlLoopOrderedState orderedState,
-            Integer startPhaseMsg, List<ControlLoopElementDefinition> clElementDefinitions) {
-        handleStateChange(controlLoop, orderedState, startPhaseMsg, clElementDefinitions);
-        boolean isAllUninitialised = controlLoop.getElements().values().stream()
-                .filter(element -> !ControlLoopState.UNINITIALISED.equals(element.getState())).findAny().isEmpty();
-        if (isAllUninitialised) {
-            controlLoopMap.remove(controlLoop.getDefinition());
-            controlLoop.getElements().values().forEach(element -> elementsOnThisParticipant.remove(element.getId()));
-        }
-    }
-
-    /**
-     * Method to handle when the new state from participant is PASSIVE state.
-     *
-     * @param controlLoop participant response
-     * @param orderedState orderedState
-     * @param startPhaseMsg startPhase from message
-     * @param clElementDefinitions the list of ControlLoopElementDefinition
-     */
-    private void handlePassiveState(final ControlLoop controlLoop, final ControlLoopOrderedState orderedState,
-            Integer startPhaseMsg, List<ControlLoopElementDefinition> clElementDefinitions) {
-        handleStateChange(controlLoop, orderedState, startPhaseMsg, clElementDefinitions);
-    }
-
-    /**
-     * Method to handle when the new state from participant is RUNNING state.
-     *
-     * @param controlLoop participant response
-     * @param orderedState orderedState
-     * @param startPhaseMsg startPhase from message
-     * @param clElementDefinitions the list of ControlLoopElementDefinition
-     */
-    private void handleRunningState(final ControlLoop controlLoop, final ControlLoopOrderedState orderedState,
-            Integer startPhaseMsg, List<ControlLoopElementDefinition> clElementDefinitions) {
-        handleStateChange(controlLoop, orderedState, startPhaseMsg, clElementDefinitions);
-    }
-
-    /**
-     * Method to update the state of control loop elements.
-     *
-     * @param controlLoop participant status in memory
-     * @param orderedState orderedState the new ordered state the participant should have
-     * @param startPhaseMsg startPhase from message
-     * @param clElementDefinitions the list of ControlLoopElementDefinition
-     */
-    private void handleStateChange(ControlLoop controlLoop, final ControlLoopOrderedState orderedState,
-            Integer startPhaseMsg, List<ControlLoopElementDefinition> clElementDefinitions) {
-
-        if (orderedState.equals(controlLoop.getOrderedState())) {
-            var controlLoopAck = new ControlLoopAck(ParticipantMessageType.CONTROLLOOP_STATECHANGE_ACK);
-            controlLoopAck.setParticipantId(participantId);
-            controlLoopAck.setParticipantType(participantType);
-            controlLoopAck.setMessage("Control loop is already in state " + orderedState);
-            controlLoopAck.setResult(false);
-            controlLoopAck.setControlLoopId(controlLoop.getDefinition());
-            publisher.sendControlLoopAck(controlLoopAck);
-            return;
-        }
-
-        controlLoop.getElements().values().stream().forEach(clElement -> controlLoopElementStateChange(controlLoop,
-                orderedState, clElement, startPhaseMsg, clElementDefinitions));
-    }
-
-    private void controlLoopElementStateChange(ControlLoop controlLoop, ControlLoopOrderedState orderedState,
-            ControlLoopElement clElement, Integer startPhaseMsg,
-            List<ControlLoopElementDefinition> clElementDefinitions) {
-        var clElementNodeTemplate = getClElementNodeTemplate(clElementDefinitions, clElement.getDefinition());
-        if (clElementNodeTemplate != null) {
-            int startPhase = ParticipantUtils.findStartPhase(clElementNodeTemplate.getProperties());
-            if (startPhaseMsg.equals(startPhase)) {
-                for (var clElementListener : listeners) {
-                    try {
-                        clElementListener.controlLoopElementStateChange(controlLoop.getDefinition(), clElement.getId(),
-                                clElement.getState(), orderedState);
-                    } catch (PfModelException e) {
-                        LOGGER.debug("Control loop element update failed {}", controlLoop.getDefinition());
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Get control loops as a {@link ConrolLoops} class.
-     *
-     * @return the control loops
-     */
-    public ControlLoops getControlLoops() {
-        var controlLoops = new ControlLoops();
-        controlLoops.setControlLoopList(new ArrayList<>(controlLoopMap.values()));
-        return controlLoops;
-    }
-
-    /**
-     * Get properties of a controlloopelement.
-     *
-     * @param id the control loop element id
-     * @return the instance properties
-     */
-    public Map<String, ToscaProperty> getClElementInstanceProperties(UUID id) {
-        Map<String, ToscaProperty> propertiesMap = new HashMap<>();
-        for (var controlLoop : controlLoopMap.values()) {
-            var element = controlLoop.getElements().get(id);
-            if (element != null) {
-                propertiesMap.putAll(element.getPropertiesMap());
-            }
-        }
-        return propertiesMap;
-    }
-}
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.api.impl;
+package org.onap.policy.clamp.acm.participant.intermediary.api.impl;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
@@ -29,15 +29,15 @@ import java.time.Instant;
 import java.util.UUID;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantHealthStatus;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatistics;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ControlLoopElementListener;
-import org.onap.policy.clamp.controlloop.participant.intermediary.main.parameters.CommonTestData;
+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.AcElementStatistics;
+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.ParticipantHealthStatus;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantStatistics;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
@@ -47,24 +47,24 @@ class ParticipantIntermediaryApiImplTest {
     private static final String ID_NAME = "org.onap.PM_CDS_Blueprint";
     private static final String ID_VERSION = "1.0.1";
 
-    private static final String ID_NAME_E = "org.onap.domain.pmsh.PMSHControlLoopDefinition";
+    private static final String ID_NAME_E = "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition";
     private static final String ID_VERSION_E = "1.0.0";
 
-    private static final String ID_NAME_TYPE = "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant";
+    private static final String ID_NAME_TYPE = "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant";
     private static final String ID_VERSION_TYPE = "2.3.4";
 
     @Test
     void mockParticipantIntermediaryApiImplTest() throws CoderException {
         var uuid = UUID.randomUUID();
         var id = new ToscaConceptIdentifier(ID_NAME, ID_VERSION);
-        var participantHandler = commonTestData.getParticipantHandlerControlLoops();
-        var controlLoopHandler = commonTestData.setTestControlLoopHandler(id, uuid);
-        var apiImpl = new ParticipantIntermediaryApiImpl(participantHandler, controlLoopHandler);
-        var clElementListener = Mockito.mock(ControlLoopElementListener.class);
-        apiImpl.registerControlLoopElementListener(clElementListener);
+        var participantHandler = commonTestData.getParticipantHandlerAutomationCompositions();
+        var automationComposiitonHandler = commonTestData.setTestAutomationCompositionHandler(id, uuid);
+        var apiImpl = new ParticipantIntermediaryApiImpl(participantHandler, automationComposiitonHandler);
+        var acElementListener = Mockito.mock(AutomationCompositionElementListener.class);
+        apiImpl.registerAutomationCompositionElementListener(acElementListener);
 
-        assertNotNull(apiImpl.getControlLoops(id.getName(), id.getVersion()));
-        assertThat(apiImpl.getClElementDefinitionCommonProperties(id)).isEmpty();
+        assertNotNull(apiImpl.getAutomationCompositions(id.getName(), id.getVersion()));
+        assertThat(apiImpl.getAcElementDefinitionCommonProperties(id)).isEmpty();
 
         var participantStatistics = new ParticipantStatistics();
         participantStatistics.setParticipantId(id);
@@ -79,24 +79,25 @@ class ParticipantIntermediaryApiImplTest {
         var participant = apiImpl.updateParticipantState(id, ParticipantState.TERMINATED);
         assertEquals(ParticipantState.TERMINATED, participant.getParticipantState());
 
-        var elements = apiImpl.getControlLoopElements(ID_NAME_E, ID_VERSION_E);
+        var elements = apiImpl.getAutomationCompositionElements(ID_NAME_E, ID_VERSION_E);
         assertFalse(elements.containsKey(uuid));
 
-        var element = apiImpl.getControlLoopElement(elements.keySet().iterator().next());
+        var element = apiImpl.getAutomationCompositionElement(elements.keySet().iterator().next());
         var idType = new ToscaConceptIdentifier(ID_NAME_TYPE, ID_VERSION_TYPE);
         assertEquals(idType, element.getParticipantType());
 
-        var clElementStatistics = new ClElementStatistics();
-        var controlLoopId = new ToscaConceptIdentifier("defName", "0.0.1");
-        clElementStatistics.setParticipantId(controlLoopId);
-        clElementStatistics.setControlLoopState(ControlLoopState.RUNNING);
-        clElementStatistics.setTimeStamp(Instant.now());
-
-        apiImpl.updateControlLoopElementStatistics(uuid, clElementStatistics);
-        var clElement = apiImpl.updateControlLoopElementState(id, uuid, ControlLoopOrderedState.UNINITIALISED,
-                ControlLoopState.PASSIVE, ParticipantMessageType.CONTROLLOOP_STATECHANGE_ACK);
-        assertEquals(ControlLoopOrderedState.UNINITIALISED, clElement.getOrderedState());
-        assertEquals(uuid, clElement.getId());
+        var acElementStatistics = new AcElementStatistics();
+        var automationCompositionId = new ToscaConceptIdentifier("defName", "0.0.1");
+        acElementStatistics.setParticipantId(automationCompositionId);
+        acElementStatistics.setState(AutomationCompositionState.RUNNING);
+        acElementStatistics.setTimeStamp(Instant.now());
+
+        apiImpl.updateAutomationCompositionElementStatistics(uuid, acElementStatistics);
+        var acElement =
+            apiImpl.updateAutomationCompositionElementState(id, uuid, AutomationCompositionOrderedState.UNINITIALISED,
+                AutomationCompositionState.PASSIVE, ParticipantMessageType.AUTOMATION_COMPOSITION_STATECHANGE_ACK);
+        assertEquals(AutomationCompositionOrderedState.UNINITIALISED, acElement.getOrderedState());
+        assertEquals(uuid, acElement.getId());
 
     }
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.comm;
+package org.onap.policy.clamp.acm.participant.intermediary.comm;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -28,13 +28,13 @@ import java.util.Collections;
 import java.util.List;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
-import org.onap.policy.clamp.controlloop.common.exception.ControlLoopRuntimeException;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopAck;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregister;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegister;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatus;
-import org.onap.policy.clamp.controlloop.participant.intermediary.main.parameters.CommonTestData;
+import org.onap.policy.clamp.acm.participant.intermediary.main.parameters.CommonTestData;
+import org.onap.policy.clamp.common.acm.exception.AutomationCompositionRuntimeException;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
 import org.onap.policy.common.utils.coder.CoderException;
 
@@ -44,31 +44,28 @@ class ParticipantCommTest {
 
     @Test
     void participantReqTest() throws CoderException {
-        var participantHandler = commonTestData.getParticipantHandlerControlLoops();
+        var participantHandler = commonTestData.getParticipantHandlerAutomationCompositions();
 
         var participantRegisterAckListener = new ParticipantRegisterAckListener(participantHandler);
-        assertEquals(ParticipantMessageType.PARTICIPANT_REGISTER_ACK.name(),
-                participantRegisterAckListener.getType());
+        assertEquals(ParticipantMessageType.PARTICIPANT_REGISTER_ACK.name(), participantRegisterAckListener.getType());
 
         var participantStatusReqListener = new ParticipantStatusReqListener(participantHandler);
-        assertEquals(ParticipantMessageType.PARTICIPANT_STATUS_REQ.name(),
-                participantStatusReqListener.getType());
+        assertEquals(ParticipantMessageType.PARTICIPANT_STATUS_REQ.name(), participantStatusReqListener.getType());
 
         var participantDeregisterAckListener = new ParticipantDeregisterAckListener(participantHandler);
         assertEquals(ParticipantMessageType.PARTICIPANT_DEREGISTER_ACK.name(),
-                participantDeregisterAckListener.getType());
+            participantDeregisterAckListener.getType());
 
         var participantUpdateListener = new ParticipantUpdateListener(participantHandler);
-        assertEquals(ParticipantMessageType.PARTICIPANT_UPDATE.name(),
-                participantUpdateListener.getType());
+        assertEquals(ParticipantMessageType.PARTICIPANT_UPDATE.name(), participantUpdateListener.getType());
 
-        var controlLoopUpdateListener = new ControlLoopUpdateListener(participantHandler);
-        assertEquals(ParticipantMessageType.CONTROL_LOOP_UPDATE.name(),
-                controlLoopUpdateListener.getType());
+        var automationCompositionUpdateListener = new AutomationCompositionUpdateListener(participantHandler);
+        assertEquals(ParticipantMessageType.AUTOMATION_COMPOSITION_UPDATE.name(),
+            automationCompositionUpdateListener.getType());
 
-        var controlLoopStateChangeListener = new ControlLoopStateChangeListener(participantHandler);
-        assertEquals(ParticipantMessageType.CONTROL_LOOP_STATE_CHANGE.name(),
-                controlLoopStateChangeListener.getType());
+        var automationCompositionStateChangeListener = new AutomationCompositionStateChangeListener(participantHandler);
+        assertEquals(ParticipantMessageType.AUTOMATION_COMPOSITION_STATE_CHANGE.name(),
+            automationCompositionStateChangeListener.getType());
     }
 
     @Test
@@ -76,26 +73,26 @@ class ParticipantCommTest {
         var participantMessagePublisher = new ParticipantMessagePublisher();
 
         var participantStatus = Mockito.mock(ParticipantStatus.class);
-        assertThrows(ControlLoopRuntimeException.class, () -> {
+        assertThrows(AutomationCompositionRuntimeException.class, () -> {
             participantMessagePublisher.sendParticipantStatus(participantStatus);
         });
-        assertThrows(ControlLoopRuntimeException.class, () -> {
+        assertThrows(AutomationCompositionRuntimeException.class, () -> {
             participantMessagePublisher.sendHeartbeat(participantStatus);
         });
 
         var participantRegister = Mockito.mock(ParticipantRegister.class);
-        assertThrows(ControlLoopRuntimeException.class, () -> {
+        assertThrows(AutomationCompositionRuntimeException.class, () -> {
             participantMessagePublisher.sendParticipantRegister(participantRegister);
         });
 
         var participantDeregister = Mockito.mock(ParticipantDeregister.class);
-        assertThrows(ControlLoopRuntimeException.class, () -> {
+        assertThrows(AutomationCompositionRuntimeException.class, () -> {
             participantMessagePublisher.sendParticipantDeregister(participantDeregister);
         });
 
-        var controlLoopAck = Mockito.mock(ControlLoopAck.class);
-        assertThrows(ControlLoopRuntimeException.class, () -> {
-            participantMessagePublisher.sendControlLoopAck(controlLoopAck);
+        var automationCompositionAck = Mockito.mock(AutomationCompositionAck.class);
+        assertThrows(AutomationCompositionRuntimeException.class, () -> {
+            participantMessagePublisher.sendAutomationCompositionAck(automationCompositionAck);
         });
 
         List<TopicSink> emptyList = Collections.emptyList();
@@ -108,7 +105,7 @@ class ParticipantCommTest {
 
     @Test
     void messageSenderTest() throws CoderException {
-        var participantHandler = commonTestData.getParticipantHandlerControlLoops();
+        var participantHandler = commonTestData.getParticipantHandlerAutomationCompositions();
         var participantParameters = CommonTestData.getParticipantParameters();
         var messageSender = new MessageSender(participantHandler, participantParameters);
         messageSender.run();
diff --git a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionHandlerTest.java b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionHandlerTest.java
new file mode 100644 (file)
index 0000000..5585e51
--- /dev/null
@@ -0,0 +1,227 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.participant.intermediary.handler;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.mockito.Mockito.mock;
+
+import java.time.Instant;
+import java.util.List;
+import java.util.UUID;
+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.AcElementStatistics;
+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.ParticipantUpdates;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionStateChange;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionUpdate;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+@ExtendWith(SpringExtension.class)
+class AutomationCompositionHandlerTest {
+
+    private CommonTestData commonTestData = new CommonTestData();
+
+    @Test
+    void automationCompositionHandlerTest() {
+        var ach = commonTestData.getMockAutomationCompositionHandler();
+        assertNotNull(ach.getAutomationCompositions());
+
+        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);
+        ach.registerAutomationCompositionElementListener(listener);
+        assertThat(ach.getListeners()).contains(listener);
+    }
+
+    @Test
+    void updateNullAutomationCompositionHandlerTest() {
+        var id = UUID.randomUUID();
+
+        var ach = commonTestData.getMockAutomationCompositionHandler();
+        assertNull(ach.updateAutomationCompositionElementState(null, null,
+            AutomationCompositionOrderedState.UNINITIALISED, AutomationCompositionState.PASSIVE));
+
+        assertNull(ach.updateAutomationCompositionElementState(null, id,
+            AutomationCompositionOrderedState.UNINITIALISED, AutomationCompositionState.PASSIVE));
+
+        var acElementStatistics = new AcElementStatistics();
+        var automationCompositionId = new ToscaConceptIdentifier("defName", "0.0.1");
+        acElementStatistics.setParticipantId(automationCompositionId);
+        acElementStatistics.setState(AutomationCompositionState.RUNNING);
+        acElementStatistics.setTimeStamp(Instant.now());
+
+        ach.updateAutomationCompositionElementStatistics(id, acElementStatistics);
+        assertNull(ach.updateAutomationCompositionElementState(automationCompositionId, id,
+            AutomationCompositionOrderedState.UNINITIALISED, AutomationCompositionState.PASSIVE));
+    }
+
+    @Test
+    void updateAutomationCompositionHandlerTest() throws CoderException {
+        var uuid = UUID.randomUUID();
+        var id = CommonTestData.getParticipantId();
+
+        var ach = commonTestData.setTestAutomationCompositionHandler(id, uuid);
+        var key = ach.getElementsOnThisParticipant().keySet().iterator().next();
+        var value = ach.getElementsOnThisParticipant().get(key);
+        assertEquals(AutomationCompositionState.UNINITIALISED, value.getState());
+        ach.updateAutomationCompositionElementState(id, uuid, AutomationCompositionOrderedState.UNINITIALISED,
+            AutomationCompositionState.PASSIVE);
+        assertEquals(AutomationCompositionState.PASSIVE, value.getState());
+
+        ach.getAutomationCompositionMap().values().iterator().next().getElements().putIfAbsent(key, value);
+        ach.updateAutomationCompositionElementState(id, key, AutomationCompositionOrderedState.PASSIVE,
+            AutomationCompositionState.RUNNING);
+        assertEquals(AutomationCompositionState.RUNNING, value.getState());
+
+        var acElementStatistics = new AcElementStatistics();
+        acElementStatistics.setParticipantId(id);
+        acElementStatistics.setState(AutomationCompositionState.RUNNING);
+        acElementStatistics.setTimeStamp(Instant.now());
+
+        assertNotEquals(uuid, value.getAcElementStatistics().getId());
+        ach.updateAutomationCompositionElementStatistics(uuid, acElementStatistics);
+        assertEquals(uuid, value.getAcElementStatistics().getId());
+
+        ach.getElementsOnThisParticipant().remove(key, value);
+        ach.getAutomationCompositionMap().values().iterator().next().getElements().clear();
+        assertNull(ach.updateAutomationCompositionElementState(id, key, AutomationCompositionOrderedState.PASSIVE,
+            AutomationCompositionState.RUNNING));
+
+    }
+
+    @Test
+    void handleAutomationCompositionUpdateExceptionTest() throws CoderException {
+        var uuid = UUID.randomUUID();
+        var id = CommonTestData.getParticipantId();
+        var stateChange = getStateChange(id, uuid, AutomationCompositionOrderedState.RUNNING);
+        var ach = commonTestData.setTestAutomationCompositionHandler(id, uuid);
+        assertDoesNotThrow(
+            () -> ach.handleAutomationCompositionStateChange(mock(AutomationCompositionStateChange.class), List.of()));
+
+        ach.handleAutomationCompositionStateChange(stateChange, List.of());
+        var newid = new ToscaConceptIdentifier("id", "1.2.3");
+        stateChange.setAutomationCompositionId(newid);
+        stateChange.setParticipantId(newid);
+        assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(stateChange, List.of()));
+
+        var acd = new AutomationCompositionElementDefinition();
+        acd.setAcElementDefinitionId(id);
+        var updateMsg = new AutomationCompositionUpdate();
+        updateMsg.setAutomationCompositionId(id);
+        updateMsg.setMessageId(uuid);
+        updateMsg.setParticipantId(id);
+        updateMsg.setStartPhase(0);
+        var acElementDefinitions = List.of(acd);
+        assertDoesNotThrow(() -> ach.handleAutomationCompositionUpdate(updateMsg, acElementDefinitions));
+        updateMsg.setStartPhase(1);
+        assertDoesNotThrow(() -> ach.handleAutomationCompositionUpdate(updateMsg, acElementDefinitions));
+        assertThat(ach.getAcElementInstanceProperties(uuid)).isEmpty();
+
+        ach.getAutomationCompositionMap().clear();
+        updateMsg.setStartPhase(0);
+        assertDoesNotThrow(() -> ach.handleAutomationCompositionUpdate(updateMsg, acElementDefinitions));
+
+        updateMsg.setAutomationCompositionId(new ToscaConceptIdentifier("new", "0.0.1"));
+        updateMsg.setParticipantUpdatesList(List.of(mock(ParticipantUpdates.class)));
+        assertDoesNotThrow(() -> ach.handleAutomationCompositionUpdate(updateMsg, acElementDefinitions));
+
+        updateMsg.setStartPhase(1);
+        var participantUpdate = new ParticipantUpdates();
+        participantUpdate.setParticipantId(id);
+        var element = new AutomationCompositionElement();
+        element.setParticipantType(id);
+        element.setDefinition(id);
+        participantUpdate.setAutomationCompositionElementList(List.of(element));
+        updateMsg.setParticipantUpdatesList(List.of(participantUpdate));
+
+        var acd2 = new AutomationCompositionElementDefinition();
+        acd2.setAcElementDefinitionId(id);
+        acd2.setAutomationCompositionElementToscaNodeTemplate(mock(ToscaNodeTemplate.class));
+        assertDoesNotThrow(() -> ach.handleAutomationCompositionUpdate(updateMsg, List.of(acd2)));
+
+    }
+
+    @Test
+    void automationCompositionStateChangeUninitialisedTest() throws CoderException {
+        var uuid = UUID.randomUUID();
+        var id = CommonTestData.getParticipantId();
+
+        var stateChangeUninitialised = getStateChange(id, uuid, AutomationCompositionOrderedState.UNINITIALISED);
+
+        var ach = commonTestData.setTestAutomationCompositionHandler(id, uuid);
+        ach.handleAutomationCompositionStateChange(stateChangeUninitialised, List.of());
+        var newid = new ToscaConceptIdentifier("id", "1.2.3");
+        stateChangeUninitialised.setAutomationCompositionId(newid);
+        stateChangeUninitialised.setParticipantId(newid);
+        assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(stateChangeUninitialised, List.of()));
+    }
+
+    @Test
+    void automationCompositionStateChangePassiveTest() throws CoderException {
+        var uuid = UUID.randomUUID();
+        var id = CommonTestData.getParticipantId();
+
+        var stateChangePassive = getStateChange(id, uuid, AutomationCompositionOrderedState.PASSIVE);
+
+        var ach = commonTestData.setTestAutomationCompositionHandler(id, uuid);
+        ach.handleAutomationCompositionStateChange(stateChangePassive, List.of());
+        var newid = new ToscaConceptIdentifier("id", "1.2.3");
+        stateChangePassive.setAutomationCompositionId(newid);
+        stateChangePassive.setParticipantId(newid);
+        assertDoesNotThrow(() -> ach.handleAutomationCompositionStateChange(stateChangePassive, List.of()));
+    }
+
+    private AutomationCompositionStateChange getStateChange(ToscaConceptIdentifier id, UUID uuid,
+        AutomationCompositionOrderedState state) {
+        var stateChange = new AutomationCompositionStateChange();
+        stateChange.setAutomationCompositionId(id);
+        stateChange.setParticipantId(id);
+        stateChange.setMessageId(uuid);
+        stateChange.setOrderedState(state);
+        stateChange.setCurrentState(AutomationCompositionState.UNINITIALISED);
+        stateChange.setTimestamp(Instant.ofEpochMilli(3000));
+        return stateChange;
+    }
+
+}
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.handler;
+package org.onap.policy.clamp.acm.participant.intermediary.handler;
 
 import javax.validation.constraints.NotNull;
 import lombok.Getter;
 import lombok.Setter;
-import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantIntermediaryParameters;
-import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantParameters;
+import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantIntermediaryParameters;
+import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantParameters;
 
 @Getter
 @Setter
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.handler;
+package org.onap.policy.clamp.acm.participant.intermediary.handler;
 
 import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
@@ -34,10 +34,10 @@ import static org.mockito.Mockito.when;
 
 import java.util.List;
 import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatusReq;
-import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ParticipantStatusReqListener;
-import org.onap.policy.clamp.controlloop.participant.intermediary.main.parameters.CommonTestData;
-import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantParameters;
+import org.onap.policy.clamp.acm.participant.intermediary.comm.ParticipantStatusReqListener;
+import org.onap.policy.clamp.acm.participant.intermediary.main.parameters.CommonTestData;
+import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantParameters;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatusReq;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.common.utils.coder.StandardCoderObject;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.handler;
+package org.onap.policy.clamp.acm.participant.intermediary.handler;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -32,16 +32,16 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantDefinition;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantHealthStatus;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantAckMessage;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessage;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegisterAck;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdate;
-import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ParticipantMessagePublisher;
-import org.onap.policy.clamp.controlloop.participant.intermediary.main.parameters.CommonTestData;
+import org.onap.policy.clamp.acm.participant.intermediary.comm.ParticipantMessagePublisher;
+import org.onap.policy.clamp.acm.participant.intermediary.main.parameters.CommonTestData;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantDefinition;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantAckMessage;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessage;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegisterAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantUpdate;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
@@ -60,17 +60,17 @@ class ParticipantHandlerTest {
         var id = new ToscaConceptIdentifier(ID_NAME, ID_VERSION);
         assertEquals(id, participantHandler.getParticipantId());
         assertEquals(id, participantHandler.getParticipantType());
-        assertThat(participantHandler.getClElementDefinitionCommonProperties(id)).isEmpty();
+        assertThat(participantHandler.getAcElementDefinitionCommonProperties(id)).isEmpty();
 
     }
 
     @Test
     void handleUpdateTest() {
         var parameters = CommonTestData.getParticipantParameters();
-        var controlLoopHander = commonTestData.getMockControlLoopHandler();
+        var automationCompositionHander = commonTestData.getMockAutomationCompositionHandler();
         var publisher = new ParticipantMessagePublisher();
         var emptyParticipantHandler =
-                new ParticipantHandler(parameters, publisher, controlLoopHander);
+                new ParticipantHandler(parameters, publisher, automationCompositionHander);
         var participantUpdateMsg = new ParticipantUpdate();
 
         assertThatThrownBy(() ->
@@ -80,7 +80,7 @@ class ParticipantHandlerTest {
         var participantHandler = commonTestData.getMockParticipantHandler();
 
         var id = new ToscaConceptIdentifier(ID_NAME, ID_VERSION);
-        participantUpdateMsg.setControlLoopId(id);
+        participantUpdateMsg.setAutomationCompositionId(id);
         participantUpdateMsg.setParticipantId(id);
         participantUpdateMsg.setParticipantType(id);
         participantUpdateMsg.setMessageId(UUID.randomUUID());
@@ -89,10 +89,10 @@ class ParticipantHandlerTest {
         var heartbeatF = participantHandler.makeHeartbeat(false);
         assertEquals(id, heartbeatF.getParticipantId());
         assertEquals(ParticipantState.UNKNOWN, heartbeatF.getParticipantStatistics().getState());
-        assertThat(heartbeatF.getControlLoopInfoList()).isEmpty();
+        assertThat(heartbeatF.getAutomationCompositionInfoList()).isEmpty();
 
         participantHandler.handleParticipantUpdate(participantUpdateMsg);
-        assertThat(participantHandler.getClElementDefinitionCommonProperties(id)).isEmpty();
+        assertThat(participantHandler.getAcElementDefinitionCommonProperties(id)).isEmpty();
 
         var heartbeatT = participantHandler.makeHeartbeat(true);
         assertEquals(id, heartbeatT.getParticipantId());
@@ -148,7 +148,7 @@ class ParticipantHandlerTest {
     void checkAppliesTo() {
         var participantHandler = commonTestData.getMockParticipantHandler();
         var participantAckMsg =
-                new ParticipantAckMessage(ParticipantMessageType.CONTROL_LOOP_UPDATE);
+                new ParticipantAckMessage(ParticipantMessageType.AUTOMATION_COMPOSITION_UPDATE);
         assertTrue(participantHandler.appliesTo(participantAckMsg));
 
         var participantMsg =
@@ -162,14 +162,14 @@ class ParticipantHandlerTest {
     }
 
     @Test
-    void getControlLoopInfoListTest() throws CoderException {
-        var participantHandler = commonTestData.getParticipantHandlerControlLoops();
+    void getAutomationCompositionInfoListTest() throws CoderException {
+        var participantHandler = commonTestData.getParticipantHandlerAutomationCompositions();
         var id = new ToscaConceptIdentifier(ID_NAME, ID_VERSION);
         participantHandler.sendHeartbeat();
         assertEquals(id, participantHandler.makeHeartbeat(false)
-                .getControlLoopInfoList()
+                .getAutomationCompositionInfoList()
                 .get(0)
-                .getControlLoopId());
+                .getAutomationCompositionId());
 
     }
 
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.main.parameters;
+package org.onap.policy.clamp.acm.participant.intermediary.main.parameters;
 
 import java.io.File;
 import java.time.Instant;
@@ -30,18 +30,18 @@ import java.util.Map;
 import java.util.TreeMap;
 import java.util.UUID;
 import org.mockito.Mockito;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregisterAck;
-import org.onap.policy.clamp.controlloop.participant.intermediary.comm.ParticipantMessagePublisher;
-import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ControlLoopHandler;
-import org.onap.policy.clamp.controlloop.participant.intermediary.handler.DummyParticipantParameters;
-import org.onap.policy.clamp.controlloop.participant.intermediary.handler.ParticipantHandler;
-import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantIntermediaryParameters;
+import org.onap.policy.clamp.acm.participant.intermediary.comm.ParticipantMessagePublisher;
+import org.onap.policy.clamp.acm.participant.intermediary.handler.AutomationCompositionHandler;
+import org.onap.policy.clamp.acm.participant.intermediary.handler.DummyParticipantParameters;
+import org.onap.policy.clamp.acm.participant.intermediary.handler.ParticipantHandler;
+import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantIntermediaryParameters;
+import org.onap.policy.clamp.models.acm.concepts.AcElementStatistics;
+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.messages.dmaap.participant.ParticipantDeregisterAck;
 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;
@@ -53,7 +53,7 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
  * Class to hold/create all parameters for test cases.
  */
 public class CommonTestData {
-    public static final String PARTICIPANT_GROUP_NAME = "ControlLoopParticipantGroup";
+    public static final String PARTICIPANT_GROUP_NAME = "AutomationCompositionParticipantGroup";
     public static final String DESCRIPTION = "Participant description";
     public static final long TIME_INTERVAL = 2000;
     public static final List<TopicParameters> TOPIC_PARAMS = Arrays.asList(getTopicParams());
@@ -68,7 +68,7 @@ public class CommonTestData {
     public ParticipantIntermediaryParameters getParticipantIntermediaryParameters() {
         try {
             return CODER.convert(getIntermediaryParametersMap(PARTICIPANT_GROUP_NAME),
-                    ParticipantIntermediaryParameters.class);
+                ParticipantIntermediaryParameters.class);
         } catch (final CoderException e) {
             throw new RuntimeException("cannot create ParticipantSimulatorParameters from map", e);
         }
@@ -81,8 +81,7 @@ public class CommonTestData {
      */
     public static DummyParticipantParameters getParticipantParameters() {
         try {
-            return CODER.convert(getParametersMap(PARTICIPANT_GROUP_NAME),
-                    DummyParticipantParameters.class);
+            return CODER.convert(getParametersMap(PARTICIPANT_GROUP_NAME), DummyParticipantParameters.class);
         } catch (final CoderException e) {
             throw new RuntimeException("cannot create ParticipantSimulatorParameters from map", e);
         }
@@ -113,7 +112,7 @@ public class CommonTestData {
         map.put("description", DESCRIPTION);
         map.put("participantType", getParticipantId());
         map.put("reportingTimeIntervalMs", TIME_INTERVAL);
-        map.put("clampControlLoopTopics", getTopicParametersMap(false));
+        map.put("clampAutomationCompositionTopics", getTopicParametersMap(false));
 
         return map;
     }
@@ -140,7 +139,7 @@ public class CommonTestData {
      */
     public static TopicParameters getTopicParams() {
         final var topicParams = new TopicParameters();
-        topicParams.setTopic("POLICY-CLRUNTIME-PARTICIPANT");
+        topicParams.setTopic("POLICY-ACRUNTIME-PARTICIPANT");
         topicParams.setTopicCommInfrastructure("dmaap");
         topicParams.setServers(Arrays.asList("localhost"));
         return topicParams;
@@ -169,14 +168,12 @@ public class CommonTestData {
     }
 
     /**
-     * Returns a mocked ControlLoopHandler for test cases.
+     * Returns a mocked AutomationCompositionHandler for test cases.
      *
-     * @return ControlLoopHandler
+     * @return AutomationCompositionHandler
      */
-    public ControlLoopHandler getMockControlLoopHandler() {
-        return new ControlLoopHandler(
-                getParticipantParameters(),
-                getParticipantMessagePublisher());
+    public AutomationCompositionHandler getMockAutomationCompositionHandler() {
+        return new AutomationCompositionHandler(getParticipantParameters(), getParticipantMessagePublisher());
     }
 
     /**
@@ -186,10 +183,10 @@ public class CommonTestData {
      */
     public ParticipantHandler getMockParticipantHandler() {
         var parameters = getParticipantParameters();
-        var controlLoopHandler = getMockControlLoopHandler();
+        var automationCompositionHandler = getMockAutomationCompositionHandler();
         var publisher = new ParticipantMessagePublisher();
         publisher.active(Collections.singletonList(Mockito.mock(TopicSink.class)));
-        var participantHandler = new ParticipantHandler(parameters, publisher, controlLoopHandler);
+        var participantHandler = new ParticipantHandler(parameters, publisher, automationCompositionHandler);
         return participantHandler;
     }
 
@@ -200,14 +197,16 @@ public class CommonTestData {
      *
      * @throws CoderException if there is an error with .json file.
      */
-    public ParticipantHandler getParticipantHandlerControlLoops() throws CoderException {
-        var controlLoopHandler = Mockito.mock(ControlLoopHandler.class);
-        Mockito.doReturn(getTestControlLoops()).when(controlLoopHandler).getControlLoops();
-        Mockito.doReturn(getTestControlLoopMap()).when(controlLoopHandler).getControlLoopMap();
+    public ParticipantHandler getParticipantHandlerAutomationCompositions() throws CoderException {
+        var automationCompositionHandler = Mockito.mock(AutomationCompositionHandler.class);
+        Mockito.doReturn(getTestAutomationCompositions()).when(automationCompositionHandler)
+            .getAutomationCompositions();
+        Mockito.doReturn(getTestAutomationCompositionMap()).when(automationCompositionHandler)
+            .getAutomationCompositionMap();
         var publisher = new ParticipantMessagePublisher();
         publisher.active(Collections.singletonList(Mockito.mock(TopicSink.class)));
         var parameters = getParticipantParameters();
-        var participantHandler = new ParticipantHandler(parameters, publisher, controlLoopHandler);
+        var participantHandler = new ParticipantHandler(parameters, publisher, automationCompositionHandler);
         participantHandler.sendParticipantRegister();
         participantHandler.handleParticipantStatusReq(null);
         participantHandler.sendParticipantDeregister();
@@ -218,31 +217,31 @@ public class CommonTestData {
     }
 
     /**
-     * Returns a Map of ToscaConceptIdentifier and ControlLoop for test cases.
+     * Returns a Map of ToscaConceptIdentifier and AutomationComposition for test cases.
      *
-     * @return controlLoopMap
+     * @return automationCompositionMap
      *
      * @throws CoderException if there is an error with .json file.
      */
-    public Map<ToscaConceptIdentifier, ControlLoop> getTestControlLoopMap() throws CoderException {
-        var controlLoops = getTestControlLoops();
-        var controlLoop = controlLoops.getControlLoopList().get(1);
+    public Map<ToscaConceptIdentifier, AutomationComposition> getTestAutomationCompositionMap() throws CoderException {
+        var automationCompositions = getTestAutomationCompositions();
+        var automationComposition = automationCompositions.getAutomationCompositionList().get(1);
         var id = getParticipantId();
-        Map<ToscaConceptIdentifier, ControlLoop> controlLoopMap = new LinkedHashMap<>();
-        controlLoopMap.put(id, controlLoop);
-        return controlLoopMap;
+        Map<ToscaConceptIdentifier, AutomationComposition> automationCompositionMap = new LinkedHashMap<>();
+        automationCompositionMap.put(id, automationComposition);
+        return automationCompositionMap;
     }
 
     /**
-     * Returns List of ControlLoop for test cases.
+     * Returns List of AutomationComposition for test cases.
      *
-     * @return ControlLoops
+     * @return AutomationCompositions
      *
      * @throws CoderException if there is an error with .json file.
      */
-    public ControlLoops getTestControlLoops() throws CoderException {
-        return new StandardCoder()
-                .decode(new File("src/test/resources/providers/TestControlLoops.json"), ControlLoops.class);
+    public AutomationCompositions getTestAutomationCompositions() throws CoderException {
+        return new StandardCoder().decode(new File("src/test/resources/providers/TestAutomationCompositions.json"),
+            AutomationCompositions.class);
     }
 
     /**
@@ -251,43 +250,45 @@ public class CommonTestData {
      * @param uuid UUID and id ToscaConceptIdentifier
      * @return a map suitable for elementsOnThisParticipant
      */
-    public Map<UUID, ControlLoopElement> setControlLoopElementTest(UUID uuid, ToscaConceptIdentifier id) {
-        var clElement = new ControlLoopElement();
-        clElement.setId(uuid);
-        clElement.setParticipantId(id);
-        clElement.setDefinition(id);
-        clElement.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
+    public Map<UUID, AutomationCompositionElement> setAutomationCompositionElementTest(UUID uuid,
+        ToscaConceptIdentifier id) {
+        var acElement = new AutomationCompositionElement();
+        acElement.setId(uuid);
+        acElement.setParticipantId(id);
+        acElement.setDefinition(id);
+        acElement.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
 
-        var clElementStatistics = new ClElementStatistics();
-        clElementStatistics.setParticipantId(id);
-        clElementStatistics.setControlLoopState(ControlLoopState.UNINITIALISED);
-        clElementStatistics.setTimeStamp(Instant.now());
+        var acElementStatistics = new AcElementStatistics();
+        acElementStatistics.setParticipantId(id);
+        acElementStatistics.setState(AutomationCompositionState.UNINITIALISED);
+        acElementStatistics.setTimeStamp(Instant.now());
 
-        clElement.setClElementStatistics(clElementStatistics);
+        acElement.setAcElementStatistics(acElementStatistics);
 
-        Map<UUID, ControlLoopElement> elementsOnThisParticipant = new LinkedHashMap<>();
-        elementsOnThisParticipant.put(uuid, clElement);
+        Map<UUID, AutomationCompositionElement> elementsOnThisParticipant = new LinkedHashMap<>();
+        elementsOnThisParticipant.put(uuid, acElement);
         return elementsOnThisParticipant;
     }
 
     /**
-     * Returns a ControlLoopHandler with elements on the id,uuid.
+     * Returns a AutomationCompositionHandler with elements on the id,uuid.
      *
      * @param id ToscaConceptIdentifier and uuid UUID
-     * @return a ControlLoopHander with elements
+     * @return a AutomationCompositionHander with elements
      */
-    public ControlLoopHandler setTestControlLoopHandler(ToscaConceptIdentifier id, UUID uuid) throws CoderException {
-        var clh = getMockControlLoopHandler();
+    public AutomationCompositionHandler setTestAutomationCompositionHandler(ToscaConceptIdentifier id, UUID uuid)
+        throws CoderException {
+        var ach = getMockAutomationCompositionHandler();
 
-        var key = getTestControlLoopMap().keySet().iterator().next();
-        var value = getTestControlLoopMap().get(key);
-        clh.getControlLoopMap().put(key, value);
+        var key = getTestAutomationCompositionMap().keySet().iterator().next();
+        var value = getTestAutomationCompositionMap().get(key);
+        ach.getAutomationCompositionMap().put(key, value);
 
-        var keyElem = setControlLoopElementTest(uuid, id).keySet().iterator().next();
-        var valueElem = setControlLoopElementTest(uuid, id).get(keyElem);
-        clh.getElementsOnThisParticipant().put(keyElem, valueElem);
+        var keyElem = setAutomationCompositionElementTest(uuid, id).keySet().iterator().next();
+        var valueElem = setAutomationCompositionElementTest(uuid, id).get(keyElem);
+        ach.getElementsOnThisParticipant().put(keyElem, valueElem);
 
-        return clh;
+        return ach;
     }
 
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.participant.intermediary.main.parameters;
+package org.onap.policy.clamp.acm.participant.intermediary.main.parameters;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
 import javax.validation.Validation;
 import javax.validation.ValidatorFactory;
 import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.participant.intermediary.parameters.ParticipantIntermediaryParameters;
+import org.onap.policy.clamp.acm.participant.intermediary.parameters.ParticipantIntermediaryParameters;
 
 /**
  * Class to perform unit test of {@link ParticipantParameterGroup}.
@@ -45,7 +45,7 @@ class TestParticipantIntermediaryParameters {
     void testParticipantIntermediaryParameterGroup_EmptyParameter() {
         final ParticipantIntermediaryParameters participantParameters =
                 commonTestData.getParticipantIntermediaryParameters();
-        participantParameters.setClampControlLoopTopics(null);
+        participantParameters.setClampAutomationCompositionTopics(null);
         assertThat(validatorFactory.getValidator().validate(participantParameters)).isNotEmpty();
     }
 
@@ -53,7 +53,7 @@ class TestParticipantIntermediaryParameters {
     void testParticipantIntermediaryParameters_NullTopicSinks() {
         final ParticipantIntermediaryParameters participantParameters =
                 commonTestData.getParticipantIntermediaryParameters();
-        participantParameters.getClampControlLoopTopics().setTopicSinks(null);
+        participantParameters.getClampAutomationCompositionTopics().setTopicSinks(null);
         assertThat(validatorFactory.getValidator().validate(participantParameters)).isNotEmpty();
     }
 
@@ -61,7 +61,7 @@ class TestParticipantIntermediaryParameters {
     void testParticipantIntermediaryParameters_NullTopicSources() {
         final ParticipantIntermediaryParameters participantParameters =
                 commonTestData.getParticipantIntermediaryParameters();
-        participantParameters.getClampControlLoopTopics().setTopicSources(null);
+        participantParameters.getClampAutomationCompositionTopics().setTopicSources(null);
         assertThat(validatorFactory.getValidator().validate(participantParameters)).isNotEmpty();
     }
 }
diff --git a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ControlLoopHandlerTest.java b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/controlloop/participant/intermediary/handler/ControlLoopHandlerTest.java
deleted file mode 100644 (file)
index 43b43e3..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.participant.intermediary.handler;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
-import static org.mockito.Mockito.mock;
-
-import java.time.Instant;
-import java.util.List;
-import java.util.UUID;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElementDefinition;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantUpdates;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopStateChange;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopUpdate;
-import org.onap.policy.clamp.controlloop.participant.intermediary.api.ControlLoopElementListener;
-import org.onap.policy.clamp.controlloop.participant.intermediary.main.parameters.CommonTestData;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
-import org.springframework.test.context.junit.jupiter.SpringExtension;
-
-@ExtendWith(SpringExtension.class)
-class ControlLoopHandlerTest {
-
-    private CommonTestData commonTestData = new CommonTestData();
-
-    @Test
-    void controlLoopHandlerTest() {
-        var clh = commonTestData.getMockControlLoopHandler();
-        assertNotNull(clh.getControlLoops());
-
-        assertNotNull(clh.getControlLoopMap());
-        assertNotNull(clh.getElementsOnThisParticipant());
-
-        var elementId1 = UUID.randomUUID();
-        var element = new ControlLoopElement();
-        element.setId(elementId1);
-        element.setDefinition(new ToscaConceptIdentifier(
-                "org.onap.policy.controlloop.PolicyControlLoopParticipant", "1.0.1"));
-
-        element.setOrderedState(ControlLoopOrderedState.PASSIVE);
-
-        ControlLoopElementListener listener = mock(ControlLoopElementListener.class);
-        clh.registerControlLoopElementListener(listener);
-        assertThat(clh.getListeners()).contains(listener);
-    }
-
-    @Test
-    void updateNullControlLoopHandlerTest() {
-        var id = UUID.randomUUID();
-
-        var clh = commonTestData.getMockControlLoopHandler();
-        assertNull(clh.updateControlLoopElementState(null, null, ControlLoopOrderedState.UNINITIALISED,
-                ControlLoopState.PASSIVE));
-
-        assertNull(clh.updateControlLoopElementState(null, id, ControlLoopOrderedState.UNINITIALISED,
-                ControlLoopState.PASSIVE));
-
-        var clElementStatistics = new ClElementStatistics();
-        var controlLoopId = new ToscaConceptIdentifier("defName", "0.0.1");
-        clElementStatistics.setParticipantId(controlLoopId);
-        clElementStatistics.setControlLoopState(ControlLoopState.RUNNING);
-        clElementStatistics.setTimeStamp(Instant.now());
-
-        clh.updateControlLoopElementStatistics(id, clElementStatistics);
-        assertNull(clh.updateControlLoopElementState(controlLoopId, id, ControlLoopOrderedState.UNINITIALISED,
-                ControlLoopState.PASSIVE));
-    }
-
-    @Test
-    void updateControlLoopHandlerTest() throws CoderException {
-        var uuid = UUID.randomUUID();
-        var id = CommonTestData.getParticipantId();
-
-        var clh = commonTestData.setTestControlLoopHandler(id, uuid);
-        var key = clh.getElementsOnThisParticipant().keySet().iterator().next();
-        var value = clh.getElementsOnThisParticipant().get(key);
-        assertEquals(ControlLoopState.UNINITIALISED, value.getState());
-        clh.updateControlLoopElementState(id, uuid, ControlLoopOrderedState.UNINITIALISED,
-                ControlLoopState.PASSIVE);
-        assertEquals(ControlLoopState.PASSIVE, value.getState());
-
-        clh.getControlLoopMap().values().iterator().next().getElements().putIfAbsent(key, value);
-        clh.updateControlLoopElementState(id, key, ControlLoopOrderedState.PASSIVE,
-                ControlLoopState.RUNNING);
-        assertEquals(ControlLoopState.RUNNING, value.getState());
-
-        var clElementStatistics = new ClElementStatistics();
-        clElementStatistics.setParticipantId(id);
-        clElementStatistics.setControlLoopState(ControlLoopState.RUNNING);
-        clElementStatistics.setTimeStamp(Instant.now());
-
-        assertNotEquals(uuid, value.getClElementStatistics().getId());
-        clh.updateControlLoopElementStatistics(uuid, clElementStatistics);
-        assertEquals(uuid, value.getClElementStatistics().getId());
-
-        clh.getElementsOnThisParticipant().remove(key, value);
-        clh.getControlLoopMap().values().iterator().next().getElements().clear();
-        assertNull(clh.updateControlLoopElementState(id, key, ControlLoopOrderedState.PASSIVE,
-                ControlLoopState.RUNNING));
-
-    }
-
-    @Test
-    void handleControlLoopUpdateExceptionTest() throws CoderException {
-        var uuid = UUID.randomUUID();
-        var id = CommonTestData.getParticipantId();
-        var stateChange = getStateChange(id, uuid, ControlLoopOrderedState.RUNNING);
-        var clh = commonTestData.setTestControlLoopHandler(id, uuid);
-        assertDoesNotThrow(() -> clh.handleControlLoopStateChange(mock(ControlLoopStateChange.class), List.of()));
-
-        clh.handleControlLoopStateChange(stateChange, List.of());
-        var newid = new ToscaConceptIdentifier("id", "1.2.3");
-        stateChange.setControlLoopId(newid);
-        stateChange.setParticipantId(newid);
-        assertDoesNotThrow(() -> clh.handleControlLoopStateChange(stateChange, List.of()));
-
-        var cld = new ControlLoopElementDefinition();
-        cld.setClElementDefinitionId(id);
-        var updateMsg = new ControlLoopUpdate();
-        updateMsg.setControlLoopId(id);
-        updateMsg.setMessageId(uuid);
-        updateMsg.setParticipantId(id);
-        updateMsg.setStartPhase(0);
-        var clElementDefinitions = List.of(cld);
-        assertDoesNotThrow(() -> clh.handleControlLoopUpdate(updateMsg, clElementDefinitions));
-        updateMsg.setStartPhase(1);
-        assertDoesNotThrow(() -> clh.handleControlLoopUpdate(updateMsg, clElementDefinitions));
-        assertThat(clh.getClElementInstanceProperties(uuid)).isEmpty();
-
-        clh.getControlLoopMap().clear();
-        updateMsg.setStartPhase(0);
-        assertDoesNotThrow(() -> clh.handleControlLoopUpdate(updateMsg, clElementDefinitions));
-
-        updateMsg.setControlLoopId(new ToscaConceptIdentifier("new", "0.0.1"));
-        updateMsg.setParticipantUpdatesList(List.of(mock(ParticipantUpdates.class)));
-        assertDoesNotThrow(() -> clh.handleControlLoopUpdate(updateMsg, clElementDefinitions));
-
-        updateMsg.setStartPhase(1);
-        var participantUpdate = new ParticipantUpdates();
-        participantUpdate.setParticipantId(id);
-        var element = new ControlLoopElement();
-        element.setParticipantType(id);
-        element.setDefinition(id);
-        participantUpdate.setControlLoopElementList(List.of(element));
-        updateMsg.setParticipantUpdatesList(List.of(participantUpdate));
-
-        var cld2 = new ControlLoopElementDefinition();
-        cld2.setClElementDefinitionId(id);
-        cld2.setControlLoopElementToscaNodeTemplate(mock(ToscaNodeTemplate.class));
-        assertDoesNotThrow(() -> clh.handleControlLoopUpdate(updateMsg, List.of(cld2)));
-
-    }
-
-    @Test
-    void controlLoopStateChangeUninitialisedTest() throws CoderException {
-        var uuid = UUID.randomUUID();
-        var id = CommonTestData.getParticipantId();
-
-        var stateChangeUninitialised = getStateChange(id, uuid, ControlLoopOrderedState.UNINITIALISED);
-
-        var clh = commonTestData.setTestControlLoopHandler(id, uuid);
-        clh.handleControlLoopStateChange(stateChangeUninitialised, List.of());
-        var newid = new ToscaConceptIdentifier("id", "1.2.3");
-        stateChangeUninitialised.setControlLoopId(newid);
-        stateChangeUninitialised.setParticipantId(newid);
-        assertDoesNotThrow(() -> clh.handleControlLoopStateChange(stateChangeUninitialised, List.of()));
-    }
-
-    @Test
-    void controlLoopStateChangePassiveTest() throws CoderException {
-        var uuid = UUID.randomUUID();
-        var id = CommonTestData.getParticipantId();
-
-        var stateChangePassive = getStateChange(id, uuid, ControlLoopOrderedState.PASSIVE);
-
-        var clh = commonTestData.setTestControlLoopHandler(id, uuid);
-        clh.handleControlLoopStateChange(stateChangePassive, List.of());
-        var newid = new ToscaConceptIdentifier("id", "1.2.3");
-        stateChangePassive.setControlLoopId(newid);
-        stateChangePassive.setParticipantId(newid);
-        assertDoesNotThrow(() -> clh.handleControlLoopStateChange(stateChangePassive, List.of()));
-    }
-
-
-    private ControlLoopStateChange getStateChange(ToscaConceptIdentifier id, UUID uuid, ControlLoopOrderedState state) {
-        var stateChange = new ControlLoopStateChange();
-        stateChange.setControlLoopId(id);
-        stateChange.setParticipantId(id);
-        stateChange.setMessageId(uuid);
-        stateChange.setOrderedState(state);
-        stateChange.setCurrentState(ControlLoopState.UNINITIALISED);
-        stateChange.setTimestamp(Instant.ofEpochMilli(3000));
-        return stateChange;
-    }
-
-}
@@ -1,8 +1,8 @@
 {
-    "controlLoopList": [
+    "automationCompositionList": [
         {
             "definition": {
-                "name": "org.onap.domain.pmsh.PMSHControlLoopDefinition",
+                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
                 "version": "1.0.0"
             },
             "state": "UNINITIALISED",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "DCAE Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "DCAE Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-e21eb79c6c21": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Monitoring Policy Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "Monitoring Policy Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-e21eb79c6c22": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c22",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Operational Policy Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "Operational Policy Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-e21eb79c6c23": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c23",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "CDS Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "CDS Automation Composition Element for the PMSH instance 0 automation composition"
                 }
             },
             "name": "PMSHInstance0",
             "version": "1.0.1",
-            "description": "PMSH control loop instance 0"
+            "description": "PMSH automation composition instance 0"
         },
         {
             "definition": {
-                "name": "org.onap.domain.pmsh.PMSHControlLoopDefinition",
+                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
                 "version": "1.0.0"
             },
             "state": "UNINITIALISED",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "DCAE Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "DCAE Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-e21eb79c6c25": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c25",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Monitoring Policy Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "Monitoring Policy Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-e21eb79c6c26": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c26",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Operational Policy Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "Operational Policy Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-e21eb79c6c27": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c27",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "CDS Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "CDS Automation Composition Element for the PMSH instance 1 automation composition"
                 }
             },
             "name": "PMSHInstance1",
             "version": "1.0.1",
-            "description": "PMSH control loop instance 1"
+            "description": "PMSH automation composition instance 1"
         }
     ]
 }
diff --git a/pom.xml b/pom.xml
index 713cf5e..d6df946 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -41,7 +41,8 @@
         - policy-clamp-common: Common code for all Policy/CLAMP modules
         - policy-clamp-models: POJOs and other model code for REST and DMaaP messages and for persistence
         - policy-clamp-runtime: The runtime server for CLAMP
-        - policy-clamp-participant: Modules for CLAMP control loop participants
+        - policy-clamp-runtime-acm: The runtime server for Automation Composition Management
+        - policy-clamp-participant: Modules for CLAMP automation composition participants
             o policy-clamp-participant-intermediary: A common JAR that handles participant state and DMaaP handling
             o policy-clamp-participant-impl-cds: A standard participant for interworking with CDS
             o policy-clamp-participant-impl-kubernetes: A standard participant for Kubernetes microservices
@@ -60,7 +61,7 @@
         <module>models</module>
         <module>packages</module>
         <module>runtime</module>
-        <module>runtime-controlloop</module>
+        <module>runtime-acm</module>
         <module>participant</module>
     </modules>
 
similarity index 98%
rename from runtime-controlloop/pom.xml
rename to runtime-acm/pom.xml
index be5597f..7712d82 100644 (file)
@@ -30,7 +30,7 @@
         <version>6.2.1-SNAPSHOT</version>
     </parent>
 
-    <artifactId>policy-clamp-runtime-controlloop</artifactId>
+    <artifactId>policy-clamp-runtime-acm</artifactId>
     <name>${project.artifactId}</name>
 
     <dependencies>
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime;
+package org.onap.policy.clamp.acm.runtime;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -28,15 +28,23 @@ import org.springframework.context.annotation.ComponentScan;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
+// @formatter:off
 @EnableScheduling
 @SpringBootApplication
-@EnableJpaRepositories({"org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository"})
-@ComponentScan({"org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider",
-    "org.onap.policy.clamp.controlloop.runtime",
-    "org.onap.policy.clamp.controlloop.common.rest"})
-@ConfigurationPropertiesScan("org.onap.policy.clamp.controlloop.runtime.main.parameters")
-@EntityScan({"org.onap.policy.models.tosca.simple.concepts",
-    "org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts"})
+@EnableJpaRepositories({
+    "org.onap.policy.clamp.models.acm.persistence.repository"
+})
+@ComponentScan({
+    "org.onap.policy.clamp.models.acm.persistence.provider",
+    "org.onap.policy.clamp.acm.runtime",
+    "org.onap.policy.clamp.common.acm.rest"
+})
+@ConfigurationPropertiesScan("org.onap.policy.clamp.acm.runtime.main.parameters")
+@EntityScan({
+    "org.onap.policy.models.tosca.simple.concepts",
+    "org.onap.policy.clamp.models.acm.persistence.concepts"
+})
+//@formatter:on
 public class Application {
 
     public static void main(String[] args) {
@@ -19,7 +19,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.commissioning;
+package org.onap.policy.clamp.acm.runtime.commissioning;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -34,12 +34,12 @@ import java.util.stream.Collectors;
 import javax.ws.rs.core.Response.Status;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.MapUtils;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ControlLoopProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ServiceTemplateProvider;
-import org.onap.policy.clamp.controlloop.models.messages.rest.commissioning.CommissioningResponse;
-import org.onap.policy.clamp.controlloop.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.models.acm.concepts.Participant;
+import org.onap.policy.clamp.models.acm.messages.rest.commissioning.CommissioningResponse;
+import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ServiceTemplateProvider;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaCapabilityType;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
@@ -56,17 +56,17 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 /**
- * This class provides the create, read and delete actions on Commissioning of Control Loop concepts in the database to
- * the callers.
+ * This class provides the create, read and delete actions on Commissioning of automation composition concepts in the
+ * database to the callers.
  */
 @Service
 @Transactional
 public class CommissioningProvider {
-    public static final String CONTROL_LOOP_NODE_TYPE = "org.onap.policy.clamp.controlloop.ControlLoop";
+    public static final String AUTOMATION_COMPOSITION_NODE_TYPE = "org.onap.policy.clamp.acm.AutomationComposition";
     private static final String INSTANCE_TEXT = "_Instance";
 
     private final ServiceTemplateProvider serviceTemplateProvider;
-    private final ControlLoopProvider clProvider;
+    private final AutomationCompositionProvider acProvider;
     private final ObjectMapper mapper = new ObjectMapper();
     private final ParticipantProvider participantProvider;
     private final SupervisionHandler supervisionHandler;
@@ -75,31 +75,33 @@ public class CommissioningProvider {
      * Create a commissioning provider.
      *
      * @param serviceTemplateProvider the ServiceTemplate Provider
-     * @param clProvider the ControlLoop Provider
+     * @param acProvider the AutomationComposition Provider
      * @param supervisionHandler the Supervision Handler
      * @param participantProvider the Participant Provider
      */
-    public CommissioningProvider(ServiceTemplateProvider serviceTemplateProvider, ControlLoopProvider clProvider,
-            SupervisionHandler supervisionHandler, ParticipantProvider participantProvider) {
+    public CommissioningProvider(ServiceTemplateProvider serviceTemplateProvider,
+        AutomationCompositionProvider acProvider, SupervisionHandler supervisionHandler,
+        ParticipantProvider participantProvider) {
         this.serviceTemplateProvider = serviceTemplateProvider;
-        this.clProvider = clProvider;
+        this.acProvider = acProvider;
         this.supervisionHandler = supervisionHandler;
         this.participantProvider = participantProvider;
         mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
     }
 
     /**
-     * Create control loops from a service template.
+     * Create automation compositions from a service template.
      *
      * @param serviceTemplate the service template
      * @return the result of the commissioning operation
      * @throws PfModelException on creation errors
      */
-    public CommissioningResponse createControlLoopDefinitions(ToscaServiceTemplate serviceTemplate)
-            throws PfModelException {
+    public CommissioningResponse createAutomationCompositionDefinitions(ToscaServiceTemplate serviceTemplate)
+        throws PfModelException {
 
         if (verifyIfInstancePropertiesExists()) {
-            throw new PfModelException(Status.BAD_REQUEST, "Delete instances, to commission control loop definitions");
+            throw new PfModelException(Status.BAD_REQUEST,
+                "Delete instances, to commission automation composition definitions");
         }
         serviceTemplate = serviceTemplateProvider.createServiceTemplate(serviceTemplate);
         List<Participant> participantList = participantProvider.getParticipants();
@@ -108,7 +110,8 @@ public class CommissioningProvider {
         }
         var response = new CommissioningResponse();
         // @formatter:off
-        response.setAffectedControlLoopDefinitions(serviceTemplate.getToscaTopologyTemplate().getNodeTemplates()
+        response.setAffectedAutomationCompositionDefinitions(
+            serviceTemplate.getToscaTopologyTemplate().getNodeTemplates()
                 .values()
                 .stream()
                 .map(template -> template.getKey().asIdentifier())
@@ -119,17 +122,19 @@ public class CommissioningProvider {
     }
 
     /**
-     * Delete the control loop definition with the given name and version.
+     * Delete the automation composition definition with the given name and version.
      *
-     * @param name the name of the control loop definition to delete
-     * @param version the version of the control loop to delete
+     * @param name the name of the automation composition definition to delete
+     * @param version the version of the automation composition to delete
      * @return the result of the deletion
      * @throws PfModelException on deletion errors
      */
-    public CommissioningResponse deleteControlLoopDefinition(String name, String version) throws PfModelException {
+    public CommissioningResponse deleteAutomationCompositionDefinition(String name, String version)
+        throws PfModelException {
 
         if (verifyIfInstancePropertiesExists()) {
-            throw new PfModelException(Status.BAD_REQUEST, "Delete instances, to commission control loop definitions");
+            throw new PfModelException(Status.BAD_REQUEST,
+                "Delete instances, to commission automation composition definitions");
         }
         List<Participant> participantList = participantProvider.getParticipants();
         if (!participantList.isEmpty()) {
@@ -137,73 +142,74 @@ public class CommissioningProvider {
         }
         serviceTemplateProvider.deleteServiceTemplate(name, version);
         var response = new CommissioningResponse();
-        response.setAffectedControlLoopDefinitions(List.of(new ToscaConceptIdentifier(name, version)));
+        response.setAffectedAutomationCompositionDefinitions(List.of(new ToscaConceptIdentifier(name, version)));
 
         return response;
     }
 
     /**
-     * Get control loop node templates.
+     * Get automation composition node templates.
      *
-     * @param clName the name of the control loop, null for all
-     * @param clVersion the version of the control loop, null for all
-     * @return list of control loop node templates
-     * @throws PfModelException on errors getting control loop definitions
+     * @param acName the name of the automation composition, null for all
+     * @param acVersion the version of the automation composition, null for all
+     * @return list of automation composition node templates
+     * @throws PfModelException on errors getting automation composition definitions
      */
     @Transactional(readOnly = true)
-    public List<ToscaNodeTemplate> getControlLoopDefinitions(String clName, String clVersion) throws PfModelException {
+    public List<ToscaNodeTemplate> getAutomationCompositionDefinitions(String acName, String acVersion)
+        throws PfModelException {
 
         // @formatter:off
         ToscaTypedEntityFilter<ToscaNodeTemplate> nodeTemplateFilter = ToscaTypedEntityFilter
                 .<ToscaNodeTemplate>builder()
-                .name(clName)
-                .version(clVersion)
-                .type(CONTROL_LOOP_NODE_TYPE)
+                .name(acName)
+                .version(acVersion)
+                .type(AUTOMATION_COMPOSITION_NODE_TYPE)
                 .build();
         // @formatter:on
 
-        return clProvider.getFilteredNodeTemplates(nodeTemplateFilter);
+        return acProvider.getFilteredNodeTemplates(nodeTemplateFilter);
     }
 
     /**
-     * Get the control loop elements from a control loop node template.
+     * Get the automation composition elements from a automation composition node template.
      *
-     * @param controlLoopNodeTemplate the control loop node template
-     * @return a list of the control loop element node templates in a control loop node template
-     * @throws PfModelException on errors get control loop element node templates
+     * @param automationCompositionNodeTemplate the automation composition node template
+     * @return a list of the automation composition element node templates in a automation composition node template
+     * @throws PfModelException on errors get automation composition element node templates
      */
     @Transactional(readOnly = true)
-    public List<ToscaNodeTemplate> getControlLoopElementDefinitions(ToscaNodeTemplate controlLoopNodeTemplate)
-            throws PfModelException {
-        if (!CONTROL_LOOP_NODE_TYPE.equals(controlLoopNodeTemplate.getType())) {
+    public List<ToscaNodeTemplate> getAutomationCompositionElementDefinitions(
+        ToscaNodeTemplate automationCompositionNodeTemplate) throws PfModelException {
+        if (!AUTOMATION_COMPOSITION_NODE_TYPE.equals(automationCompositionNodeTemplate.getType())) {
             return Collections.emptyList();
         }
 
-        if (MapUtils.isEmpty(controlLoopNodeTemplate.getProperties())) {
+        if (MapUtils.isEmpty(automationCompositionNodeTemplate.getProperties())) {
             return Collections.emptyList();
         }
 
         @SuppressWarnings("unchecked")
-        List<Map<String, String>> controlLoopElements =
-                (List<Map<String, String>>) controlLoopNodeTemplate.getProperties().get("elements");
+        List<Map<String, String>> automationCompositionElements =
+            (List<Map<String, String>>) automationCompositionNodeTemplate.getProperties().get("elements");
 
-        if (CollectionUtils.isEmpty(controlLoopElements)) {
+        if (CollectionUtils.isEmpty(automationCompositionElements)) {
             return Collections.emptyList();
         }
 
-        List<ToscaNodeTemplate> controlLoopElementList = new ArrayList<>();
+        List<ToscaNodeTemplate> automationCompositionElementList = new ArrayList<>();
         // @formatter:off
-        controlLoopElementList.addAll(
-                controlLoopElements
+        automationCompositionElementList.addAll(
+                automationCompositionElements
                         .stream()
-                        .map(elementMap -> clProvider.getNodeTemplates(elementMap.get("name"),
+                        .map(elementMap -> acProvider.getNodeTemplates(elementMap.get("name"),
                                 elementMap.get("version")))
                         .flatMap(List::stream)
                         .collect(Collectors.toList())
         );
         // @formatter:on
 
-        return controlLoopElementList;
+        return automationCompositionElementList;
     }
 
     /**
@@ -217,32 +223,32 @@ public class CommissioningProvider {
      */
     @Transactional(readOnly = true)
     public Map<String, ToscaNodeTemplate> getNodeTemplatesWithCommonOrInstanceProperties(boolean common, String name,
-            String version) throws PfModelException {
+        String version) throws PfModelException {
 
         if (common && verifyIfInstancePropertiesExists()) {
             throw new PfModelException(Status.BAD_REQUEST,
-                    "Cannot create or edit common properties, delete all the instantiations first");
+                "Cannot create or edit common properties, delete all the instantiations first");
         }
 
         var serviceTemplateList = serviceTemplateProvider.getServiceTemplateList(name, version);
         var commonOrInstanceNodeTypeProps =
-                serviceTemplateProvider.getCommonOrInstancePropertiesFromNodeTypes(common, serviceTemplateList.get(0));
+            serviceTemplateProvider.getCommonOrInstancePropertiesFromNodeTypes(common, serviceTemplateList.get(0));
 
         var serviceTemplates = new ToscaServiceTemplates();
         serviceTemplates.setServiceTemplates(filterToscaNodeTemplateInstance(serviceTemplateList));
 
         return serviceTemplateProvider.getDerivedCommonOrInstanceNodeTemplates(
-                serviceTemplates.getServiceTemplates().get(0).getToscaTopologyTemplate().getNodeTemplates(),
-                commonOrInstanceNodeTypeProps);
+            serviceTemplates.getServiceTemplates().get(0).getToscaTopologyTemplate().getNodeTemplates(),
+            commonOrInstanceNodeTypeProps);
     }
 
     /**
-     * Get the requested control loop definitions.
+     * Get the requested automation composition definitions.
      *
      * @param name the name of the definition to get, null for all definitions
      * @param version the version of the definition to get, null for all definitions
-     * @return the control loop definitions
-     * @throws PfModelException on errors getting control loop definitions
+     * @return the automation composition definitions
+     * @throws PfModelException on errors getting automation composition definitions
      */
     @Transactional(readOnly = true)
     public ToscaServiceTemplate getToscaServiceTemplate(String name, String version) throws PfModelException {
@@ -250,10 +256,10 @@ public class CommissioningProvider {
     }
 
     /**
-     * Get All the requested control loop definitions.
+     * Get All the requested automation composition definitions.
      *
-     * @return the control loop definitions
-     * @throws PfModelException on errors getting control loop definitions
+     * @return the automation composition definitions
+     * @throws PfModelException on errors getting automation composition definitions
      */
     @Transactional(readOnly = true)
     public List<ToscaServiceTemplate> getAllToscaServiceTemplate() throws PfModelException {
@@ -328,8 +334,7 @@ public class CommissioningProvider {
                     break;
                 case "node_templates":
                     mapper.acceptJsonFormatVisitor(
-                            mapper.getTypeFactory().constructCollectionType(List.class, ToscaNodeTemplate.class),
-                            visitor);
+                        mapper.getTypeFactory().constructCollectionType(List.class, ToscaNodeTemplate.class), visitor);
                     break;
                 default:
                     mapper.acceptJsonFormatVisitor(mapper.constructType(ToscaServiceTemplate.class), visitor);
@@ -371,8 +376,8 @@ public class CommissioningProvider {
      * @return true if exists instance properties
      */
     private boolean verifyIfInstancePropertiesExists() {
-        return clProvider.getAllNodeTemplates().stream()
-                .anyMatch(nodeTemplate -> nodeTemplate.getKey().getName().contains(INSTANCE_TEXT));
+        return acProvider.getAllNodeTemplates().stream()
+            .anyMatch(nodeTemplate -> nodeTemplate.getKey().getName().contains(INSTANCE_TEXT));
 
     }
 }
@@ -1,9 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights
- *                             reserved.
+ *  Copyright (C) 2021 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  *
  */
 
-package org.onap.policy.clamp.controlloop.runtime.config;
+package org.onap.policy.clamp.acm.runtime.config;
 
 import javax.servlet.Filter;
-import org.onap.policy.clamp.controlloop.runtime.main.web.ControlLoopAafFilter;
+import org.onap.policy.clamp.acm.runtime.main.web.AutomationConfiguraitonAafFilter;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Profile;
@@ -34,13 +31,13 @@ import org.springframework.context.annotation.Profile;
 public class AafConfiguration {
 
     /**
-     * Method to return Aaf filter.
+     * Method to return AAF filter.
      *
      * @return Filter
      */
     @Bean
     public Filter aafFilter() {
-        return new ControlLoopAafFilter();
+        return new AutomationConfiguraitonAafFilter();
     }
 
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.config;
+package org.onap.policy.clamp.acm.runtime.config;
 
 import java.util.Arrays;
 import java.util.List;
-import org.onap.policy.clamp.controlloop.common.rest.CoderHttpMesageConverter;
+import org.onap.policy.clamp.common.acm.rest.CoderHttpMesageConverter;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.http.MediaType;
 import org.springframework.http.converter.HttpMessageConverter;
@@ -18,9 +18,9 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.config;
+package org.onap.policy.clamp.acm.runtime.config;
 
-import org.onap.policy.clamp.controlloop.common.rest.RequestResponseLoggingFilter;
+import org.onap.policy.clamp.common.acm.rest.RequestResponseLoggingFilter;
 import org.springframework.boot.web.servlet.FilterRegistrationBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -38,7 +38,7 @@ public class FilterConfig {
         FilterRegistrationBean<RequestResponseLoggingFilter> registrationBean = new FilterRegistrationBean<>();
 
         registrationBean.setFilter(new RequestResponseLoggingFilter());
-        registrationBean.addUrlPatterns("/onap/controlloop/v2/*");
+        registrationBean.addUrlPatterns("/onap/policy/clamp/acm/v2/*");
 
         return registrationBean;
     }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.config;
+package org.onap.policy.clamp.acm.runtime.config;
 
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Configuration;
@@ -18,9 +18,9 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.config;
+package org.onap.policy.clamp.acm.runtime.config;
 
-import org.onap.policy.clamp.controlloop.runtime.main.rest.MonitoringQueryController;
+import org.onap.policy.clamp.acm.runtime.main.rest.MonitoringQueryController;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import springfox.documentation.builders.PathSelectors;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.config.messaging;
+package org.onap.policy.clamp.acm.runtime.config.messaging;
 
 import java.io.Closeable;
 import java.io.IOException;
 import java.util.List;
 import lombok.Getter;
-import org.onap.policy.clamp.controlloop.common.exception.ControlLoopRuntimeException;
-import org.onap.policy.clamp.controlloop.runtime.main.parameters.ClRuntimeParameterGroup;
+import org.onap.policy.clamp.acm.runtime.main.parameters.AcRuntimeParameterGroup;
+import org.onap.policy.clamp.common.acm.exception.AutomationCompositionRuntimeException;
 import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
 import org.onap.policy.common.endpoints.event.comm.TopicSource;
@@ -52,18 +52,18 @@ public class MessageDispatcherActivator extends ServiceManagerContainer implemen
     /**
      * Constructor.
      *
-     * @param clRuntimeParameterGroup the parameters for the control loop runtime service
+     * @param acRuntimeParameterGroup the parameters for the automation composition runtime service
      * @param publishers list of Publishers
      * @param listeners list of Listeners
-     * @throws ControlLoopRuntimeException if the activator does not start
+     * @throws AutomationCompositionRuntimeException if the activator does not start
      */
-    public <T> MessageDispatcherActivator(final ClRuntimeParameterGroup clRuntimeParameterGroup,
+    public <T> MessageDispatcherActivator(final AcRuntimeParameterGroup acRuntimeParameterGroup,
                     List<Publisher> publishers, List<Listener<T>> listeners) {
         topicSinks = TopicEndpointManager.getManager()
-                .addTopicSinks(clRuntimeParameterGroup.getTopicParameterGroup().getTopicSinks());
+                .addTopicSinks(acRuntimeParameterGroup.getTopicParameterGroup().getTopicSinks());
 
         topicSources = TopicEndpointManager.getManager()
-                .addTopicSources(clRuntimeParameterGroup.getTopicParameterGroup().getTopicSources());
+                .addTopicSources(acRuntimeParameterGroup.getTopicParameterGroup().getTopicSources());
 
         msgDispatcher = new MessageTypeDispatcher(MSG_TYPE_NAMES);
 
diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProvider.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProvider.java
new file mode 100644 (file)
index 0000000..39d8402
--- /dev/null
@@ -0,0 +1,637 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 Nordix Foundation.
+ * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.runtime.instantiation;
+
+import com.google.gson.Gson;
+import com.google.gson.internal.LinkedTreeMap;
+import com.google.gson.reflect.TypeToken;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.function.Function;
+import java.util.function.UnaryOperator;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+import lombok.AllArgsConstructor;
+import org.onap.policy.clamp.acm.runtime.commissioning.CommissioningProvider;
+import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.common.acm.exception.AutomationCompositionException;
+import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
+import org.onap.policy.clamp.models.acm.concepts.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.Participant;
+import org.onap.policy.clamp.models.acm.messages.rest.GenericNameVersion;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.AutomationCompositionOrderStateResponse;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.AutomationCompositionPrimed;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.AutomationCompositionPrimedResponse;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstancePropertiesResponse;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationCommand;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationResponse;
+import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
+import org.onap.policy.common.parameters.BeanValidationResult;
+import org.onap.policy.common.parameters.ObjectValidationResult;
+import org.onap.policy.common.parameters.ValidationResult;
+import org.onap.policy.common.parameters.ValidationStatus;
+import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNameVersion;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * This class is dedicated to the Instantiation of Commissioned automation composition.
+ */
+@Service
+@Transactional
+@AllArgsConstructor
+public class AutomationCompositionInstantiationProvider {
+    private static final String AUTOMATION_COMPOSITION_NODE_TYPE = "org.onap.policy.clamp.acm.AutomationComposition";
+    private static final String AUTOMATION_COMPOSITION_NODE_ELEMENT_TYPE = "AutomationCompositionElement";
+    private static final String PARTICIPANT_ID_PROPERTY_KEY = "participant_id";
+    private static final String PARTICIPANT_TYPE_PROPERTY_KEY = "participantType";
+    private static final String AC_ELEMENT_NAME = "name";
+    private static final String AC_ELEMENT_VERSION = "version";
+    private static final String INSTANCE_TEXT = "_Instance";
+
+    private static final Gson GSON = new Gson();
+
+    private final AutomationCompositionProvider automationCompositionProvider;
+    private final CommissioningProvider commissioningProvider;
+    private final SupervisionHandler supervisionHandler;
+    private final ParticipantProvider participantProvider;
+    private static final String ENTRY = "entry ";
+
+    /**
+     * Creates Instance Properties and automation composition.
+     *
+     * @param serviceTemplate the service template
+     * @return the result of the instantiation operation
+     * @throws PfModelException on creation errors
+     */
+    public InstancePropertiesResponse createInstanceProperties(ToscaServiceTemplate serviceTemplate)
+        throws PfModelException {
+
+        String instanceName = generateSequentialInstanceName();
+        AutomationComposition automationComposition = new AutomationComposition();
+        Map<UUID, AutomationCompositionElement> automationCompositionElements = new HashMap<>();
+
+        ToscaServiceTemplate toscaServiceTemplate = commissioningProvider.getAllToscaServiceTemplate().get(0);
+
+        Map<String, ToscaNodeTemplate> persistedNodeTemplateMap =
+            toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates();
+
+        Map<String, ToscaNodeTemplate> nodeTemplates = deepCloneNodeTemplate(serviceTemplate);
+
+        nodeTemplates.forEach((key, template) -> {
+            ToscaNodeTemplate newNodeTemplate = new ToscaNodeTemplate();
+            String name = key + instanceName;
+            String version = template.getVersion();
+            String description = template.getDescription() + instanceName;
+            newNodeTemplate.setName(name);
+            newNodeTemplate.setVersion(version);
+            newNodeTemplate.setDescription(description);
+            newNodeTemplate.setProperties(new HashMap<>(template.getProperties()));
+            newNodeTemplate.setType(template.getType());
+            newNodeTemplate.setTypeVersion(template.getTypeVersion());
+            newNodeTemplate.setMetadata(template.getMetadata());
+
+            crateNewAutomationCompositionInstance(instanceName, automationComposition, automationCompositionElements,
+                template, newNodeTemplate);
+
+            persistedNodeTemplateMap.put(name, newNodeTemplate);
+        });
+
+        AutomationCompositions automationCompositions = new AutomationCompositions();
+
+        serviceTemplate.getToscaTopologyTemplate().getNodeTemplates().putAll(persistedNodeTemplateMap);
+
+        automationComposition.setElements(automationCompositionElements);
+        automationCompositions.getAutomationCompositionList().add(automationComposition);
+
+        return saveInstancePropertiesAndAutomationComposition(serviceTemplate, automationCompositions);
+    }
+
+    /**
+     * Deletes Instance Properties.
+     *
+     * @param name the name of the automation composition to delete
+     * @param version the version of the automation composition to delete
+     * @return the result of the deletion
+     * @throws PfModelException on deletion errors
+     */
+    public InstantiationResponse deleteInstanceProperties(String name, String version) throws PfModelException {
+
+        String instanceName = getInstancePropertyName(name, version);
+
+        Map<String, ToscaNodeTemplate> filteredToscaNodeTemplateMap = new HashMap<>();
+
+        ToscaServiceTemplate toscaServiceTemplate = commissioningProvider.getAllToscaServiceTemplate().get(0);
+
+        toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates().forEach((key, nodeTemplate) -> {
+            if (!nodeTemplate.getName().contains(instanceName)) {
+                filteredToscaNodeTemplateMap.put(key, nodeTemplate);
+            }
+        });
+
+        List<ToscaNodeTemplate> filteredToscaNodeTemplateList =
+            toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates().values().stream()
+                .filter(nodeTemplate -> nodeTemplate.getName().contains(instanceName)).collect(Collectors.toList());
+
+        InstantiationResponse response = this.deleteAutomationComposition(name, version);
+
+        automationCompositionProvider.deleteInstanceProperties(filteredToscaNodeTemplateMap,
+            filteredToscaNodeTemplateList);
+
+        return response;
+    }
+
+    /**
+     * Create automation compositions.
+     *
+     * @param automationCompositions the automation composition
+     * @return the result of the instantiation operation
+     * @throws PfModelException on creation errors
+     */
+    public InstantiationResponse createAutomationCompositions(AutomationCompositions automationCompositions)
+        throws PfModelException {
+        for (AutomationComposition automationComposition : automationCompositions.getAutomationCompositionList()) {
+            var checkAutomationCompositionOpt =
+                automationCompositionProvider.findAutomationComposition(automationComposition.getKey().asIdentifier());
+            if (checkAutomationCompositionOpt.isPresent()) {
+                throw new PfModelException(Response.Status.BAD_REQUEST,
+                    automationComposition.getKey().asIdentifier() + " already defined");
+            }
+        }
+        BeanValidationResult validationResult = validateAutomationCompositions(automationCompositions);
+        if (!validationResult.isValid()) {
+            throw new PfModelException(Response.Status.BAD_REQUEST, validationResult.getResult());
+        }
+        automationCompositionProvider.saveAutomationCompositions(automationCompositions.getAutomationCompositionList());
+
+        var response = new InstantiationResponse();
+        response.setAffectedAutomationCompositions(automationCompositions.getAutomationCompositionList().stream()
+            .map(ac -> ac.getKey().asIdentifier()).collect(Collectors.toList()));
+
+        return response;
+    }
+
+    /**
+     * Update automation compositions.
+     *
+     * @param automationCompositions the automation composition
+     * @return the result of the instantiation operation
+     * @throws PfModelException on update errors
+     */
+    public InstantiationResponse updateAutomationCompositions(AutomationCompositions automationCompositions)
+        throws PfModelException {
+        BeanValidationResult validationResult = validateAutomationCompositions(automationCompositions);
+        if (!validationResult.isValid()) {
+            throw new PfModelException(Response.Status.BAD_REQUEST, validationResult.getResult());
+        }
+        automationCompositionProvider.saveAutomationCompositions(automationCompositions.getAutomationCompositionList());
+
+        var response = new InstantiationResponse();
+        response.setAffectedAutomationCompositions(automationCompositions.getAutomationCompositionList().stream()
+            .map(ac -> ac.getKey().asIdentifier()).collect(Collectors.toList()));
+
+        return response;
+    }
+
+    /**
+     * Validate AutomationCompositions.
+     *
+     * @param automationCompositions AutomationCompositions to validate
+     * @return the result of validation
+     * @throws PfModelException if automationCompositions is not valid
+     */
+    private BeanValidationResult validateAutomationCompositions(AutomationCompositions automationCompositions)
+        throws PfModelException {
+
+        var result = new BeanValidationResult("AutomationCompositions", automationCompositions);
+
+        for (AutomationComposition automationComposition : automationCompositions.getAutomationCompositionList()) {
+            var subResult = new BeanValidationResult(ENTRY + automationComposition.getDefinition().getName(),
+                automationComposition);
+
+            List<ToscaNodeTemplate> toscaNodeTemplates = commissioningProvider.getAutomationCompositionDefinitions(
+                automationComposition.getDefinition().getName(), automationComposition.getDefinition().getVersion());
+
+            if (toscaNodeTemplates.isEmpty()) {
+                subResult.addResult(
+                    new ObjectValidationResult("AutomationComposition", automationComposition.getDefinition().getName(),
+                        ValidationStatus.INVALID, "Commissioned automation composition definition not found"));
+            } else if (toscaNodeTemplates.size() > 1) {
+                subResult.addResult(
+                    new ObjectValidationResult("AutomationComposition", automationComposition.getDefinition().getName(),
+                        ValidationStatus.INVALID, "Commissioned automation composition definition not valid"));
+            } else {
+
+                List<ToscaNodeTemplate> acElementDefinitions =
+                    commissioningProvider.getAutomationCompositionElementDefinitions(toscaNodeTemplates.get(0));
+
+                // @formatter:off
+                Map<String, ToscaConceptIdentifier> definitions = acElementDefinitions
+                        .stream()
+                        .map(nodeTemplate -> nodeTemplate.getKey().asIdentifier())
+                        .collect(Collectors.toMap(ToscaConceptIdentifier::getName, UnaryOperator.identity()));
+                // @formatter:on
+
+                for (AutomationCompositionElement element : automationComposition.getElements().values()) {
+                    subResult.addResult(validateDefinition(definitions, element.getDefinition()));
+                }
+            }
+            result.addResult(subResult);
+        }
+        return result;
+    }
+
+    /**
+     * Validate ToscaConceptIdentifier, checking if exist in ToscaConceptIdentifiers map.
+     *
+     * @param definitions map of all ToscaConceptIdentifiers
+     * @param definition ToscaConceptIdentifier to validate
+     * @return the validation result
+     */
+    private ValidationResult validateDefinition(Map<String, ToscaConceptIdentifier> definitions,
+        ToscaConceptIdentifier definition) {
+        var result = new BeanValidationResult(ENTRY + definition.getName(), definition);
+        ToscaConceptIdentifier identifier = definitions.get(definition.getName());
+        if (identifier == null) {
+            result.setResult(ValidationStatus.INVALID, "Not found");
+        } else if (!identifier.equals(definition)) {
+            result.setResult(ValidationStatus.INVALID, "Version not matching");
+        }
+        return (result.isClean() ? null : result);
+    }
+
+    /**
+     * Delete the automation composition with the given name and version.
+     *
+     * @param name the name of the automation composition to delete
+     * @param version the version of the automation composition to delete
+     * @return the result of the deletion
+     * @throws PfModelException on deletion errors
+     */
+    public InstantiationResponse deleteAutomationComposition(String name, String version) throws PfModelException {
+        var automationCompositionOpt = automationCompositionProvider.findAutomationComposition(name, version);
+        if (automationCompositionOpt.isEmpty()) {
+            throw new PfModelException(Response.Status.NOT_FOUND, "Automation composition not found");
+        }
+        var automationComposition = automationCompositionOpt.get();
+        if (!AutomationCompositionState.UNINITIALISED.equals(automationComposition.getState())) {
+            throw new PfModelException(Response.Status.BAD_REQUEST,
+                "Automation composition state is still " + automationComposition.getState());
+        }
+        var response = new InstantiationResponse();
+        response.setAffectedAutomationCompositions(
+            List.of(automationCompositionProvider.deleteAutomationComposition(name, version).getKey().asIdentifier()));
+        return response;
+    }
+
+    /**
+     * Get the requested automation compositions.
+     *
+     * @param name the name of the automation composition to get, null for all automation compositions
+     * @param version the version of the automation composition to get, null for all automation compositions
+     * @return the automation compositions
+     * @throws PfModelException on errors getting automation compositions
+     */
+    @Transactional(readOnly = true)
+    public AutomationCompositions getAutomationCompositions(String name, String version) throws PfModelException {
+        var automationCompositions = new AutomationCompositions();
+        automationCompositions
+            .setAutomationCompositionList(automationCompositionProvider.getAutomationCompositions(name, version));
+
+        return automationCompositions;
+    }
+
+    /**
+     * Issue a command to automation compositions, setting their ordered state.
+     *
+     * @param command the command to issue to automation compositions
+     * @return the result of the initiation command
+     * @throws PfModelException on errors setting the ordered state on the automation compositions
+     * @throws AutomationCompositionException on ordered state invalid
+     */
+    public InstantiationResponse issueAutomationCompositionCommand(InstantiationCommand command)
+        throws AutomationCompositionException, PfModelException {
+
+        if (command.getOrderedState() == null) {
+            throw new AutomationCompositionException(Status.BAD_REQUEST,
+                "ordered state invalid or not specified on command");
+        }
+
+        var participants = participantProvider.getParticipants();
+        if (participants.isEmpty()) {
+            throw new AutomationCompositionException(Status.BAD_REQUEST, "No participants registered");
+        }
+        var validationResult = new BeanValidationResult("InstantiationCommand", command);
+        List<AutomationComposition> automationCompositions =
+            new ArrayList<>(command.getAutomationCompositionIdentifierList().size());
+        for (ToscaConceptIdentifier id : command.getAutomationCompositionIdentifierList()) {
+            var automationCompositionOpt = automationCompositionProvider.findAutomationComposition(id);
+            if (automationCompositionOpt.isEmpty()) {
+                validationResult.addResult("ToscaConceptIdentifier", id, ValidationStatus.INVALID,
+                    "AutomationComposition with id " + id + " not found");
+            } else {
+                var automationComposition = automationCompositionOpt.get();
+                automationComposition.setCascadedOrderedState(command.getOrderedState());
+                automationCompositions.add(automationComposition);
+            }
+        }
+        if (validationResult.isValid()) {
+            validationResult = validateIssueAutomationCompositions(automationCompositions, participants);
+        }
+        if (!validationResult.isValid()) {
+            throw new PfModelException(Response.Status.BAD_REQUEST, validationResult.getResult());
+        }
+        automationCompositionProvider.saveAutomationCompositions(automationCompositions);
+
+        supervisionHandler.triggerAutomationCompositionSupervision(command.getAutomationCompositionIdentifierList());
+        var response = new InstantiationResponse();
+        response.setAffectedAutomationCompositions(command.getAutomationCompositionIdentifierList());
+
+        return response;
+    }
+
+    private BeanValidationResult validateIssueAutomationCompositions(List<AutomationComposition> automationCompositions,
+        List<Participant> participants) {
+        var result = new BeanValidationResult("AutomationCompositions", automationCompositions);
+
+        Map<ToscaConceptIdentifier, Participant> participantMap = participants.stream()
+            .collect(Collectors.toMap(participant -> participant.getKey().asIdentifier(), Function.identity()));
+
+        for (AutomationComposition automationComposition : automationCompositions) {
+
+            for (var element : automationComposition.getElements().values()) {
+
+                var subResult = new BeanValidationResult(ENTRY + element.getDefinition().getName(), element);
+                Participant p = participantMap.get(element.getParticipantId());
+                if (p == null) {
+                    subResult.addResult(new ObjectValidationResult(AUTOMATION_COMPOSITION_NODE_ELEMENT_TYPE,
+                        element.getDefinition().getName(), ValidationStatus.INVALID,
+                        "Participant with ID " + element.getParticipantId() + " is not registered"));
+                } else if (!p.getParticipantType().equals(element.getParticipantType())) {
+                    subResult.addResult(new ObjectValidationResult(AUTOMATION_COMPOSITION_NODE_ELEMENT_TYPE,
+                        element.getDefinition().getName(), ValidationStatus.INVALID,
+                        "Participant with ID " + element.getParticipantType() + " - " + element.getParticipantId()
+                            + " is not registered"));
+                }
+                result.addResult(subResult);
+            }
+
+        }
+
+        return result;
+    }
+
+    /**
+     * Gets a list of automation compositions with it's ordered state.
+     *
+     * @param name the name of the automation composition to get, null for all automation compositions
+     * @param version the version of the automation composition to get, null for all automation compositions
+     * @return a list of Instantiation Command
+     * @throws PfModelException on errors getting automation compositions
+     */
+    @Transactional(readOnly = true)
+    public AutomationCompositionOrderStateResponse getInstantiationOrderState(String name, String version)
+        throws PfModelException {
+
+        List<AutomationComposition> automationCompositions =
+            automationCompositionProvider.getAutomationCompositions(name, version);
+
+        var response = new AutomationCompositionOrderStateResponse();
+
+        automationCompositions.forEach(automationComposition -> {
+            var genericNameVersion = new GenericNameVersion();
+            genericNameVersion.setName(automationComposition.getName());
+            genericNameVersion.setVersion(automationComposition.getVersion());
+            response.getAutomationCompositionIdentifierList().add(genericNameVersion);
+        });
+
+        return response;
+    }
+
+    /**
+     * Saves Instance Properties and automation composition.
+     * Gets a list of automation compositions which are primed or de-primed.
+     *
+     * @param name the name of the automation composition to get, null for all automation compositions
+     * @param version the version of the automation composition to get, null for all automation compositions
+     * @return a list of Instantiation Command
+     * @throws PfModelException on errors getting automation compositions
+     */
+    @Transactional(readOnly = true)
+    public AutomationCompositionPrimedResponse getAutomationCompositionPriming(String name, String version)
+        throws PfModelException {
+
+        List<AutomationComposition> automationCompositions =
+            automationCompositionProvider.getAutomationCompositions(name, version);
+
+        var response = new AutomationCompositionPrimedResponse();
+
+        automationCompositions.forEach(automationComposition -> {
+            var primed = new AutomationCompositionPrimed();
+            primed.setName(automationComposition.getName());
+            primed.setVersion(automationComposition.getVersion());
+            primed.setPrimed(automationComposition.getPrimed());
+            response.getPrimedAutomationCompositionsList().add(primed);
+        });
+
+        return response;
+    }
+
+    /**
+     * Creates instance element name.
+     *
+     * @param serviceTemplate the service template
+     * @param automationCompositions a list of automation compositions
+     * @return the result of the instance properties and instantiation operation
+     * @throws PfModelException on creation errors
+     */
+    private InstancePropertiesResponse saveInstancePropertiesAndAutomationComposition(
+        ToscaServiceTemplate serviceTemplate, AutomationCompositions automationCompositions) throws PfModelException {
+
+        for (var automationComposition : automationCompositions.getAutomationCompositionList()) {
+            var checkAutomationCompositionOpt =
+                automationCompositionProvider.findAutomationComposition(automationComposition.getKey().asIdentifier());
+            if (checkAutomationCompositionOpt.isPresent()) {
+                throw new PfModelException(Response.Status.BAD_REQUEST, "Automation composition with id "
+                    + automationComposition.getKey().asIdentifier() + " already defined");
+            }
+        }
+        Map<String, ToscaNodeTemplate> toscaSavedNodeTemplate =
+            automationCompositionProvider.saveInstanceProperties(serviceTemplate);
+        automationCompositionProvider.saveAutomationCompositions(automationCompositions.getAutomationCompositionList());
+        List<ToscaConceptIdentifier> affectedAutomationCompositions = automationCompositions
+            .getAutomationCompositionList().stream().map(ac -> ac.getKey().asIdentifier()).collect(Collectors.toList());
+
+        List<ToscaConceptIdentifier> toscaAffectedProperties = toscaSavedNodeTemplate.values().stream()
+            .map(template -> template.getKey().asIdentifier()).collect(Collectors.toList());
+
+        var response = new InstancePropertiesResponse();
+        response.setAffectedInstanceProperties(Stream.of(affectedAutomationCompositions, toscaAffectedProperties)
+            .flatMap(Collection::stream).collect(Collectors.toList()));
+
+        return response;
+    }
+
+    /**
+     * Crates a new automation composition instance.
+     *
+     * @param instanceName automation composition Instance name
+     * @param automationComposition empty automation composition
+     * @param automationCompositionElements new automation composition Element map
+     * @param template original Cloned Tosca Node Template
+     * @param newNodeTemplate new Tosca Node Template
+     */
+    private void crateNewAutomationCompositionInstance(String instanceName, AutomationComposition automationComposition,
+        Map<UUID, AutomationCompositionElement> automationCompositionElements, ToscaNodeTemplate template,
+        ToscaNodeTemplate newNodeTemplate) {
+        if (template.getType().equals(AUTOMATION_COMPOSITION_NODE_TYPE)) {
+            automationComposition.setDefinition(getAutomationCompositionDefinition(newNodeTemplate));
+        }
+
+        if (template.getType().contains(AUTOMATION_COMPOSITION_NODE_ELEMENT_TYPE)) {
+            AutomationCompositionElement automationCompositionElement =
+                getAutomationCompositionElement(newNodeTemplate);
+            automationCompositionElements.put(automationCompositionElement.getId(), automationCompositionElement);
+        }
+
+        automationComposition.setName("PMSH" + instanceName);
+        automationComposition.setVersion(template.getVersion());
+        automationComposition.setDescription("PMSH automation composition " + instanceName);
+        automationComposition.setState(AutomationCompositionState.UNINITIALISED);
+        automationComposition.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+    }
+
+    /**
+     * Get's the instance property name of the automation composition.
+     *
+     * @param name the name of the automation composition to get, null for all automation compositions
+     * @param version the version of the automation composition to get, null for all automation compositions
+     * @return the instance name of the automation composition instance properties
+     * @throws PfModelException on errors getting automation compositions
+     */
+    private String getInstancePropertyName(String name, String version) throws PfModelException {
+        List<String> toscaDefinitionsNames =
+            automationCompositionProvider.getAutomationCompositions(name, version).stream()
+                .map(AutomationComposition::getDefinition).map(ToscaNameVersion::getName).collect(Collectors.toList());
+
+        return toscaDefinitionsNames.stream().reduce("", (s1, s2) -> {
+
+            if (s2.contains(INSTANCE_TEXT)) {
+                String[] instances = s2.split(INSTANCE_TEXT);
+
+                return INSTANCE_TEXT + instances[1];
+            }
+
+            return s1;
+        });
+    }
+
+    /**
+     * Generates Instance Name in sequential order and return it to append to the Node Template Name.
+     *
+     * @return instanceName
+     */
+    private String generateSequentialInstanceName() {
+        List<ToscaNodeTemplate> nodeTemplates = automationCompositionProvider.getAllNodeTemplates();
+
+        int instanceNumber = nodeTemplates.stream().map(ToscaNodeTemplate::getName)
+            .filter(name -> name.contains(INSTANCE_TEXT)).map(n -> {
+                String[] defNameArr = n.split(INSTANCE_TEXT);
+
+                return Integer.parseInt(defNameArr[1]);
+            }).reduce(0, Math::max);
+
+        return INSTANCE_TEXT + (instanceNumber + 1);
+    }
+
+    /**
+     * Retrieves automation composition Definition.
+     *
+     * @param template tosca node template
+     * @return automation composition definition
+     */
+    private ToscaConceptIdentifier getAutomationCompositionDefinition(ToscaNodeTemplate template) {
+        ToscaConceptIdentifier definition = new ToscaConceptIdentifier();
+        definition.setName(template.getName());
+        definition.setVersion(template.getVersion());
+        return definition;
+    }
+
+    /**
+     * Retrieves automation composition Element.
+     *
+     * @param template tosca node template
+     * @return a automation composition element
+     */
+    @SuppressWarnings("unchecked")
+    private AutomationCompositionElement getAutomationCompositionElement(ToscaNodeTemplate template) {
+        AutomationCompositionElement automationCompositionElement = new AutomationCompositionElement();
+        ToscaConceptIdentifier definition = new ToscaConceptIdentifier();
+        definition.setName(template.getName());
+        definition.setVersion(template.getVersion());
+        automationCompositionElement.setDefinition(definition);
+        LinkedTreeMap<String, Object> participantId =
+            (LinkedTreeMap<String, Object>) template.getProperties().get(PARTICIPANT_ID_PROPERTY_KEY);
+        if (participantId != null) {
+            ToscaConceptIdentifier participantIdProperty = new ToscaConceptIdentifier();
+            participantIdProperty.setName(String.valueOf(participantId.get(AC_ELEMENT_NAME)));
+            participantIdProperty.setVersion(String.valueOf(participantId.get(AC_ELEMENT_VERSION)));
+            automationCompositionElement.setParticipantId(participantIdProperty);
+        }
+        LinkedTreeMap<String, Object> participantType =
+            (LinkedTreeMap<String, Object>) template.getProperties().get(PARTICIPANT_TYPE_PROPERTY_KEY);
+        if (participantType != null) {
+            ToscaConceptIdentifier participantTypeProperty = new ToscaConceptIdentifier();
+            participantTypeProperty.setName(String.valueOf(participantType.get(AC_ELEMENT_NAME)));
+            participantTypeProperty.setVersion(participantType.get(AC_ELEMENT_VERSION).toString());
+            automationCompositionElement.setParticipantType(participantTypeProperty);
+        }
+        return automationCompositionElement;
+    }
+
+    /**
+     * Deep clones ToscaNodeTemplate.
+     *
+     * @param serviceTemplate ToscaServiceTemplate
+     * @return a cloned Hash Map of ToscaNodeTemplate
+     */
+    private Map<String, ToscaNodeTemplate> deepCloneNodeTemplate(ToscaServiceTemplate serviceTemplate) {
+        String jsonString = GSON.toJson(serviceTemplate.getToscaTopologyTemplate().getNodeTemplates());
+        Type type = new TypeToken<HashMap<String, ToscaNodeTemplate>>() {}.getType();
+        return GSON.fromJson(jsonString, type);
+    }
+}
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.main.parameters;
+package org.onap.policy.clamp.acm.runtime.main.parameters;
 
 import javax.validation.Valid;
 import javax.validation.constraints.NotNull;
@@ -30,14 +30,14 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.validation.annotation.Validated;
 
 /**
- * Class to hold all parameters needed for the Control Loop runtime component.
+ * Class to hold all parameters needed for the ACM runtime component.
  *
  */
 @Validated
 @Getter
 @Setter
 @ConfigurationProperties(prefix = "runtime")
-public class ClRuntimeParameterGroup {
+public class AcRuntimeParameterGroup {
 
     @Valid
     @NotNull
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.main.rest;
+package org.onap.policy.clamp.acm.runtime.main.rest;
 
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -33,10 +33,10 @@ import java.util.Map;
 import java.util.UUID;
 import javax.ws.rs.core.Response.Status;
 import lombok.RequiredArgsConstructor;
-import org.onap.policy.clamp.controlloop.common.exception.ControlLoopException;
-import org.onap.policy.clamp.controlloop.models.messages.rest.commissioning.CommissioningResponse;
-import org.onap.policy.clamp.controlloop.runtime.commissioning.CommissioningProvider;
-import org.onap.policy.clamp.controlloop.runtime.main.web.AbstractRestController;
+import org.onap.policy.clamp.acm.runtime.commissioning.CommissioningProvider;
+import org.onap.policy.clamp.acm.runtime.main.web.AbstractRestController;
+import org.onap.policy.clamp.common.acm.exception.AutomationCompositionException;
+import org.onap.policy.clamp.models.acm.messages.rest.commissioning.CommissioningResponse;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
@@ -51,31 +51,31 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 /**
- * Class to provide REST end points for creating, deleting, querying commissioned control loops.
+ * Class to provide REST end points for creating, deleting, querying commissioned automation compositions.
  */
 @RestController
 @RequiredArgsConstructor
 public class CommissioningController extends AbstractRestController {
 
-    private static final String TAGS = "Clamp Control Loop Commissioning API";
+    private static final String TAGS = "Clamp Automation Composition Commissioning API";
 
     private final CommissioningProvider provider;
 
     /**
-     * Creates a control loop definition.
+     * Creates a automation composition definition.
      *
      * @param requestId request ID used in ONAP logging
-     * @param body the body of control loop following TOSCA definition
+     * @param body the body of automation composition following TOSCA definition
      * @return a response
-     * @throws PfModelException on errors creating a control loop definition
+     * @throws PfModelException on errors creating a automation composition definition
      */
     // @formatter:off
     @PostMapping(value = "/commission",
             consumes = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML},
             produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML})
     @ApiOperation(
-        value = "Commissions control loop definitions",
-        notes = "Commissions control loop definitions, returning the commissioned control loop definition IDs",
+        value = "Commissions automation composition definitions",
+        notes = "Commissions automation composition definitions, returning commissioned definition IDs",
         response = CommissioningResponse.class,
         tags = {TAGS},
         authorizations = @Authorization(value = AUTHORIZATION_TYPE),
@@ -117,29 +117,29 @@ public class CommissioningController extends AbstractRestController {
     )
     // @formatter:on
     public ResponseEntity<CommissioningResponse> create(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Entity Body of Control Loop", required = true) @RequestBody ToscaServiceTemplate body)
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(
+            value = "Entity Body of Automation Composition",
+            required = true) @RequestBody ToscaServiceTemplate body)
         throws PfModelException {
 
-        return ResponseEntity.ok().body(provider.createControlLoopDefinitions(body));
+        return ResponseEntity.ok().body(provider.createAutomationCompositionDefinitions(body));
     }
 
     /**
-     * Deletes a control loop definition.
+     * Deletes a automation composition definition.
      *
      * @param requestId request ID used in ONAP logging
-     * @param name the name of the control loop definition to delete
-     * @param version the version of the control loop definition to delete
+     * @param name the name of the automation composition definition to delete
+     * @param version the version of the automation composition definition to delete
      * @return a response
-     * @throws PfModelException on errors deleting a control loop definition
+     * @throws PfModelException on errors deleting a automation composition definition
      */
     // @formatter:off
     @DeleteMapping(value = "/commission",
             produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML})
-    @ApiOperation(value = "Delete a commissioned control loop",
-        notes = "Deletes a Commissioned Control Loop, returning optional error details",
+    @ApiOperation(value = "Delete a commissioned automation composition",
+        notes = "Deletes a Commissioned Automation Composition, returning optional error details",
         response = CommissioningResponse.class,
         tags = {TAGS},
         authorizations = @Authorization(value = AUTHORIZATION_TYPE),
@@ -180,34 +180,32 @@ public class CommissioningController extends AbstractRestController {
     )
     // @formatter:on
     public ResponseEntity<CommissioningResponse> delete(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Control Loop definition name", required = true) @RequestParam(
-                    value = "name") String name,
-            @ApiParam(
-                    value = "Control Loop definition version",
-                    required = true) @RequestParam("version") String version)
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(value = "Automation composition  definition name", required = true) @RequestParam(
+            value = "name") String name,
+        @ApiParam(
+            value = "Automation composition  definition version",
+            required = true) @RequestParam("version") String version)
         throws PfModelException {
 
-        return ResponseEntity.ok().body(provider.deleteControlLoopDefinition(name, version));
+        return ResponseEntity.ok().body(provider.deleteAutomationCompositionDefinition(name, version));
     }
 
     /**
-     * Queries details of all or specific control loop definitions.
+     * Queries details of all or specific automation composition definitions.
      *
      * @param requestId request ID used in ONAP logging
-     * @param name the name of the control loop definition to get, null for all definitions
-     * @param version the version of the control loop definition to get, null for all definitions
-     * @return the control loop definitions
-     * @throws PfModelException on errors getting details of all or specific control loop definitions
+     * @param name the name of the automation composition definition to get, null for all definitions
+     * @param version the version of the automation composition definition to get, null for all definitions
+     * @return the automation composition definitions
+     * @throws PfModelException on errors getting details of all or specific automation composition definitions
      */
     // @formatter:off
     @GetMapping(value = "/commission",
             produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML})
-    @ApiOperation(value = "Query details of the requested commissioned control loop definitions",
-        notes = "Queries details of the requested commissioned control loop definitions, "
-            + "returning all control loop details",
+    @ApiOperation(value = "Query details of the requested commissioned automation composition definitions",
+        notes = "Queries details of the requested commissioned automation composition definitions, "
+            + "returning all automation composition details",
         response = ToscaNodeTemplate.class,
         tags = {TAGS},
         authorizations = @Authorization(value = AUTHORIZATION_TYPE),
@@ -241,18 +239,16 @@ public class CommissioningController extends AbstractRestController {
     )
     // @formatter:on
     public ResponseEntity<List<ToscaNodeTemplate>> query(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Control Loop definition name", required = false) @RequestParam(
-                    value = "name",
-                    required = false) String name,
-            @ApiParam(value = "Control Loop definition version", required = false) @RequestParam(
-                    value = "version",
-                    required = false) String version)
-            throws PfModelException {
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(value = "Automation composition  definition name", required = false) @RequestParam(
+            value = "name",
+            required = false) String name,
+        @ApiParam(value = "Automation composition  definition version", required = false) @RequestParam(
+            value = "version",
+            required = false) String version)
+        throws PfModelException {
 
-        return ResponseEntity.ok().body(provider.getControlLoopDefinitions(name, version));
+        return ResponseEntity.ok().body(provider.getAutomationCompositionDefinitions(name, version));
     }
 
     /**
@@ -303,16 +299,14 @@ public class CommissioningController extends AbstractRestController {
     )
     // @formatter:on
     public ResponseEntity<String> queryToscaServiceTemplate(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Tosca service template name", required = false) @RequestParam(
-                    value = "name",
-                    required = false) String name,
-            @ApiParam(value = "Tosca service template version", required = false) @RequestParam(
-                    value = "version",
-                    required = false) String version)
-            throws PfModelException {
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(value = "Tosca service template name", required = false) @RequestParam(
+            value = "name",
+            required = false) String name,
+        @ApiParam(value = "Tosca service template version", required = false) @RequestParam(
+            value = "version",
+            required = false) String version)
+        throws PfModelException {
 
         return ResponseEntity.ok().body(provider.getToscaServiceTemplateReduced(name, version));
     }
@@ -364,14 +358,11 @@ public class CommissioningController extends AbstractRestController {
     )
     // @formatter:on
     public ResponseEntity<String> queryToscaServiceTemplateJsonSchema(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Section of Template schema is desired for", required = false) @RequestParam(
-                    value = "section",
-                    required = false,
-                    defaultValue = "all") String section)
-            throws PfModelException {
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(
+            value = "Section of Template schema is desired for",
+            required = false) @RequestParam(value = "section", required = false, defaultValue = "all") String section)
+        throws PfModelException {
 
         return ResponseEntity.ok().body(provider.getToscaServiceTemplateSchema(section));
     }
@@ -385,7 +376,7 @@ public class CommissioningController extends AbstractRestController {
      * @param version the version of the tosca service template to get
      * @return the specified tosca service template or section Json Schema
      * @throws PfModelException on errors getting the Common or Instance Properties
-     * @throws ControlLoopException on error getting the Common or Instance Properties
+     * @throws AutomationCompositionException on error getting the Common or Instance Properties
      */
     // @formatter:off
     @GetMapping(value = "/commission/getCommonOrInstanceProperties",
@@ -394,7 +385,7 @@ public class CommissioningController extends AbstractRestController {
         notes = "Queries details of the requested commissioned tosca service template json common"
             + "or instance properties, returning all tosca service template common or instance property details",
         response = ToscaServiceTemplate.class,
-        tags = {"Clamp Control Loop Commissioning API"},
+        tags = {"Clamp Automation Composition Commissioning API"},
         authorizations = @Authorization(value = AUTHORIZATION_TYPE),
         responseHeaders = {
             @ResponseHeader(
@@ -426,39 +417,36 @@ public class CommissioningController extends AbstractRestController {
     )
     // @formatter:on
     public ResponseEntity<Map<String, ToscaNodeTemplate>> queryToscaServiceCommonOrInstanceProperties(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Flag, true for common properties, false for instance", required = false) @RequestParam(
-                    value = "common",
-                    defaultValue = "false",
-                    required = false) boolean common,
-            @ApiParam(value = "Tosca service template name", required = false) @RequestParam(
-                    value = "name",
-                    required = false) String name,
-            @ApiParam(value = "Tosca service template version", required = false) @RequestParam(
-                    value = "version",
-                    required = false) String version)
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(
+            value = "Flag, true for common properties, false for instance",
+            required = false) @RequestParam(value = "common", defaultValue = "false", required = false) boolean common,
+        @ApiParam(value = "Tosca service template name", required = false) @RequestParam(
+            value = "name",
+            required = false) String name,
+        @ApiParam(value = "Tosca service template version", required = false) @RequestParam(
+            value = "version",
+            required = false) String version)
         throws PfModelException {
 
         return ResponseEntity.ok().body(provider.getNodeTemplatesWithCommonOrInstanceProperties(common, name, version));
     }
 
     /**
-     * Queries the elements of a specific control loop.
+     * Queries the elements of a specific automation composition.
      *
      * @param requestId request ID used in ONAP logging
-     * @param name the name of the control loop definition to get
-     * @param version the version of the control loop definition to get
-     * @return the control loop element definitions
-     * @throws PfModelException on errors getting the elements of a specific control loop
+     * @param name the name of the automation composition definition to get
+     * @param version the version of the automation composition definition to get
+     * @return the automation composition element definitions
+     * @throws PfModelException on errors getting the elements of a specific automation composition
      */
     // @formatter:off
     @GetMapping(value = "/commission/elements",
             produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML})
-    @ApiOperation(value = "Query details of the requested commissioned control loop element definitions",
-        notes = "Queries details of the requested commissioned control loop element definitions, "
-            + "returning all control loop elements' details",
+    @ApiOperation(value = "Query details of the requested commissioned automation composition element definitions",
+        notes = "Queries details of the requested commissioned automation composition element definitions, "
+            + "returning all automation composition elements' details",
         response = ToscaNodeTemplate.class,
         tags = {TAGS},
         authorizations = @Authorization(value = AUTHORIZATION_TYPE),
@@ -492,24 +480,22 @@ public class CommissioningController extends AbstractRestController {
     )
     // @formatter:on
     public ResponseEntity<List<ToscaNodeTemplate>> queryElements(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Control Loop definition name", required = false) @RequestParam(
-                    value = "name",
-                    required = false) String name,
-            @ApiParam(value = "Control Loop definition version", required = false) @RequestParam(
-                    value = "version",
-                    required = false) String version)
-            throws PfModelException {
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(value = "Automation composition  definition name", required = false) @RequestParam(
+            value = "name",
+            required = false) String name,
+        @ApiParam(value = "Automation composition  definition version", required = false) @RequestParam(
+            value = "version",
+            required = false) String version)
+        throws PfModelException {
 
-        List<ToscaNodeTemplate> nodeTemplate = provider.getControlLoopDefinitions(name, version);
+        List<ToscaNodeTemplate> nodeTemplate = provider.getAutomationCompositionDefinitions(name, version);
         // Prevent ambiguous queries with multiple returns
         if (nodeTemplate.size() > 1) {
-            throw new PfModelException(Status.NOT_ACCEPTABLE, "Multiple ControlLoops are not supported");
+            throw new PfModelException(Status.NOT_ACCEPTABLE, "Multiple automation compositions are not supported");
         }
 
-        List<ToscaNodeTemplate> response = provider.getControlLoopElementDefinitions(nodeTemplate.get(0));
+        List<ToscaNodeTemplate> response = provider.getAutomationCompositionElementDefinitions(nodeTemplate.get(0));
         return ResponseEntity.ok().body(response);
     }
 }
@@ -19,7 +19,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.main.rest;
+package org.onap.policy.clamp.acm.runtime.main.rest;
 
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -31,15 +31,15 @@ import io.swagger.annotations.ExtensionProperty;
 import io.swagger.annotations.ResponseHeader;
 import java.util.UUID;
 import lombok.RequiredArgsConstructor;
-import org.onap.policy.clamp.controlloop.common.exception.ControlLoopException;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.ControlLoopOrderStateResponse;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.ControlLoopPrimedResponse;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstancePropertiesResponse;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationCommand;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationResponse;
-import org.onap.policy.clamp.controlloop.runtime.instantiation.ControlLoopInstantiationProvider;
-import org.onap.policy.clamp.controlloop.runtime.main.web.AbstractRestController;
+import org.onap.policy.clamp.acm.runtime.instantiation.AutomationCompositionInstantiationProvider;
+import org.onap.policy.clamp.acm.runtime.main.web.AbstractRestController;
+import org.onap.policy.clamp.common.acm.exception.AutomationCompositionException;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.AutomationCompositionOrderStateResponse;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.AutomationCompositionPrimedResponse;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstancePropertiesResponse;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationCommand;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationResponse;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 import org.springframework.http.MediaType;
@@ -54,32 +54,32 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 /**
- * Class to provide REST end points for creating, deleting, query and commanding a control loop definition.
+ * Class to provide REST end points for creating, deleting, query and commanding a automation composition definition.
  */
 @RestController
 @RequiredArgsConstructor
 public class InstantiationController extends AbstractRestController {
 
-    private static final String TAGS = "Clamp Control Loop Instantiation API";
+    private static final String TAGS = "Clamp Automation Composition Instantiation API";
 
-    // The CL provider for instantiation requests
-    private final ControlLoopInstantiationProvider provider;
+    // The Automation Composition provider for instantiation requests
+    private final AutomationCompositionInstantiationProvider provider;
 
     /**
-     * Creates a control loop.
+     * Creates a automation composition.
      *
      * @param requestId request ID used in ONAP logging
-     * @param controlLoops the control loops
+     * @param automationCompositions the automation compositions
      * @return a response
-     * @throws PfModelException on errors creating a control loop
+     * @throws PfModelException on errors creating a automation composition
      */
     // @formatter:off
     @PostMapping(value = "/instantiation",
             produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML},
             consumes = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML})
     @ApiOperation(
-            value = "Commissions control loop definitions",
-            notes = "Commissions control loop definitions, returning the control loop IDs",
+            value = "Commissions automation composition definitions",
+            notes = "Commissions automation composition definitions, returning the automation composition IDs",
             response = InstantiationResponse.class,
             tags = {TAGS},
             authorizations = @Authorization(value = AUTHORIZATION_TYPE),
@@ -121,20 +121,20 @@ public class InstantiationController extends AbstractRestController {
         )
     // @formatter:on
     public ResponseEntity<InstantiationResponse> create(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Entity Body of Control Loop", required = true) @RequestBody ControlLoops controlLoops)
-            throws PfModelException {
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(
+            value = "Entity Body of automation composition",
+            required = true) @RequestBody AutomationCompositions automationCompositions)
+        throws PfModelException {
 
-        return ResponseEntity.ok().body(provider.createControlLoops(controlLoops));
+        return ResponseEntity.ok().body(provider.createAutomationCompositions(automationCompositions));
     }
 
     /**
      * Saves instance properties.
      *
      * @param requestId request ID used in ONAP logging
-     * @param body the body of control loop following TOSCA definition
+     * @param body the body of automation composition following TOSCA definition
      * @return a response
      */
     // @formatter:off
@@ -185,29 +185,27 @@ public class InstantiationController extends AbstractRestController {
     )
     // @formatter:on
     public ResponseEntity<InstancePropertiesResponse> createInstanceProperties(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Body of instance properties", required = true) @RequestBody ToscaServiceTemplate body)
-            throws PfModelException {
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(value = "Body of instance properties", required = true) @RequestBody ToscaServiceTemplate body)
+        throws PfModelException {
 
         return ResponseEntity.ok().body(provider.createInstanceProperties(body));
     }
 
     /**
-     * Deletes a control loop definition and instance properties.
+     * Deletes a automation composition definition and instance properties.
      *
      * @param requestId request ID used in ONAP logging
-     * @param name the name of the control loop to delete
-     * @param version the version of the control loop to delete
+     * @param name the name of the automation composition to delete
+     * @param version the version of the automation composition to delete
      * @return a response
-     * @throws PfModelException on errors deleting of control loop and instance properties
+     * @throws PfModelException on errors deleting of automation composition and instance properties
      */
     // @formatter:off
     @DeleteMapping(value = "/instanceProperties",
         produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML})
-    @ApiOperation(value = "Delete a control loop and instance properties",
-        notes = "Deletes a control loop and instance properties, returning optional error details",
+    @ApiOperation(value = "Delete a automation composition and instance properties",
+        notes = "Deletes a automation composition and instance properties, returning optional error details",
         response = InstantiationResponse.class,
         tags = {TAGS},
         authorizations = @Authorization(value = AUTHORIZATION_TYPE),
@@ -249,33 +247,31 @@ public class InstantiationController extends AbstractRestController {
     // @formatter:on
 
     public ResponseEntity<InstantiationResponse> deleteInstanceProperties(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Control Loop definition name", required = true) @RequestParam("name") String name,
-            @ApiParam(value = "Control Loop definition version") @RequestParam(
-                    value = "version",
-                    required = true) String version)
-            throws PfModelException {
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(value = "Automation composition  definition name", required = true) @RequestParam("name") String name,
+        @ApiParam(value = "Automation composition  definition version") @RequestParam(
+            value = "version",
+            required = true) String version)
+        throws PfModelException {
 
         return ResponseEntity.ok().body(provider.deleteInstanceProperties(name, version));
     }
 
     /**
-     * Queries details of all control loops.
+     * Queries details of all automation compositions.
      *
      * @param requestId request ID used in ONAP logging
-     * @param name the name of the control loop to get, null for all control loops
-     * @param version the version of the control loop to get, null for all control loops
-     * @return the control loops
-     * @throws PfModelException on errors getting commissioning of control loop
+     * @param name the name of the automation composition to get, null for all automation compositions
+     * @param version the version of the automation composition to get, null for all automation compositions
+     * @return the automation compositions
+     * @throws PfModelException on errors getting commissioning of automation composition
      */
     // @formatter:off
     @GetMapping(value = "/instantiation",
             produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML})
-    @ApiOperation(value = "Query details of the requested control loops",
-            notes = "Queries details of the requested control loops, returning all control loop details",
-            response = ControlLoops.class,
+    @ApiOperation(value = "Query details of the requested automation compositions",
+            notes = "Queries details of the requested automation compositions, returning all composition details",
+            response = AutomationCompositions.class,
             tags = {TAGS},
             authorizations = @Authorization(value = AUTHORIZATION_TYPE),
             responseHeaders = {
@@ -307,36 +303,34 @@ public class InstantiationController extends AbstractRestController {
             }
         )
     // @formatter:on
-    public ResponseEntity<ControlLoops> query(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Control Loop definition name", required = false) @RequestParam(
-                    value = "name",
-                    required = false) String name,
-            @ApiParam(value = "Control Loop definition version", required = false) @RequestParam(
-                    value = "version",
-                    required = false) String version)
-            throws PfModelException {
+    public ResponseEntity<AutomationCompositions> query(
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(value = "Automation composition  definition name", required = false) @RequestParam(
+            value = "name",
+            required = false) String name,
+        @ApiParam(value = "Automation composition  definition version", required = false) @RequestParam(
+            value = "version",
+            required = false) String version)
+        throws PfModelException {
 
-        return ResponseEntity.ok().body(provider.getControlLoops(name, version));
+        return ResponseEntity.ok().body(provider.getAutomationCompositions(name, version));
     }
 
     /**
-     * Updates a control loop.
+     * Updates a automation composition.
      *
      * @param requestId request ID used in ONAP logging
-     * @param controlLoops the control loops
+     * @param automationCompositions the automation compositions
      * @return a response
-     * @throws PfModelException on errors updating of control loops
+     * @throws PfModelException on errors updating of automation compositions
      */
     // @formatter:off
     @PutMapping(value = "/instantiation",
             produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML},
             consumes = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML})
     @ApiOperation(
-            value = "Updates control loop definitions",
-            notes = "Updates control loop definitions, returning the updated control loop definition IDs",
+            value = "Updates automation composition definitions",
+            notes = "Updates automation composition definitions, returning the updated composition definition IDs",
             response = InstantiationResponse.class,
             tags = {TAGS},
             authorizations = @Authorization(value = AUTHORIZATION_TYPE),
@@ -378,29 +372,29 @@ public class InstantiationController extends AbstractRestController {
         )
     // @formatter:on
     public ResponseEntity<InstantiationResponse> update(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Entity Body of Control Loop", required = true) @RequestBody ControlLoops controlLoops)
-            throws PfModelException {
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(
+            value = "Entity Body of Automation Composition",
+            required = true) @RequestBody AutomationCompositions automationCompositions)
+        throws PfModelException {
 
-        return ResponseEntity.ok().body(provider.updateControlLoops(controlLoops));
+        return ResponseEntity.ok().body(provider.updateAutomationCompositions(automationCompositions));
     }
 
     /**
-     * Deletes a control loop definition.
+     * Deletes a automation composition definition.
      *
      * @param requestId request ID used in ONAP logging
-     * @param name the name of the control loop to delete
-     * @param version the version of the control loop to delete
+     * @param name the name of the automation composition to delete
+     * @param version the version of the automation composition to delete
      * @return a response
-     * @throws PfModelException on errors deleting of control loop
+     * @throws PfModelException on errors deleting of automation composition
      */
     // @formatter:off
     @DeleteMapping(value = "/instantiation",
             produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML})
-    @ApiOperation(value = "Delete a control loop",
-            notes = "Deletes a control loop, returning optional error details",
+    @ApiOperation(value = "Delete a automation composition",
+            notes = "Deletes a automation composition, returning optional error details",
             response = InstantiationResponse.class,
             tags = {TAGS},
             authorizations = @Authorization(value = AUTHORIZATION_TYPE),
@@ -442,33 +436,31 @@ public class InstantiationController extends AbstractRestController {
     // @formatter:on
 
     public ResponseEntity<InstantiationResponse> delete(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Control Loop definition name", required = true) @RequestParam("name") String name,
-            @ApiParam(value = "Control Loop definition version") @RequestParam(
-                    value = "version",
-                    required = true) String version)
-            throws PfModelException {
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(value = "Automation composition  definition name", required = true) @RequestParam("name") String name,
+        @ApiParam(value = "Automation composition  definition version") @RequestParam(
+            value = "version",
+            required = true) String version)
+        throws PfModelException {
 
-        return ResponseEntity.ok().body(provider.deleteControlLoop(name, version));
+        return ResponseEntity.ok().body(provider.deleteAutomationComposition(name, version));
     }
 
     /**
-     * Issues control loop commands to control loops.
+     * Issues automation composition commands to automation compositions.
      *
      * @param requestId request ID used in ONAP logging
-     * @param command the command to issue to control loops
-     * @return the control loop definitions
+     * @param command the command to issue to automation compositions
+     * @return the automation composition definitions
      * @throws PfModelException on errors issuing a command
-     * @throws ControlLoopException on errors issuing a command
+     * @throws AutomationCompositionException on errors issuing a command
      */
     // @formatter:off
     @PutMapping(value = "/instantiation/command",
             produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML},
             consumes = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML})
-    @ApiOperation(value = "Issue a command to the requested control loops",
-            notes = "Issues a command to a control loop, ordering a state change on the control loop",
+    @ApiOperation(value = "Issue a command to the requested automation compositions",
+            notes = "Issues a command to an automation composition, ordering a state change on the composition",
             response = InstantiationResponse.class,
             tags = {TAGS},
             authorizations = @Authorization(value = AUTHORIZATION_TYPE),
@@ -501,33 +493,31 @@ public class InstantiationController extends AbstractRestController {
             }
         )
     // @formatter:on
-    public ResponseEntity<InstantiationResponse> issueControlLoopCommand(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(
-                    value = "Entity Body of control loop command",
-                    required = true) @RequestBody InstantiationCommand command)
-            throws ControlLoopException, PfModelException {
+    public ResponseEntity<InstantiationResponse> issueAutomationCompositionCommand(
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(
+            value = "Entity Body of automation composition command",
+            required = true) @RequestBody InstantiationCommand command)
+        throws AutomationCompositionException, PfModelException {
 
-        return ResponseEntity.accepted().body(provider.issueControlLoopCommand(command));
+        return ResponseEntity.accepted().body(provider.issueAutomationCompositionCommand(command));
     }
 
     /**
-     * Queries details of all control loops.
+     * Queries details of all automation compositions.
      *
      * @param requestId request ID used in ONAP logging
-     * @param name the name of the control loop to get, null for all control loops
-     * @param version the version of the control loop to get, null for all control loops
-     * @return the control loops
-     * @throws PfModelException on errors getting commissioning of control loop
+     * @param name the name of the automation composition to get, null for all automation compositions
+     * @param version the version of the automation composition to get, null for all automation compositions
+     * @return the automation compositions
+     * @throws PfModelException on errors getting commissioning of automation composition
      */
     // @formatter:off
     @GetMapping(value = "/instantiationState",
         produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML})
-    @ApiOperation(value = "Query details of the requested control loops",
-        notes = "Queries details of the requested control loops, returning all control loop details",
-        response = ControlLoops.class,
+    @ApiOperation(value = "Query details of the requested automation compositions",
+        notes = "Queries details of requested automation compositions, returning all automation composition details",
+        response = AutomationCompositions.class,
         tags = {TAGS},
         authorizations = @Authorization(value = AUTHORIZATION_TYPE),
         responseHeaders = {
@@ -559,36 +549,34 @@ public class InstantiationController extends AbstractRestController {
         }
     )
     // @formatter:on
-    public ResponseEntity<ControlLoopOrderStateResponse> getInstantiationOrderState(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Control Loop name", required = false) @RequestParam(
-                    value = "name",
-                    required = false) String name,
-            @ApiParam(value = "Control Loop version", required = false) @RequestParam(
-                    value = "version",
-                    required = false) String version)
-            throws PfModelException {
+    public ResponseEntity<AutomationCompositionOrderStateResponse> getInstantiationOrderState(
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(value = "Automation composition  name", required = false) @RequestParam(
+            value = "name",
+            required = false) String name,
+        @ApiParam(value = "Automation composition  version", required = false) @RequestParam(
+            value = "version",
+            required = false) String version)
+        throws PfModelException {
 
         return ResponseEntity.ok().body(provider.getInstantiationOrderState(name, version));
     }
 
     /**
-     * Queries Primed/De-Primed status of a control loop.
+     * Queries Primed/De-Primed status of a automation composition.
      *
      * @param requestId request ID used in ONAP logging
-     * @param name the name of the control loop to get, null for all control loops
-     * @param version the version of the control loop to get, null for all control loops
-     * @return the control loops
-     * @throws PfModelException on errors getting priming of control loop
+     * @param name the name of the automation composition to get, null for all automation compositions
+     * @param version the version of the automation composition to get, null for all automation compositions
+     * @return the automation compositions
+     * @throws PfModelException on errors getting priming of automation composition
      */
     // @formatter:off
-    @GetMapping(value = "/controlLoopPriming",
+    @GetMapping(value = "/automationCompositionPriming",
         produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML})
-    @ApiOperation(value = "Query priming details of the requested control loops",
-        notes = "Queries priming details of the requested control loops, returning primed/deprimed control loops",
-        response = ControlLoopPrimedResponse.class,
+    @ApiOperation(value = "Query priming details of the requested automation compositions",
+        notes = "Queries priming details of requested automation compositions, returning primed/deprimed compositions",
+        response = AutomationCompositionPrimedResponse.class,
         tags = {TAGS},
         authorizations = @Authorization(value = AUTHORIZATION_TYPE),
         responseHeaders = {
@@ -620,18 +608,16 @@ public class InstantiationController extends AbstractRestController {
         }
     )
     // @formatter:on
-    public ResponseEntity<ControlLoopPrimedResponse> getControlLoopPriming(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Control Loop definition name", required = false) @RequestParam(
-                    value = "name",
-                    required = false) String name,
-            @ApiParam(value = "Control Loop definition version", required = false) @RequestParam(
-                    value = "version",
-                    required = false) String version)
-            throws PfModelException {
+    public ResponseEntity<AutomationCompositionPrimedResponse> getAutomationCompositionPriming(
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(value = "Automation composition  definition name", required = false) @RequestParam(
+            value = "name",
+            required = false) String name,
+        @ApiParam(value = "Automation composition  definition version", required = false) @RequestParam(
+            value = "version",
+            required = false) String version)
+        throws PfModelException {
 
-        return ResponseEntity.ok().body(provider.getControlLoopPriming(name, version));
+        return ResponseEntity.ok().body(provider.getAutomationCompositionPriming(name, version));
     }
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.main.rest;
+package org.onap.policy.clamp.acm.runtime.main.rest;
 
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -31,10 +31,10 @@ import io.swagger.annotations.ResponseHeader;
 import java.time.Instant;
 import java.util.UUID;
 import lombok.RequiredArgsConstructor;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatisticsList;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatisticsList;
-import org.onap.policy.clamp.controlloop.runtime.main.web.AbstractRestController;
-import org.onap.policy.clamp.controlloop.runtime.monitoring.MonitoringProvider;
+import org.onap.policy.clamp.acm.runtime.main.web.AbstractRestController;
+import org.onap.policy.clamp.acm.runtime.monitoring.MonitoringProvider;
+import org.onap.policy.clamp.models.acm.concepts.AcElementStatisticsList;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantStatisticsList;
 import org.onap.policy.models.base.PfModelException;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
@@ -44,17 +44,17 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 /**
- * This class handles REST endpoints for CL Statistics monitoring.
+ * This class handles REST endpoints for ACM Statistics monitoring.
  */
 @RestController
 @RequiredArgsConstructor
 public class MonitoringQueryController extends AbstractRestController {
 
-    private static final String TAGS = "Clamp Control Loop Monitoring API";
+    private static final String TAGS = "Clamp Automation Composition Monitoring API";
     private final MonitoringProvider provider;
 
     /**
-     * Queries details of control loop participants statistics.
+     * Queries details of automation composition participants statistics.
      *
      * @param requestId request ID used in ONAP logging
      * @param name the name of the participant to get, null for all participants statistics
@@ -102,25 +102,23 @@ public class MonitoringQueryController extends AbstractRestController {
     )
     // @formatter:on
     public ResponseEntity<ParticipantStatisticsList> queryParticipantStatistics(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Control Loop participant name") @RequestParam(
-                    value = "name",
-                    required = false) final String name,
-            @ApiParam(value = "Control Loop participant version", required = false) @RequestParam(
-                    value = "version",
-                    required = false) final String version,
-            @ApiParam(value = "Record count", required = false) @RequestParam(
-                    value = "recordCount",
-                    required = false,
-                    defaultValue = "0") final int recordCount,
-            @ApiParam(value = "start time", required = false) @RequestParam(
-                    value = "startTime",
-                    required = false) final String startTime,
-            @ApiParam(value = "end time", required = false) @RequestParam(
-                    value = "endTime",
-                    required = false) final String endTime) {
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(value = "Automation composition  participant name") @RequestParam(
+            value = "name",
+            required = false) final String name,
+        @ApiParam(value = "Automation composition  participant version", required = false) @RequestParam(
+            value = "version",
+            required = false) final String version,
+        @ApiParam(value = "Record count", required = false) @RequestParam(
+            value = "recordCount",
+            required = false,
+            defaultValue = "0") final int recordCount,
+        @ApiParam(value = "start time", required = false) @RequestParam(
+            value = "startTime",
+            required = false) final String startTime,
+        @ApiParam(value = "end time", required = false) @RequestParam(
+            value = "endTime",
+            required = false) final String endTime) {
 
         Instant startTimestamp = null;
         Instant endTimestamp = null;
@@ -132,23 +130,23 @@ public class MonitoringQueryController extends AbstractRestController {
             endTimestamp = Instant.parse(endTime);
         }
         return ResponseEntity.ok().body(
-                provider.fetchFilteredParticipantStatistics(name, version, recordCount, startTimestamp, endTimestamp));
+            provider.fetchFilteredParticipantStatistics(name, version, recordCount, startTimestamp, endTimestamp));
     }
 
     /**
-     * Queries details of all participant statistics per control loop.
+     * Queries details of all participant statistics per automation composition.
      *
      * @param requestId request ID used in ONAP logging
-     * @param name the name of the control loop
-     * @param version version of the control loop
-     * @return the control loop element statistics
+     * @param name the name of the automation composition
+     * @param version version of the automation composition
+     * @return the automation composition element statistics
      */
     // @formatter:off
-    @GetMapping(value = "/monitoring/participants/controlloop",
+    @GetMapping(value = "/monitoring/participants/automationcomposition",
             produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML})
-    @ApiOperation(value = "Query details of all the participant stats in a control loop",
+    @ApiOperation(value = "Query details of all the participant stats in a automation composition",
         notes = "Queries details of the participant stats, returning all participant stats",
-        response = ClElementStatisticsList.class,
+        response = AcElementStatisticsList.class,
         tags = {TAGS},
         authorizations = @Authorization(value = AUTHORIZATION_TYPE),
         responseHeaders = {
@@ -179,34 +177,32 @@ public class MonitoringQueryController extends AbstractRestController {
         }
     )
     // @formatter:on
-    public ResponseEntity<ParticipantStatisticsList> queryParticipantStatisticsPerControlLoop(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Control Loop name", required = true) @RequestParam(
-                    value = "name",
-                    required = false) final String name,
-            @ApiParam(value = "Control Loop version", required = true) @RequestParam(
-                    value = "version",
-                    required = false) final String version) {
+    public ResponseEntity<ParticipantStatisticsList> queryParticipantStatisticsPerAutomationComposition(
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(value = "Automation composition  name", required = true) @RequestParam(
+            value = "name",
+            required = false) final String name,
+        @ApiParam(value = "Automation composition  version", required = true) @RequestParam(
+            value = "version",
+            required = false) final String version) {
 
-        return ResponseEntity.ok().body(provider.fetchParticipantStatsPerControlLoop(name, version));
+        return ResponseEntity.ok().body(provider.fetchParticipantStatsPerAutomationComposition(name, version));
     }
 
     /**
-     * Queries details of all control loop element statistics per control loop.
+     * Queries details of all automation composition element statistics per automation composition.
      *
      * @param requestId request ID used in ONAP logging
-     * @param name the name of the control loop
-     * @param version version of the control loop
-     * @return the control loop element statistics
+     * @param name the name of the automation composition
+     * @param version version of the automation composition
+     * @return the automation composition element statistics
      */
     // @formatter:off
-    @GetMapping(value = "/monitoring/clelements/controlloop",
+    @GetMapping(value = "/monitoring/acelements/automationcomposition",
             produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML})
-    @ApiOperation(value = "Query details of the requested cl element stats in a control loop",
-        notes = "Queries details of the requested cl element stats, returning all clElement stats",
-        response = ClElementStatisticsList.class,
+    @ApiOperation(value = "Query details of the requested acElement stats in a automation composition",
+        notes = "Queries details of the requested acElement stats, returning all acElement stats",
+        response = AcElementStatisticsList.class,
         tags = {TAGS},
         authorizations = @Authorization(value = AUTHORIZATION_TYPE),
         responseHeaders = {
@@ -237,39 +233,38 @@ public class MonitoringQueryController extends AbstractRestController {
         }
     )
     // @formatter:on
-    public ResponseEntity<ClElementStatisticsList> queryElementStatisticsPerControlLoop(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Control Loop name", required = true) @RequestParam(
-                    value = "name",
-                    required = false) final String name,
-            @ApiParam(value = "Control Loop version", required = true) @RequestParam(
-                    value = "version",
-                    required = false) final String version) {
+    public ResponseEntity<AcElementStatisticsList> queryElementStatisticsPerAutomationComposition(
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(value = "Automation composition  name", required = true) @RequestParam(
+            value = "name",
+            required = false) final String name,
+        @ApiParam(value = "Automation composition  version", required = true) @RequestParam(
+            value = "version",
+            required = false) final String version) {
 
-        return ResponseEntity.ok().body(provider.fetchClElementStatsPerControlLoop(name, version));
+        return ResponseEntity.ok().body(provider.fetchAcElementStatsPerAutomationComposition(name, version));
     }
 
     /**
-     * Queries details of all control loop element statistics per control loop.
+     * Queries details of all automation composition element statistics per automation composition.
      *
      * @param requestId request ID used in ONAP logging
-     * @param name the name of the control loop
-     * @param version version of the control loop
-     * @param id Id of the control loop element
+     * @param name the name of the automation composition
+     * @param version version of the automation composition
+     * @param id Id of the automation composition element
      * @param recordCount the record count to be fetched
      * @param startTime the time from which to get statistics
      * @param endTime the time to which to get statistics
-     * @return the control loop element statistics
-     * @throws PfModelException on errors getting details of all control loop element statistics per control loop
+     * @return the automation composition element statistics
+     * @throws PfModelException on errors getting details of all automation composition element statistics per
+     *         automation composition
      */
     // @formatter:off
-    @GetMapping(value = "/monitoring/clelement",
+    @GetMapping(value = "/monitoring/acelement",
             produces = {MediaType.APPLICATION_JSON_VALUE, APPLICATION_YAML})
-    @ApiOperation(value = "Query details of the requested cl element stats",
-        notes = "Queries details of the requested cl element stats, returning all clElement stats",
-        response = ClElementStatisticsList.class,
+    @ApiOperation(value = "Query details of the requested acElement stats",
+        notes = "Queries details of the requested acElement stats, returning all acElement stats",
+        response = AcElementStatisticsList.class,
         tags = {TAGS},
         authorizations = @Authorization(value = AUTHORIZATION_TYPE),
         responseHeaders = {
@@ -300,30 +295,28 @@ public class MonitoringQueryController extends AbstractRestController {
         }
     )
     // @formatter:on
-    public ResponseEntity<ClElementStatisticsList> queryElementStatistics(
-            @RequestHeader(
-                    name = REQUEST_ID_NAME,
-                    required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
-            @ApiParam(value = "Participant name", required = true) @RequestParam(
-                    value = "name",
-                    required = false) final String name,
-            @ApiParam(value = "Participant version", required = true) @RequestParam(
-                    value = "version",
-                    required = false) final String version,
-            @ApiParam(value = "Record count", required = false) @RequestParam(
-                    value = "recordCount",
-                    required = false,
-                    defaultValue = "0") final int recordCount,
-            @ApiParam(value = "Control Loop element id", required = false) @RequestParam(
-                    value = "id",
-                    required = false) final String id,
-            @ApiParam(value = "start time", required = false) @RequestParam(
-                    value = "startTime",
-                    required = false) final String startTime,
-            @ApiParam(value = "end time", required = false) @RequestParam(
-                    value = "endTime",
-                    required = false) final String endTime)
-            throws PfModelException {
+    public ResponseEntity<AcElementStatisticsList> queryElementStatistics(
+        @RequestHeader(name = REQUEST_ID_NAME, required = false) @ApiParam(REQUEST_ID_PARAM_DESCRIPTION) UUID requestId,
+        @ApiParam(value = "Participant name", required = true) @RequestParam(
+            value = "name",
+            required = false) final String name,
+        @ApiParam(value = "Participant version", required = true) @RequestParam(
+            value = "version",
+            required = false) final String version,
+        @ApiParam(value = "Record count", required = false) @RequestParam(
+            value = "recordCount",
+            required = false,
+            defaultValue = "0") final int recordCount,
+        @ApiParam(value = "Automation composition  element id", required = false) @RequestParam(
+            value = "id",
+            required = false) final String id,
+        @ApiParam(value = "start time", required = false) @RequestParam(
+            value = "startTime",
+            required = false) final String startTime,
+        @ApiParam(value = "end time", required = false) @RequestParam(
+            value = "endTime",
+            required = false) final String endTime)
+        throws PfModelException {
 
         Instant startTimestamp = null;
         Instant endTimestamp = null;
@@ -334,8 +327,8 @@ public class MonitoringQueryController extends AbstractRestController {
         if (endTime != null) {
             endTimestamp = Instant.parse(endTime);
         }
-        return ResponseEntity.ok().body(provider.fetchFilteredClElementStatistics(name, version, id, startTimestamp,
-                endTimestamp, recordCount));
+        return ResponseEntity.ok().body(
+            provider.fetchFilteredAcElementStatistics(name, version, id, startTimestamp, endTimestamp, recordCount));
     }
 
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.main.web;
+package org.onap.policy.clamp.acm.runtime.main.web;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.BasicAuthDefinition;
@@ -35,15 +35,15 @@ import org.springframework.web.bind.annotation.RequestMapping;
  */
 // @formatter:off
 @RequestMapping(value = "/v2", produces = {MediaType.APPLICATION_JSON, AbstractRestController.APPLICATION_YAML})
-@Api(value = "Control Loop Commissioning API")
+@Api(value = "Automation Composition Commissioning API")
 @SwaggerDefinition(
         info = @Info(description =
-                        "Control Loop Service", version = "v1.0",
-                        title = "Control Loop"),
+                        "Automation Composition Service", version = "v1.0",
+                        title = "Automation Composition"),
         consumes = {MediaType.APPLICATION_JSON, AbstractRestController.APPLICATION_YAML},
         produces = {MediaType.APPLICATION_JSON, AbstractRestController.APPLICATION_YAML},
         schemes = {SwaggerDefinition.Scheme.HTTP, SwaggerDefinition.Scheme.HTTPS},
-        tags = {@Tag(name = "controlloop", description = "Control Loop Service")},
+        tags = {@Tag(name = "automationcomposition", description = "Automation Composition Service")},
         securityDefinition = @SecurityDefinition(basicAuthDefinitions = {@BasicAuthDefinition(key = "basicAuth")}))
 // @formatter:on
 public abstract class AbstractRestController {
@@ -55,7 +55,7 @@ public abstract class AbstractRestController {
     public static final String API_VERSION = "1.0.0";
 
     public static final String LAST_MOD_NAME = "last-mod-release";
-    public static final String LAST_MOD_RELEASE = "Dublin";
+    public static final String LAST_MOD_RELEASE = "Istanbul";
 
     public static final String VERSION_MINOR_NAME = "X-MinorVersion";
     public static final String VERSION_MINOR_DESCRIPTION =
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.main.web;
+package org.onap.policy.clamp.acm.runtime.main.web;
 
 import org.onap.policy.common.endpoints.http.server.aaf.AafGranularAuthFilter;
 import org.onap.policy.common.utils.resources.MessageConstants;
 
 /**
- * Class to manage AAF filters for the control loop runtime component.
+ * Class to manage AAF filters for the automation composition runtime component.
  */
-public class ControlLoopAafFilter extends AafGranularAuthFilter {
+public class AutomationConfiguraitonAafFilter extends AafGranularAuthFilter {
 
     public static final String AAF_NODETYPE = MessageConstants.POLICY_CLAMP;
     public static final String AAF_ROOT_PERMISSION = DEFAULT_NAMESPACE + "." + AAF_NODETYPE;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.main.web;
+package org.onap.policy.clamp.acm.runtime.main.web;
 
-import org.onap.policy.clamp.controlloop.common.exception.ControlLoopException;
-import org.onap.policy.clamp.controlloop.models.messages.rest.SimpleResponse;
-import org.onap.policy.clamp.controlloop.models.rest.RestUtils;
+import org.onap.policy.clamp.common.acm.exception.AutomationCompositionException;
+import org.onap.policy.clamp.models.acm.messages.rest.SimpleResponse;
+import org.onap.policy.clamp.models.acm.rest.RestUtils;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.base.PfModelRuntimeException;
 import org.springframework.http.ResponseEntity;
@@ -33,13 +33,13 @@ import org.springframework.web.bind.annotation.RestControllerAdvice;
 public class GlobalControllerExceptionHandler {
 
     /**
-     * Handle ControlLoopException.
+     * Handle AutomationCompositionException.
      *
-     * @param ex ControlLoopException
+     * @param ex AutomationCompositionException
      * @return ResponseEntity
      */
-    @ExceptionHandler(ControlLoopException.class)
-    public ResponseEntity<SimpleResponse> handleBadRequest(ControlLoopException ex) {
+    @ExceptionHandler(AutomationCompositionException.class)
+    public ResponseEntity<SimpleResponse> handleBadRequest(AutomationCompositionException ex) {
         return RestUtils.toSimpleResponse(ex);
     }
 
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.main.web;
+package org.onap.policy.clamp.acm.runtime.main.web;
 
 import io.swagger.v3.oas.annotations.Hidden;
 import java.util.Map;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.http.HttpServletRequest;
-import org.onap.policy.clamp.controlloop.models.messages.rest.SimpleResponse;
-import org.onap.policy.clamp.controlloop.models.messages.rest.TypedSimpleResponse;
+import org.onap.policy.clamp.models.acm.messages.rest.SimpleResponse;
+import org.onap.policy.clamp.models.acm.messages.rest.TypedSimpleResponse;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/monitoring/MonitoringProvider.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/monitoring/MonitoringProvider.java
new file mode 100644 (file)
index 0000000..2950ad9
--- /dev/null
@@ -0,0 +1,247 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.runtime.monitoring;
+
+import java.time.Instant;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import lombok.AllArgsConstructor;
+import lombok.NonNull;
+import org.onap.policy.clamp.models.acm.concepts.AcElementStatistics;
+import org.onap.policy.clamp.models.acm.concepts.AcElementStatisticsList;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantStatistics;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantStatisticsList;
+import org.onap.policy.clamp.models.acm.persistence.provider.AcElementStatisticsProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantStatisticsProvider;
+import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.base.PfModelRuntimeException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * This class provides information about statistics data of Automation Composition elements and Participants in database
+ * to callers.
+ */
+@Service
+@Transactional
+@AllArgsConstructor
+public class MonitoringProvider {
+
+    private static final String DESC_ORDER = "DESC";
+    private final ParticipantStatisticsProvider participantStatisticsProvider;
+    private final AcElementStatisticsProvider acElementStatisticsProvider;
+    private final AutomationCompositionProvider automationCompositionProvider;
+
+    /**
+     * Create participant statistics.
+     *
+     * @param participantStatistics the participant statistics
+     * @return the result of create operation
+     * @throws PfModelException on creation errors
+     */
+    public ParticipantStatisticsList createParticipantStatistics(List<ParticipantStatistics> participantStatistics)
+        throws PfModelException {
+        var participantStatisticsList = new ParticipantStatisticsList();
+        participantStatisticsList
+            .setStatisticsList(participantStatisticsProvider.createParticipantStatistics(participantStatistics));
+
+        return participantStatisticsList;
+    }
+
+    /**
+     * Create AcElement statistics.
+     *
+     * @param acElementStatisticsList the AcElement statistics
+     * @return the result of create operation
+     * @throws PfModelException on creation errors
+     */
+    public AcElementStatisticsList createAcElementStatistics(List<AcElementStatistics> acElementStatisticsList)
+        throws PfModelException {
+        var elementStatisticsList = new AcElementStatisticsList();
+        elementStatisticsList
+            .setAcElementStatistics(acElementStatisticsProvider.createAcElementStatistics(acElementStatisticsList));
+
+        return elementStatisticsList;
+    }
+
+    /**
+     * Get participant statistics based on specific filters.
+     *
+     * @param name the name of the participant statistics to get, null to get all statistics
+     * @param version the version of the participant statistics to get, null to get all statistics
+     * @param recordCount number of records to be fetched.
+     * @param startTime start of the timestamp, from statistics to be filtered
+     * @param endTime end of the timestamp up to which statistics to be filtered
+     * @return the participant found
+     */
+    @Transactional(readOnly = true)
+    public ParticipantStatisticsList fetchFilteredParticipantStatistics(@NonNull final String name,
+        final String version, int recordCount, Instant startTime, Instant endTime) {
+        var participantStatisticsList = new ParticipantStatisticsList();
+
+        // Additional parameters can be added in filterMap for filtering data.
+        Map<String, Object> filterMap = null;
+        participantStatisticsList.setStatisticsList(participantStatisticsProvider.getFilteredParticipantStatistics(name,
+            version, startTime, endTime, filterMap, DESC_ORDER, recordCount));
+
+        return participantStatisticsList;
+    }
+
+    /**
+     * Get all participant statistics records found for a specific automation composition.
+     *
+     * @param automationCompositionName name of the automation composition
+     * @param automationCompositionVersion version of the automation composition
+     * @return All the participant statistics found
+     * @throws PfModelRuntimeException on errors getting participant statistics
+     */
+    @Transactional(readOnly = true)
+    public ParticipantStatisticsList fetchParticipantStatsPerAutomationComposition(
+        @NonNull final String automationCompositionName, @NonNull final String automationCompositionVersion) {
+        var statisticsList = new ParticipantStatisticsList();
+        List<ParticipantStatistics> participantStatistics = new ArrayList<>();
+        try {
+            // Fetch all participantIds for a specific automation composition
+            List<ToscaConceptIdentifier> participantIds =
+                getAllParticipantIdsPerAutomationComposition(automationCompositionName, automationCompositionVersion);
+            for (ToscaConceptIdentifier id : participantIds) {
+                participantStatistics.addAll(participantStatisticsProvider
+                    .getFilteredParticipantStatistics(id.getName(), id.getVersion(), null, null, null, DESC_ORDER, 0));
+            }
+            statisticsList.setStatisticsList(participantStatistics);
+        } catch (PfModelException e) {
+            throw new PfModelRuntimeException(e);
+        }
+        return statisticsList;
+    }
+
+    /**
+     * Get AcElement statistics based on specific filters.
+     *
+     * @param name the name of the AcElement statistics to get, null to get all statistics
+     * @param version the version of the AcElement statistics to get, null to get all statistics
+     * @param id UUID of the automation composition element
+     * @param startTime start of the timestamp, from statistics to be filtered
+     * @param endTime end of the timestamp up to which statistics to be filtered
+     * @param recordCount number of records to be fetched.
+     * @return the participant found
+     * @throws PfModelException on errors getting automation composition statistics
+     */
+    @Transactional(readOnly = true)
+    public AcElementStatisticsList fetchFilteredAcElementStatistics(@NonNull final String name, final String version,
+        final String id, Instant startTime, Instant endTime, int recordCount) throws PfModelException {
+        var acElementStatisticsList = new AcElementStatisticsList();
+        Map<String, Object> filterMap = new HashMap<>();
+        // Adding UUID in filter if present
+        if (id != null) {
+            filterMap.put("localName", id);
+        }
+        acElementStatisticsList.setAcElementStatistics(acElementStatisticsProvider.getFilteredAcElementStatistics(name,
+            version, startTime, endTime, filterMap, DESC_ORDER, recordCount));
+
+        return acElementStatisticsList;
+    }
+
+    /**
+     * Get AcElement statistics per automation composition.
+     *
+     * @param name the name of the automation composition
+     * @param version the version of the automation composition
+     * @return the AcElement statistics found
+     * @throws PfModelRuntimeException on errors getting automation composition statistics
+     */
+    @Transactional(readOnly = true)
+    public AcElementStatisticsList fetchAcElementStatsPerAutomationComposition(@NonNull final String name,
+        @NonNull final String version) {
+        var acElementStatisticsList = new AcElementStatisticsList();
+        List<AcElementStatistics> acElementStats = new ArrayList<>();
+        try {
+            List<AutomationCompositionElement> acElements = new ArrayList<>();
+            // Fetch all automation composition elements for the automation composition
+            var automationCompositionOpt =
+                automationCompositionProvider.findAutomationComposition(new ToscaConceptIdentifier(name, version));
+            if (automationCompositionOpt.isPresent()) {
+                acElements.addAll(automationCompositionOpt.get().getElements().values());
+                // Collect automation composition element statistics for each acElement.
+                for (AutomationCompositionElement acElement : acElements) {
+                    acElementStats.addAll(fetchFilteredAcElementStatistics(acElement.getParticipantId().getName(),
+                        acElement.getParticipantId().getVersion(), acElement.getId().toString(), null, null, 0)
+                            .getAcElementStatistics());
+                }
+            }
+            acElementStatisticsList.setAcElementStatistics(acElementStats);
+        } catch (PfModelException e) {
+            throw new PfModelRuntimeException(e);
+        }
+        return acElementStatisticsList;
+    }
+
+    /**
+     * If required, REST end point can be defined for this method to fetch associated participant Ids
+     * for a automation composition.
+     *
+     * @param name the name of the automation composition
+     * @param version the version of the automation composition
+     * @return List of participant Id
+     * @throws PfModelException on errors
+     */
+    @Transactional(readOnly = true)
+    public List<ToscaConceptIdentifier> getAllParticipantIdsPerAutomationComposition(String name, String version)
+        throws PfModelException {
+        List<ToscaConceptIdentifier> participantIds = new ArrayList<>();
+        var automationCompositionOpt =
+            automationCompositionProvider.findAutomationComposition(new ToscaConceptIdentifier(name, version));
+        if (automationCompositionOpt.isPresent()) {
+            for (AutomationCompositionElement acElement : automationCompositionOpt.get().getElements().values()) {
+                participantIds.add(acElement.getParticipantId());
+            }
+        }
+        return participantIds;
+    }
+
+    /**
+     * If required, REST end point can be defined for this method to fetch associated automation composition element Ids
+     * for a automation composition.
+     *
+     * @param name the name of the automation composition
+     * @param version the version of the automation composition
+     * @return Map of automation composition Id and participant details
+     * @throws PfModelException on errors
+     */
+    @Transactional(readOnly = true)
+    public Map<String, ToscaConceptIdentifier> getAllAcElementsIdPerAutomationComposition(String name, String version)
+        throws PfModelException {
+        Map<String, ToscaConceptIdentifier> acElementId = new HashMap<>();
+        var automationCompositionOpt =
+            automationCompositionProvider.findAutomationComposition(new ToscaConceptIdentifier(name, version));
+        if (automationCompositionOpt.isPresent()) {
+            for (AutomationCompositionElement acElement : automationCompositionOpt.get().getElements().values()) {
+                acElementId.put(acElement.getId().toString(), acElement.getParticipantId());
+            }
+        }
+        return acElementId;
+    }
+}
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.supervision;
+package org.onap.policy.clamp.acm.runtime.supervision;
 
 import java.io.Closeable;
 import java.io.IOException;
@@ -31,9 +31,9 @@ import org.aspectj.lang.annotation.After;
 import org.aspectj.lang.annotation.AfterReturning;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegister;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatus;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdateAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantUpdateAck;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.scheduling.annotation.Scheduled;
diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandler.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandler.java
new file mode 100644 (file)
index 0000000..055acb2
--- /dev/null
@@ -0,0 +1,518 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.runtime.supervision;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+import lombok.AllArgsConstructor;
+import org.apache.commons.collections4.CollectionUtils;
+import org.onap.policy.clamp.acm.runtime.monitoring.MonitoringProvider;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionStateChangePublisher;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionUpdatePublisher;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantDeregisterAckPublisher;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantRegisterAckPublisher;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantUpdatePublisher;
+import org.onap.policy.clamp.common.acm.exception.AutomationCompositionException;
+import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementAck;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionInfo;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
+import org.onap.policy.clamp.models.acm.concepts.Participant;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantUtils;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessage;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantUpdateAck;
+import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ServiceTemplateProvider;
+import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.base.PfModelRuntimeException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+/**
+ * This class handles supervision of automation composition instances, so only one object of this type should be built
+ * at a time.
+ *
+ * <p/>
+ * It is effectively a singleton that is started at system start.
+ */
+@Component
+@AllArgsConstructor
+public class SupervisionHandler {
+    private static final Logger LOGGER = LoggerFactory.getLogger(SupervisionHandler.class);
+
+    private static final String AUTOMATION_COMPOSITION_CANNOT_TRANSITION_FROM_STATE =
+        "Automation composition can't transition from state ";
+    private static final String AUTOMATION_COMPOSITION_IS_ALREADY_IN_STATE =
+        "Automation composition is already in state ";
+    private static final String TO_STATE = " to state ";
+    private static final String AND_TRANSITIONING_TO_STATE = " and transitioning to state ";
+
+    private final AutomationCompositionProvider automationCompositionProvider;
+    private final ParticipantProvider participantProvider;
+    private final MonitoringProvider monitoringProvider;
+    private final ServiceTemplateProvider serviceTemplateProvider;
+
+    // Publishers for participant communication
+    private final AutomationCompositionUpdatePublisher automationCompositionUpdatePublisher;
+    private final AutomationCompositionStateChangePublisher automationCompositionStateChangePublisher;
+    private final ParticipantRegisterAckPublisher participantRegisterAckPublisher;
+    private final ParticipantDeregisterAckPublisher participantDeregisterAckPublisher;
+    private final ParticipantUpdatePublisher participantUpdatePublisher;
+
+    /**
+     * Supervision trigger called when a command is issued on automation compositions.
+     *
+     * <p/>
+     * Causes supervision to start or continue supervision on the automation compositions in question.
+     *
+     * @param automationCompositionIdentifierList the automation compositions for which the supervision command has been
+     *        issued
+     * @throws AutomationCompositionException on supervision triggering exceptions
+     */
+    public void triggerAutomationCompositionSupervision(
+        List<ToscaConceptIdentifier> automationCompositionIdentifierList) throws AutomationCompositionException {
+
+        LOGGER.debug("triggering automation composition supervision on automation compositions {}",
+            automationCompositionIdentifierList);
+
+        if (CollectionUtils.isEmpty(automationCompositionIdentifierList)) {
+            // This is just to force throwing of the exception in certain circumstances.
+            exceptionOccured(Response.Status.NOT_ACCEPTABLE,
+                "The list of automation compositions for supervision is empty");
+        }
+
+        for (ToscaConceptIdentifier automationCompositionId : automationCompositionIdentifierList) {
+            try {
+                var automationComposition =
+                    automationCompositionProvider.getAutomationComposition(automationCompositionId);
+
+                superviseAutomationComposition(automationComposition);
+
+                automationCompositionProvider.saveAutomationComposition(automationComposition);
+            } catch (PfModelException pfme) {
+                throw new AutomationCompositionException(pfme.getErrorResponse().getResponseCode(), pfme.getMessage(),
+                    pfme);
+            }
+        }
+    }
+
+    /**
+     * Handle a ParticipantStatus message from a participant.
+     *
+     * @param participantStatusMessage the ParticipantStatus message received from a participant
+     */
+    @MessageIntercept
+    public void handleParticipantMessage(ParticipantStatus participantStatusMessage) {
+        LOGGER.debug("Participant Status received {}", participantStatusMessage);
+        try {
+            superviseParticipant(participantStatusMessage);
+        } catch (PfModelException | AutomationCompositionException svExc) {
+            LOGGER.warn("error supervising participant {}", participantStatusMessage.getParticipantId(), svExc);
+            return;
+        }
+
+        try {
+            superviseAutomationCompositions(participantStatusMessage);
+        } catch (PfModelException | AutomationCompositionException svExc) {
+            LOGGER.warn("error supervising participant {}", participantStatusMessage.getParticipantId(), svExc);
+        }
+    }
+
+    /**
+     * Handle a ParticipantRegister message from a participant.
+     *
+     * @param participantRegisterMessage the ParticipantRegister message received from a participant
+     */
+    @MessageIntercept
+    public boolean handleParticipantMessage(ParticipantRegister participantRegisterMessage) {
+        LOGGER.debug("Participant Register received {}", participantRegisterMessage);
+        try {
+            checkParticipant(participantRegisterMessage, ParticipantState.UNKNOWN, ParticipantHealthStatus.UNKNOWN);
+        } catch (PfModelException | AutomationCompositionException svExc) {
+            LOGGER.warn("error saving participant {}", participantRegisterMessage.getParticipantId(), svExc);
+        }
+
+        var isCommissioning = participantUpdatePublisher.sendCommissioning(null, null,
+            participantRegisterMessage.getParticipantId(), participantRegisterMessage.getParticipantType());
+
+        participantRegisterAckPublisher.send(participantRegisterMessage.getMessageId(),
+            participantRegisterMessage.getParticipantId(), participantRegisterMessage.getParticipantType());
+        return isCommissioning;
+    }
+
+    /**
+     * Handle a ParticipantDeregister message from a participant.
+     *
+     * @param participantDeregisterMessage the ParticipantDeregister message received from a participant
+     */
+    @MessageIntercept
+    public void handleParticipantMessage(ParticipantDeregister participantDeregisterMessage) {
+        LOGGER.debug("Participant Deregister received {}", participantDeregisterMessage);
+        try {
+            var participantOpt =
+                participantProvider.findParticipant(participantDeregisterMessage.getParticipantId().getName(),
+                    participantDeregisterMessage.getParticipantId().getVersion());
+
+            if (participantOpt.isPresent()) {
+                var participant = participantOpt.get();
+                participant.setParticipantState(ParticipantState.TERMINATED);
+                participant.setHealthStatus(ParticipantHealthStatus.OFF_LINE);
+                participantProvider.saveParticipant(participant);
+            }
+        } catch (PfModelException pfme) {
+            LOGGER.warn("Model exception occured with participant id {}",
+                participantDeregisterMessage.getParticipantId());
+        }
+
+        participantDeregisterAckPublisher.send(participantDeregisterMessage.getMessageId());
+    }
+
+    /**
+     * Handle a ParticipantUpdateAck message from a participant.
+     *
+     * @param participantUpdateAckMessage the ParticipantUpdateAck message received from a participant
+     */
+    @MessageIntercept
+    public void handleParticipantMessage(ParticipantUpdateAck participantUpdateAckMessage) {
+        LOGGER.debug("Participant Update Ack received {}", participantUpdateAckMessage);
+        try {
+            var participantOpt =
+                participantProvider.findParticipant(participantUpdateAckMessage.getParticipantId().getName(),
+                    participantUpdateAckMessage.getParticipantId().getVersion());
+
+            if (participantOpt.isPresent()) {
+                var participant = participantOpt.get();
+                participant.setParticipantState(participantUpdateAckMessage.getState());
+                participantProvider.saveParticipant(participant);
+            } else {
+                LOGGER.warn("Participant not found in database {}", participantUpdateAckMessage.getParticipantId());
+            }
+        } catch (PfModelException pfme) {
+            LOGGER.warn("Model exception occured with participant id {}",
+                participantUpdateAckMessage.getParticipantId());
+        }
+    }
+
+    /**
+     * Send commissioning update message to dmaap.
+     *
+     * @param name the ToscaServiceTemplate name
+     * @param version the ToscaServiceTemplate version
+     */
+    public void handleSendCommissionMessage(String name, String version) {
+        LOGGER.debug("Participant update message with serviveTemplate {} {} being sent to all participants", name,
+            version);
+        participantUpdatePublisher.sendComissioningBroadcast(name, version);
+    }
+
+    /**
+     * Send decommissioning update message to dmaap.
+     *
+     */
+    public void handleSendDeCommissionMessage() {
+        LOGGER.debug("Participant update message being sent");
+        participantUpdatePublisher.sendDecomisioning();
+    }
+
+    /**
+     * Handle a AutomationComposition update acknowledge message from a participant.
+     *
+     * @param automationCompositionAckMessage the AutomationCompositionAck message received from a participant
+     */
+    @MessageIntercept
+    public void handleAutomationCompositionUpdateAckMessage(AutomationCompositionAck automationCompositionAckMessage) {
+        LOGGER.debug("AutomationComposition Update Ack message received {}", automationCompositionAckMessage);
+        setAcElementStateInDb(automationCompositionAckMessage);
+    }
+
+    /**
+     * Handle a AutomationComposition statechange acknowledge message from a participant.
+     *
+     * @param automationCompositionAckMessage the AutomationCompositionAck message received from a participant
+     */
+    @MessageIntercept
+    public void handleAutomationCompositionStateChangeAckMessage(
+        AutomationCompositionAck automationCompositionAckMessage) {
+        LOGGER.debug("AutomationComposition StateChange Ack message received {}", automationCompositionAckMessage);
+        setAcElementStateInDb(automationCompositionAckMessage);
+    }
+
+    private void setAcElementStateInDb(AutomationCompositionAck automationCompositionAckMessage) {
+        if (automationCompositionAckMessage.getAutomationCompositionResultMap() != null) {
+            try {
+                var automationComposition = automationCompositionProvider
+                    .getAutomationComposition(automationCompositionAckMessage.getAutomationCompositionId());
+                if (automationComposition != null) {
+                    var updated = updateState(automationComposition,
+                        automationCompositionAckMessage.getAutomationCompositionResultMap().entrySet());
+                    updated |= setPrimed(automationComposition);
+                    if (updated) {
+                        automationCompositionProvider.saveAutomationComposition(automationComposition);
+                    }
+                } else {
+                    LOGGER.warn("AutomationComposition not found in database {}",
+                        automationCompositionAckMessage.getAutomationCompositionId());
+                }
+            } catch (PfModelException pfme) {
+                LOGGER.warn("Model exception occured with AutomationComposition Id {}",
+                    automationCompositionAckMessage.getAutomationCompositionId());
+            }
+        }
+    }
+
+    private boolean updateState(AutomationComposition automationComposition,
+        Set<Map.Entry<UUID, AutomationCompositionElementAck>> automationCompositionResultSet) {
+        var updated = false;
+        for (var acElementAck : automationCompositionResultSet) {
+            var element = automationComposition.getElements().get(acElementAck.getKey());
+            if (element != null) {
+                element.setState(acElementAck.getValue().getState());
+                updated = true;
+            }
+        }
+        return updated;
+    }
+
+    private boolean setPrimed(AutomationComposition automationComposition) {
+        var acElements = automationComposition.getElements().values();
+        if (acElements != null) {
+            Boolean primedFlag = true;
+            var checkOpt = automationComposition.getElements().values().stream()
+                .filter(acElement -> (!acElement.getState().equals(AutomationCompositionState.PASSIVE)
+                    || !acElement.getState().equals(AutomationCompositionState.RUNNING)))
+                .findAny();
+            if (checkOpt.isEmpty()) {
+                primedFlag = false;
+            }
+            automationComposition.setPrimed(primedFlag);
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Supervise a automation composition, performing whatever actions need to be performed on the automation
+     * composition.
+     *
+     * @param automationComposition the automation composition to supervises
+     * @throws AutomationCompositionException on supervision errors
+     */
+    private void superviseAutomationComposition(AutomationComposition automationComposition)
+        throws AutomationCompositionException {
+        switch (automationComposition.getOrderedState()) {
+            case UNINITIALISED:
+                superviseAutomationCompositionUninitialization(automationComposition);
+                break;
+
+            case PASSIVE:
+                superviseAutomationCompositionPassivation(automationComposition);
+                break;
+
+            case RUNNING:
+                superviseAutomationCompositionActivation(automationComposition);
+                break;
+
+            default:
+                exceptionOccured(Response.Status.NOT_ACCEPTABLE,
+                    "A automation composition cannot be commanded to go into state "
+                        + automationComposition.getOrderedState().name());
+        }
+    }
+
+    /**
+     * Supervise a automation composition uninitialisation, performing whatever actions need to be performed on the
+     * automation composition,
+     * automation composition ordered state is UNINITIALIZED.
+     *
+     * @param automationComposition the automation composition to supervises
+     * @throws AutomationCompositionException on supervision errors
+     */
+    private void superviseAutomationCompositionUninitialization(AutomationComposition automationComposition)
+        throws AutomationCompositionException {
+        switch (automationComposition.getState()) {
+            case UNINITIALISED:
+                exceptionOccured(Response.Status.NOT_ACCEPTABLE,
+                    AUTOMATION_COMPOSITION_IS_ALREADY_IN_STATE + automationComposition.getState().name());
+                break;
+
+            case UNINITIALISED2PASSIVE:
+            case PASSIVE:
+                automationComposition.setState(AutomationCompositionState.PASSIVE2UNINITIALISED);
+                automationCompositionStateChangePublisher.send(automationComposition,
+                    getFirstStartPhase(automationComposition));
+                break;
+
+            case PASSIVE2UNINITIALISED:
+                exceptionOccured(Response.Status.NOT_ACCEPTABLE,
+                    AUTOMATION_COMPOSITION_IS_ALREADY_IN_STATE + automationComposition.getState().name()
+                        + AND_TRANSITIONING_TO_STATE + automationComposition.getOrderedState());
+                break;
+
+            default:
+                exceptionOccured(Response.Status.NOT_ACCEPTABLE, AUTOMATION_COMPOSITION_CANNOT_TRANSITION_FROM_STATE
+                    + automationComposition.getState().name() + TO_STATE + automationComposition.getOrderedState());
+                break;
+        }
+    }
+
+    private void superviseAutomationCompositionPassivation(AutomationComposition automationComposition)
+        throws AutomationCompositionException {
+        switch (automationComposition.getState()) {
+            case PASSIVE:
+                exceptionOccured(Response.Status.NOT_ACCEPTABLE,
+                    AUTOMATION_COMPOSITION_IS_ALREADY_IN_STATE + automationComposition.getState().name());
+                break;
+            case UNINITIALISED:
+                automationComposition.setState(AutomationCompositionState.UNINITIALISED2PASSIVE);
+                automationCompositionUpdatePublisher.send(automationComposition);
+                break;
+
+            case UNINITIALISED2PASSIVE:
+            case RUNNING2PASSIVE:
+                exceptionOccured(Response.Status.NOT_ACCEPTABLE,
+                    AUTOMATION_COMPOSITION_IS_ALREADY_IN_STATE + automationComposition.getState().name()
+                        + AND_TRANSITIONING_TO_STATE + automationComposition.getOrderedState());
+                break;
+
+            case RUNNING:
+                automationComposition.setState(AutomationCompositionState.RUNNING2PASSIVE);
+                automationCompositionStateChangePublisher.send(automationComposition,
+                    getFirstStartPhase(automationComposition));
+                break;
+
+            default:
+                exceptionOccured(Response.Status.NOT_ACCEPTABLE, AUTOMATION_COMPOSITION_CANNOT_TRANSITION_FROM_STATE
+                    + automationComposition.getState().name() + TO_STATE + automationComposition.getOrderedState());
+                break;
+        }
+    }
+
+    private void superviseAutomationCompositionActivation(AutomationComposition automationComposition)
+        throws AutomationCompositionException {
+        switch (automationComposition.getState()) {
+            case RUNNING:
+                exceptionOccured(Response.Status.NOT_ACCEPTABLE,
+                    AUTOMATION_COMPOSITION_IS_ALREADY_IN_STATE + automationComposition.getState().name());
+                break;
+
+            case PASSIVE2RUNNING:
+                exceptionOccured(Response.Status.NOT_ACCEPTABLE,
+                    AUTOMATION_COMPOSITION_IS_ALREADY_IN_STATE + automationComposition.getState().name()
+                        + AND_TRANSITIONING_TO_STATE + automationComposition.getOrderedState());
+                break;
+
+            case PASSIVE:
+                automationComposition.setState(AutomationCompositionState.PASSIVE2RUNNING);
+                automationCompositionStateChangePublisher.send(automationComposition,
+                    getFirstStartPhase(automationComposition));
+                break;
+
+            default:
+                exceptionOccured(Response.Status.NOT_ACCEPTABLE, AUTOMATION_COMPOSITION_CANNOT_TRANSITION_FROM_STATE
+                    + automationComposition.getState().name() + TO_STATE + automationComposition.getOrderedState());
+                break;
+        }
+    }
+
+    private int getFirstStartPhase(AutomationComposition automationComposition) {
+        ToscaServiceTemplate toscaServiceTemplate = null;
+        try {
+            toscaServiceTemplate = serviceTemplateProvider.getAllServiceTemplates().get(0);
+        } catch (PfModelException e) {
+            throw new PfModelRuntimeException(Status.BAD_REQUEST, "Canont load ToscaServiceTemplate from DB", e);
+        }
+        return ParticipantUtils.getFirstStartPhase(automationComposition, toscaServiceTemplate);
+    }
+
+    private void checkParticipant(ParticipantMessage participantMessage, ParticipantState participantState,
+        ParticipantHealthStatus healthStatus) throws AutomationCompositionException, PfModelException {
+        if (participantMessage.getParticipantId() == null) {
+            exceptionOccured(Response.Status.NOT_FOUND, "Participant ID on PARTICIPANT_STATUS message is null");
+        }
+        var participantOpt = participantProvider.findParticipant(participantMessage.getParticipantId().getName(),
+            participantMessage.getParticipantId().getVersion());
+
+        if (participantOpt.isEmpty()) {
+            var participant = new Participant();
+            participant.setName(participantMessage.getParticipantId().getName());
+            participant.setVersion(participantMessage.getParticipantId().getVersion());
+            participant.setDefinition(participantMessage.getParticipantId());
+            participant.setParticipantType(participantMessage.getParticipantType());
+            participant.setParticipantState(participantState);
+            participant.setHealthStatus(healthStatus);
+
+            participantProvider.saveParticipant(participant);
+        } else {
+            var participant = participantOpt.get();
+            participant.setParticipantState(participantState);
+            participant.setHealthStatus(healthStatus);
+
+            participantProvider.saveParticipant(participant);
+        }
+    }
+
+    private void superviseParticipant(ParticipantStatus participantStatusMessage)
+        throws PfModelException, AutomationCompositionException {
+
+        checkParticipant(participantStatusMessage, participantStatusMessage.getState(),
+            participantStatusMessage.getHealthStatus());
+
+        monitoringProvider.createParticipantStatistics(List.of(participantStatusMessage.getParticipantStatistics()));
+    }
+
+    private void superviseAutomationCompositions(ParticipantStatus participantStatusMessage)
+        throws PfModelException, AutomationCompositionException {
+        if (participantStatusMessage.getAutomationCompositionInfoList() != null) {
+            for (AutomationCompositionInfo acEntry : participantStatusMessage.getAutomationCompositionInfoList()) {
+                var dbAutomationComposition = automationCompositionProvider
+                    .getAutomationComposition(new ToscaConceptIdentifier(acEntry.getAutomationCompositionId()));
+                if (dbAutomationComposition == null) {
+                    exceptionOccured(Response.Status.NOT_FOUND,
+                        "PARTICIPANT_STATUS automation composition not found in database: "
+                            + acEntry.getAutomationCompositionId());
+                }
+                dbAutomationComposition.setState(acEntry.getState());
+                monitoringProvider.createAcElementStatistics(
+                    acEntry.getAutomationCompositionStatistics().getAcElementStatisticsList().getAcElementStatistics());
+            }
+        }
+    }
+
+    private void exceptionOccured(Response.Status status, String reason) throws AutomationCompositionException {
+        throw new AutomationCompositionException(status, reason);
+    }
+}
diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScanner.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScanner.java
new file mode 100644 (file)
index 0000000..ce7195d
--- /dev/null
@@ -0,0 +1,307 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.runtime.supervision;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.commons.lang3.tuple.Pair;
+import org.onap.policy.clamp.acm.runtime.main.parameters.AcRuntimeParameterGroup;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionStateChangePublisher;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionUpdatePublisher;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantStatusReqPublisher;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantUpdatePublisher;
+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.AutomationCompositionState;
+import org.onap.policy.clamp.models.acm.concepts.Participant;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantUtils;
+import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ServiceTemplateProvider;
+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;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+/**
+ * This class is used to scan the automation compositions in the database and check if they are in the correct state.
+ */
+@Component
+public class SupervisionScanner {
+    private static final Logger LOGGER = LoggerFactory.getLogger(SupervisionScanner.class);
+
+    private final HandleCounter<ToscaConceptIdentifier> automationCompositionCounter = new HandleCounter<>();
+    private final HandleCounter<ToscaConceptIdentifier> participantStatusCounter = new HandleCounter<>();
+    private final HandleCounter<Pair<ToscaConceptIdentifier, ToscaConceptIdentifier>> participantUpdateCounter =
+        new HandleCounter<>();
+
+    private final Map<ToscaConceptIdentifier, Integer> phaseMap = new HashMap<>();
+
+    private final AutomationCompositionProvider automationCompositionProvider;
+    private final ServiceTemplateProvider serviceTemplateProvider;
+    private final AutomationCompositionStateChangePublisher automationCompositionStateChangePublisher;
+    private final AutomationCompositionUpdatePublisher automationCompositionUpdatePublisher;
+    private final ParticipantProvider participantProvider;
+    private final ParticipantStatusReqPublisher participantStatusReqPublisher;
+    private final ParticipantUpdatePublisher participantUpdatePublisher;
+
+    /**
+     * Constructor for instantiating SupervisionScanner.
+     *
+     * @param automationCompositionProvider the provider to use to read automation compositions from the database
+     * @param serviceTemplateProvider the Policy Models Provider
+     * @param automationCompositionStateChangePublisher the AutomationComposition StateChange Publisher
+     * @param automationCompositionUpdatePublisher the AutomationCompositionUpdate Publisher
+     * @param participantProvider the Participant Provider
+     * @param participantStatusReqPublisher the Participant StatusReq Publisher
+     * @param participantUpdatePublisher the Participant Update Publisher
+     * @param acRuntimeParameterGroup the parameters for the automation composition runtime
+     */
+    public SupervisionScanner(final AutomationCompositionProvider automationCompositionProvider,
+        ServiceTemplateProvider serviceTemplateProvider,
+        final AutomationCompositionStateChangePublisher automationCompositionStateChangePublisher,
+        AutomationCompositionUpdatePublisher automationCompositionUpdatePublisher,
+        ParticipantProvider participantProvider, ParticipantStatusReqPublisher participantStatusReqPublisher,
+        ParticipantUpdatePublisher participantUpdatePublisher, final AcRuntimeParameterGroup acRuntimeParameterGroup) {
+        this.automationCompositionProvider = automationCompositionProvider;
+        this.serviceTemplateProvider = serviceTemplateProvider;
+        this.automationCompositionStateChangePublisher = automationCompositionStateChangePublisher;
+        this.automationCompositionUpdatePublisher = automationCompositionUpdatePublisher;
+        this.participantProvider = participantProvider;
+        this.participantStatusReqPublisher = participantStatusReqPublisher;
+        this.participantUpdatePublisher = participantUpdatePublisher;
+
+        automationCompositionCounter.setMaxRetryCount(
+            acRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().getMaxRetryCount());
+        automationCompositionCounter
+            .setMaxWaitMs(acRuntimeParameterGroup.getParticipantParameters().getMaxStatusWaitMs());
+
+        participantUpdateCounter.setMaxRetryCount(
+            acRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().getMaxRetryCount());
+        participantUpdateCounter
+            .setMaxWaitMs(acRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().getMaxWaitMs());
+
+        participantStatusCounter.setMaxRetryCount(
+            acRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().getMaxRetryCount());
+        participantStatusCounter.setMaxWaitMs(acRuntimeParameterGroup.getParticipantParameters().getMaxStatusWaitMs());
+    }
+
+    /**
+     * Run Scanning.
+     *
+     * @param counterCheck if true activate counter and retry
+     */
+    public void run(boolean counterCheck) {
+        LOGGER.debug("Scanning automation compositions in the database . . .");
+
+        if (counterCheck) {
+            try {
+                for (var participant : participantProvider.getParticipants()) {
+                    scanParticipantStatus(participant);
+                }
+            } catch (PfModelException pfme) {
+                LOGGER.warn("error reading participant from database", pfme);
+                return;
+            }
+        }
+
+        try {
+            var list = serviceTemplateProvider.getAllServiceTemplates();
+            if (list != null && !list.isEmpty()) {
+                ToscaServiceTemplate toscaServiceTemplate = list.get(0);
+
+                for (AutomationComposition automationComposition : automationCompositionProvider
+                    .getAutomationCompositions()) {
+                    scanAutomationComposition(automationComposition, toscaServiceTemplate, counterCheck);
+                }
+            }
+        } catch (PfModelException pfme) {
+            LOGGER.warn("error reading automation compositions from database", pfme);
+        }
+
+        if (counterCheck) {
+            scanParticipantUpdate();
+        }
+
+        LOGGER.debug("Automation composition scan complete . . .");
+    }
+
+    private void scanParticipantUpdate() {
+        LOGGER.debug("Scanning participants to update . . .");
+
+        for (var id : participantUpdateCounter.keySet()) {
+            if (participantUpdateCounter.isFault(id)) {
+                LOGGER.debug("report Participant Update fault");
+
+            } else if (participantUpdateCounter.getDuration(id) > participantUpdateCounter.getMaxWaitMs()) {
+
+                if (participantUpdateCounter.count(id)) {
+                    LOGGER.debug("retry message ParticipantUpdate");
+                    participantUpdatePublisher.sendCommissioning(null, null, id.getLeft(), id.getRight());
+                } else {
+                    LOGGER.debug("report Participant Update fault");
+                    participantUpdateCounter.setFault(id);
+                }
+            }
+        }
+
+        LOGGER.debug("Participants to update scan complete . . .");
+    }
+
+    private void scanParticipantStatus(Participant participant) throws PfModelException {
+        ToscaConceptIdentifier id = participant.getKey().asIdentifier();
+        if (participantStatusCounter.isFault(id)) {
+            LOGGER.debug("report Participant fault");
+            return;
+        }
+        if (participantStatusCounter.getDuration(id) > participantStatusCounter.getMaxWaitMs()) {
+            if (participantStatusCounter.count(id)) {
+                LOGGER.debug("retry message ParticipantStatusReq");
+                participantStatusReqPublisher.send(id);
+                participant.setHealthStatus(ParticipantHealthStatus.NOT_HEALTHY);
+            } else {
+                LOGGER.debug("report Participant fault");
+                participantStatusCounter.setFault(id);
+                participant.setHealthStatus(ParticipantHealthStatus.OFF_LINE);
+            }
+            participantProvider.saveParticipant(participant);
+        }
+    }
+
+    /**
+     * handle participant Status message.
+     */
+    public void handleParticipantStatus(ToscaConceptIdentifier id) {
+        participantStatusCounter.clear(id);
+    }
+
+    public void handleParticipantRegister(Pair<ToscaConceptIdentifier, ToscaConceptIdentifier> id) {
+        participantUpdateCounter.clear(id);
+    }
+
+    public void handleParticipantUpdateAck(Pair<ToscaConceptIdentifier, ToscaConceptIdentifier> id) {
+        participantUpdateCounter.remove(id);
+    }
+
+    private void scanAutomationComposition(final AutomationComposition automationComposition,
+        ToscaServiceTemplate toscaServiceTemplate, boolean counterCheck) throws PfModelException {
+        LOGGER.debug("scanning automation composition {} . . .", automationComposition.getKey().asIdentifier());
+
+        if (automationComposition.getState().equals(automationComposition.getOrderedState().asState())) {
+            LOGGER.debug("automation composition {} scanned, OK", automationComposition.getKey().asIdentifier());
+
+            // Clear missed report counter on automation composition
+            clearFaultAndCounter(automationComposition);
+            return;
+        }
+
+        var completed = true;
+        var minSpNotCompleted = 1000; // min startPhase not completed
+        var maxSpNotCompleted = 0; // max startPhase not completed
+        var defaultMin = 1000; // min startPhase
+        var defaultMax = 0; // max startPhase
+        for (AutomationCompositionElement element : automationComposition.getElements().values()) {
+            ToscaNodeTemplate toscaNodeTemplate = toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates()
+                .get(element.getDefinition().getName());
+            int startPhase = ParticipantUtils.findStartPhase(toscaNodeTemplate.getProperties());
+            defaultMin = Math.min(defaultMin, startPhase);
+            defaultMax = Math.max(defaultMax, startPhase);
+            if (!element.getState().equals(element.getOrderedState().asState())) {
+                completed = false;
+                minSpNotCompleted = Math.min(minSpNotCompleted, startPhase);
+                maxSpNotCompleted = Math.max(maxSpNotCompleted, startPhase);
+            }
+        }
+
+        if (completed) {
+            LOGGER.debug("automation composition scan: transition from state {} to {} completed",
+                automationComposition.getState(), automationComposition.getOrderedState());
+
+            automationComposition.setState(automationComposition.getOrderedState().asState());
+            automationCompositionProvider.saveAutomationComposition(automationComposition);
+
+            // Clear missed report counter on automation composition
+            clearFaultAndCounter(automationComposition);
+        } else {
+            LOGGER.debug("automation composition scan: transition from state {} to {} not completed",
+                automationComposition.getState(), automationComposition.getOrderedState());
+
+            var nextSpNotCompleted =
+                AutomationCompositionState.UNINITIALISED2PASSIVE.equals(automationComposition.getState())
+                    || AutomationCompositionState.PASSIVE2RUNNING.equals(automationComposition.getState())
+                        ? minSpNotCompleted
+                        : maxSpNotCompleted;
+
+            var firstStartPhase =
+                AutomationCompositionState.UNINITIALISED2PASSIVE.equals(automationComposition.getState())
+                    || AutomationCompositionState.PASSIVE2RUNNING.equals(automationComposition.getState()) ? defaultMin
+                        : defaultMax;
+
+            if (nextSpNotCompleted != phaseMap.getOrDefault(automationComposition.getKey().asIdentifier(),
+                firstStartPhase)) {
+                phaseMap.put(automationComposition.getKey().asIdentifier(), nextSpNotCompleted);
+                sendAutomationCompositionMsg(automationComposition, nextSpNotCompleted);
+            } else if (counterCheck) {
+                phaseMap.put(automationComposition.getKey().asIdentifier(), nextSpNotCompleted);
+                handleCounter(automationComposition, nextSpNotCompleted);
+            }
+        }
+    }
+
+    private void clearFaultAndCounter(AutomationComposition automationComposition) {
+        automationCompositionCounter.clear(automationComposition.getKey().asIdentifier());
+        phaseMap.clear();
+    }
+
+    private void handleCounter(AutomationComposition automationComposition, int startPhase) {
+        ToscaConceptIdentifier id = automationComposition.getKey().asIdentifier();
+        if (automationCompositionCounter.isFault(id)) {
+            LOGGER.debug("report AutomationComposition fault");
+            return;
+        }
+
+        if (automationCompositionCounter.getDuration(id) > automationCompositionCounter.getMaxWaitMs()) {
+            if (automationCompositionCounter.count(id)) {
+                phaseMap.put(id, startPhase);
+                sendAutomationCompositionMsg(automationComposition, startPhase);
+            } else {
+                LOGGER.debug("report AutomationComposition fault");
+                automationCompositionCounter.setFault(id);
+            }
+        }
+    }
+
+    private void sendAutomationCompositionMsg(AutomationComposition automationComposition, int startPhase) {
+        if (AutomationCompositionState.UNINITIALISED2PASSIVE.equals(automationComposition.getState())) {
+            LOGGER.debug("retry message AutomationCompositionUpdate");
+            automationCompositionUpdatePublisher.send(automationComposition, startPhase);
+        } else {
+            LOGGER.debug("retry message AutomationCompositionStateChange");
+            automationCompositionStateChangePublisher.send(automationComposition, startPhase);
+        }
+    }
+}
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.supervision.comm;
+package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
 import java.util.List;
 import javax.ws.rs.core.Response.Status;
-import org.onap.policy.clamp.controlloop.common.exception.ControlLoopRuntimeException;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantAckMessage;
-import org.onap.policy.clamp.controlloop.runtime.config.messaging.Publisher;
+import org.onap.policy.clamp.acm.runtime.config.messaging.Publisher;
+import org.onap.policy.clamp.common.acm.exception.AutomationCompositionRuntimeException;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantAckMessage;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
 import org.onap.policy.common.endpoints.event.comm.client.TopicSinkClient;
 
@@ -40,7 +40,7 @@ public abstract class AbstractParticipantAckPublisher<E extends ParticipantAckMe
      */
     public void send(final E participantMessage) {
         if (!active) {
-            throw new ControlLoopRuntimeException(Status.NOT_ACCEPTABLE, "Not Active!");
+            throw new AutomationCompositionRuntimeException(Status.NOT_ACCEPTABLE, "Not Active!");
         }
         topicSinkClient.send(participantMessage);
     }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.supervision.comm;
+package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
 import java.util.List;
 import javax.ws.rs.core.Response.Status;
-import org.onap.policy.clamp.controlloop.common.exception.ControlLoopRuntimeException;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessage;
-import org.onap.policy.clamp.controlloop.runtime.config.messaging.Publisher;
+import org.onap.policy.clamp.acm.runtime.config.messaging.Publisher;
+import org.onap.policy.clamp.common.acm.exception.AutomationCompositionRuntimeException;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessage;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
 import org.onap.policy.common.endpoints.event.comm.client.TopicSinkClient;
 
@@ -40,7 +40,7 @@ public abstract class AbstractParticipantPublisher<E extends ParticipantMessage>
      */
     public void send(final E participantMessage) {
         if (!active) {
-            throw new ControlLoopRuntimeException(Status.NOT_ACCEPTABLE, "Not Active!");
+            throw new AutomationCompositionRuntimeException(Status.NOT_ACCEPTABLE, "Not Active!");
         }
         topicSinkClient.send(participantMessage);
     }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.supervision.comm;
+package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopAck;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.runtime.config.messaging.Listener;
-import org.onap.policy.clamp.controlloop.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.acm.runtime.config.messaging.Listener;
+import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.common.endpoints.listeners.ScoListener;
 import org.onap.policy.common.utils.coder.StandardCoderObject;
@@ -33,36 +33,38 @@ import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
 /**
- * Listener for ControlLoopUpdateAck messages sent by participants.
+ * Listener for AutomationCompositionStateChangeAck messages sent by participants.
  */
 @Component
-public class ControlLoopUpdateAckListener extends ScoListener<ControlLoopAck> implements Listener<ControlLoopAck> {
-    private static final Logger LOGGER = LoggerFactory.getLogger(ControlLoopUpdateAckListener.class);
+public class AutomationCompositionStateChangeAckListener extends ScoListener<AutomationCompositionAck>
+    implements Listener<AutomationCompositionAck> {
+    private static final Logger LOGGER = LoggerFactory.getLogger(AutomationCompositionStateChangeAckListener.class);
 
     private final SupervisionHandler supervisionHandler;
 
     /**
      * Constructs the object.
      */
-    public ControlLoopUpdateAckListener(SupervisionHandler supervisionHandler) {
-        super(ControlLoopAck.class);
+    public AutomationCompositionStateChangeAckListener(SupervisionHandler supervisionHandler) {
+        super(AutomationCompositionAck.class);
         this.supervisionHandler = supervisionHandler;
     }
 
     @Override
     public void onTopicEvent(final CommInfrastructure infra, final String topic, final StandardCoderObject sco,
-            final ControlLoopAck controlLoopUpdateAckMessage) {
-        LOGGER.debug("ControlLoopUpdateAck message received from participant - {}", controlLoopUpdateAckMessage);
-        supervisionHandler.handleControlLoopUpdateAckMessage(controlLoopUpdateAckMessage);
+        final AutomationCompositionAck automationCompositionStateChangeAckMessage) {
+        LOGGER.debug("AutomationCompositionStateChangeAck received from participant - {}",
+            automationCompositionStateChangeAckMessage);
+        supervisionHandler.handleAutomationCompositionStateChangeAckMessage(automationCompositionStateChangeAckMessage);
     }
 
     @Override
-    public ScoListener<ControlLoopAck> getScoListener() {
+    public ScoListener<AutomationCompositionAck> getScoListener() {
         return this;
     }
 
     @Override
     public String getType() {
-        return ParticipantMessageType.CONTROLLOOP_UPDATE_ACK.name();
+        return ParticipantMessageType.AUTOMATION_COMPOSITION_STATECHANGE_ACK.name();
     }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.supervision.comm;
+package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
 import java.util.UUID;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopStateChange;
+import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionStateChange;
 import org.springframework.stereotype.Component;
 
 /**
- * This class is used to send ControlLoopStateChangePublisher messages to participants on DMaaP.
+ * This class is used to send AutomationCompositionStateChangePublisher messages to participants on DMaaP.
  */
 @Component
-public class ControlLoopStateChangePublisher
-        extends AbstractParticipantPublisher<ControlLoopStateChange> {
+public class AutomationCompositionStateChangePublisher
+        extends AbstractParticipantPublisher<AutomationCompositionStateChange> {
 
     /**
-     * Send ControlLoopStateChange to Participant.
+     * Send AutomationCompositionStateChange to Participant.
      *
-     * @param controlLoop the ControlLoop
+     * @param automationComposition the AutomationComposition
      * @param startPhase the startPhase
      */
-    public void send(ControlLoop controlLoop, int startPhase) {
-        var clsc = new ControlLoopStateChange();
-        clsc.setControlLoopId(controlLoop.getKey().asIdentifier());
-        clsc.setMessageId(UUID.randomUUID());
-        clsc.setOrderedState(controlLoop.getOrderedState());
-        clsc.setStartPhase(startPhase);
+    public void send(AutomationComposition automationComposition, int startPhase) {
+        var acsc = new AutomationCompositionStateChange();
+        acsc.setAutomationCompositionId(automationComposition.getKey().asIdentifier());
+        acsc.setMessageId(UUID.randomUUID());
+        acsc.setOrderedState(automationComposition.getOrderedState());
+        acsc.setStartPhase(startPhase);
 
-        super.send(clsc);
+        super.send(acsc);
     }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.supervision.comm;
+package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopAck;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.runtime.config.messaging.Listener;
-import org.onap.policy.clamp.controlloop.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.acm.runtime.config.messaging.Listener;
+import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.common.endpoints.listeners.ScoListener;
 import org.onap.policy.common.utils.coder.StandardCoderObject;
@@ -33,36 +33,38 @@ import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
 /**
- * Listener for ControlLoopStateChangeAck messages sent by participants.
+ * Listener for AutomationCompositionUpdateAck messages sent by participants.
  */
 @Component
-public class ControlLoopStateChangeAckListener extends ScoListener<ControlLoopAck> implements Listener<ControlLoopAck> {
-    private static final Logger LOGGER = LoggerFactory.getLogger(ControlLoopStateChangeAckListener.class);
+public class AutomationCompositionUpdateAckListener extends ScoListener<AutomationCompositionAck>
+    implements Listener<AutomationCompositionAck> {
+    private static final Logger LOGGER = LoggerFactory.getLogger(AutomationCompositionUpdateAckListener.class);
 
     private final SupervisionHandler supervisionHandler;
 
     /**
      * Constructs the object.
      */
-    public ControlLoopStateChangeAckListener(SupervisionHandler supervisionHandler) {
-        super(ControlLoopAck.class);
+    public AutomationCompositionUpdateAckListener(SupervisionHandler supervisionHandler) {
+        super(AutomationCompositionAck.class);
         this.supervisionHandler = supervisionHandler;
     }
 
     @Override
     public void onTopicEvent(final CommInfrastructure infra, final String topic, final StandardCoderObject sco,
-            final ControlLoopAck controlLoopStateChangeAckMessage) {
-        LOGGER.debug("ControlLoopStateChangeAck received from participant - {}", controlLoopStateChangeAckMessage);
-        supervisionHandler.handleControlLoopStateChangeAckMessage(controlLoopStateChangeAckMessage);
+        final AutomationCompositionAck automationCompositionUpdateAckMessage) {
+        LOGGER.debug("AutomationCompositionUpdateAck message received from participant - {}",
+            automationCompositionUpdateAckMessage);
+        supervisionHandler.handleAutomationCompositionUpdateAckMessage(automationCompositionUpdateAckMessage);
     }
 
     @Override
-    public ScoListener<ControlLoopAck> getScoListener() {
+    public ScoListener<AutomationCompositionAck> getScoListener() {
         return this;
     }
 
     @Override
     public String getType() {
-        return ParticipantMessageType.CONTROLLOOP_STATECHANGE_ACK.name();
+        return ParticipantMessageType.AUTOMATION_COMPOSITION_UPDATE_ACK.name();
     }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.supervision.comm;
+package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
 import java.time.Instant;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 import lombok.AllArgsConstructor;
-import org.onap.policy.clamp.controlloop.common.utils.CommonUtils;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantUpdates;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ServiceTemplateProvider;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopUpdate;
+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.ParticipantUpdates;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionUpdate;
+import org.onap.policy.clamp.models.acm.persistence.provider.ServiceTemplateProvider;
+import org.onap.policy.clamp.models.acm.utils.AcmUtils;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 import org.slf4j.Logger;
@@ -40,36 +40,36 @@ import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
 /**
- * This class is used to send ControlLoopUpdate messages to participants on DMaaP.
+ * This class is used to send AutomationCompositionUpdate messages to participants on DMaaP.
  */
 @Component
 @AllArgsConstructor
-public class ControlLoopUpdatePublisher extends AbstractParticipantPublisher<ControlLoopUpdate> {
+public class AutomationCompositionUpdatePublisher extends AbstractParticipantPublisher<AutomationCompositionUpdate> {
 
-    private static final Logger LOGGER = LoggerFactory.getLogger(ControlLoopUpdatePublisher.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(AutomationCompositionUpdatePublisher.class);
     private final ServiceTemplateProvider serviceTemplateProvider;
 
     /**
-     * Send ControlLoopUpdate to Participant.
+     * Send AutomationCompositionUpdate to Participant.
      *
-     * @param controlLoop the ControlLoop
+     * @param automationComposition the AutomationComposition
      */
-    public void send(ControlLoop controlLoop) {
-        send(controlLoop, 0);
+    public void send(AutomationComposition automationComposition) {
+        send(automationComposition, 0);
     }
 
     /**
-     * Send ControlLoopUpdate to Participant.
+     * Send AutomationCompositionUpdate to Participant.
      *
-     * @param controlLoop the ControlLoop
+     * @param automationComposition the AutomationComposition
      * @param startPhase the Start Phase
      */
-    public void send(ControlLoop controlLoop, int startPhase) {
-        var controlLoopUpdateMsg = new ControlLoopUpdate();
-        controlLoopUpdateMsg.setStartPhase(startPhase);
-        controlLoopUpdateMsg.setControlLoopId(controlLoop.getKey().asIdentifier());
-        controlLoopUpdateMsg.setMessageId(UUID.randomUUID());
-        controlLoopUpdateMsg.setTimestamp(Instant.now());
+    public void send(AutomationComposition automationComposition, int startPhase) {
+        var automationCompositionUpdateMsg = new AutomationCompositionUpdate();
+        automationCompositionUpdateMsg.setStartPhase(startPhase);
+        automationCompositionUpdateMsg.setAutomationCompositionId(automationComposition.getKey().asIdentifier());
+        automationCompositionUpdateMsg.setMessageId(UUID.randomUUID());
+        automationCompositionUpdateMsg.setTimestamp(Instant.now());
         ToscaServiceTemplate toscaServiceTemplate;
         try {
             toscaServiceTemplate = serviceTemplateProvider.getAllServiceTemplates().get(0);
@@ -79,13 +79,13 @@ public class ControlLoopUpdatePublisher extends AbstractParticipantPublisher<Con
         }
 
         List<ParticipantUpdates> participantUpdates = new ArrayList<>();
-        for (ControlLoopElement element : controlLoop.getElements().values()) {
-            CommonUtils.setServiceTemplatePolicyInfo(element, toscaServiceTemplate);
-            CommonUtils.prepareParticipantUpdate(element, participantUpdates);
+        for (AutomationCompositionElement element : automationComposition.getElements().values()) {
+            AcmUtils.setServiceTemplatePolicyInfo(element, toscaServiceTemplate);
+            AcmUtils.prepareParticipantUpdate(element, participantUpdates);
         }
-        controlLoopUpdateMsg.setParticipantUpdatesList(participantUpdates);
+        automationCompositionUpdateMsg.setParticipantUpdatesList(participantUpdates);
 
-        LOGGER.debug("ControlLoopUpdate message sent {}", controlLoopUpdateMsg);
-        super.send(controlLoopUpdateMsg);
+        LOGGER.debug("AutomationCompositionUpdate message sent {}", automationCompositionUpdateMsg);
+        super.send(automationCompositionUpdateMsg);
     }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.supervision.comm;
+package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
 import java.util.UUID;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregisterAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregisterAck;
 import org.springframework.stereotype.Component;
 
 /**
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.supervision.comm;
+package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregister;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.runtime.config.messaging.Listener;
-import org.onap.policy.clamp.controlloop.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.acm.runtime.config.messaging.Listener;
+import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.common.endpoints.listeners.ScoListener;
 import org.onap.policy.common.utils.coder.StandardCoderObject;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.supervision.comm;
+package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
 import java.util.UUID;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegisterAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegisterAck;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.springframework.stereotype.Component;
 
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.supervision.comm;
+package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegister;
-import org.onap.policy.clamp.controlloop.runtime.config.messaging.Listener;
-import org.onap.policy.clamp.controlloop.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.acm.runtime.config.messaging.Listener;
+import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.common.endpoints.listeners.ScoListener;
 import org.onap.policy.common.utils.coder.StandardCoderObject;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.supervision.comm;
+package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatus;
-import org.onap.policy.clamp.controlloop.runtime.config.messaging.Listener;
-import org.onap.policy.clamp.controlloop.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.acm.runtime.config.messaging.Listener;
+import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.common.endpoints.listeners.ScoListener;
 import org.onap.policy.common.utils.coder.StandardCoderObject;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.supervision.comm;
+package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
 import java.time.Instant;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatusReq;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatusReq;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.supervision.comm;
+package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdateAck;
-import org.onap.policy.clamp.controlloop.runtime.config.messaging.Listener;
-import org.onap.policy.clamp.controlloop.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.acm.runtime.config.messaging.Listener;
+import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantUpdateAck;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.common.endpoints.listeners.ScoListener;
 import org.onap.policy.common.utils.coder.StandardCoderObject;
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.supervision.comm;
+package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
 import java.time.Instant;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import lombok.AllArgsConstructor;
-import org.onap.policy.clamp.controlloop.common.utils.CommonUtils;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantDefinition;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantUtils;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ServiceTemplateProvider;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdate;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantDefinition;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantUtils;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantUpdate;
+import org.onap.policy.clamp.models.acm.persistence.provider.ServiceTemplateProvider;
+import org.onap.policy.clamp.models.acm.utils.AcmUtils;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeType;
@@ -96,16 +96,16 @@ public class ParticipantUpdatePublisher extends AbstractParticipantPublisher<Par
 
         List<ParticipantDefinition> participantDefinitionUpdates = new ArrayList<>();
         for (var toscaInputEntry : toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates().entrySet()) {
-            if (ParticipantUtils.checkIfNodeTemplateIsControlLoopElement(toscaInputEntry.getValue(),
+            if (ParticipantUtils.checkIfNodeTemplateIsAutomationCompositionElement(toscaInputEntry.getValue(),
                     toscaServiceTemplate)) {
-                CommonUtils.prepareParticipantDefinitionUpdate(
+                AcmUtils.prepareParticipantDefinitionUpdate(
                     ParticipantUtils.findParticipantType(toscaInputEntry.getValue().getProperties()),
                     toscaInputEntry.getKey(), toscaInputEntry.getValue(),
                     participantDefinitionUpdates, commonPropertiesMap);
             }
         }
 
-        // Commission the controlloop but sending participantdefinitions to participants
+        // Commission the automation composition but sending participantdefinitions to participants
         message.setParticipantDefinitionUpdates(participantDefinitionUpdates);
         LOGGER.debug("Participant Update sent {}", message);
         super.send(message);
@@ -118,7 +118,7 @@ public class ParticipantUpdatePublisher extends AbstractParticipantPublisher<Par
     public void sendDecomisioning() {
         var message = new ParticipantUpdate();
         message.setTimestamp(Instant.now());
-        // DeCommission the controlloop but deleting participantdefinitions on participants
+        // DeCommission the automation composition but deleting participantdefinitions on participants
         message.setParticipantDefinitionUpdates(null);
 
         LOGGER.debug("Participant Update sent {}", message);
@@ -7,7 +7,7 @@ spring:
     converters:
       preferred-json-mapper: gson
   datasource:
-    url: jdbc:mariadb://${mariadb.host:localhost}:${mariadb.port:3306}/controlloop
+    url: jdbc:mariadb://${mariadb.host:localhost}:${mariadb.port:3306}/clamp-acm
     driverClassName: org.mariadb.jdbc.Driver
     username: policy
     password: P01icY
@@ -33,11 +33,10 @@ security:
 server:
   port: 6969
   servlet:
-    context-path: /onap/controlloop
+    context-path: /onap/policy/clamp/acm
   error:
     path: /error
 
-
 runtime:
   participantParameters:
     heartBeatMs: 20000
@@ -48,14 +47,14 @@ runtime:
   topicParameterGroup:
     topicSources:
       -
-        topic: POLICY-CLRUNTIME-PARTICIPANT
+        topic: POLICY-ACRUNTIME-PARTICIPANT
         servers:
           - ${topicServer:localhost}
         topicCommInfrastructure: dmaap
         fetchTimeout: 15000
     topicSinks:
       -
-        topic: POLICY-CLRUNTIME-PARTICIPANT
+        topic: POLICY-ACRUNTIME-PARTICIPANT
         servers:
           - ${topicServer:localhost}
         topicCommInfrastructure: dmaap
@@ -1,4 +1,4 @@
-ONAP Tosca defined control loop
+ONAP Tosca defined automation composition
 Version: ${project.version}
 Built (UTC): ${maven.build.timestamp}
 ONAP https://wiki.onap.org
@@ -19,7 +19,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.commissioning;
+package org.onap.policy.clamp.acm.runtime.commissioning;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
@@ -34,10 +34,10 @@ import com.fasterxml.jackson.module.jsonSchema.factories.SchemaFactoryWrapper;
 import java.util.List;
 import java.util.Map;
 import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ControlLoopProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ServiceTemplateProvider;
-import org.onap.policy.clamp.controlloop.runtime.instantiation.InstantiationUtils;
+import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
+import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ServiceTemplateProvider;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaCapabilityType;
@@ -52,65 +52,65 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
 
 class CommissioningProviderTest {
     private static final String TOSCA_SERVICE_TEMPLATE_YAML =
-            "src/test/resources/rest/servicetemplates/pmsh_multiple_cl_tosca.yaml";
+        "src/test/resources/rest/servicetemplates/pmsh_multiple_ac_tosca.yaml";
     private static final String COMMON_TOSCA_SERVICE_TEMPLATE_YAML =
-            "src/test/resources/rest/servicetemplates/full-tosca-with-common-properties.yaml";
+        "src/test/resources/rest/servicetemplates/full-tosca-with-common-properties.yaml";
 
     private static final Coder CODER = new StandardCoder();
     private final ObjectMapper mapper = new ObjectMapper();
 
     /**
-     * Test the fetching of control loop definitions (ToscaServiceTemplates).
+     * Test the fetching of automation composition definitions (ToscaServiceTemplates).
      *
      * @throws Exception .
      */
     @Test
-    void testGetControlLoopDefinitions() throws Exception {
-        var clProvider = mock(ControlLoopProvider.class);
+    void testGetAutomationCompositionDefinitions() throws Exception {
+        var acProvider = mock(AutomationCompositionProvider.class);
         var participantProvider = mock(ParticipantProvider.class);
         var serviceTemplateProvider = mock(ServiceTemplateProvider.class);
 
         CommissioningProvider provider =
-                new CommissioningProvider(serviceTemplateProvider, clProvider, null, participantProvider);
+            new CommissioningProvider(serviceTemplateProvider, acProvider, null, participantProvider);
 
-        List<ToscaNodeTemplate> listOfTemplates = provider.getControlLoopDefinitions(null, null);
+        List<ToscaNodeTemplate> listOfTemplates = provider.getAutomationCompositionDefinitions(null, null);
         assertThat(listOfTemplates).isEmpty();
 
-        when(clProvider.getFilteredNodeTemplates(any()))
-                .thenReturn(List.of(new ToscaNodeTemplate(), new ToscaNodeTemplate()));
-        listOfTemplates = provider.getControlLoopDefinitions(null, null);
+        when(acProvider.getFilteredNodeTemplates(any()))
+            .thenReturn(List.of(new ToscaNodeTemplate(), new ToscaNodeTemplate()));
+        listOfTemplates = provider.getAutomationCompositionDefinitions(null, null);
         assertThat(listOfTemplates).hasSize(2);
     }
 
     /**
-     * Test the creation of control loop definitions (ToscaServiceTemplates).
+     * Test the creation of automation composition definitions (ToscaServiceTemplates).
      *
      * @throws Exception .
      */
     @Test
-    void testCreateControlLoopDefinitions() throws Exception {
+    void testCreateAutomationCompositionDefinitions() throws Exception {
         var serviceTemplateProvider = mock(ServiceTemplateProvider.class);
-        var clProvider = mock(ControlLoopProvider.class);
+        var acProvider = mock(AutomationCompositionProvider.class);
         var participantProvider = mock(ParticipantProvider.class);
 
         CommissioningProvider provider =
-                new CommissioningProvider(serviceTemplateProvider, clProvider, null, participantProvider);
+            new CommissioningProvider(serviceTemplateProvider, acProvider, null, participantProvider);
 
-        List<ToscaNodeTemplate> listOfTemplates = provider.getControlLoopDefinitions(null, null);
+        List<ToscaNodeTemplate> listOfTemplates = provider.getAutomationCompositionDefinitions(null, null);
         assertThat(listOfTemplates).isEmpty();
 
         ToscaServiceTemplate serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
         when(serviceTemplateProvider.createServiceTemplate(serviceTemplate)).thenReturn(serviceTemplate);
 
         // Response should return the number of node templates present in the service template
-        List<ToscaConceptIdentifier> affectedDefinitions =
-                provider.createControlLoopDefinitions(serviceTemplate).getAffectedControlLoopDefinitions();
+        List<ToscaConceptIdentifier> affectedDefinitions = provider
+            .createAutomationCompositionDefinitions(serviceTemplate).getAffectedAutomationCompositionDefinitions();
         assertThat(affectedDefinitions).hasSize(13);
 
-        when(clProvider.getFilteredNodeTemplates(any()))
-                .thenReturn(List.of(new ToscaNodeTemplate(), new ToscaNodeTemplate()));
+        when(acProvider.getFilteredNodeTemplates(any()))
+            .thenReturn(List.of(new ToscaNodeTemplate(), new ToscaNodeTemplate()));
 
-        listOfTemplates = provider.getControlLoopDefinitions(null, null);
+        listOfTemplates = provider.getAutomationCompositionDefinitions(null, null);
         assertThat(listOfTemplates).hasSize(2);
     }
 
@@ -122,16 +122,16 @@ class CommissioningProviderTest {
     @Test
     void testGetToscaServiceTemplate() throws Exception {
         var serviceTemplateProvider = mock(ServiceTemplateProvider.class);
-        var clProvider = mock(ControlLoopProvider.class);
+        var acProvider = mock(AutomationCompositionProvider.class);
         var participantProvider = mock(ParticipantProvider.class);
 
         CommissioningProvider provider =
-                new CommissioningProvider(serviceTemplateProvider, clProvider, null, participantProvider);
+            new CommissioningProvider(serviceTemplateProvider, acProvider, null, participantProvider);
         ToscaServiceTemplate serviceTemplate =
-                InstantiationUtils.getToscaServiceTemplate(COMMON_TOSCA_SERVICE_TEMPLATE_YAML);
+            InstantiationUtils.getToscaServiceTemplate(COMMON_TOSCA_SERVICE_TEMPLATE_YAML);
         when(serviceTemplateProvider.createServiceTemplate(serviceTemplate)).thenReturn(serviceTemplate);
 
-        provider.createControlLoopDefinitions(serviceTemplate);
+        provider.createAutomationCompositionDefinitions(serviceTemplate);
         verify(serviceTemplateProvider).createServiceTemplate(serviceTemplate);
 
         when(serviceTemplateProvider.getToscaServiceTemplate(eq(null), eq(null))).thenReturn(serviceTemplate);
@@ -140,7 +140,7 @@ class CommissioningProviderTest {
         assertThat(returnedServiceTemplate).isNotNull();
 
         Map<String, ToscaNodeTemplate> nodeTemplates =
-                returnedServiceTemplate.getToscaTopologyTemplate().getNodeTemplates();
+            returnedServiceTemplate.getToscaTopologyTemplate().getNodeTemplates();
 
         assertThat(nodeTemplates).hasSize(8);
     }
@@ -153,16 +153,16 @@ class CommissioningProviderTest {
     @Test
     void testGetToscaServiceTemplateReduced() throws Exception {
         var serviceTemplateProvider = mock(ServiceTemplateProvider.class);
-        var clProvider = mock(ControlLoopProvider.class);
+        var acProvider = mock(AutomationCompositionProvider.class);
         var participantProvider = mock(ParticipantProvider.class);
 
         CommissioningProvider provider =
-                new CommissioningProvider(serviceTemplateProvider, clProvider, null, participantProvider);
+            new CommissioningProvider(serviceTemplateProvider, acProvider, null, participantProvider);
         ToscaServiceTemplate serviceTemplate =
-                InstantiationUtils.getToscaServiceTemplate(COMMON_TOSCA_SERVICE_TEMPLATE_YAML);
+            InstantiationUtils.getToscaServiceTemplate(COMMON_TOSCA_SERVICE_TEMPLATE_YAML);
         when(serviceTemplateProvider.createServiceTemplate(serviceTemplate)).thenReturn(serviceTemplate);
 
-        provider.createControlLoopDefinitions(serviceTemplate);
+        provider.createAutomationCompositionDefinitions(serviceTemplate);
 
         when(serviceTemplateProvider.getServiceTemplateList(any(), any())).thenReturn(List.of(serviceTemplate));
 
@@ -182,23 +182,23 @@ class CommissioningProviderTest {
     @Test
     void testGetToscaServiceTemplateSchema() throws Exception {
         var serviceTemplateProvider = mock(ServiceTemplateProvider.class);
-        var clProvider = mock(ControlLoopProvider.class);
+        var acProvider = mock(AutomationCompositionProvider.class);
         var participantProvider = mock(ParticipantProvider.class);
 
         CommissioningProvider provider =
-                new CommissioningProvider(serviceTemplateProvider, clProvider, null, participantProvider);
+            new CommissioningProvider(serviceTemplateProvider, acProvider, null, participantProvider);
         ToscaServiceTemplate serviceTemplate =
-                InstantiationUtils.getToscaServiceTemplate(COMMON_TOSCA_SERVICE_TEMPLATE_YAML);
+            InstantiationUtils.getToscaServiceTemplate(COMMON_TOSCA_SERVICE_TEMPLATE_YAML);
         when(serviceTemplateProvider.createServiceTemplate(serviceTemplate)).thenReturn(serviceTemplate);
 
-        provider.createControlLoopDefinitions(serviceTemplate);
+        provider.createAutomationCompositionDefinitions(serviceTemplate);
 
         mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
 
         Map<String, Class<?>> sections = Map.of("all", ToscaServiceTemplate.class, "data_types", ToscaDataType.class,
-                "capability_types", ToscaCapabilityType.class, "node_types", ToscaNodeType.class, "relationship_types",
-                ToscaRelationshipType.class, "policy_types", ToscaPolicyType.class, "topology_template",
-                ToscaTopologyTemplate.class, "node_templates", List.class);
+            "capability_types", ToscaCapabilityType.class, "node_types", ToscaNodeType.class, "relationship_types",
+            ToscaRelationshipType.class, "policy_types", ToscaPolicyType.class, "topology_template",
+            ToscaTopologyTemplate.class, "node_templates", List.class);
 
         for (Map.Entry<String, Class<?>> entry : sections.entrySet()) {
             String returnedServiceTemplateSchema = provider.getToscaServiceTemplateSchema(entry.getKey());
@@ -208,7 +208,7 @@ class CommissioningProviderTest {
 
             if (entry.getKey().equals("node_templates")) {
                 mapper.acceptJsonFormatVisitor(
-                        mapper.getTypeFactory().constructCollectionType(List.class, ToscaNodeTemplate.class), visitor);
+                    mapper.getTypeFactory().constructCollectionType(List.class, ToscaNodeTemplate.class), visitor);
             } else {
                 mapper.acceptJsonFormatVisitor(mapper.constructType(entry.getValue()), visitor);
             }
@@ -19,7 +19,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.commissioning.rest;
+package org.onap.policy.clamp.acm.runtime.commissioning.rest;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -39,10 +39,10 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.junit.jupiter.api.parallel.Execution;
 import org.junit.jupiter.api.parallel.ExecutionMode;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ServiceTemplateProvider;
-import org.onap.policy.clamp.controlloop.models.messages.rest.commissioning.CommissioningResponse;
-import org.onap.policy.clamp.controlloop.runtime.instantiation.InstantiationUtils;
-import org.onap.policy.clamp.controlloop.runtime.util.rest.CommonRestController;
+import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
+import org.onap.policy.clamp.acm.runtime.util.rest.CommonRestController;
+import org.onap.policy.clamp.models.acm.messages.rest.commissioning.CommissioningResponse;
+import org.onap.policy.clamp.models.acm.persistence.provider.ServiceTemplateProvider;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -59,9 +59,9 @@ import org.springframework.test.context.junit.jupiter.SpringExtension;
 class CommissioningControllerTest extends CommonRestController {
 
     private static final String TOSCA_SERVICE_TEMPLATE_YAML =
-            "src/test/resources/rest/servicetemplates/pmsh_multiple_cl_tosca.yaml";
+        "src/test/resources/rest/servicetemplates/pmsh_multiple_ac_tosca.yaml";
     private static final String COMMON_TOSCA_SERVICE_TEMPLATE_YAML =
-            "src/test/resources/rest/servicetemplates/full-tosca-with-common-properties.yaml";
+        "src/test/resources/rest/servicetemplates/full-tosca-with-common-properties.yaml";
 
     private static final String COMMISSIONING_ENDPOINT = "commission";
     private static ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate();
@@ -83,7 +83,7 @@ class CommissioningControllerTest extends CommonRestController {
 
         serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
         commonPropertiesServiceTemplate =
-                InstantiationUtils.getToscaServiceTemplate(COMMON_TOSCA_SERVICE_TEMPLATE_YAML);
+            InstantiationUtils.getToscaServiceTemplate(COMMON_TOSCA_SERVICE_TEMPLATE_YAML);
     }
 
     @BeforeEach
@@ -154,7 +154,7 @@ class CommissioningControllerTest extends CommonRestController {
         createFullEntryInDbWithCommonProps();
 
         Invocation.Builder invocationBuilder =
-                super.sendRequest(COMMISSIONING_ENDPOINT + "/toscaServiceTemplateSchema");
+            super.sendRequest(COMMISSIONING_ENDPOINT + "/toscaServiceTemplateSchema");
         Response rawresp = invocationBuilder.buildGet().invoke();
         assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
         String schema = rawresp.readEntity(String.class);
@@ -167,7 +167,7 @@ class CommissioningControllerTest extends CommonRestController {
         createFullEntryInDbWithCommonProps();
 
         Invocation.Builder invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT
-                + "/getCommonOrInstanceProperties" + "?common=true&name=ToscaServiceTemplateSimple&version=1.0.0");
+            + "/getCommonOrInstanceProperties" + "?common=true&name=ToscaServiceTemplateSimple&version=1.0.0");
         Response rawresp = invocationBuilder.buildGet().invoke();
         assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
 
@@ -187,7 +187,7 @@ class CommissioningControllerTest extends CommonRestController {
         assertThat(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()).isEqualTo(resp.getStatus());
         CommissioningResponse commissioningResponse = resp.readEntity(CommissioningResponse.class);
         assertThat(commissioningResponse.getErrorDetails()).isNotNull();
-        assertThat(commissioningResponse.getAffectedControlLoopDefinitions()).isNull();
+        assertThat(commissioningResponse.getAffectedAutomationCompositionDefinitions()).isNull();
     }
 
     @Test
@@ -200,10 +200,10 @@ class CommissioningControllerTest extends CommonRestController {
         assertNotNull(commissioningResponse);
         assertNull(commissioningResponse.getErrorDetails());
         // Response should return the number of node templates present in the service template
-        assertThat(commissioningResponse.getAffectedControlLoopDefinitions()).hasSize(13);
+        assertThat(commissioningResponse.getAffectedAutomationCompositionDefinitions()).hasSize(13);
         for (String nodeTemplateName : serviceTemplate.getToscaTopologyTemplate().getNodeTemplates().keySet()) {
-            assertTrue(commissioningResponse.getAffectedControlLoopDefinitions().stream()
-                    .anyMatch(ac -> ac.getName().equals(nodeTemplateName)));
+            assertTrue(commissioningResponse.getAffectedAutomationCompositionDefinitions().stream()
+                .anyMatch(ac -> ac.getName().equals(nodeTemplateName)));
         }
 
     }
@@ -249,7 +249,7 @@ class CommissioningControllerTest extends CommonRestController {
         createEntryInDB();
 
         Invocation.Builder invocationBuilder = super.sendRequest(
-                COMMISSIONING_ENDPOINT + "/elements" + "?name=org.onap.domain.pmsh.PMSHControlLoopDefinition");
+            COMMISSIONING_ENDPOINT + "/elements" + "?name=org.onap.domain.pmsh.PMSHAutomationCompositionDefinition");
         Response rawresp = invocationBuilder.buildGet().invoke();
         assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
         List<?> entityList = rawresp.readEntity(List.class);
@@ -274,7 +274,7 @@ class CommissioningControllerTest extends CommonRestController {
         var serviceTemplateCreated = createEntryInDB();
 
         Invocation.Builder invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + "?name="
-                + serviceTemplateCreated.getName() + "&version=" + serviceTemplateCreated.getVersion());
+            + serviceTemplateCreated.getName() + "&version=" + serviceTemplateCreated.getVersion());
         // Call delete with no info
         Response resp = invocationBuilder.delete();
         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
@@ -19,7 +19,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.config.messaging;
+package org.onap.policy.clamp.acm.runtime.config.messaging;
 
 import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -34,10 +34,10 @@ import static org.mockito.Mockito.when;
 
 import java.util.List;
 import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatus;
-import org.onap.policy.clamp.controlloop.runtime.main.parameters.ClRuntimeParameterGroup;
-import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ParticipantStatusListener;
-import org.onap.policy.clamp.controlloop.runtime.util.CommonTestData;
+import org.onap.policy.clamp.acm.runtime.main.parameters.AcRuntimeParameterGroup;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantStatusListener;
+import org.onap.policy.clamp.acm.runtime.util.CommonTestData;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.common.utils.coder.StandardCoderObject;
@@ -55,7 +55,7 @@ class MessageDispatcherActivatorTest {
 
     @Test
     void testStartAndStop() throws Exception {
-        ClRuntimeParameterGroup parameterGroup = CommonTestData.geParameterGroup("dbtest");
+        AcRuntimeParameterGroup parameterGroup = CommonTestData.geParameterGroup("dbtest");
 
         var publisherFirst = spy(mock(Publisher.class));
         var publisherSecond = spy(mock(Publisher.class));
diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProviderTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProviderTest.java
new file mode 100644 (file)
index 0000000..30ed89e
--- /dev/null
@@ -0,0 +1,394 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.runtime.instantiation;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Optional;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+import org.onap.policy.clamp.acm.runtime.commissioning.CommissioningProvider;
+import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.acm.runtime.util.CommonTestData;
+import org.onap.policy.clamp.common.acm.exception.AutomationCompositionRuntimeException;
+import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
+import org.onap.policy.clamp.models.acm.concepts.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.messages.rest.instantiation.InstantiationCommand;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationResponse;
+import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+
+/**
+ * Class to perform unit test of {@link AutomationCompositionInstantiationProvider}}.
+ *
+ */
+class AutomationCompositionInstantiationProviderTest {
+    private static final String ID_NAME = "PMSH_Instance1";
+    private static final String ID_VERSION = "1.2.3";
+    private static final String AC_INSTANTIATION_CREATE_JSON =
+        "src/test/resources/rest/acm/AutomationCompositions.json";
+    private static final String AC_INSTANTIATION_UPDATE_JSON =
+        "src/test/resources/rest/acm/AutomationCompositionsUpdate.json";
+    private static final String AC_INSTANTIATION_CHANGE_STATE_JSON = "src/test/resources/rest/acm/PassiveCommand.json";
+    private static final String AC_INSTANTIATION_DEFINITION_NAME_NOT_FOUND_JSON =
+        "src/test/resources/rest/acm/AutomationCompositionElementsNotFound.json";
+    private static final String AC_INSTANTIATION_AC_DEFINITION_NOT_FOUND_JSON =
+        "src/test/resources/rest/acm/AutomationCompositionsNotFound.json";
+    private static final String TOSCA_TEMPLATE_YAML =
+        "src/test/resources/rest/servicetemplates/pmsh_multiple_ac_tosca.yaml";
+    private static final String AUTOMATION_COMPOSITION_NOT_FOUND = "Automation composition not found";
+    private static final String DELETE_BAD_REQUEST = "Automation composition state is still %s";
+    private static final String ORDERED_STATE_INVALID = "ordered state invalid or not specified on command";
+    private static final String AC_ELEMENT_NAME_NOT_FOUND =
+        "\"AutomationCompositions\" INVALID, item has status INVALID\n"
+            + "  \"entry org.onap.domain.pmsh.PMSHAutomationCompositionDefinition\" INVALID, item has status INVALID\n"
+            + "    \"entry org.onap.domain.pmsh.DCAEMicroservice\" INVALID, Not found\n"
+            + "  \"entry org.onap.domain.pmsh.PMSHAutomationCompositionDefinition\" INVALID, item has status INVALID\n"
+            + "    \"entry org.onap.domain.pmsh.DCAEMicroservice\" INVALID, Not found\n";
+
+    private static final String AC_DEFINITION_NOT_FOUND =
+        "\"AutomationCompositions\" INVALID, item has status INVALID\n"
+            + "  \"entry org.onap.domain.PMSHAutomationCompositionDefinition\" INVALID, item has status INVALID\n"
+            + "    item \"AutomationComposition\" value \"org.onap.domain.PMSHAutomationCompositionDefinition\""
+            + " INVALID, Commissioned automation composition definition not found\n"
+            + "  \"entry org.onap.domain.PMSHAutomationCompositionDefinition\" INVALID, item has status INVALID\n"
+            + "    item \"AutomationComposition\" value \"org.onap.domain.PMSHAutomationCompositionDefinition\""
+            + " INVALID, Commissioned automation composition definition not found\n";
+
+    private static ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate();
+
+    @BeforeAll
+    public static void setUpBeforeClass() throws Exception {
+        serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_TEMPLATE_YAML);
+    }
+
+    @Test
+    void testIntanceResponses() throws Exception {
+        var participantProvider = Mockito.mock(ParticipantProvider.class);
+        var acProvider = mock(AutomationCompositionProvider.class);
+        var supervisionHandler = mock(SupervisionHandler.class);
+        var commissioningProvider = mock(CommissioningProvider.class);
+
+        when(commissioningProvider.getAllToscaServiceTemplate()).thenReturn(List.of(serviceTemplate));
+        when(commissioningProvider.getToscaServiceTemplate(ID_NAME, ID_VERSION)).thenReturn(serviceTemplate);
+
+        var instantiationProvider = new AutomationCompositionInstantiationProvider(acProvider, commissioningProvider,
+            supervisionHandler, participantProvider);
+        var instancePropertyList = instantiationProvider.createInstanceProperties(serviceTemplate);
+        assertNull(instancePropertyList.getErrorDetails());
+        var id = new ToscaConceptIdentifier(ID_NAME, ID_VERSION);
+        assertEquals(id, instancePropertyList.getAffectedInstanceProperties().get(0));
+
+        AutomationCompositions automationCompositions =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Crud");
+        var automationComposition = automationCompositions.getAutomationCompositionList().get(0);
+        automationComposition.setName(ID_NAME);
+        automationComposition.setVersion(ID_VERSION);
+        when(acProvider.getAutomationCompositions(ID_NAME, ID_VERSION)).thenReturn(List.of(automationComposition));
+
+        var instanceOrderState = instantiationProvider.getInstantiationOrderState(ID_NAME, ID_VERSION);
+        assertEquals(AutomationCompositionOrderedState.UNINITIALISED, instanceOrderState.getOrderedState());
+        assertEquals(ID_NAME, instanceOrderState.getAutomationCompositionIdentifierList().get(0).getName());
+
+        when(acProvider.findAutomationComposition(ID_NAME, ID_VERSION)).thenReturn(Optional.of(automationComposition));
+        when(acProvider.deleteAutomationComposition(ID_NAME, ID_VERSION)).thenReturn(automationComposition);
+
+        var instanceResponse = instantiationProvider.deleteInstanceProperties(ID_NAME, ID_VERSION);
+        assertEquals(ID_NAME, instanceResponse.getAffectedAutomationCompositions().get(0).getName());
+
+    }
+
+    @Test
+    void testInstantiationCrud() throws Exception {
+        var participantProvider = Mockito.mock(ParticipantProvider.class);
+        var participants = CommonTestData.createParticipants();
+        when(participantProvider.getParticipants()).thenReturn(participants);
+
+        var commissioningProvider = mock(CommissioningProvider.class);
+        var toscaNodeTemplate1 = new ToscaNodeTemplate();
+        toscaNodeTemplate1.setName("org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement");
+        toscaNodeTemplate1.setVersion("1.2.3");
+        when(commissioningProvider.getAutomationCompositionDefinitions(anyString(), anyString()))
+            .thenReturn(List.of(toscaNodeTemplate1));
+
+        var toscaNodeTemplate2 = new ToscaNodeTemplate();
+        toscaNodeTemplate2.setName("org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement");
+        toscaNodeTemplate2.setVersion("1.2.3");
+        var toscaNodeTemplate3 = new ToscaNodeTemplate();
+        toscaNodeTemplate3.setName("org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement");
+        toscaNodeTemplate3.setVersion("1.2.3");
+        var toscaNodeTemplate4 = new ToscaNodeTemplate();
+        toscaNodeTemplate4.setName("org.onap.domain.pmsh.PMSH_DCAEMicroservice");
+        toscaNodeTemplate4.setVersion("1.2.3");
+
+        when(commissioningProvider.getAutomationCompositionElementDefinitions(toscaNodeTemplate1))
+            .thenReturn(List.of(toscaNodeTemplate1, toscaNodeTemplate2, toscaNodeTemplate3, toscaNodeTemplate4));
+
+        var supervisionHandler = mock(SupervisionHandler.class);
+        var acProvider = mock(AutomationCompositionProvider.class);
+        var instantiationProvider = new AutomationCompositionInstantiationProvider(acProvider, commissioningProvider,
+            supervisionHandler, participantProvider);
+        AutomationCompositions automationCompositionsCreate =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Crud");
+        InstantiationResponse instantiationResponse =
+            instantiationProvider.createAutomationCompositions(automationCompositionsCreate);
+        InstantiationUtils.assertInstantiationResponse(instantiationResponse, automationCompositionsCreate);
+
+        verify(acProvider).saveAutomationCompositions(automationCompositionsCreate.getAutomationCompositionList());
+
+        for (var automationComposition : automationCompositionsCreate.getAutomationCompositionList()) {
+            when(acProvider.getAutomationCompositions(automationComposition.getName(),
+                automationComposition.getVersion())).thenReturn(List.of(automationComposition));
+
+            AutomationCompositions automationCompositionsGet = instantiationProvider
+                .getAutomationCompositions(automationComposition.getName(), automationComposition.getVersion());
+            assertThat(automationCompositionsGet.getAutomationCompositionList()).hasSize(1);
+            assertThat(automationComposition)
+                .isEqualTo(automationCompositionsGet.getAutomationCompositionList().get(0));
+        }
+
+        AutomationCompositions automationCompositionsUpdate =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_UPDATE_JSON, "Crud");
+
+        instantiationResponse = instantiationProvider.updateAutomationCompositions(automationCompositionsUpdate);
+        InstantiationUtils.assertInstantiationResponse(instantiationResponse, automationCompositionsUpdate);
+
+        verify(acProvider).saveAutomationCompositions(automationCompositionsUpdate.getAutomationCompositionList());
+
+        for (var automationComposition : automationCompositionsUpdate.getAutomationCompositionList()) {
+            when(acProvider.findAutomationComposition(automationComposition.getKey().asIdentifier()))
+                .thenReturn(Optional.of(automationComposition));
+            when(acProvider.findAutomationComposition(automationComposition.getName(),
+                automationComposition.getVersion())).thenReturn(Optional.of(automationComposition));
+            when(acProvider.deleteAutomationComposition(automationComposition.getName(),
+                automationComposition.getVersion())).thenReturn(automationComposition);
+        }
+
+        InstantiationCommand instantiationCommand =
+            InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Crud");
+        instantiationResponse = instantiationProvider.issueAutomationCompositionCommand(instantiationCommand);
+        InstantiationUtils.assertInstantiationResponse(instantiationResponse, instantiationCommand);
+
+        verify(supervisionHandler)
+            .triggerAutomationCompositionSupervision(instantiationCommand.getAutomationCompositionIdentifierList());
+
+        // in order to delete a automationComposition the state must be UNINITIALISED
+        automationCompositionsCreate.getAutomationCompositionList()
+            .forEach(ac -> ac.setState(AutomationCompositionState.UNINITIALISED));
+        instantiationProvider.updateAutomationCompositions(automationCompositionsCreate);
+
+        for (AutomationComposition automationComposition : automationCompositionsCreate
+            .getAutomationCompositionList()) {
+            instantiationProvider.deleteAutomationComposition(automationComposition.getName(),
+                automationComposition.getVersion());
+
+            verify(acProvider).deleteAutomationComposition(automationComposition.getName(),
+                automationComposition.getVersion());
+        }
+    }
+
+    @Test
+    void testInstantiationDelete() throws Exception {
+
+        AutomationCompositions automationCompositions =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Delete");
+
+        AutomationComposition automationComposition0 = automationCompositions.getAutomationCompositionList().get(0);
+        var participantProvider = Mockito.mock(ParticipantProvider.class);
+        var acProvider = mock(AutomationCompositionProvider.class);
+        var supervisionHandler = mock(SupervisionHandler.class);
+        var commissioningProvider = mock(CommissioningProvider.class);
+
+        var instantiationProvider = new AutomationCompositionInstantiationProvider(acProvider, commissioningProvider,
+            supervisionHandler, participantProvider);
+
+        assertThatThrownBy(() -> instantiationProvider.deleteAutomationComposition(automationComposition0.getName(),
+            automationComposition0.getVersion())).hasMessageMatching(AUTOMATION_COMPOSITION_NOT_FOUND);
+
+        for (AutomationCompositionState state : AutomationCompositionState.values()) {
+            if (!AutomationCompositionState.UNINITIALISED.equals(state)) {
+                assertThatDeleteThrownBy(automationCompositions, state);
+            }
+        }
+        automationComposition0.setState(AutomationCompositionState.UNINITIALISED);
+
+        for (AutomationComposition automationComposition : automationCompositions.getAutomationCompositionList()) {
+            when(acProvider.findAutomationComposition(automationComposition.getName(),
+                automationComposition.getVersion())).thenReturn(Optional.of(automationComposition));
+            when(acProvider.deleteAutomationComposition(automationComposition.getName(),
+                automationComposition.getVersion())).thenReturn(automationComposition);
+
+            instantiationProvider.deleteAutomationComposition(automationComposition.getName(),
+                automationComposition.getVersion());
+        }
+    }
+
+    private void assertThatDeleteThrownBy(AutomationCompositions automationCompositions,
+        AutomationCompositionState state) throws Exception {
+        AutomationComposition automationComposition = automationCompositions.getAutomationCompositionList().get(0);
+        automationComposition.setState(state);
+        var participantProvider = Mockito.mock(ParticipantProvider.class);
+        var acProvider = mock(AutomationCompositionProvider.class);
+        var supervisionHandler = mock(SupervisionHandler.class);
+        var commissioningProvider = mock(CommissioningProvider.class);
+
+        var instantiationProvider = new AutomationCompositionInstantiationProvider(acProvider, commissioningProvider,
+            supervisionHandler, participantProvider);
+
+        when(acProvider.findAutomationComposition(automationComposition.getName(), automationComposition.getVersion()))
+            .thenReturn(Optional.of(automationComposition));
+
+        assertThatThrownBy(() -> instantiationProvider.deleteAutomationComposition(automationComposition.getName(),
+            automationComposition.getVersion())).hasMessageMatching(String.format(DELETE_BAD_REQUEST, state));
+    }
+
+    @Test
+    void testCreateAutomationCompositions_NoDuplicates() throws Exception {
+        var commissioningProvider = mock(CommissioningProvider.class);
+
+        var toscaNodeTemplate1 = new ToscaNodeTemplate();
+        toscaNodeTemplate1.setName("org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement");
+        toscaNodeTemplate1.setVersion("1.2.3");
+        when(commissioningProvider.getAutomationCompositionDefinitions(anyString(), anyString()))
+            .thenReturn(List.of(toscaNodeTemplate1));
+
+        var toscaNodeTemplate2 = new ToscaNodeTemplate();
+        toscaNodeTemplate2.setName("org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement");
+        toscaNodeTemplate2.setVersion("1.2.3");
+        var toscaNodeTemplate3 = new ToscaNodeTemplate();
+        toscaNodeTemplate3.setName("org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement");
+        toscaNodeTemplate3.setVersion("1.2.3");
+        var toscaNodeTemplate4 = new ToscaNodeTemplate();
+        toscaNodeTemplate4.setName("org.onap.domain.pmsh.PMSH_DCAEMicroservice");
+        toscaNodeTemplate4.setVersion("1.2.3");
+
+        when(commissioningProvider.getAutomationCompositionElementDefinitions(toscaNodeTemplate1))
+            .thenReturn(List.of(toscaNodeTemplate1, toscaNodeTemplate2, toscaNodeTemplate3, toscaNodeTemplate4));
+
+        AutomationCompositions automationCompositionsCreate =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "NoDuplicates");
+
+        var acProvider = mock(AutomationCompositionProvider.class);
+        var participantProvider = Mockito.mock(ParticipantProvider.class);
+        var supervisionHandler = mock(SupervisionHandler.class);
+
+        var instantiationProvider = new AutomationCompositionInstantiationProvider(acProvider, commissioningProvider,
+            supervisionHandler, participantProvider);
+
+        InstantiationResponse instantiationResponse =
+            instantiationProvider.createAutomationCompositions(automationCompositionsCreate);
+        InstantiationUtils.assertInstantiationResponse(instantiationResponse, automationCompositionsCreate);
+
+        when(acProvider.findAutomationComposition(
+            automationCompositionsCreate.getAutomationCompositionList().get(0).getKey().asIdentifier()))
+                .thenReturn(Optional.of(automationCompositionsCreate.getAutomationCompositionList().get(0)));
+
+        assertThatThrownBy(() -> instantiationProvider.createAutomationCompositions(automationCompositionsCreate))
+            .hasMessageMatching(
+                automationCompositionsCreate.getAutomationCompositionList().get(0).getKey().asIdentifier()
+                    + " already defined");
+    }
+
+    @Test
+    void testCreateAutomationCompositions_CommissionedAcElementNotFound() throws Exception {
+        var toscaNodeTemplate1 = new ToscaNodeTemplate();
+        toscaNodeTemplate1.setName("org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement");
+        toscaNodeTemplate1.setVersion("1.2.3");
+
+        var toscaNodeTemplate2 = new ToscaNodeTemplate();
+        toscaNodeTemplate2.setName("org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement");
+        toscaNodeTemplate2.setVersion("1.2.3");
+        var toscaNodeTemplate3 = new ToscaNodeTemplate();
+        toscaNodeTemplate3.setName("org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement");
+        toscaNodeTemplate3.setVersion("1.2.3");
+        var commissioningProvider = mock(CommissioningProvider.class);
+        AutomationCompositions automationCompositions = InstantiationUtils.getAutomationCompositionsFromResource(
+            AC_INSTANTIATION_DEFINITION_NAME_NOT_FOUND_JSON, "AcElementNotFound");
+
+        when(commissioningProvider.getAutomationCompositionDefinitions(
+            automationCompositions.getAutomationCompositionList().get(0).getDefinition().getName(),
+            automationCompositions.getAutomationCompositionList().get(0).getDefinition().getVersion()))
+                .thenReturn(List.of(toscaNodeTemplate1));
+
+        when(commissioningProvider.getAutomationCompositionElementDefinitions(toscaNodeTemplate1))
+            .thenReturn(List.of(toscaNodeTemplate1, toscaNodeTemplate2, toscaNodeTemplate3));
+
+        var acProvider = mock(AutomationCompositionProvider.class);
+        var participantProvider = mock(ParticipantProvider.class);
+        var supervisionHandler = mock(SupervisionHandler.class);
+        var provider = new AutomationCompositionInstantiationProvider(acProvider, commissioningProvider,
+            supervisionHandler, participantProvider);
+
+        assertThatThrownBy(() -> provider.createAutomationCompositions(automationCompositions))
+            .hasMessageMatching(AC_ELEMENT_NAME_NOT_FOUND);
+
+        assertThatThrownBy(() -> provider.updateAutomationCompositions(automationCompositions))
+            .hasMessageMatching(AC_ELEMENT_NAME_NOT_FOUND);
+    }
+
+    @Test
+    void testCreateAutomationCompositions_CommissionedAcNotFound() throws Exception {
+        AutomationCompositions automationCompositions = InstantiationUtils
+            .getAutomationCompositionsFromResource(AC_INSTANTIATION_AC_DEFINITION_NOT_FOUND_JSON, "AcNotFound");
+
+        var participantProvider = Mockito.mock(ParticipantProvider.class);
+        var acProvider = mock(AutomationCompositionProvider.class);
+        var supervisionHandler = mock(SupervisionHandler.class);
+        var commissioningProvider = mock(CommissioningProvider.class);
+        var provider = new AutomationCompositionInstantiationProvider(acProvider, commissioningProvider,
+            supervisionHandler, participantProvider);
+
+        assertThatThrownBy(() -> provider.createAutomationCompositions(automationCompositions))
+            .hasMessageMatching(AC_DEFINITION_NOT_FOUND);
+
+        assertThatThrownBy(() -> provider.updateAutomationCompositions(automationCompositions))
+            .hasMessageMatching(AC_DEFINITION_NOT_FOUND);
+    }
+
+    @Test
+    void testIssueAutomationCompositionCommand_OrderedStateInvalid()
+        throws AutomationCompositionRuntimeException, IOException {
+        var participantProvider = Mockito.mock(ParticipantProvider.class);
+        var acProvider = mock(AutomationCompositionProvider.class);
+        var supervisionHandler = mock(SupervisionHandler.class);
+        var commissioningProvider = mock(CommissioningProvider.class);
+        var instantiationProvider = new AutomationCompositionInstantiationProvider(acProvider, commissioningProvider,
+            supervisionHandler, participantProvider);
+        assertThatThrownBy(() -> instantiationProvider.issueAutomationCompositionCommand(new InstantiationCommand()))
+            .hasMessageMatching(ORDERED_STATE_INVALID);
+    }
+}
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.instantiation;
+package org.onap.policy.clamp.acm.runtime.instantiation;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -26,10 +26,10 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.File;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationCommand;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationResponse;
+import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationCommand;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationResponse;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
@@ -47,81 +47,87 @@ public class InstantiationUtils {
     private static final StandardYamlCoder YAML_TRANSLATOR = new StandardYamlCoder();
 
     /**
-     * Gets the ControlLoops from Resource.
+     * Gets the AutomationCompositions from Resource.
      *
      * @param path path of the resource
-     * @param suffix suffix to add to all names in ControlLoops
-     * @return the ControlLoops from Resource
+     * @param suffix suffix to add to all names in AutomationCompositions
+     * @return the AutomationCompositions from Resource
      * @throws CoderException if an error occurs
      */
-    public static ControlLoops getControlLoopsFromResource(final String path, final String suffix)
-            throws CoderException {
-        ControlLoops controlLoops = CODER.decode(new File(path), ControlLoops.class);
+    public static AutomationCompositions getAutomationCompositionsFromResource(final String path, final String suffix)
+        throws CoderException {
+        AutomationCompositions automationCompositions = CODER.decode(new File(path), AutomationCompositions.class);
 
         // add suffix to all names
-        controlLoops.getControlLoopList().forEach(controlLoop -> controlLoop.setName(controlLoop.getName() + suffix));
-        return controlLoops;
+        automationCompositions.getAutomationCompositionList()
+            .forEach(automationComposition -> automationComposition.setName(automationComposition.getName() + suffix));
+        return automationCompositions;
     }
 
     /**
      * Gets InstantiationCommand from Resource.
      *
      * @param path path of the resource
-     * @param suffix suffix to add to all names in ControlLoops
+     * @param suffix suffix to add to all names in AutomationCompositions
      * @return the InstantiationCommand
      * @throws CoderException if an error occurs
      */
     public static InstantiationCommand getInstantiationCommandFromResource(final String path, final String suffix)
-            throws CoderException {
+        throws CoderException {
         InstantiationCommand instantiationCommand = CODER.decode(new File(path), InstantiationCommand.class);
 
         // add suffix to all names
-        instantiationCommand.getControlLoopIdentifierList().forEach(cl -> cl.setName(cl.getName() + suffix));
+        instantiationCommand.getAutomationCompositionIdentifierList().forEach(ac -> ac.setName(ac.getName() + suffix));
         return instantiationCommand;
     }
 
     /**
-     * Assert that Instantiation Response contains proper ControlLoops.
+     * Assert that Instantiation Response contains proper AutomationCompositions.
      *
      * @param response InstantiationResponse
-     * @param controlLoops ControlLoops
+     * @param automationCompositions AutomationCompositions
      */
-    public static void assertInstantiationResponse(InstantiationResponse response, ControlLoops controlLoops) {
+    public static void assertInstantiationResponse(InstantiationResponse response,
+        AutomationCompositions automationCompositions) {
         assertThat(response).isNotNull();
         assertThat(response.getErrorDetails()).isNull();
-        assertThat(response.getAffectedControlLoops().size()).isEqualTo(controlLoops.getControlLoopList().size());
-        for (ControlLoop controlLoop : controlLoops.getControlLoopList()) {
-            assertTrue(response.getAffectedControlLoops().stream()
-                    .filter(ac -> ac.equals(controlLoop.getKey().asIdentifier())).findAny().isPresent());
+        assertThat(response.getAffectedAutomationCompositions().size())
+            .isEqualTo(automationCompositions.getAutomationCompositionList().size());
+        for (AutomationComposition automationComposition : automationCompositions.getAutomationCompositionList()) {
+            assertTrue(response.getAffectedAutomationCompositions().stream()
+                .filter(ac -> ac.equals(automationComposition.getKey().asIdentifier())).findAny().isPresent());
         }
     }
 
     /**
-     * Assert that Instantiation Response contains proper ControlLoops.
+     * Assert that Instantiation Response contains proper AutomationCompositions.
      *
      * @param response InstantiationResponse
      * @param command InstantiationCommand
      */
     public static void assertInstantiationResponse(InstantiationResponse response, InstantiationCommand command) {
         assertThat(response).isNotNull();
-        assertEquals(response.getAffectedControlLoops().size(), command.getControlLoopIdentifierList().size());
-        for (ToscaConceptIdentifier toscaConceptIdentifier : command.getControlLoopIdentifierList()) {
-            assertTrue(response.getAffectedControlLoops().stream()
-                    .filter(ac -> ac.compareTo(toscaConceptIdentifier) == 0).findAny().isPresent());
+        assertEquals(response.getAffectedAutomationCompositions().size(),
+            command.getAutomationCompositionIdentifierList().size());
+        for (ToscaConceptIdentifier toscaConceptIdentifier : command.getAutomationCompositionIdentifierList()) {
+            assertTrue(response.getAffectedAutomationCompositions().stream()
+                .filter(ac -> ac.compareTo(toscaConceptIdentifier) == 0).findAny().isPresent());
         }
     }
 
     /**
-     * Assert that Instantiation Response contains ControlLoop equals to controlLoop.
+     * Assert that Instantiation Response contains AutomationComposition equals to automationComposition.
      *
      * @param response InstantiationResponse
-     * @param controlLoop ControlLoop
+     * @param automationComposition AutomationComposition
      */
-    public static void assertInstantiationResponse(InstantiationResponse response, ControlLoop controlLoop) {
+    public static void assertInstantiationResponse(InstantiationResponse response,
+        AutomationComposition automationComposition) {
         assertThat(response).isNotNull();
         assertThat(response.getErrorDetails()).isNull();
-        assertEquals(1, response.getAffectedControlLoops().size());
-        assertEquals(0, response.getAffectedControlLoops().get(0).compareTo(controlLoop.getKey().asIdentifier()));
+        assertEquals(1, response.getAffectedAutomationCompositions().size());
+        assertEquals(0, response.getAffectedAutomationCompositions().get(0)
+            .compareTo(automationComposition.getKey().asIdentifier()));
     }
 
     /**
@@ -19,7 +19,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.instantiation.rest;
+package org.onap.policy.clamp.acm.runtime.instantiation.rest;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -34,22 +34,22 @@ import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ServiceTemplateProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ControlLoopRepository;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.ControlLoopOrderStateResponse;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.ControlLoopPrimedResponse;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstancePropertiesResponse;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationCommand;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationResponse;
-import org.onap.policy.clamp.controlloop.runtime.instantiation.ControlLoopInstantiationProvider;
-import org.onap.policy.clamp.controlloop.runtime.instantiation.InstantiationUtils;
-import org.onap.policy.clamp.controlloop.runtime.main.rest.InstantiationController;
-import org.onap.policy.clamp.controlloop.runtime.util.CommonTestData;
-import org.onap.policy.clamp.controlloop.runtime.util.rest.CommonRestController;
+import org.onap.policy.clamp.acm.runtime.instantiation.AutomationCompositionInstantiationProvider;
+import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
+import org.onap.policy.clamp.acm.runtime.main.rest.InstantiationController;
+import org.onap.policy.clamp.acm.runtime.util.CommonTestData;
+import org.onap.policy.clamp.acm.runtime.util.rest.CommonRestController;
+import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.AutomationCompositionOrderStateResponse;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.AutomationCompositionPrimedResponse;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstancePropertiesResponse;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationCommand;
+import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationResponse;
+import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ServiceTemplateProvider;
+import org.onap.policy.clamp.models.acm.persistence.repository.AutomationCompositionRepository;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -71,33 +71,33 @@ class InstantiationControllerTest extends CommonRestController {
     private static final String ID_NAME = "PMSH_Instance1";
     private static final String ID_VERSION = "1.2.3";
 
-    private static final String CL_INSTANTIATION_CREATE_JSON = "src/test/resources/rest/controlloops/ControlLoops.json";
+    private static final String AC_INSTANTIATION_CREATE_JSON =
+        "src/test/resources/rest/acm/AutomationCompositions.json";
 
-    private static final String CL_INSTANTIATION_UPDATE_JSON =
-            "src/test/resources/rest/controlloops/ControlLoopsUpdate.json";
+    private static final String AC_INSTANTIATION_UPDATE_JSON =
+        "src/test/resources/rest/acm/AutomationCompositionsUpdate.json";
 
-    private static final String CL_INSTANTIATION_CHANGE_STATE_JSON =
-            "src/test/resources/rest/controlloops/PassiveCommand.json";
+    private static final String AC_INSTANTIATION_CHANGE_STATE_JSON = "src/test/resources/rest/acm/PassiveCommand.json";
 
     private static final String TOSCA_TEMPLATE_YAML =
-            "src/test/resources/rest/servicetemplates/pmsh_multiple_cl_tosca.yaml";
+        "src/test/resources/rest/servicetemplates/pmsh_multiple_ac_tosca.yaml";
 
     private static final String INSTANTIATION_ENDPOINT = "instantiation";
     private static final String INSTANTIATION_COMMAND_ENDPOINT = "instantiation/command";
-    private static final String PRIMING_ENDPOINT = "controlLoopPriming";
+    private static final String PRIMING_ENDPOINT = "automationCompositionPriming";
     private static final String INSTANTIATION_PROPERTIES = "instanceProperties";
     private static final String INSTANTIATION_STATE = "instantiationState";
 
     private static ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate();
 
     @Autowired
-    private ControlLoopRepository controlLoopRepository;
+    private AutomationCompositionRepository automationCompositionRepository;
 
     @Autowired
     private ServiceTemplateProvider serviceTemplateProvider;
 
     @Autowired
-    private ControlLoopInstantiationProvider instantiationProvider;
+    private AutomationCompositionInstantiationProvider instantiationProvider;
 
     @Autowired
     private ParticipantProvider participantProvider;
@@ -132,10 +132,10 @@ class InstantiationControllerTest extends CommonRestController {
 
     @Test
     void testCreate_Unauthorized() throws Exception {
-        ControlLoops controlLoops =
-                InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Unauthorized");
+        AutomationCompositions automationCompositions =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Unauthorized");
 
-        assertUnauthorizedPost(INSTANTIATION_ENDPOINT, Entity.json(controlLoops));
+        assertUnauthorizedPost(INSTANTIATION_ENDPOINT, Entity.json(automationCompositions));
     }
 
     @Test
@@ -145,10 +145,10 @@ class InstantiationControllerTest extends CommonRestController {
 
     @Test
     void testUpdate_Unauthorized() throws Exception {
-        ControlLoops controlLoops =
-                InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_UPDATE_JSON, "Unauthorized");
+        AutomationCompositions automationCompositions =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_UPDATE_JSON, "Unauthorized");
 
-        assertUnauthorizedPut(INSTANTIATION_ENDPOINT, Entity.json(controlLoops));
+        assertUnauthorizedPut(INSTANTIATION_ENDPOINT, Entity.json(automationCompositions));
     }
 
     @Test
@@ -158,8 +158,8 @@ class InstantiationControllerTest extends CommonRestController {
 
     @Test
     void testCommand_Unauthorized() throws Exception {
-        InstantiationCommand instantiationCommand = InstantiationUtils
-                .getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Unauthorized");
+        InstantiationCommand instantiationCommand =
+            InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Unauthorized");
 
         assertUnauthorizedPut(INSTANTIATION_COMMAND_ENDPOINT, Entity.json(instantiationCommand));
     }
@@ -167,48 +167,51 @@ class InstantiationControllerTest extends CommonRestController {
     @Test
     void testCreate() throws Exception {
 
-        ControlLoops controlLoopsFromRsc =
-                InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Create");
+        AutomationCompositions automationCompositionsFromRsc =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Create");
 
         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
-        Response resp = invocationBuilder.post(Entity.json(controlLoopsFromRsc));
+        Response resp = invocationBuilder.post(Entity.json(automationCompositionsFromRsc));
         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
-        InstantiationUtils.assertInstantiationResponse(instResponse, controlLoopsFromRsc);
+        InstantiationUtils.assertInstantiationResponse(instResponse, automationCompositionsFromRsc);
 
-        for (ControlLoop controlLoopFromRsc : controlLoopsFromRsc.getControlLoopList()) {
-            ControlLoops controlLoopsFromDb = instantiationProvider
-                    .getControlLoops(controlLoopFromRsc.getKey().getName(), controlLoopFromRsc.getKey().getVersion());
+        for (AutomationComposition automationCompositionFromRsc : automationCompositionsFromRsc
+            .getAutomationCompositionList()) {
+            AutomationCompositions automationCompositionsFromDb = instantiationProvider.getAutomationCompositions(
+                automationCompositionFromRsc.getKey().getName(), automationCompositionFromRsc.getKey().getVersion());
 
-            assertNotNull(controlLoopsFromDb);
-            assertThat(controlLoopsFromDb.getControlLoopList()).hasSize(1);
-            assertEquals(controlLoopFromRsc, controlLoopsFromDb.getControlLoopList().get(0));
+            assertNotNull(automationCompositionsFromDb);
+            assertThat(automationCompositionsFromDb.getAutomationCompositionList()).hasSize(1);
+            assertEquals(automationCompositionFromRsc,
+                automationCompositionsFromDb.getAutomationCompositionList().get(0));
         }
 
         invocationBuilder =
-                super.sendRequest(PRIMING_ENDPOINT + "?name=" + "PMSHInstance0Create" + "&version=" + "1.0.1");
+            super.sendRequest(PRIMING_ENDPOINT + "?name=" + "PMSHInstance0Create" + "&version=" + "1.0.1");
         Response rawresp = invocationBuilder.buildGet().invoke();
         assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
-        ControlLoopPrimedResponse primResponse = rawresp.readEntity(ControlLoopPrimedResponse.class);
-        assertEquals(false, primResponse.getPrimedControlLoopsList().get(0).isPrimed());
+        AutomationCompositionPrimedResponse primResponse =
+            rawresp.readEntity(AutomationCompositionPrimedResponse.class);
+        assertEquals(false, primResponse.getPrimedAutomationCompositionsList().get(0).isPrimed());
     }
 
     @Test
     void testCreateBadRequest() throws Exception {
 
-        ControlLoops controlLoopsFromRsc =
-                InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "CreateBadRequest");
+        AutomationCompositions automationCompositionsFromRsc =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "CreateBadRequest");
 
         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
-        Response resp = invocationBuilder.post(Entity.json(controlLoopsFromRsc));
+        Response resp = invocationBuilder.post(Entity.json(automationCompositionsFromRsc));
         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
 
-        // testing Bad Request: CL already defined
-        resp = invocationBuilder.post(Entity.json(controlLoopsFromRsc));
+        // testing Bad Request: AC already defined
+        resp = invocationBuilder.post(Entity.json(automationCompositionsFromRsc));
         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
         assertNotNull(instResponse.getErrorDetails());
-        assertNull(instResponse.getAffectedControlLoops());
+        assertNull(instResponse.getAffectedAutomationCompositions());
     }
 
     @Test
@@ -216,98 +219,107 @@ class InstantiationControllerTest extends CommonRestController {
         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT + "?name=noResultWithThisName");
         Response rawresp = invocationBuilder.buildGet().invoke();
         assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
-        ControlLoops resp = rawresp.readEntity(ControlLoops.class);
-        assertThat(resp.getControlLoopList()).isEmpty();
+        AutomationCompositions resp = rawresp.readEntity(AutomationCompositions.class);
+        assertThat(resp.getAutomationCompositionList()).isEmpty();
     }
 
     @Test
     void testQuery() throws Exception {
 
-        var controlLoops = InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Query");
-        instantiationProvider.createControlLoops(controlLoops);
+        var automationCompositions =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Query");
+        instantiationProvider.createAutomationCompositions(automationCompositions);
 
-        for (ControlLoop controlLoopFromRsc : controlLoops.getControlLoopList()) {
+        for (AutomationComposition automationCompositionFromRsc : automationCompositions
+            .getAutomationCompositionList()) {
             Invocation.Builder invocationBuilder =
-                    super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + controlLoopFromRsc.getKey().getName());
+                super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + automationCompositionFromRsc.getKey().getName());
             Response rawresp = invocationBuilder.buildGet().invoke();
             assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
-            ControlLoops controlLoopsQuery = rawresp.readEntity(ControlLoops.class);
-            assertNotNull(controlLoopsQuery);
-            assertThat(controlLoopsQuery.getControlLoopList()).hasSize(1);
-            assertEquals(controlLoopFromRsc, controlLoopsQuery.getControlLoopList().get(0));
+            AutomationCompositions automationCompositionsQuery = rawresp.readEntity(AutomationCompositions.class);
+            assertNotNull(automationCompositionsQuery);
+            assertThat(automationCompositionsQuery.getAutomationCompositionList()).hasSize(1);
+            assertEquals(automationCompositionFromRsc,
+                automationCompositionsQuery.getAutomationCompositionList().get(0));
         }
     }
 
     @Test
     void testUpdate() throws Exception {
 
-        ControlLoops controlLoopsCreate =
-                InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Update");
+        AutomationCompositions automationCompositionsCreate =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Update");
 
-        var controlLoops = InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_UPDATE_JSON, "Update");
-        instantiationProvider.createControlLoops(controlLoopsCreate);
+        var automationCompositions =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_UPDATE_JSON, "Update");
+        instantiationProvider.createAutomationCompositions(automationCompositionsCreate);
 
         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
-        Response resp = invocationBuilder.put(Entity.json(controlLoops));
+        Response resp = invocationBuilder.put(Entity.json(automationCompositions));
         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
 
         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
-        InstantiationUtils.assertInstantiationResponse(instResponse, controlLoops);
+        InstantiationUtils.assertInstantiationResponse(instResponse, automationCompositions);
 
-        for (ControlLoop controlLoopUpdate : controlLoops.getControlLoopList()) {
-            ControlLoops controlLoopsFromDb = instantiationProvider
-                    .getControlLoops(controlLoopUpdate.getKey().getName(), controlLoopUpdate.getKey().getVersion());
+        for (AutomationComposition automationCompositionUpdate : automationCompositions
+            .getAutomationCompositionList()) {
+            AutomationCompositions automationCompositionsFromDb = instantiationProvider.getAutomationCompositions(
+                automationCompositionUpdate.getKey().getName(), automationCompositionUpdate.getKey().getVersion());
 
-            assertNotNull(controlLoopsFromDb);
-            assertThat(controlLoopsFromDb.getControlLoopList()).hasSize(1);
-            assertEquals(controlLoopUpdate, controlLoopsFromDb.getControlLoopList().get(0));
+            assertNotNull(automationCompositionsFromDb);
+            assertThat(automationCompositionsFromDb.getAutomationCompositionList()).hasSize(1);
+            assertEquals(automationCompositionUpdate,
+                automationCompositionsFromDb.getAutomationCompositionList().get(0));
         }
     }
 
     @Test
     void testDelete_NoResultWithThisName() throws Exception {
         Invocation.Builder invocationBuilder =
-                super.sendRequest(INSTANTIATION_ENDPOINT + "?name=noResultWithThisName&version=1.0.1");
+            super.sendRequest(INSTANTIATION_ENDPOINT + "?name=noResultWithThisName&version=1.0.1");
         Response resp = invocationBuilder.delete();
         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), resp.getStatus());
         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
         assertNotNull(instResponse.getErrorDetails());
-        assertNull(instResponse.getAffectedControlLoops());
+        assertNull(instResponse.getAffectedAutomationCompositions());
     }
 
     @Test
     void testDelete() throws Exception {
 
-        ControlLoops controlLoopsFromRsc =
-                InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Delete");
+        AutomationCompositions automationCompositionsFromRsc =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Delete");
 
-        instantiationProvider.createControlLoops(controlLoopsFromRsc);
+        instantiationProvider.createAutomationCompositions(automationCompositionsFromRsc);
 
-        for (ControlLoop controlLoopFromRsc : controlLoopsFromRsc.getControlLoopList()) {
-            Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT + "?name="
-                    + controlLoopFromRsc.getKey().getName() + "&version=" + controlLoopFromRsc.getKey().getVersion());
+        for (AutomationComposition automationCompositionFromRsc : automationCompositionsFromRsc
+            .getAutomationCompositionList()) {
+            Invocation.Builder invocationBuilder =
+                super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + automationCompositionFromRsc.getKey().getName()
+                    + "&version=" + automationCompositionFromRsc.getKey().getVersion());
             Response resp = invocationBuilder.delete();
             assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
             InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
-            InstantiationUtils.assertInstantiationResponse(instResponse, controlLoopFromRsc);
+            InstantiationUtils.assertInstantiationResponse(instResponse, automationCompositionFromRsc);
 
-            ControlLoops controlLoopsFromDb = instantiationProvider
-                    .getControlLoops(controlLoopFromRsc.getKey().getName(), controlLoopFromRsc.getKey().getVersion());
-            assertThat(controlLoopsFromDb.getControlLoopList()).isEmpty();
+            AutomationCompositions automationCompositionsFromDb = instantiationProvider.getAutomationCompositions(
+                automationCompositionFromRsc.getKey().getName(), automationCompositionFromRsc.getKey().getVersion());
+            assertThat(automationCompositionsFromDb.getAutomationCompositionList()).isEmpty();
         }
     }
 
     @Test
     void testDeleteBadRequest() throws Exception {
 
-        ControlLoops controlLoopsFromRsc =
-                InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "DelBadRequest");
+        AutomationCompositions automationCompositionsFromRsc =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "DelBadRequest");
 
-        instantiationProvider.createControlLoops(controlLoopsFromRsc);
+        instantiationProvider.createAutomationCompositions(automationCompositionsFromRsc);
 
-        for (ControlLoop controlLoopFromRsc : controlLoopsFromRsc.getControlLoopList()) {
-            Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT + "?name="
-                    + controlLoopFromRsc.getKey().getName());
+        for (AutomationComposition automationCompositionFromRsc : automationCompositionsFromRsc
+            .getAutomationCompositionList()) {
+            Invocation.Builder invocationBuilder =
+                super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + automationCompositionFromRsc.getKey().getName());
             Response resp = invocationBuilder.delete();
             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
         }
@@ -326,8 +338,8 @@ class InstantiationControllerTest extends CommonRestController {
         invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
         resp = invocationBuilder.get();
         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
-        var controlLoopsGet = resp.readEntity(ControlLoops.class);
-        assertThat(controlLoopsGet.getControlLoopList()).hasSize(1);
+        var automationCompositionsGet = resp.readEntity(AutomationCompositions.class);
+        assertThat(automationCompositionsGet.getAutomationCompositionList()).hasSize(1);
     }
 
     @Test
@@ -340,9 +352,10 @@ class InstantiationControllerTest extends CommonRestController {
         resp = invocationBuilder.delete();
         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
         var instanceResponse = resp.readEntity(InstantiationResponse.class);
-        assertEquals(ID_NAME, instanceResponse.getAffectedControlLoops().get(0).getName());
-        ControlLoops controlLoopsGet = instantiationProvider.getControlLoops(ID_NAME, ID_VERSION);
-        assertThat(controlLoopsGet.getControlLoopList()).isEmpty();
+        assertEquals(ID_NAME, instanceResponse.getAffectedAutomationCompositions().get(0).getName());
+        AutomationCompositions automationCompositionsGet =
+            instantiationProvider.getAutomationCompositions(ID_NAME, ID_VERSION);
+        assertThat(automationCompositionsGet.getAutomationCompositionList()).isEmpty();
     }
 
     @Test
@@ -362,8 +375,9 @@ class InstantiationControllerTest extends CommonRestController {
         Response resp = invocationBuilder.post(Entity.json(serviceTemplate));
         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
 
-        var controlLoops = InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Command");
-        instantiationProvider.createControlLoops(controlLoops);
+        var automationCompositions =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Command");
+        instantiationProvider.createAutomationCompositions(automationCompositions);
 
         var participants = CommonTestData.createParticipants();
         for (var participant : participants) {
@@ -371,7 +385,7 @@ class InstantiationControllerTest extends CommonRestController {
         }
 
         InstantiationCommand command =
-            InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Command");
+            InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Command");
 
         invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
         resp = invocationBuilder.put(Entity.json(command));
@@ -380,14 +394,15 @@ class InstantiationControllerTest extends CommonRestController {
         InstantiationUtils.assertInstantiationResponse(instResponse, command);
 
         // check passive state on DB and delete properties
-        for (ToscaConceptIdentifier toscaConceptIdentifier : command.getControlLoopIdentifierList()) {
-            ControlLoops controlLoopsGet = instantiationProvider.getControlLoops(toscaConceptIdentifier.getName(),
-                toscaConceptIdentifier.getVersion());
-            assertThat(controlLoopsGet.getControlLoopList()).hasSize(1);
-            assertEquals(command.getOrderedState(), controlLoopsGet.getControlLoopList().get(0).getOrderedState());
-
-            invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES + "?name="
-                + toscaConceptIdentifier.getName() + "&version=" + toscaConceptIdentifier.getVersion());
+        for (ToscaConceptIdentifier toscaConceptIdentifier : command.getAutomationCompositionIdentifierList()) {
+            AutomationCompositions automationCompositionsGet = instantiationProvider
+                .getAutomationCompositions(toscaConceptIdentifier.getName(), toscaConceptIdentifier.getVersion());
+            assertThat(automationCompositionsGet.getAutomationCompositionList()).hasSize(1);
+            assertEquals(command.getOrderedState(),
+                automationCompositionsGet.getAutomationCompositionList().get(0).getOrderedState());
+
+            invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES + "?name=" + toscaConceptIdentifier.getName()
+                + "&version=" + toscaConceptIdentifier.getVersion());
             resp = invocationBuilder.delete();
             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
         }
@@ -403,7 +418,7 @@ class InstantiationControllerTest extends CommonRestController {
     @Test
     void testCommand_NotFound2() throws Exception {
         InstantiationCommand command =
-                InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Command");
+            InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Command");
         command.setOrderedState(null);
 
         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
@@ -413,8 +428,9 @@ class InstantiationControllerTest extends CommonRestController {
 
     @Test
     void testCommand() throws Exception {
-        var controlLoops = InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Command");
-        instantiationProvider.createControlLoops(controlLoops);
+        var automationCompositions =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Command");
+        instantiationProvider.createAutomationCompositions(automationCompositions);
 
         var participants = CommonTestData.createParticipants();
         for (var participant : participants) {
@@ -422,7 +438,7 @@ class InstantiationControllerTest extends CommonRestController {
         }
 
         InstantiationCommand command =
-                InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Command");
+            InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Command");
 
         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
         Response resp = invocationBuilder.put(Entity.json(command));
@@ -431,11 +447,12 @@ class InstantiationControllerTest extends CommonRestController {
         InstantiationUtils.assertInstantiationResponse(instResponse, command);
 
         // check passive state on DB
-        for (ToscaConceptIdentifier toscaConceptIdentifier : command.getControlLoopIdentifierList()) {
-            ControlLoops controlLoopsGet = instantiationProvider.getControlLoops(toscaConceptIdentifier.getName(),
-                    toscaConceptIdentifier.getVersion());
-            assertThat(controlLoopsGet.getControlLoopList()).hasSize(1);
-            assertEquals(command.getOrderedState(), controlLoopsGet.getControlLoopList().get(0).getOrderedState());
+        for (ToscaConceptIdentifier toscaConceptIdentifier : command.getAutomationCompositionIdentifierList()) {
+            AutomationCompositions automationCompositionsGet = instantiationProvider
+                .getAutomationCompositions(toscaConceptIdentifier.getName(), toscaConceptIdentifier.getVersion());
+            assertThat(automationCompositionsGet.getAutomationCompositionList()).hasSize(1);
+            assertEquals(command.getOrderedState(),
+                automationCompositionsGet.getAutomationCompositionList().get(0).getOrderedState());
         }
     }
 
@@ -452,19 +469,20 @@ class InstantiationControllerTest extends CommonRestController {
         invocationBuilder = super.sendRequest(INSTANTIATION_STATE + "?name=" + ID_NAME + "&version=" + ID_VERSION);
         resp = invocationBuilder.buildGet().invoke();
         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
-        var instanceOrderState = resp.readEntity(ControlLoopOrderStateResponse.class);
-        assertEquals(ControlLoopOrderedState.UNINITIALISED, instanceOrderState.getOrderedState());
-        assertEquals(ID_NAME, instanceOrderState.getControlLoopIdentifierList().get(0).getName());
-        ControlLoops controlLoopsGet = instantiationProvider.getControlLoops(ID_NAME, ID_VERSION);
-        assertThat(controlLoopsGet.getControlLoopList()).hasSize(1);
+        var instanceOrderState = resp.readEntity(AutomationCompositionOrderStateResponse.class);
+        assertEquals(AutomationCompositionOrderedState.UNINITIALISED, instanceOrderState.getOrderedState());
+        assertEquals(ID_NAME, instanceOrderState.getAutomationCompositionIdentifierList().get(0).getName());
+        AutomationCompositions automationCompositionsGet =
+            instantiationProvider.getAutomationCompositions(ID_NAME, ID_VERSION);
+        assertThat(automationCompositionsGet.getAutomationCompositionList()).hasSize(1);
 
         invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES + "?name=" + ID_NAME + "&version=" + ID_VERSION);
         resp = invocationBuilder.delete();
         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
         var instanceResponse = resp.readEntity(InstantiationResponse.class);
-        assertEquals(ID_NAME, instanceResponse.getAffectedControlLoops().get(0).getName());
-        controlLoopsGet = instantiationProvider.getControlLoops(ID_NAME, ID_VERSION);
-        assertThat(controlLoopsGet.getControlLoopList()).isEmpty();
+        assertEquals(ID_NAME, instanceResponse.getAffectedAutomationCompositions().get(0).getName());
+        automationCompositionsGet = instantiationProvider.getAutomationCompositions(ID_NAME, ID_VERSION);
+        assertThat(automationCompositionsGet.getAutomationCompositionList()).isEmpty();
     }
 
     @Test
@@ -473,18 +491,17 @@ class InstantiationControllerTest extends CommonRestController {
         Response resp = invocationBuilder.post(Entity.json(serviceTemplate));
         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
 
-        var controlLoops = InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON,
-            "CommandPassive");
-        instantiationProvider.createControlLoops(controlLoops);
+        var automationCompositions =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "CommandPassive");
+        instantiationProvider.createAutomationCompositions(automationCompositions);
 
         var participants = CommonTestData.createParticipants();
         for (var participant : participants) {
             participantProvider.saveParticipant(participant);
         }
 
-        InstantiationCommand command =
-            InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON,
-                "CommandPassive");
+        InstantiationCommand command = InstantiationUtils
+            .getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "CommandPassive");
 
         invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
         resp = invocationBuilder.put(Entity.json(command));
@@ -499,13 +516,12 @@ class InstantiationControllerTest extends CommonRestController {
         Response resp = invocationBuilder.post(Entity.json(serviceTemplate));
         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
 
-        var controlLoops = InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON,
-            "CommandPassive");
-        instantiationProvider.createControlLoops(controlLoops);
+        var automationCompositions =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "CommandPassive");
+        instantiationProvider.createAutomationCompositions(automationCompositions);
 
-        InstantiationCommand command =
-            InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON,
-                "CommandPassive");
+        InstantiationCommand command = InstantiationUtils
+            .getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "CommandPassive");
 
         invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
         resp = invocationBuilder.put(Entity.json(command));
@@ -513,7 +529,7 @@ class InstantiationControllerTest extends CommonRestController {
     }
 
     private synchronized void deleteEntryInDB() throws Exception {
-        controlLoopRepository.deleteAll();
+        automationCompositionRepository.deleteAll();
         var list = serviceTemplateProvider.getAllServiceTemplates();
         if (!list.isEmpty()) {
             serviceTemplateProvider.deleteServiceTemplate(list.get(0).getName(), list.get(0).getVersion());
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.main.rest;
+package org.onap.policy.clamp.acm.runtime.main.rest;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -27,7 +27,7 @@ import javax.ws.rs.core.Response;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
-import org.onap.policy.clamp.controlloop.runtime.util.rest.CommonRestController;
+import org.onap.policy.clamp.acm.runtime.util.rest.CommonRestController;
 import org.springframework.boot.test.autoconfigure.actuate.metrics.AutoConfigureMetrics;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/monitoring/TestMonitoringProvider.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/monitoring/TestMonitoringProvider.java
new file mode 100644 (file)
index 0000000..aabc254
--- /dev/null
@@ -0,0 +1,321 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.runtime.monitoring;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyMap;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.File;
+import java.time.Instant;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.UUID;
+import javax.ws.rs.core.Response;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+import org.onap.policy.clamp.models.acm.concepts.AcElementStatisticsList;
+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.ParticipantStatisticsList;
+import org.onap.policy.clamp.models.acm.persistence.provider.AcElementStatisticsProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantStatisticsProvider;
+import org.onap.policy.common.utils.coder.Coder;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.common.utils.coder.StandardCoder;
+import org.onap.policy.models.base.PfModelRuntimeException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+
+class TestMonitoringProvider {
+
+    private static final String AC_PARTICIPANT_STATISTICS_JSON =
+        "src/test/resources/rest/monitoring/TestParticipantStatistics.json";
+    private static final String INVALID_PARTICIPANT_JSON_INPUT =
+        "src/test/resources/rest/monitoring/TestParticipantStatistics_Invalid.json";
+    private static final String AC_ELEMENT_STATISTICS_JSON =
+        "src/test/resources/rest/monitoring/TestAcElementStatistics.json";
+    private static final String INVALID_AC_ELEMENT_JSON_INPUT =
+        "src/test/resources/rest/monitoring/TestAcElementStatistics_Invalid.json";
+    private static final Coder CODER = new StandardCoder();
+
+    private static final String STAT_LIST_IS_NULL = ".*StatisticsList is marked .*ull but is null";
+    private static final String PARTICIPANT_STAT_LIST_IS_NULL =
+        "participantStatisticsList is marked .*null but is null";
+    private static final String NAME_IS_NULL = "name is marked .*null but is null";
+    private static final String AC_LIST_IS_NULL = "acElementStatisticsList is marked .*null but is null";
+    private static final String ID_VERSION1 = "1.001";
+    private static final String ID_VERSION2 = "1.002";
+    private static final String ID_NAME1 = "name1";
+    private static final String ID_NAME2 = "name2";
+    private static final String SORT_DESC = "DESC";
+    private static final String ID_NAME3 = "testACName";
+    private static final String ID_INVALID_NAME = "invalidACName";
+    private static ParticipantStatisticsList inputParticipantStatistics;
+    private static ParticipantStatisticsList invalidParticipantInput;
+    private static AcElementStatisticsList inputAcElementStatistics;
+    private static AcElementStatisticsList invalidAcElementInput;
+
+    @BeforeAll
+    public static void beforeSetupStatistics() throws CoderException {
+        // Reading input json for statistics data
+        inputParticipantStatistics =
+            CODER.decode(new File(AC_PARTICIPANT_STATISTICS_JSON), ParticipantStatisticsList.class);
+        invalidParticipantInput =
+            CODER.decode(new File(INVALID_PARTICIPANT_JSON_INPUT), ParticipantStatisticsList.class);
+        inputAcElementStatistics = CODER.decode(new File(AC_ELEMENT_STATISTICS_JSON), AcElementStatisticsList.class);
+        invalidAcElementInput = CODER.decode(new File(INVALID_AC_ELEMENT_JSON_INPUT), AcElementStatisticsList.class);
+    }
+
+    @Test
+    void testCreateParticipantStatistics() throws Exception {
+        var participantStatisticsProvider = mock(ParticipantStatisticsProvider.class);
+        var acElementStatisticsProvider = mock(AcElementStatisticsProvider.class);
+        var acProvider = mock(AutomationCompositionProvider.class);
+        MonitoringProvider provider =
+            new MonitoringProvider(participantStatisticsProvider, acElementStatisticsProvider, acProvider);
+
+        when(participantStatisticsProvider.createParticipantStatistics(any()))
+            .thenReturn(inputParticipantStatistics.getStatisticsList());
+
+        when(participantStatisticsProvider.createParticipantStatistics(eq(null)))
+            .thenThrow(new PfModelRuntimeException(Response.Status.BAD_REQUEST, PARTICIPANT_STAT_LIST_IS_NULL));
+
+        // Creating statistics data in db with null input
+
+        assertThatThrownBy(() -> {
+            provider.createParticipantStatistics(null);
+        }).hasMessageMatching(STAT_LIST_IS_NULL);
+
+        assertThatThrownBy(() -> {
+            provider.createParticipantStatistics(invalidParticipantInput.getStatisticsList());
+        }).hasMessageMatching(PARTICIPANT_STAT_LIST_IS_NULL);
+
+        // Creating statistics data from input json
+        ParticipantStatisticsList createResponse =
+            provider.createParticipantStatistics(inputParticipantStatistics.getStatisticsList());
+
+        assertThat(createResponse.getStatisticsList()).hasSize(3);
+        assertEquals(createResponse.getStatisticsList().toString().replaceAll("\\s+", ""),
+            inputParticipantStatistics.getStatisticsList().toString().replaceAll("\\s+", ""));
+    }
+
+    @Test
+    void testGetParticipantStatistics() throws Exception {
+        var participantStatisticsProvider = mock(ParticipantStatisticsProvider.class);
+        when(participantStatisticsProvider.getFilteredParticipantStatistics(eq(ID_NAME1), any(), any(), any(), eq(null),
+            eq(SORT_DESC), eq(0))).thenReturn(List.of(inputParticipantStatistics.getStatisticsList().get(0)));
+
+        when(participantStatisticsProvider.getFilteredParticipantStatistics(eq(ID_NAME1), any(),
+            eq(Instant.parse("2021-01-11T12:00:00.000Z")), eq(Instant.parse("2021-01-11T16:00:00.000Z")), eq(null),
+            eq(SORT_DESC), eq(0))).thenReturn(List.of());
+
+        when(participantStatisticsProvider.getFilteredParticipantStatistics(eq(ID_NAME2), any(), any(), any(), eq(null),
+            eq(SORT_DESC), eq(1))).thenReturn(List.of(inputParticipantStatistics.getStatisticsList().get(2)));
+
+        var acProvider = mock(AutomationCompositionProvider.class);
+        var acElementStatisticsProvider = mock(AcElementStatisticsProvider.class);
+        MonitoringProvider provider =
+            new MonitoringProvider(participantStatisticsProvider, acElementStatisticsProvider, acProvider);
+        provider.createParticipantStatistics(inputParticipantStatistics.getStatisticsList());
+
+        assertThatThrownBy(() -> {
+            provider.fetchFilteredParticipantStatistics(null, null, 0, null, null);
+        }).hasMessageMatching(NAME_IS_NULL);
+
+        // Fetch specific statistics record with name, version and record count
+        ParticipantStatisticsList getResponse =
+            provider.fetchFilteredParticipantStatistics(ID_NAME2, ID_VERSION1, 1, null, null);
+        assertThat(getResponse.getStatisticsList()).hasSize(1);
+        assertEquals(getResponse.getStatisticsList().get(0).toString().replaceAll("\\s+", ""),
+            inputParticipantStatistics.getStatisticsList().get(2).toString().replaceAll("\\s+", ""));
+
+        // Fetch statistics using timestamp
+        getResponse = provider.fetchFilteredParticipantStatistics(ID_NAME1, ID_VERSION1, 0, null,
+            Instant.parse("2021-01-10T15:00:00.000Z"));
+        assertThat(getResponse.getStatisticsList()).hasSize(1);
+
+        getResponse = provider.fetchFilteredParticipantStatistics(ID_NAME1, ID_VERSION1, 0,
+            Instant.parse("2021-01-11T12:00:00.000Z"), Instant.parse("2021-01-11T16:00:00.000Z"));
+
+        assertThat(getResponse.getStatisticsList()).isEmpty();
+    }
+
+    @Test
+    void testCreateAcElementStatistics() throws Exception {
+        var acElementStatisticsProvider = mock(AcElementStatisticsProvider.class);
+        when(acElementStatisticsProvider.createAcElementStatistics(any()))
+            .thenReturn(inputAcElementStatistics.getAcElementStatistics());
+
+        when(acElementStatisticsProvider.createAcElementStatistics(eq(null)))
+            .thenThrow(new PfModelRuntimeException(Response.Status.BAD_REQUEST, AC_LIST_IS_NULL));
+
+        var acProvider = mock(AutomationCompositionProvider.class);
+
+        var participantStatisticsProvider = mock(ParticipantStatisticsProvider.class);
+        MonitoringProvider provider =
+            new MonitoringProvider(participantStatisticsProvider, acElementStatisticsProvider, acProvider);
+        // Creating statistics data in db with null input
+        assertThatThrownBy(() -> {
+            provider.createAcElementStatistics(null);
+        }).hasMessageMatching(STAT_LIST_IS_NULL);
+
+        assertThatThrownBy(() -> {
+            provider.createAcElementStatistics(invalidAcElementInput.getAcElementStatistics());
+        }).hasMessageMatching(AC_LIST_IS_NULL);
+
+        // Creating acElement statistics data from input json
+        AcElementStatisticsList createResponse =
+            provider.createAcElementStatistics(inputAcElementStatistics.getAcElementStatistics());
+
+        assertThat(createResponse.getAcElementStatistics()).hasSize(4);
+        assertEquals(createResponse.getAcElementStatistics().toString().replaceAll("\\s+", ""),
+            inputAcElementStatistics.getAcElementStatistics().toString().replaceAll("\\s+", ""));
+    }
+
+    @Test
+    void testGetAcElementStatistics() throws Exception {
+        var participantStatisticsProvider = mock(ParticipantStatisticsProvider.class);
+        var acElementStatisticsProvider = mock(AcElementStatisticsProvider.class);
+        var acProvider = mock(AutomationCompositionProvider.class);
+
+        when(acElementStatisticsProvider.getFilteredAcElementStatistics(eq(ID_NAME1), any(), any(), any(), anyMap(),
+            eq(SORT_DESC), eq(0)))
+                .thenReturn(List.of(inputAcElementStatistics.getAcElementStatistics().get(0),
+                    inputAcElementStatistics.getAcElementStatistics().get(1)));
+
+        when(acElementStatisticsProvider.getFilteredAcElementStatistics(eq(ID_NAME1), any(), any(), any(), anyMap(),
+            eq(SORT_DESC), eq(0)))
+                .thenReturn(List.of(inputAcElementStatistics.getAcElementStatistics().get(0),
+                    inputAcElementStatistics.getAcElementStatistics().get(1)));
+
+        MonitoringProvider provider =
+            new MonitoringProvider(participantStatisticsProvider, acElementStatisticsProvider, acProvider);
+        assertThatThrownBy(() -> {
+            provider.fetchFilteredAcElementStatistics(null, null, null, null, null, 0);
+        }).hasMessageMatching(NAME_IS_NULL);
+
+        provider.createAcElementStatistics(inputAcElementStatistics.getAcElementStatistics());
+
+        AcElementStatisticsList getResponse =
+            provider.fetchFilteredAcElementStatistics(ID_NAME1, null, null, null, null, 0);
+
+        assertThat(getResponse.getAcElementStatistics()).hasSize(2);
+        assertEquals(getResponse.getAcElementStatistics().get(0).toString().replaceAll("\\s+", ""),
+            inputAcElementStatistics.getAcElementStatistics().get(0).toString().replaceAll("\\s+", ""));
+
+        // Fetch specific statistics record with name, id and record count
+        getResponse = provider.fetchFilteredAcElementStatistics(ID_NAME1, ID_VERSION1,
+            "709c62b3-8918-41b9-a747-d21eb79c6c20", null, null, 0);
+        assertThat(getResponse.getAcElementStatistics()).hasSize(2);
+
+        // Fetch statistics using timestamp
+        getResponse = provider.fetchFilteredAcElementStatistics(ID_NAME1, ID_VERSION1, null,
+            Instant.parse("2021-01-10T13:45:00.000Z"), null, 0);
+        assertThat(getResponse.getAcElementStatistics()).hasSize(2);
+    }
+
+    @Test
+    void testGetParticipantStatsPerAc() throws Exception {
+        var participantStatisticsProvider = mock(ParticipantStatisticsProvider.class);
+        var acElementStatisticsProvider = mock(AcElementStatisticsProvider.class);
+        var mockAcProvider = Mockito.mock(AutomationCompositionProvider.class);
+        var provider =
+            new MonitoringProvider(participantStatisticsProvider, acElementStatisticsProvider, mockAcProvider);
+
+        provider.createParticipantStatistics(inputParticipantStatistics.getStatisticsList());
+
+        var automationComposition = new AutomationComposition();
+        var element = new AutomationCompositionElement();
+        element.setParticipantId(new ToscaConceptIdentifier(ID_NAME1, ID_VERSION1));
+        automationComposition.setElements(Map.of(UUID.randomUUID(), element));
+        when(mockAcProvider.findAutomationComposition(new ToscaConceptIdentifier(ID_NAME2, ID_VERSION1)))
+            .thenReturn(Optional.of(automationComposition));
+
+        when(participantStatisticsProvider.getFilteredParticipantStatistics(eq(ID_NAME1), eq(ID_VERSION1), any(), any(),
+            eq(null), eq(SORT_DESC), eq(0)))
+                .thenReturn(List.of(inputParticipantStatistics.getStatisticsList().get(0),
+                    inputParticipantStatistics.getStatisticsList().get(1)));
+
+        ParticipantStatisticsList getResponse =
+            provider.fetchParticipantStatsPerAutomationComposition(ID_NAME2, ID_VERSION1);
+        assertThat(getResponse.getStatisticsList()).hasSize(2);
+        assertEquals(getResponse.getStatisticsList().get(0).toString().replaceAll("\\s+", ""),
+            inputParticipantStatistics.getStatisticsList().get(0).toString().replaceAll("\\s+", ""));
+        assertThat(
+            provider.fetchParticipantStatsPerAutomationComposition(ID_INVALID_NAME, ID_VERSION2).getStatisticsList())
+                .isEmpty();
+    }
+
+    @Test
+    void testAcElementStatsPerAc() throws Exception {
+        // Setup a dummy automation composition data
+        var mockAcElement = new AutomationCompositionElement();
+        mockAcElement.setId(inputAcElementStatistics.getAcElementStatistics().get(0).getId());
+        mockAcElement.setParticipantId(new ToscaConceptIdentifier(
+            inputAcElementStatistics.getAcElementStatistics().get(0).getParticipantId().getName(),
+            inputAcElementStatistics.getAcElementStatistics().get(0).getParticipantId().getVersion()));
+        var mockAc = new AutomationComposition();
+        mockAc.setElements(new LinkedHashMap<>());
+        mockAc.getElements().put(mockAcElement.getId(), mockAcElement);
+
+        var participantStatisticsProvider = mock(ParticipantStatisticsProvider.class);
+        var acElementStatisticsProvider = mock(AcElementStatisticsProvider.class);
+        var mockAcProvider = Mockito.mock(AutomationCompositionProvider.class);
+        var monitoringProvider =
+            new MonitoringProvider(participantStatisticsProvider, acElementStatisticsProvider, mockAcProvider);
+
+        // Mock automation composition data to be returned for the given AC Id
+        when(mockAcProvider.findAutomationComposition(new ToscaConceptIdentifier(ID_NAME3, ID_VERSION1)))
+            .thenReturn(Optional.of(mockAc));
+
+        when(acElementStatisticsProvider.getFilteredAcElementStatistics(eq(ID_NAME1), eq(ID_VERSION1), any(), any(),
+            anyMap(), eq(SORT_DESC), eq(0)))
+                .thenReturn(List.of(inputAcElementStatistics.getAcElementStatistics().get(0),
+                    inputAcElementStatistics.getAcElementStatistics().get(1)));
+
+        monitoringProvider.createAcElementStatistics(inputAcElementStatistics.getAcElementStatistics());
+
+        AcElementStatisticsList getResponse =
+            monitoringProvider.fetchAcElementStatsPerAutomationComposition(ID_NAME3, ID_VERSION1);
+
+        assertThat(getResponse.getAcElementStatistics()).hasSize(2);
+        assertEquals(getResponse.getAcElementStatistics().get(1).toString().replaceAll("\\s+", ""),
+            inputAcElementStatistics.getAcElementStatistics().get(1).toString().replaceAll("\\s+", ""));
+
+        assertThat(monitoringProvider.fetchAcElementStatsPerAutomationComposition(ID_INVALID_NAME, ID_VERSION2)
+            .getAcElementStatistics()).isEmpty();
+
+        Map<String, ToscaConceptIdentifier> acElementIds =
+            monitoringProvider.getAllAcElementsIdPerAutomationComposition(ID_NAME3, ID_VERSION1);
+        assertThat(acElementIds)
+            .containsKey(inputAcElementStatistics.getAcElementStatistics().get(0).getId().toString());
+    }
+}
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.monitoring.rest;
+package org.onap.policy.clamp.acm.runtime.monitoring.rest;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -32,10 +32,10 @@ import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatisticsList;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatisticsList;
-import org.onap.policy.clamp.controlloop.runtime.monitoring.MonitoringProvider;
-import org.onap.policy.clamp.controlloop.runtime.util.rest.CommonRestController;
+import org.onap.policy.clamp.acm.runtime.monitoring.MonitoringProvider;
+import org.onap.policy.clamp.acm.runtime.util.rest.CommonRestController;
+import org.onap.policy.clamp.models.acm.concepts.AcElementStatisticsList;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantStatisticsList;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -50,23 +50,23 @@ import org.springframework.test.context.junit.jupiter.SpringExtension;
 @TestPropertySource(locations = {"classpath:application_test.properties"})
 class MonitoringQueryControllerTest extends CommonRestController {
 
-    private static final String CL_PARTICIPANT_STATISTICS_JSON =
+    private static final String AC_PARTICIPANT_STATISTICS_JSON =
             "src/test/resources/rest/monitoring/TestParticipantStatistics.json";
-    private static final String CL_ELEMENT_STATISTICS_JSON =
-            "src/test/resources/rest/monitoring/TestClElementStatistics.json";
+    private static final String AC_ELEMENT_STATISTICS_JSON =
+            "src/test/resources/rest/monitoring/TestAcElementStatistics.json";
 
     private static final Coder CODER = new StandardCoder();
 
     private static ParticipantStatisticsList inputParticipantStatistics;
-    private static ClElementStatisticsList inputClElementStatistics;
+    private static AcElementStatisticsList inputAcElementStatistics;
 
     private static ParticipantStatisticsList participantStatisticsList;
-    private static ClElementStatisticsList clElementStatisticsList;
+    private static AcElementStatisticsList acElementStatisticsList;
 
-    private static final String CLELEMENT_STATS_ENDPOINT = "monitoring/clelement";
+    private static final String AC_ELEMENT_STATS_ENDPOINT = "monitoring/acelement";
     private static final String PARTICIPANT_STATS_ENDPOINT = "monitoring/participant";
-    private static final String PARTICIPANT_STATS_PER_CL_ENDPOINT = "monitoring/participants/controlloop";
-    private static final String CLELEMENT_STATS_PER_CL_ENDPOINT = "monitoring/clelements/controlloop";
+    private static final String PARTICIPANT_STATS_PER_AC_ENDPOINT = "monitoring/participants/automationcomposition";
+    private static final String AC_ELEMENT_STATS_PER_AC_ENDPOINT = "monitoring/acelements/automationcomposition";
 
     @Autowired
     private MonitoringProvider monitoringProvider;
@@ -83,8 +83,8 @@ class MonitoringQueryControllerTest extends CommonRestController {
     public static void setUpBeforeAll() throws Exception {
 
         inputParticipantStatistics =
-                CODER.decode(new File(CL_PARTICIPANT_STATISTICS_JSON), ParticipantStatisticsList.class);
-        inputClElementStatistics = CODER.decode(new File(CL_ELEMENT_STATISTICS_JSON), ClElementStatisticsList.class);
+                CODER.decode(new File(AC_PARTICIPANT_STATISTICS_JSON), ParticipantStatisticsList.class);
+        inputAcElementStatistics = CODER.decode(new File(AC_ELEMENT_STATISTICS_JSON), AcElementStatisticsList.class);
     }
 
     @BeforeEach
@@ -94,78 +94,78 @@ class MonitoringQueryControllerTest extends CommonRestController {
         // Insert Participant statistics to DB
         participantStatisticsList =
                 monitoringProvider.createParticipantStatistics(inputParticipantStatistics.getStatisticsList());
-        // Insert CL Element statistics to DB
-        clElementStatisticsList =
-                monitoringProvider.createClElementStatistics(inputClElementStatistics.getClElementStatistics());
+        // Insert AC Element statistics to DB
+        acElementStatisticsList =
+                monitoringProvider.createAcElementStatistics(inputAcElementStatistics.getAcElementStatistics());
     }
 
     @Test
-    void testQuery_Unauthorized_for_ClElementStats() throws Exception {
-        assertUnauthorizedGet(CLELEMENT_STATS_ENDPOINT);
+    void testQuery_Unauthorized_for_AcElementStats() throws Exception {
+        assertUnauthorizedGet(AC_ELEMENT_STATS_ENDPOINT);
     }
 
     @Test
-    void testQuery_Unauthorized_for_ClParticipantStats() throws Exception {
+    void testQuery_Unauthorized_for_AcParticipantStats() throws Exception {
         assertUnauthorizedGet(PARTICIPANT_STATS_ENDPOINT);
     }
 
     @Test
-    void testQuery_Unauthorized_for_ParticipantStatsPerCl() throws Exception {
-        assertUnauthorizedGet(PARTICIPANT_STATS_PER_CL_ENDPOINT);
+    void testQuery_Unauthorized_for_ParticipantStatsPerAc() throws Exception {
+        assertUnauthorizedGet(PARTICIPANT_STATS_PER_AC_ENDPOINT);
     }
 
     @Test
-    void testQuery_Unauthorized_for_ClElementStatsPerCl() throws Exception {
-        assertUnauthorizedGet(CLELEMENT_STATS_PER_CL_ENDPOINT);
+    void testQuery_Unauthorized_for_AcElementStatsPerAc() throws Exception {
+        assertUnauthorizedGet(AC_ELEMENT_STATS_PER_AC_ENDPOINT);
     }
 
     @Test
-    void testSwagger_ClStats() throws Exception {
-        super.testSwagger(CLELEMENT_STATS_ENDPOINT);
+    void testSwagger_AcStats() throws Exception {
+        super.testSwagger(AC_ELEMENT_STATS_ENDPOINT);
         super.testSwagger(PARTICIPANT_STATS_ENDPOINT);
-        super.testSwagger(CLELEMENT_STATS_PER_CL_ENDPOINT);
-        super.testSwagger(PARTICIPANT_STATS_PER_CL_ENDPOINT);
+        super.testSwagger(AC_ELEMENT_STATS_PER_AC_ENDPOINT);
+        super.testSwagger(PARTICIPANT_STATS_PER_AC_ENDPOINT);
     }
 
     @Test
-    void testClElementStatisticsEndpoint() throws Exception {
+    void testAcElementStatisticsEndpoint() throws Exception {
         // Filter statistics only based on participant Id and UUID
-        Invocation.Builder invokeRequest1 = super.sendRequest(CLELEMENT_STATS_ENDPOINT + "?name="
-                + clElementStatisticsList.getClElementStatistics().get(0).getParticipantId().getName() + "&version="
-                + clElementStatisticsList.getClElementStatistics().get(0).getParticipantId().getVersion() + "&id="
-                + clElementStatisticsList.getClElementStatistics().get(0).getId().toString());
+        Invocation.Builder invokeRequest1 = super.sendRequest(AC_ELEMENT_STATS_ENDPOINT + "?name="
+                + acElementStatisticsList.getAcElementStatistics().get(0).getParticipantId().getName() + "&version="
+                + acElementStatisticsList.getAcElementStatistics().get(0).getParticipantId().getVersion() + "&id="
+                + acElementStatisticsList.getAcElementStatistics().get(0).getId().toString());
         Response response1 = invokeRequest1.buildGet().invoke();
         assertEquals(Response.Status.OK.getStatusCode(), response1.getStatus());
 
-        ClElementStatisticsList result1 = response1.readEntity(ClElementStatisticsList.class);
+        AcElementStatisticsList result1 = response1.readEntity(AcElementStatisticsList.class);
 
         assertNotNull(result1);
-        assertThat(result1.getClElementStatistics()).hasSize(2);
+        assertThat(result1.getAcElementStatistics()).hasSize(2);
 
-        var clElementStat0 = clElementStatisticsList.getClElementStatistics().get(0);
-        for (var clElement : result1.getClElementStatistics()) {
-            assertEquals(clElement.getParticipantId().asConceptKey(), clElementStat0.getParticipantId().asConceptKey());
-            assertEquals(clElement.getId(), clElementStat0.getId());
+        var acElementStat0 = acElementStatisticsList.getAcElementStatistics().get(0);
+        for (var acElement : result1.getAcElementStatistics()) {
+            assertEquals(acElement.getParticipantId().asConceptKey(), acElementStat0.getParticipantId().asConceptKey());
+            assertEquals(acElement.getId(), acElementStat0.getId());
         }
 
         // Filter statistics based on timestamp
-        Invocation.Builder invokeRequest2 = super.sendRequest(CLELEMENT_STATS_ENDPOINT + "?name="
-                + clElementStatisticsList.getClElementStatistics().get(1).getParticipantId().getName() + "&version="
-                + clElementStatisticsList.getClElementStatistics().get(1).getParticipantId().getVersion()
+        Invocation.Builder invokeRequest2 = super.sendRequest(AC_ELEMENT_STATS_ENDPOINT + "?name="
+                + acElementStatisticsList.getAcElementStatistics().get(1).getParticipantId().getName() + "&version="
+                + acElementStatisticsList.getAcElementStatistics().get(1).getParticipantId().getVersion()
                 + "&startTime=" + Instant.parse("2021-01-10T13:00:00.000Z") + "&endTime="
                 + Instant.parse("2021-01-10T14:00:00.000Z"));
         Response response2 = invokeRequest2.buildGet().invoke();
         assertEquals(Response.Status.OK.getStatusCode(), response2.getStatus());
-        ClElementStatisticsList result2 = response2.readEntity(ClElementStatisticsList.class);
+        AcElementStatisticsList result2 = response2.readEntity(AcElementStatisticsList.class);
 
         assertNotNull(result2);
-        assertThat(result2.getClElementStatistics()).hasSize(1);
-        assertEquals(result2.getClElementStatistics().get(0), clElementStat0);
+        assertThat(result2.getAcElementStatistics()).hasSize(1);
+        assertEquals(result2.getAcElementStatistics().get(0), acElementStat0);
     }
 
     @Test
-    void testClElementStats_BadRequest() throws Exception {
-        Invocation.Builder invokeRequest1 = super.sendRequest(CLELEMENT_STATS_ENDPOINT + "?version=1.0.0");
+    void testAcElementStats_BadRequest() throws Exception {
+        Invocation.Builder invokeRequest1 = super.sendRequest(AC_ELEMENT_STATS_ENDPOINT + "?version=1.0.0");
         Response response1 = invokeRequest1.buildGet().invoke();
         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response1.getStatus());
     }
@@ -207,9 +207,9 @@ class MonitoringQueryControllerTest extends CommonRestController {
     }
 
     @Test
-    void testParticipantStatsPerClEndpoint() throws Exception {
+    void testParticipantStatsPerAcEndpoint() throws Exception {
         Invocation.Builder invokeRequest1 =
-                super.sendRequest(PARTICIPANT_STATS_PER_CL_ENDPOINT + "?name=dummyName&version=1.001");
+                super.sendRequest(PARTICIPANT_STATS_PER_AC_ENDPOINT + "?name=dummyName&version=1.001");
         Response response1 = invokeRequest1.buildGet().invoke();
         assertEquals(Response.Status.OK.getStatusCode(), response1.getStatus());
         ParticipantStatisticsList result1 = response1.readEntity(ParticipantStatisticsList.class);
@@ -217,25 +217,25 @@ class MonitoringQueryControllerTest extends CommonRestController {
     }
 
     @Test
-    void testParticipantStatsPerCl_BadRequest() throws Exception {
-        Invocation.Builder invokeRequest1 = super.sendRequest(PARTICIPANT_STATS_PER_CL_ENDPOINT);
+    void testParticipantStatsPerAc_BadRequest() throws Exception {
+        Invocation.Builder invokeRequest1 = super.sendRequest(PARTICIPANT_STATS_PER_AC_ENDPOINT);
         Response response1 = invokeRequest1.buildGet().invoke();
         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response1.getStatus());
     }
 
     @Test
-    void testClElementStatisticsPerClEndpoint() throws Exception {
+    void testAcElementStatisticsPerAcEndpoint() throws Exception {
         Invocation.Builder invokeRequest1 =
-                super.sendRequest(CLELEMENT_STATS_PER_CL_ENDPOINT + "?name=dummyName&version=1.001");
+                super.sendRequest(AC_ELEMENT_STATS_PER_AC_ENDPOINT + "?name=dummyName&version=1.001");
         Response response1 = invokeRequest1.buildGet().invoke();
         assertEquals(Response.Status.OK.getStatusCode(), response1.getStatus());
-        ClElementStatisticsList result1 = response1.readEntity(ClElementStatisticsList.class);
-        assertThat(result1.getClElementStatistics()).isEmpty();
+        AcElementStatisticsList result1 = response1.readEntity(AcElementStatisticsList.class);
+        assertThat(result1.getAcElementStatistics()).isEmpty();
     }
 
     @Test
-    void testClElementStatsPerCl_BadRequest() throws Exception {
-        Invocation.Builder invokeRequest1 = super.sendRequest(CLELEMENT_STATS_PER_CL_ENDPOINT);
+    void testAcElementStatsPerAc_BadRequest() throws Exception {
+        Invocation.Builder invokeRequest1 = super.sendRequest(AC_ELEMENT_STATS_PER_AC_ENDPOINT);
         Response response1 = invokeRequest1.buildGet().invoke();
         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response1.getStatus());
     }
@@ -19,7 +19,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.supervision;
+package org.onap.policy.clamp.acm.runtime.supervision;
 
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
@@ -27,7 +27,7 @@ import static org.mockito.Mockito.timeout;
 import static org.mockito.Mockito.verify;
 
 import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatus;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 class SupervisionAspectTest {
diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandlerTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandlerTest.java
new file mode 100644 (file)
index 0000000..99e509c
--- /dev/null
@@ -0,0 +1,319 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.runtime.supervision;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyList;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.UUID;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
+import org.onap.policy.clamp.acm.runtime.monitoring.MonitoringProvider;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionStateChangePublisher;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionUpdatePublisher;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantDeregisterAckPublisher;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantRegisterAckPublisher;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantUpdatePublisher;
+import org.onap.policy.clamp.common.acm.exception.AutomationCompositionException;
+import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
+import org.onap.policy.clamp.models.acm.concepts.Participant;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantStatistics;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.AutomationCompositionAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantMessageType;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantStatus;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantUpdateAck;
+import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ServiceTemplateProvider;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+
+class SupervisionHandlerTest {
+    private static final String TOSCA_TEMPLATE_YAML =
+        "src/test/resources/rest/servicetemplates/tosca-for-smoke-testing.yaml";
+    private static final String AC_INSTANTIATION_CREATE_JSON =
+        "src/test/resources/rest/acm/AutomationCompositions.json";
+    private static final ToscaConceptIdentifier identifier = new ToscaConceptIdentifier("PMSHInstance0Crud", "1.0.1");
+    private static final ToscaConceptIdentifier participantId = new ToscaConceptIdentifier("ParticipantId", "1.0.0");
+    private static final ToscaConceptIdentifier participantType =
+        new ToscaConceptIdentifier("ParticipantType", "1.0.0");
+
+    @Test
+    void testTriggerAutomationCompositionSupervisionEmpty()
+        throws AutomationCompositionException, PfModelException, CoderException {
+        var handler =
+            createSupervisionHandler(mock(AutomationCompositionProvider.class), mock(ParticipantProvider.class),
+                mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
+                mock(ParticipantDeregisterAckPublisher.class), mock(AutomationCompositionUpdatePublisher.class),
+                mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE);
+
+        assertThatThrownBy(() -> handler.triggerAutomationCompositionSupervision(List.of()))
+            .hasMessageMatching("The list of automation compositions for supervision is empty");
+    }
+
+    @Test
+    void testTriggerAutomationCompositionSupervision()
+        throws AutomationCompositionException, PfModelException, CoderException {
+        var automationCompositionProvider = mock(AutomationCompositionProvider.class);
+        var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
+        var handler = createSupervisionHandler(automationCompositionProvider, mock(ParticipantProvider.class),
+            mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
+            mock(ParticipantDeregisterAckPublisher.class), automationCompositionUpdatePublisher,
+            mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE);
+
+        handler.triggerAutomationCompositionSupervision(List.of(identifier));
+
+        verify(automationCompositionUpdatePublisher).send(any(AutomationComposition.class));
+        verify(automationCompositionProvider).saveAutomationComposition(any(AutomationComposition.class));
+    }
+
+    @Test
+    void testTriggerAutomationCompositionUninitialised()
+        throws AutomationCompositionException, PfModelException, CoderException {
+        var automationCompositionProvider = mock(AutomationCompositionProvider.class);
+        var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
+        var handler = createSupervisionHandler(automationCompositionProvider, mock(ParticipantProvider.class),
+            mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
+            mock(ParticipantDeregisterAckPublisher.class), automationCompositionUpdatePublisher,
+            mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.UNINITIALISED);
+
+        assertThatThrownBy(() -> handler.triggerAutomationCompositionSupervision(List.of(identifier)))
+            .hasMessageMatching("Automation composition is already in state UNINITIALISED");
+    }
+
+    @Test
+    void testTriggerAutomationCompositionRunning()
+        throws AutomationCompositionException, PfModelException, CoderException {
+        var automationCompositionProvider = mock(AutomationCompositionProvider.class);
+        var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
+        var handler = createSupervisionHandler(automationCompositionProvider, mock(ParticipantProvider.class),
+            mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
+            mock(ParticipantDeregisterAckPublisher.class), automationCompositionUpdatePublisher,
+            mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.RUNNING);
+
+        assertThatThrownBy(() -> handler.triggerAutomationCompositionSupervision(List.of(identifier)))
+            .hasMessageMatching("Automation composition can't transition from state UNINITIALISED to state RUNNING");
+    }
+
+    @Test
+    void testHandleAutomationCompositionStateChangeAckMessage() throws PfModelException, CoderException {
+        var automationCompositionProvider = mock(AutomationCompositionProvider.class);
+        var handler = createSupervisionHandler(automationCompositionProvider, mock(ParticipantProvider.class),
+            mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
+            mock(ParticipantDeregisterAckPublisher.class), mock(AutomationCompositionUpdatePublisher.class),
+            mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE);
+        var automationCompositionAckMessage =
+            new AutomationCompositionAck(ParticipantMessageType.AUTOMATION_COMPOSITION_STATECHANGE_ACK);
+        automationCompositionAckMessage.setAutomationCompositionResultMap(Map.of());
+        automationCompositionAckMessage.setAutomationCompositionId(identifier);
+
+        handler.handleAutomationCompositionStateChangeAckMessage(automationCompositionAckMessage);
+
+        verify(automationCompositionProvider).saveAutomationComposition(any(AutomationComposition.class));
+    }
+
+    @Test
+    void testHandleAutomationCompositionUpdateAckMessage() throws PfModelException, CoderException {
+        var automationCompositionAckMessage =
+            new AutomationCompositionAck(ParticipantMessageType.AUTOMATION_COMPOSITION_UPDATE_ACK);
+        automationCompositionAckMessage.setParticipantId(participantId);
+        automationCompositionAckMessage.setParticipantType(participantType);
+        automationCompositionAckMessage.setAutomationCompositionResultMap(Map.of());
+        automationCompositionAckMessage.setAutomationCompositionId(identifier);
+        var automationCompositionProvider = mock(AutomationCompositionProvider.class);
+        var handler = createSupervisionHandler(automationCompositionProvider, mock(ParticipantProvider.class),
+            mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
+            mock(ParticipantDeregisterAckPublisher.class), mock(AutomationCompositionUpdatePublisher.class),
+            mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE);
+
+        handler.handleAutomationCompositionUpdateAckMessage(automationCompositionAckMessage);
+
+        verify(automationCompositionProvider).saveAutomationComposition(any(AutomationComposition.class));
+    }
+
+    @Test
+    void testHandleParticipantDeregister() throws PfModelException, CoderException {
+        var participant = new Participant();
+        participant.setName(participantId.getName());
+        participant.setVersion(participantId.getVersion());
+        participant.setParticipantType(participantType);
+
+        var participantProvider = mock(ParticipantProvider.class);
+        when(participantProvider.findParticipant(participantId.getName(), participantId.getVersion()))
+            .thenReturn(Optional.of(participant));
+
+        var participantDeregisterMessage = new ParticipantDeregister();
+        participantDeregisterMessage.setMessageId(UUID.randomUUID());
+        participantDeregisterMessage.setParticipantId(participantId);
+        participantDeregisterMessage.setParticipantType(participantType);
+        var participantDeregisterAckPublisher = mock(ParticipantDeregisterAckPublisher.class);
+        var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class), participantProvider,
+            mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
+            participantDeregisterAckPublisher, mock(AutomationCompositionUpdatePublisher.class),
+            mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE);
+
+        handler.handleParticipantMessage(participantDeregisterMessage);
+
+        verify(participantProvider).saveParticipant(any());
+        verify(participantDeregisterAckPublisher).send(participantDeregisterMessage.getMessageId());
+    }
+
+    @Test
+    void testHandleParticipantRegister() throws PfModelException, CoderException {
+        var participant = new Participant();
+        participant.setName(participantId.getName());
+        participant.setVersion(participantId.getVersion());
+        participant.setParticipantType(participantType);
+
+        var participantRegisterMessage = new ParticipantRegister();
+        participantRegisterMessage.setMessageId(UUID.randomUUID());
+        participantRegisterMessage.setParticipantId(participantId);
+        participantRegisterMessage.setParticipantType(participantType);
+        var participantProvider = mock(ParticipantProvider.class);
+        var participantRegisterAckPublisher = mock(ParticipantRegisterAckPublisher.class);
+        var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class), participantProvider,
+            mock(MonitoringProvider.class), participantRegisterAckPublisher,
+            mock(ParticipantDeregisterAckPublisher.class), mock(AutomationCompositionUpdatePublisher.class),
+            mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE);
+
+        handler.handleParticipantMessage(participantRegisterMessage);
+
+        verify(participantProvider).saveParticipant(any());
+        verify(participantRegisterAckPublisher).send(participantRegisterMessage.getMessageId(), participantId,
+            participantType);
+    }
+
+    @Test
+    void testParticipantUpdateAck() throws PfModelException, CoderException {
+        var participant = new Participant();
+        participant.setName(participantId.getName());
+        participant.setVersion(participantId.getVersion());
+        participant.setParticipantType(participantType);
+
+        var participantProvider = mock(ParticipantProvider.class);
+        when(participantProvider.findParticipant(participantId.getName(), participantId.getVersion()))
+            .thenReturn(Optional.of(participant));
+
+        var participantUpdateAckMessage = new ParticipantUpdateAck();
+        participantUpdateAckMessage.setParticipantId(participantId);
+        participantUpdateAckMessage.setParticipantType(participantType);
+        participantUpdateAckMessage.setState(ParticipantState.PASSIVE);
+        var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class), participantProvider,
+            mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
+            mock(ParticipantDeregisterAckPublisher.class), mock(AutomationCompositionUpdatePublisher.class),
+            mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE);
+
+        handler.handleParticipantMessage(participantUpdateAckMessage);
+
+        verify(participantProvider).saveParticipant(any());
+    }
+
+    @Test
+    void testHandleParticipantStatus() throws PfModelException, CoderException {
+        var participantStatusMessage = new ParticipantStatus();
+        participantStatusMessage.setParticipantId(participantId);
+        participantStatusMessage.setParticipantType(participantType);
+        participantStatusMessage.setState(ParticipantState.PASSIVE);
+        participantStatusMessage.setHealthStatus(ParticipantHealthStatus.HEALTHY);
+        participantStatusMessage.setParticipantStatistics(new ParticipantStatistics());
+
+        var participantProvider = mock(ParticipantProvider.class);
+        var monitoringProvider = mock(MonitoringProvider.class);
+        var handler = createSupervisionHandler(mock(AutomationCompositionProvider.class), participantProvider,
+            monitoringProvider, mock(ParticipantRegisterAckPublisher.class),
+            mock(ParticipantDeregisterAckPublisher.class), mock(AutomationCompositionUpdatePublisher.class),
+            mock(ParticipantUpdatePublisher.class), AutomationCompositionOrderedState.PASSIVE);
+        handler.handleParticipantMessage(participantStatusMessage);
+
+        verify(participantProvider).saveParticipant(any());
+        verify(monitoringProvider).createParticipantStatistics(anyList());
+    }
+
+    @Test
+    void testHandleSendCommissionMessage() throws PfModelException, CoderException {
+        var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
+        var handler =
+            createSupervisionHandler(mock(AutomationCompositionProvider.class), mock(ParticipantProvider.class),
+                mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
+                mock(ParticipantDeregisterAckPublisher.class), mock(AutomationCompositionUpdatePublisher.class),
+                participantUpdatePublisher, AutomationCompositionOrderedState.PASSIVE);
+        handler.handleSendCommissionMessage(participantId.getName(), participantId.getVersion());
+
+        verify(participantUpdatePublisher).sendComissioningBroadcast(participantId.getName(),
+            participantId.getVersion());
+    }
+
+    @Test
+    void testHandleSendDeCommissionMessage() throws PfModelException, CoderException {
+        var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
+        var handler =
+            createSupervisionHandler(mock(AutomationCompositionProvider.class), mock(ParticipantProvider.class),
+                mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
+                mock(ParticipantDeregisterAckPublisher.class), mock(AutomationCompositionUpdatePublisher.class),
+                participantUpdatePublisher, AutomationCompositionOrderedState.PASSIVE);
+        handler.handleSendDeCommissionMessage();
+
+        verify(participantUpdatePublisher).sendDecomisioning();
+    }
+
+    private SupervisionHandler createSupervisionHandler(AutomationCompositionProvider automationCompositionProvider,
+        ParticipantProvider participantProvider, MonitoringProvider monitoringProvider,
+        ParticipantRegisterAckPublisher participantRegisterAckPublisher,
+        ParticipantDeregisterAckPublisher participantDeregisterAckPublisher,
+        AutomationCompositionUpdatePublisher automationCompositionUpdatePublisher,
+        ParticipantUpdatePublisher participantUpdatePublisher, AutomationCompositionOrderedState orderedState)
+        throws PfModelException, CoderException {
+        var automationCompositionsCreate =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Crud");
+
+        var automationComposition = automationCompositionsCreate.getAutomationCompositionList().get(0);
+        automationComposition.setOrderedState(orderedState);
+
+        when(automationCompositionProvider.findAutomationComposition(identifier))
+            .thenReturn(Optional.of(automationComposition));
+        when(automationCompositionProvider.getAutomationComposition(identifier)).thenReturn(automationComposition);
+
+        var serviceTemplateProvider = Mockito.mock(ServiceTemplateProvider.class);
+        when(serviceTemplateProvider.getServiceTemplateList(any(), any()))
+            .thenReturn(List.of(InstantiationUtils.getToscaServiceTemplate(TOSCA_TEMPLATE_YAML)));
+
+        var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
+
+        return new SupervisionHandler(automationCompositionProvider, participantProvider, monitoringProvider,
+            serviceTemplateProvider, automationCompositionUpdatePublisher, automationCompositionStateChangePublisher,
+            participantRegisterAckPublisher, participantDeregisterAckPublisher, participantUpdatePublisher);
+
+    }
+}
diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScannerTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScannerTest.java
new file mode 100644 (file)
index 0000000..cd1a49b
--- /dev/null
@@ -0,0 +1,214 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.acm.runtime.supervision;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.List;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionStateChangePublisher;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionUpdatePublisher;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantStatusReqPublisher;
+import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantUpdatePublisher;
+import org.onap.policy.clamp.acm.runtime.util.CommonTestData;
+import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
+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.Participant;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantHealthStatus;
+import org.onap.policy.clamp.models.acm.concepts.ParticipantState;
+import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ServiceTemplateProvider;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+
+class SupervisionScannerTest {
+
+    private static final String TOSCA_SERVICE_TEMPLATE_YAML =
+        "src/test/resources/rest/servicetemplates/tosca-for-smoke-testing.yaml";
+    private static final String AC_JSON = "src/test/resources/rest/acm/AutomationCompositionsSmoke.json";
+
+    private static ServiceTemplateProvider serviceTemplateProvider = mock(ServiceTemplateProvider.class);
+
+    @BeforeAll
+    public static void setUpBeforeAll() throws Exception {
+        ToscaServiceTemplate serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
+        when(serviceTemplateProvider.getAllServiceTemplates()).thenReturn(List.of(serviceTemplate));
+    }
+
+    @Test
+    void testScannerOrderedStateEqualsToState() throws PfModelException, CoderException {
+        var automationCompositionProvider = mock(AutomationCompositionProvider.class);
+        var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
+        var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
+        var participantProvider = mock(ParticipantProvider.class);
+        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
+        var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
+        var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
+
+        var automationCompositions =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_JSON, "Crud").getAutomationCompositionList();
+        when(automationCompositionProvider.getAutomationCompositions()).thenReturn(automationCompositions);
+
+        var supervisionScanner = new SupervisionScanner(automationCompositionProvider, serviceTemplateProvider,
+            automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
+            participantStatusReqPublisher, participantUpdatePublisher, acRuntimeParameterGroup);
+        supervisionScanner.run(false);
+
+        verify(automationCompositionProvider, times(0)).saveAutomationComposition(any(AutomationComposition.class));
+    }
+
+    @Test
+    void testScannerOrderedStateDifferentToState() throws PfModelException, CoderException {
+        var automationCompositions =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_JSON, "Crud").getAutomationCompositionList();
+        automationCompositions.get(0).setState(AutomationCompositionState.UNINITIALISED2PASSIVE);
+        automationCompositions.get(0).setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
+        var automationCompositionProvider = mock(AutomationCompositionProvider.class);
+        when(automationCompositionProvider.getAutomationCompositions()).thenReturn(automationCompositions);
+
+        var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
+        var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
+        var participantProvider = mock(ParticipantProvider.class);
+        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
+        var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
+        var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
+
+        var supervisionScanner = new SupervisionScanner(automationCompositionProvider, serviceTemplateProvider,
+            automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
+            participantStatusReqPublisher, participantUpdatePublisher, acRuntimeParameterGroup);
+        supervisionScanner.run(false);
+
+        verify(automationCompositionProvider, times(1)).saveAutomationComposition(any(AutomationComposition.class));
+    }
+
+    @Test
+    void testScanner() throws PfModelException {
+        var automationCompositionProvider = mock(AutomationCompositionProvider.class);
+        var automationComposition = new AutomationComposition();
+        when(automationCompositionProvider.getAutomationCompositions()).thenReturn(List.of(automationComposition));
+
+        var participantProvider = mock(ParticipantProvider.class);
+        var participant = new Participant();
+        participant.setName("Participant0");
+        participant.setVersion("1.0.0");
+        when(participantProvider.getParticipants(null, null)).thenReturn(List.of(participant));
+
+        var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
+        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
+        var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
+        var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
+        var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
+
+        var supervisionScanner = new SupervisionScanner(automationCompositionProvider, serviceTemplateProvider,
+            automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
+            participantStatusReqPublisher, participantUpdatePublisher, acRuntimeParameterGroup);
+
+        supervisionScanner.handleParticipantStatus(participant.getKey().asIdentifier());
+        supervisionScanner.run(true);
+        verify(automationCompositionProvider, times(0)).saveAutomationComposition(any(AutomationComposition.class));
+        verify(participantStatusReqPublisher, times(0)).send(any(ToscaConceptIdentifier.class));
+    }
+
+    @Test
+    void testSendAutomationCompositionMsgUpdate() throws PfModelException, CoderException {
+        var automationCompositions =
+            InstantiationUtils.getAutomationCompositionsFromResource(AC_JSON, "Crud").getAutomationCompositionList();
+        automationCompositions.get(0).setState(AutomationCompositionState.UNINITIALISED2PASSIVE);
+        automationCompositions.get(0).setOrderedState(AutomationCompositionOrderedState.PASSIVE);
+        for (var element : automationCompositions.get(0).getElements().values()) {
+            if ("org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement"
+                .equals(element.getDefinition().getName())) {
+                element.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
+                element.setState(AutomationCompositionState.UNINITIALISED);
+            } else {
+                element.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
+                element.setState(AutomationCompositionState.PASSIVE);
+            }
+        }
+
+        var automationCompositionProvider = mock(AutomationCompositionProvider.class);
+        when(automationCompositionProvider.getAutomationCompositions()).thenReturn(automationCompositions);
+
+        var participantProvider = mock(ParticipantProvider.class);
+        var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
+        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
+        var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
+        var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
+        var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
+
+        var supervisionScanner = new SupervisionScanner(automationCompositionProvider, serviceTemplateProvider,
+            automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
+            participantStatusReqPublisher, participantUpdatePublisher, acRuntimeParameterGroup);
+
+        supervisionScanner.run(false);
+
+        verify(automationCompositionUpdatePublisher).send(any(AutomationComposition.class), anyInt());
+    }
+
+    @Test
+    void testScanParticipant() throws PfModelException {
+        var automationCompositionProvider = mock(AutomationCompositionProvider.class);
+        var automationComposition = new AutomationComposition();
+        when(automationCompositionProvider.getAutomationCompositions()).thenReturn(List.of(automationComposition));
+
+        var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanParticipant");
+        acRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().setMaxWaitMs(-1);
+        acRuntimeParameterGroup.getParticipantParameters().setMaxStatusWaitMs(-1);
+
+        var participant = new Participant();
+        participant.setName("Participant0");
+        participant.setVersion("1.0.0");
+        participant.setHealthStatus(ParticipantHealthStatus.HEALTHY);
+        participant.setParticipantState(ParticipantState.ACTIVE);
+        participant.setDefinition(new ToscaConceptIdentifier("unknown", "0.0.0"));
+        participant.setParticipantType(new ToscaConceptIdentifier("ParticipantType1", "1.0.0"));
+        var participantProvider = mock(ParticipantProvider.class);
+        when(participantProvider.getParticipants()).thenReturn(List.of(participant));
+
+        var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
+        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
+        var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
+        var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
+
+        var supervisionScanner = new SupervisionScanner(automationCompositionProvider, serviceTemplateProvider,
+            automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
+            participantStatusReqPublisher, participantUpdatePublisher, acRuntimeParameterGroup);
+
+        supervisionScanner.handleParticipantStatus(participant.getKey().asIdentifier());
+        supervisionScanner.run(true);
+        verify(participantStatusReqPublisher).send(any(ToscaConceptIdentifier.class));
+        verify(participantProvider).saveParticipant(any());
+
+        supervisionScanner.run(true);
+        verify(participantProvider, times(2)).saveParticipant(any());
+    }
+}
@@ -19,7 +19,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.supervision.comm;
+package org.onap.policy.clamp.acm.runtime.supervision.comm;
 
 import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -35,20 +35,20 @@ import java.util.UUID;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ClElementStatisticsProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ControlLoopProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantStatisticsProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ServiceTemplateProvider;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregister;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregisterAck;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegisterAck;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdateAck;
-import org.onap.policy.clamp.controlloop.runtime.monitoring.MonitoringProvider;
-import org.onap.policy.clamp.controlloop.runtime.supervision.SupervisionHandler;
-import org.onap.policy.clamp.controlloop.runtime.util.rest.CommonRestController;
+import org.onap.policy.clamp.acm.runtime.monitoring.MonitoringProvider;
+import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
+import org.onap.policy.clamp.acm.runtime.util.rest.CommonRestController;
+import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregister;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantDeregisterAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantRegisterAck;
+import org.onap.policy.clamp.models.acm.messages.dmaap.participant.ParticipantUpdateAck;
+import org.onap.policy.clamp.models.acm.persistence.provider.AcElementStatisticsProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantStatisticsProvider;
+import org.onap.policy.clamp.models.acm.persistence.provider.ServiceTemplateProvider;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.common.endpoints.event.comm.TopicSink;
 import org.onap.policy.models.base.PfModelException;
@@ -69,21 +69,21 @@ class SupervisionMessagesTest extends CommonRestController {
      */
     @BeforeAll
     public static void setupDbProviderParameters() throws PfModelException {
-        var clProvider = mock(ControlLoopProvider.class);
+        var acProvider = mock(AutomationCompositionProvider.class);
         var participantStatisticsProvider = mock(ParticipantStatisticsProvider.class);
-        var clElementStatisticsProvider = mock(ClElementStatisticsProvider.class);
+        var acElementStatisticsProvider = mock(AcElementStatisticsProvider.class);
         var monitoringProvider =
-                new MonitoringProvider(participantStatisticsProvider, clElementStatisticsProvider, clProvider);
+            new MonitoringProvider(participantStatisticsProvider, acElementStatisticsProvider, acProvider);
         var participantProvider = mock(ParticipantProvider.class);
         var serviceTemplateProvider = Mockito.mock(ServiceTemplateProvider.class);
-        var controlLoopUpdatePublisher = Mockito.mock(ControlLoopUpdatePublisher.class);
-        var controlLoopStateChangePublisher = Mockito.mock(ControlLoopStateChangePublisher.class);
+        var automationCompositionUpdatePublisher = Mockito.mock(AutomationCompositionUpdatePublisher.class);
+        var automationCompositionStateChangePublisher = Mockito.mock(AutomationCompositionStateChangePublisher.class);
         var participantRegisterAckPublisher = Mockito.mock(ParticipantRegisterAckPublisher.class);
         var participantDeregisterAckPublisher = Mockito.mock(ParticipantDeregisterAckPublisher.class);
         var participantUpdatePublisher = Mockito.mock(ParticipantUpdatePublisher.class);
-        supervisionHandler = new SupervisionHandler(clProvider, participantProvider, monitoringProvider,
-                serviceTemplateProvider, controlLoopUpdatePublisher, controlLoopStateChangePublisher,
-                participantRegisterAckPublisher, participantDeregisterAckPublisher, participantUpdatePublisher);
+        supervisionHandler = new SupervisionHandler(acProvider, participantProvider, monitoringProvider,
+            serviceTemplateProvider, automationCompositionUpdatePublisher, automationCompositionStateChangePublisher,
+            participantRegisterAckPublisher, participantDeregisterAckPublisher, participantUpdatePublisher);
     }
 
     @Test
@@ -94,9 +94,9 @@ class SupervisionMessagesTest extends CommonRestController {
         participantRegisterAckMsg.setResult(true);
 
         synchronized (lockit) {
-            ParticipantRegisterAckPublisher clRegisterAckPublisher = new ParticipantRegisterAckPublisher();
-            clRegisterAckPublisher.active(List.of(Mockito.mock(TopicSink.class)));
-            assertThatCode(() -> clRegisterAckPublisher.send(participantRegisterAckMsg)).doesNotThrowAnyException();
+            ParticipantRegisterAckPublisher acRegisterAckPublisher = new ParticipantRegisterAckPublisher();
+            acRegisterAckPublisher.active(List.of(Mockito.mock(TopicSink.class)));
+            assertThatCode(() -> acRegisterAckPublisher.send(participantRegisterAckMsg)).doesNotThrowAnyException();
         }
     }
 
@@ -109,10 +109,10 @@ class SupervisionMessagesTest extends CommonRestController {
 
         synchronized (lockit) {
             ParticipantDeregisterListener participantDeregisterListener =
-                    new ParticipantDeregisterListener(supervisionHandler);
+                new ParticipantDeregisterListener(supervisionHandler);
             assertThatCode(
-                    () -> participantDeregisterListener.onTopicEvent(INFRA, TOPIC, null, participantDeregisterMsg))
-                            .doesNotThrowAnyException();
+                () -> participantDeregisterListener.onTopicEvent(INFRA, TOPIC, null, participantDeregisterMsg))
+                    .doesNotThrowAnyException();
         }
     }
 
@@ -124,9 +124,9 @@ class SupervisionMessagesTest extends CommonRestController {
         participantDeregisterAckMsg.setResult(true);
 
         synchronized (lockit) {
-            ParticipantDeregisterAckPublisher clDeregisterAckPublisher = new ParticipantDeregisterAckPublisher();
-            clDeregisterAckPublisher.active(Collections.singletonList(Mockito.mock(TopicSink.class)));
-            assertThatCode(() -> clDeregisterAckPublisher.send(participantDeregisterAckMsg)).doesNotThrowAnyException();
+            ParticipantDeregisterAckPublisher acDeregisterAckPublisher = new ParticipantDeregisterAckPublisher();
+            acDeregisterAckPublisher.active(Collections.singletonList(Mockito.mock(TopicSink.class)));
+            assertThatCode(() -> acDeregisterAckPublisher.send(participantDeregisterAckMsg)).doesNotThrowAnyException();
         }
     }
 
@@ -141,24 +141,24 @@ class SupervisionMessagesTest extends CommonRestController {
 
         synchronized (lockit) {
             ParticipantUpdateAckListener participantUpdateAckListener =
-                    new ParticipantUpdateAckListener(supervisionHandler);
+                new ParticipantUpdateAckListener(supervisionHandler);
             assertThatCode(() -> participantUpdateAckListener.onTopicEvent(INFRA, TOPIC, null, participantUpdateAckMsg))
-                    .doesNotThrowAnyException();
+                .doesNotThrowAnyException();
         }
     }
 
     @Test
-    void testSendControlLoopStateChangePublisherNotActive() {
-        var publisher = new ControlLoopStateChangePublisher();
-        assertThatThrownBy(() -> publisher.send(getControlLoop(), 0)).hasMessage(NOT_ACTIVE);
+    void testSendAutomationCompositionStateChangePublisherNotActive() {
+        var publisher = new AutomationCompositionStateChangePublisher();
+        assertThatThrownBy(() -> publisher.send(getAutomationComposition(), 0)).hasMessage(NOT_ACTIVE);
     }
 
     @Test
-    void testSendControlLoopStateChangePublisher() {
-        var publisher = new ControlLoopStateChangePublisher();
+    void testSendAutomationCompositionStateChangePublisher() {
+        var publisher = new AutomationCompositionStateChangePublisher();
         var topicSink = mock(TopicSink.class);
         publisher.active(List.of(topicSink));
-        publisher.send(getControlLoop(), 0);
+        publisher.send(getAutomationComposition(), 0);
         verify(topicSink).send(anyString());
     }
 
@@ -207,12 +207,12 @@ class SupervisionMessagesTest extends CommonRestController {
         verify(topicSink).send(anyString());
     }
 
-    private ControlLoop getControlLoop() {
-        var controlLoop = new ControlLoop();
-        controlLoop.setName("NAME");
-        controlLoop.setVersion("0.0.1");
-        controlLoop.setState(ControlLoopState.UNINITIALISED);
-        return controlLoop;
+    private AutomationComposition getAutomationComposition() {
+        var automationComposition = new AutomationComposition();
+        automationComposition.setName("NAME");
+        automationComposition.setVersion("0.0.1");
+        automationComposition.setState(AutomationCompositionState.UNINITIALISED);
+        return automationComposition;
     }
 
     private ToscaConceptIdentifier getParticipantId() {
@@ -220,6 +220,6 @@ class SupervisionMessagesTest extends CommonRestController {
     }
 
     private ToscaConceptIdentifier getParticipantType() {
-        return new ToscaConceptIdentifier("org.onap.policy.controlloop.PolicyControlLoopParticipant", "2.3.1");
+        return new ToscaConceptIdentifier("org.onap.policy.acm.PolicyAutomationCompositionParticipant", "2.3.1");
     }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.util;
+package org.onap.policy.clamp.acm.runtime.util;
 
 import java.util.List;
 import javax.ws.rs.core.Response.Status;
-import org.onap.policy.clamp.controlloop.common.exception.ControlLoopRuntimeException;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.clamp.controlloop.runtime.main.parameters.ClRuntimeParameterGroup;
+import org.onap.policy.clamp.acm.runtime.main.parameters.AcRuntimeParameterGroup;
+import org.onap.policy.clamp.common.acm.exception.AutomationCompositionRuntimeException;
+import org.onap.policy.clamp.models.acm.concepts.Participant;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
@@ -44,30 +44,31 @@ public class CommonTestData {
     private static final Coder CODER = new StandardCoder();
 
     /**
-     * Gets the standard Control Loop parameters.
+     * Gets the standard automation composition parameters.
      *
      * @param dbName the database name
-     * @return the standard Control Loop parameters
-     * @throws ControlLoopRuntimeException on errors reading the control loop parameters
+     * @return the standard automation composition parameters
+     * @throws AutomationCompositionRuntimeException on errors reading the automation composition parameters
      */
-    public static ClRuntimeParameterGroup geParameterGroup(final String dbName) {
+    public static AcRuntimeParameterGroup geParameterGroup(final String dbName) {
         try {
-            return CODER.convert(getParameterGroupAsString(dbName), ClRuntimeParameterGroup.class);
+            return CODER.convert(getParameterGroupAsString(dbName), AcRuntimeParameterGroup.class);
 
         } catch (CoderException e) {
-            throw new ControlLoopRuntimeException(Status.NOT_ACCEPTABLE, "cannot read Control Loop parameters", e);
+            throw new AutomationCompositionRuntimeException(Status.NOT_ACCEPTABLE,
+                "cannot read automation composition parameters", e);
         }
     }
 
     /**
-     * Gets the standard Control Loop parameters, as a String.
+     * Gets the standard automation composition parameters, as a String.
      *
      * @param dbName the database name
-     * @return the standard Control Loop parameters as string
+     * @return the standard automation composition parameters as string
      */
     public static String getParameterGroupAsString(final String dbName) {
         return ResourceUtils.getResourceAsString("src/test/resources/parameters/TestParameters.json")
-                .replace("${dbName}", "jdbc:h2:mem:" + dbName);
+            .replace("${dbName}", "jdbc:h2:mem:" + dbName);
     }
 
     /**
@@ -77,7 +78,7 @@ public class CommonTestData {
      * @return a new PolicyModelsProvider
      */
     public static PolicyModelsProvider getPolicyModelsProvider(
-            PolicyModelsProviderParameters databaseProviderParameters) {
+        PolicyModelsProviderParameters databaseProviderParameters) {
         try {
             return new PolicyModelsProviderFactory().createPolicyModelsProvider(databaseProviderParameters);
         } catch (PfModelException e) {
@@ -92,15 +93,16 @@ public class CommonTestData {
      */
     public static List<Participant> createParticipants() {
         var participant1 = createParticipant(
-                new ToscaConceptIdentifier("org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant", "2.3.4"),
-                new ToscaConceptIdentifier("org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
-                        "2.3.4"));
+            new ToscaConceptIdentifier("org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
+                "2.3.4"),
+            new ToscaConceptIdentifier("org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
+                "2.3.4"));
         var participant2 = createParticipant(
-                new ToscaConceptIdentifier("org.onap.policy.controlloop.PolicyControlLoopParticipant", "2.3.1"),
-                new ToscaConceptIdentifier("org.onap.policy.controlloop.PolicyControlLoopParticipant", "2.3.1"));
+            new ToscaConceptIdentifier("org.onap.policy.acm.PolicyAutomationCompositionParticipant", "2.3.1"),
+            new ToscaConceptIdentifier("org.onap.policy.acm.PolicyAutomationCompositionParticipant", "2.3.1"));
         var participant3 = createParticipant(
-                new ToscaConceptIdentifier("org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant", "2.2.1"),
-                new ToscaConceptIdentifier("org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant", "2.2.1"));
+            new ToscaConceptIdentifier("org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant", "2.2.1"),
+            new ToscaConceptIdentifier("org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant", "2.2.1"));
         return List.of(participant1, participant2, participant3);
     }
 
@@ -112,7 +114,7 @@ public class CommonTestData {
      * @return a new Participant
      */
     public static Participant createParticipant(ToscaConceptIdentifier participantType,
-            ToscaConceptIdentifier participantId) {
+        ToscaConceptIdentifier participantId) {
         var participant = new Participant();
         participant.setDefinition(participantId);
         participant.setParticipantType(participantType);
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.clamp.controlloop.runtime.util.rest;
+package org.onap.policy.clamp.acm.runtime.util.rest;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
@@ -42,7 +42,7 @@ import org.onap.policy.common.utils.network.NetworkUtil;
 public class CommonRestController {
 
     public static final String SELF = NetworkUtil.getHostname();
-    public static final String CONTEXT_PATH = "onap/controlloop";
+    public static final String CONTEXT_PATH = "onap/automationcomposition";
     public static final String ENDPOINT_PREFIX = CONTEXT_PATH + "/v2/";
     public static final String ACTUATOR_ENDPOINT = CONTEXT_PATH + "/actuator/";
 
@@ -19,18 +19,18 @@ spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.HSQLDialect
 spring.jpa.properties.hibernate.format_sql=true
 
 server.port=6969
-server.servlet.context-path=/onap/controlloop
+server.servlet.context-path=/onap/automationcomposition
 server.error.path=/error
 
 runtime.participantParameters.heartBeatMs=20000
 runtime.participantParameters.maxStatusWaitMs=100000
 runtime.participantParameters.updateParameters.maxRetryCount=3
 runtime.participantParameters.updateParameters.maxWaitMs=20000
-runtime.topicParameterGroup.topicSources[0].topic=POLICY-CLRUNTIME-PARTICIPANT
+runtime.topicParameterGroup.topicSources[0].topic=POLICY-ACRUNTIME-PARTICIPANT
 runtime.topicParameterGroup.topicSources[0].servers[0]=localhost
 runtime.topicParameterGroup.topicSources[0].topicCommInfrastructure=dmaap
 runtime.topicParameterGroup.topicSources[0].fetchTimeout=15000
-runtime.topicParameterGroup.topicSinks[0].topic=POLICY-CLRUNTIME-PARTICIPANT
+runtime.topicParameterGroup.topicSinks[0].topic=POLICY-ACRUNTIME-PARTICIPANT
 runtime.topicParameterGroup.topicSinks[0].servers[0]=localhost
 runtime.topicParameterGroup.topicSinks[0].topicCommInfrastructure=dmaap
 
@@ -1,8 +1,8 @@
 {
-    "name": "ControlLoopRuntimeGroup",
+    "name": "AutomationCompositionRuntimeGroup",
     "supervisionScannerIntervalSec": 1000,
-    "participantClUpdateIntervalSec": 1000,
-    "participantClStateChangeIntervalSec": 1000,
+    "participantAcUpdateIntervalSec": 1000,
+    "participantAcStateChangeIntervalSec": 1000,
     "participantParameters": {
         "heartBeatMs": 120000,
         "maxStatusWaitMs": 100000,
@@ -23,7 +23,7 @@
     "topicParameterGroup": {
         "topicSources": [
             {
-                "topic": "POLICY-CLRUNTIME-PARTICIPANT",
+                "topic": "POLICY-ACRUNTIME-PARTICIPANT",
                 "servers": [
                     "localhost"
                 ],
@@ -33,7 +33,7 @@
         ],
         "topicSinks": [
             {
-                "topic": "POLICY-CLRUNTIME-PARTICIPANT",
+                "topic": "POLICY-ACRUNTIME-PARTICIPANT",
                 "servers": [
                     "localhost"
                 ],
@@ -36,7 +36,7 @@
         <appender-ref ref="STDOUT" />
     </root>
 
-    <logger name="org.onap.policy.clamp.controlloop.runtime" level="trace" additivity="false">
+    <logger name="org.onap.policy.clamp.acm.runtime" level="trace" additivity="false">
         <appender-ref ref="STDOUT" />
     </logger>
 </configuration>
@@ -1,15 +1,15 @@
 {
-    "controlLoopList": [
+    "automationCompositionList": [
         {
             "name": "PMSHInstance0",
             "version": "1.0.1",
             "definition": {
-                "name": "org.onap.domain.pmsh.PMSHControlLoopDefinition",
+                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
                 "version": "1.2.3"
             },
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
-            "description": "PMSH control loop instance 0",
+            "description": "PMSH automation composition instance 0",
             "elements": {
                 "709c62b3-8918-41b9-a747-d21eb79c6c20": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "DCAE Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "DCAE Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c21": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Monitoring Policy Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "Monitoring Policy Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c22": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c22",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Operational Policy Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "Operational Policy Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c23": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c23",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "CDS Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "CDS Automation Composition Element for the PMSH instance 0 automation composition"
                 }
             }
         },
             "name": "PMSHInstance1",
             "version": "1.0.1",
             "definition": {
-                "name": "org.onap.domain.pmsh.PMSHControlLoopDefinition",
+                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
                 "version": "1.2.3"
             },
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
-            "description": "PMSH control loop instance 1",
+            "description": "PMSH automation composition instance 1",
             "elements": {
                 "709c62b3-8918-41b9-a747-d21eb79c6c24": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c24",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "DCAE Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "DCAE Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c25": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c25",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Monitoring Policy Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "Monitoring Policy Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c26": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c26",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Operational Policy Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "Operational Policy Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c27": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c27",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "CDS Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "CDS Automation Composition Element for the PMSH instance 1 automation composition"
                 }
             }
         }
@@ -1,15 +1,15 @@
 {
-    "controlLoopList": [
+    "automationCompositionList": [
         {
             "name": "PMSHInstance0",
             "version": "1.0.1",
             "definition": {
-                "name": "org.onap.domain.pmsh.PMSHControlLoopDefinition",
+                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
                 "version": "1.2.3"
             },
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
-            "description": "PMSH control loop instance 0",
+            "description": "PMSH automation composition instance 0",
             "elements": {
                 "709c62b3-8918-41b9-a747-d21eb79c6c20": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
                         "version": "1.0.0"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "DCAE Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "DCAE Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c21": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Monitoring Policy Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "Monitoring Policy Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c22": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c22",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Operational Policy Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "Operational Policy Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c23": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c23",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "CDS Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "CDS Automation Composition Element for the PMSH instance 0 automation composition"
                 }
             }
         },
             "name": "PMSHInstance1",
             "version": "1.0.1",
             "definition": {
-                "name": "org.onap.domain.pmsh.PMSHControlLoopDefinition",
+                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
                 "version": "1.2.3"
             },
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
-            "description": "PMSH control loop instance 1",
+            "description": "PMSH automation composition instance 1",
             "elements": {
                 "709c62b3-8918-41b9-a747-d21eb79c6c24": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c24",
                         "version": "1.0.0"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "DCAE Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "DCAE Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c25": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c25",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Monitoring Policy Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "Monitoring Policy Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c26": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c26",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Operational Policy Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "Operational Policy Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c27": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c27",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "CDS Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "CDS Automation Composition Element for the PMSH instance 1 automation composition"
                 }
             }
         }
@@ -1,15 +1,15 @@
 {
-    "controlLoopList": [
+    "automationCompositionList": [
         {
             "name": "PMSHInstance0",
             "version": "1.0.1",
             "definition": {
-                "name": "org.onap.domain.pmsh.PMSHControlLoopDefinition",
+                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
                 "version": "1.2.3"
             },
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
-            "description": "PMSH control loop instance 0",
+            "description": "PMSH automation composition instance 0",
             "elements": {
                 "709c62b3-8918-41b9-a747-d21eb79c6c20": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "DCAE Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "DCAE Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c21": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Monitoring Policy Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "Monitoring Policy Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c22": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c22",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Operational Policy Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "Operational Policy Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c23": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c23",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "participantType": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "CDS Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "CDS Automation Composition Element for the PMSH instance 0 automation composition"
                 }
             }
         },
             "name": "PMSHInstance1",
             "version": "1.0.1",
             "definition": {
-                "name": "org.onap.domain.pmsh.PMSHControlLoopDefinition",
+                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
                 "version": "1.2.3"
             },
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
-            "description": "PMSH control loop instance 1",
+            "description": "PMSH automation composition instance 1",
             "elements": {
                 "709c62b3-8918-41b9-a747-d21eb79c6c24": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c24",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "DCAE Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "DCAE Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c25": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c25",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Monitoring Policy Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "Monitoring Policy Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c26": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c26",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Operational Policy Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "Operational Policy Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c27": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c27",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "participantType": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "CDS Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "CDS Automation Composition Element for the PMSH instance 1 automation composition"
                 }
             }
         }
@@ -1,15 +1,15 @@
 {
-    "controlLoopList": [
+    "automationCompositionList": [
         {
             "name": "PMSHInstance0",
             "version": "1.0.1",
             "definition": {
-                "name": "org.onap.domain.PMSHControlLoopDefinition",
+                "name": "org.onap.domain.PMSHAutomationCompositionDefinition",
                 "version": "1.2.3"
             },
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
-            "description": "PMSH control loop instance 0",
+            "description": "PMSH automation composition instance 0",
             "elements": {
                 "709c62b3-8918-41b9-a747-d21eb79c6c20": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "DCAE Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "DCAE Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c21": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Monitoring Policy Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "Monitoring Policy Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c22": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c22",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Operational Policy Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "Operational Policy Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c23": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c23",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "CDS Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "CDS Automation Composition Element for the PMSH instance 0 automation composition"
                 }
             }
         },
             "name": "PMSHInstance1",
             "version": "1.0.1",
             "definition": {
-                "name": "org.onap.domain.PMSHControlLoopDefinition",
+                "name": "org.onap.domain.PMSHAutomationCompositionDefinition",
                 "version": "1.2.3"
             },
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
-            "description": "PMSH control loop instance 1",
+            "description": "PMSH automation composition instance 1",
             "elements": {
                 "709c62b3-8918-41b9-a747-d21eb79c6c24": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c24",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "DCAE Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "DCAE Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c25": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c25",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Monitoring Policy Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "Monitoring Policy Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c26": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c26",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Operational Policy Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "Operational Policy Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c27": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c27",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantType": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "CDS Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "CDS Automation Composition Element for the PMSH instance 1 automation composition"
                 }
             }
         }
@@ -1,87 +1,87 @@
 {
-    "controlLoopList": [
+    "automationCompositionList": [
         {
             "name": "PMSHInstance0",
             "version": "1.0.1",
             "definition": {
-                "name": "org.onap.domain.pmsh.PMSHControlLoopDefinition",
+                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
                 "version": "1.2.3"
             },
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
-            "description": "PMSH control loop instance 0",
+            "description": "PMSH automation composition instance 0",
             "elements": {
                 "709c62b3-8918-41b9-a747-d21eb79c6c20": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
                     "definition": {
-                        "name": "org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement",
+                        "name": "org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "DCAE Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "DCAE Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c21": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Monitoring Policy Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "Monitoring Policy Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c22": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c22",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Operational Policy Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "Operational Policy Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c23": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c23",
                     "definition": {
-                        "name": "org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement",
+                        "name": "org.onap.domain.database.PMSH_K8SMicroserviceAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "participantType": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "CDS Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "CDS Automation Composition Element for the PMSH instance 0 automation composition"
                 }
             }
         },
             "name": "PMSHInstance1",
             "version": "1.0.1",
             "definition": {
-                "name": "org.onap.domain.pmsh.PMSHControlLoopDefinition",
+                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
                 "version": "1.2.3"
             },
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
-            "description": "PMSH control loop instance 1",
+            "description": "PMSH automation composition instance 1",
             "elements": {
                 "709c62b3-8918-41b9-a747-d21eb79c6c24": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c24",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "DCAE Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "DCAE Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c25": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c25",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Monitoring Policy Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "Monitoring Policy Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c26": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c26",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Operational Policy Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "Operational Policy Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c27": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c27",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "participantType": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "CDS Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "CDS Automation Composition Element for the PMSH instance 1 automation composition"
                 }
             }
         }
@@ -1,15 +1,15 @@
 {
-    "controlLoopList": [
+    "automationCompositionList": [
         {
             "name": "PMSHInstance0",
             "version": "1.0.1",
             "definition": {
-                "name": "org.onap.domain.pmsh.PMSHControlLoopDefinition",
+                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
                 "version": "1.2.3"
             },
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
-            "description": "PMSH control loop instance 1",
+            "description": "PMSH automation composition instance 1",
             "elements": {
                 "709c62b3-8918-41b9-a747-d21eb79c6c21": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "DCAE Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "DCAE Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c22": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c22",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Monitoring Policy Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "Monitoring Policy Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c23": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c23",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Operational Policy Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "Operational Policy Automation Composition Element for the PMSH instance 0 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c24": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c24",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "participantType": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "CDS Control Loop Element for the PMSH instance 0 control loop"
+                    "description": "CDS Automation Composition Element for the PMSH instance 0 automation composition"
                 }
             }
         },
             "name": "PMSHInstance1",
             "version": "1.0.1",
             "definition": {
-                "name": "org.onap.domain.pmsh.PMSHControlLoopDefinition",
+                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
                 "version": "1.2.3"
             },
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
-            "description": "PMSH control loop instance 1",
+            "description": "PMSH automation composition instance 1",
             "elements": {
                 "709c62b3-8918-41b9-a747-d21eb79c6c25": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c25",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant",
+                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "DCAE Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "DCAE Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c26": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c26",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Monitoring Policy Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "Monitoring Policy Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c27": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c27",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant",
+                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Operational Policy Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "Operational Policy Automation Composition Element for the PMSH instance 1 automation composition"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c28": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c28",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement",
+                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "participantType": {
-                        "name": "org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant",
+                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
                         "version": "2.2.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "CDS Control Loop Element for the PMSH instance 1 control loop"
+                    "description": "CDS Automation Composition Element for the PMSH instance 1 automation composition"
                 }
             }
         }
@@ -1,6 +1,6 @@
 {
     "orderedState": "PASSIVE",
-    "controlLoopIdentifierList": [
+    "automationCompositionIdentifierList": [
         {
             "name": "PMSHInstance0",
             "version": "1.0.1"
@@ -1,5 +1,5 @@
 {
-  "clElementStatistics":[
+  "acElementStatistics":[
     {
       "participantId":{
         "name":"name1",
@@ -7,8 +7,8 @@
       },
       "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
       "timeStamp": "2021-01-10T13:45:00.000Z",
-      "controlLoopState": "UNINITIALISED",
-      "clElementUptime":250
+      "state": "UNINITIALISED",
+      "acElementUptime":250
     },
     {
       "participantId":{
@@ -17,8 +17,8 @@
       },
       "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
       "timeStamp": "2021-01-10T15:45:00.000Z",
-      "controlLoopState": "UNINITIALISED",
-      "clElementUptime":450
+      "state": "UNINITIALISED",
+      "acElementUptime":450
     },
     {
       "participantId":{
@@ -27,8 +27,8 @@
       },
       "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
       "timeStamp": "2021-01-10T14:25:00.000Z",
-      "controlLoopState": "UNINITIALISED",
-      "clElementUptime":330
+      "state": "UNINITIALISED",
+      "acElementUptime":330
     },
     {
       "participantId":{
@@ -37,8 +37,8 @@
       },
       "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
       "timeStamp": "2021-01-10T16:35:00.000Z",
-      "controlLoopState": "UNINITIALISED",
-      "clElementUptime":650
+      "state": "UNINITIALISED",
+      "acElementUptime":650
     }
   ]
 }
\ No newline at end of file
@@ -1,13 +1,13 @@
 {
-  "clElementStatisticsList":[
+  "acElementStatisticsList":[
     {
       "participantId":{
         "name":"name1",
         "version":"1.001"
       },
       "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
-      "controlLoopState": "UNINITIALISED",
-      "clElementUptime":250
+      "state": "UNINITIALISED",
+      "acElementUptime":250
     }
   ]
 }
\ No newline at end of file
diff --git a/runtime-acm/src/test/resources/rest/servicetemplates/PMSHMultipleACTosca.yaml b/runtime-acm/src/test/resources/rest/servicetemplates/PMSHMultipleACTosca.yaml
new file mode 100644 (file)
index 0000000..4cbebc4
--- /dev/null
@@ -0,0 +1,232 @@
+tosca_definitions_version: tosca_simple_yaml_1_3
+data_types:
+  onap.datatypes.ToscaConceptIdentifier:
+    derived_from: tosca.datatypes.Root
+    properties:
+      name:
+        type: string
+        required: true
+      version:
+        type: string
+        required: true
+node_types:
+  org.onap.policy.clamp.acm.Participant:
+    version: 1.0.1
+    derived_from: tosca.nodetypes.Root
+    properties:
+      provider:
+        type: string
+        requred: false
+  org.onap.policy.clamp.acm.AutomationCompositionElement:
+    version: 1.0.1
+    derived_from: tosca.nodetypes.Root
+    properties:
+      provider:
+        type: string
+        requred: false
+      participantType:
+        type: onap.datatypes.ToscaConceptIdentifier
+        requred: true
+      startPhase:
+        type: integer
+        required: false
+        constraints:
+        - greater-or-equal: 0
+        metadata:
+            common: true
+        description: A value indicating the start phase in which this automation composition element will be started, the
+                     first start phase is zero. Automation Composition Elements are started in their start_phase order and stopped
+                     in reverse start phase order. Automation Composition Elements with the same start phase are started and
+                     stopped simultaneously
+  org.onap.policy.clamp.acm.AutomationComposition:
+    version: 1.0.1
+    derived_from: tosca.nodetypes.Root
+    properties:
+      provider:
+        type: string
+        requred: false
+      elements:
+        type: list
+        required: true
+        entry_schema:
+          type: onap.datatypes.ToscaConceptIdentifier
+  org.onap.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElement:
+    version: 1.0.1
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
+    properties:
+      dcae_blueprint_id:
+        type: onap.datatypes.ToscaConceptIdentifier
+        requred: true
+  org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement:
+    version: 1.0.1
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
+    properties:
+      policy_type_id:
+        type: onap.datatypes.ToscaConceptIdentifier
+        requred: true
+  org.onap.policy.clamp.acm.CDSAutomationCompositionElement:
+    version: 1.0.1
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
+    properties:
+      cds_blueprint_id:
+        type: onap.datatypes.ToscaConceptIdentifier
+        requred: true
+topology_template:
+  node_templates:
+    org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant:
+      version: 2.3.4
+      type: org.onap.policy.clamp.acm.Participant
+      type_version: 1.0.1
+      description: Participant for DCAE microservices
+      properties:
+        provider: ONAP
+    org.onap.policy.acm.PolicyAutomationCompositionParticipant:
+      version: 2.2.1
+      type: org.onap.policy.clamp.acm.Participant
+      type_version: 1.0.1
+      description: Participant for DCAE microservices
+      properties:
+        provider: ONAP
+    org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant:
+      version: 2.2.1
+      type: org.onap.policy.clamp.acm.Participant
+      type_version: 1.0.1
+      description: Participant for DCAE microservices
+      properties:
+        provider: ONAP
+    org.onap.domain.pmsh.PMSH_DCAEMicroservice:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element for the DCAE microservice for Performance Management Subscription Handling
+      properties:
+        provider: Ericsson
+        participantType:
+          name: org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant
+          version: 2.3.4
+        dcae_blueprint_id:
+          name: org.onap.dcae.blueprints.PMSHBlueprint
+          version: 1.0.0
+    org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element for the monitoring policy for Performance Management Subscription Handling
+      properties:
+        provider: Ericsson
+        participantType:
+          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
+          version: 2.2.1
+        policy_type_id:
+          name: onap.policies.monitoring.pm-subscription-handler
+          version: 1.0.0
+    org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element for the operational policy for Performance Management Subscription Handling
+      properties:
+        provider: Ericsson
+        participantType:
+          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
+          version: 2.2.1
+        policy_type_id:
+          name: onap.policies.operational.pm-subscription-handler
+          version: 1.0.0
+    org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.AutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element for CDS for Performance Management Subscription Handling
+      properties:
+        provider: Ericsson
+        participantType:
+          name: org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant
+          version: 3.2.1
+        cds_blueprint_id:
+          name: org.onap.ccsdk.cds.PMSHCdsBlueprint
+          version: 1.0.0
+    org.onap.domain.pmsh.PMSHAutomationCompositionDefinition:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.AutomationComposition
+      type_version: 1.0.0
+      description: Automation composition for Performance Management Subscription Handling
+      properties:
+        provider: Ericsson
+        elements:
+          - name: org.onap.domain.pmsh.PMSH_DCAEMicroservice
+            version: 1.2.3
+          - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement
+            version: 1.2.3
+          - name: org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement
+            version: 1.2.3
+          - name: org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement
+            version: 1.2.3
+    org.onap.domain.pmsh.PMSD_DCAEMicroservice:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element for the DCAE microservice for Performance Management Subscription Handling
+      properties:
+        provider: Ericsson
+        participantType:
+          name: org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant
+          version: 2.3.4
+        dcae_blueprint_id:
+          name: org.onap.dcae.blueprints.PMSDBlueprint
+          version: 1.0.0
+    org.onap.domain.pmsh.PMSD_MonitoringPolicyAutomationCompositionElement:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element for the monitoring policy for Performance Management Subscription Handling
+      properties:
+        provider: Ericsson
+        participantType:
+          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
+          version: 2.2.1
+        policy_type_id:
+          name: onap.policies.monitoring.pm-subscription-handler
+          version: 1.0.0
+    org.onap.domain.pmsh.PMSD_OperationalPolicyAutomationCompositionElement:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element for the operational policy for Performance Management Subscription Handling
+      properties:
+        provider: Ericsson
+        participantType:
+          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
+          version: 2.2.1
+        policy_type_id:
+          name: onap.policies.operational.pm-subscription-handler
+          version: 1.0.0
+    org.onap.domain.pmsh.PMSD_CDS_AutomationCompositionElement:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.AutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element for CDS for Performance Management Subscription Handling
+      properties:
+        provider: Ericsson
+        participantType:
+          name: org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant
+          version: 3.2.1
+        cds_blueprint_id:
+          name: org.onap.ccsdk.cds.PMSDCdsBlueprint
+          version: 1.0.0
+    org.onap.domain.pmsh.PMSDAutomationCompositionDefinition:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.AutomationComposition
+      type_version: 1.0.0
+      description: Automation composition for Performance Management Subscription Handling
+      properties:
+        provider: Ericsson
+        elements:
+          - name: org.onap.domain.pmsh.PMSD_DCAEMicroservice
+            version: 1.2.3
+          - name: org.onap.domain.pmsh.PMSD_MonitoringPolicyAutomationCompositionElement
+            version: 1.2.3
+          - name: org.onap.domain.pmsh.PMSD_OperationalPolicyAutomationCompositionElement
+            version: 1.2.3
+          - name: org.onap.domain.pmsh.PMSD_CDS_AutomationCompositionElement
+            version: 1.2.3
@@ -9,8 +9,8 @@ data_types:
       version:
         type: string
         required: true
-  org.onap.datatypes.policy.clamp.controlloop.DCAEMicroserviceControlLoopElementConsulInfo:
-    name: org.onap.datatypes.policy.clamp.controlloop.DCAEMicroserviceControlLoopElementConsulInfo
+  org.onap.datatypes.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElementConsulInfo:
+    name: org.onap.datatypes.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElementConsulInfo
     version: 0.0.0
     derived_from: tosca.datatypes.Root
     properties:
@@ -26,7 +26,7 @@ data_types:
         typeVersion: 0.0.0
         description: Body of Consul entry
         required: true
-  onap.datatype.controlloop.Target:
+  onap.datatype.acm.Target:
     derived_from: tosca.datatypes.Root
     description: Definition for a entity in A&AI to perform a control loop operation on
     properties:
@@ -50,7 +50,7 @@ data_types:
           clamp_possible_values: ClampExecution:CSAR_RESOURCES
         entry_schema:
           type: string
-  onap.datatype.controlloop.Actor:
+  onap.datatype.acm.Actor:
     derived_from: tosca.datatypes.Root
     description: An actor/operation/target definition
     properties:
@@ -67,7 +67,7 @@ data_types:
           clamp_possible_values: Dictionary:DefaultOperations,ClampExecution:CDS/operation
         required: true
       target:
-        type: onap.datatype.controlloop.Target
+        type: onap.datatype.acm.Target
         description: The resource the operation should be performed on.
         required: true
       payload:
@@ -78,7 +78,7 @@ data_types:
           clamp_possible_values: ClampExecution:CDS/payload
         entry_schema:
           type: string
-  onap.datatype.controlloop.Operation:
+  onap.datatype.acm.Operation:
     derived_from: tosca.datatypes.Root
     description: An operation supported by an actor
     properties:
@@ -91,7 +91,7 @@ data_types:
         description: A user-friendly description of the intent for the operation
         required: false
       operation:
-        type: onap.datatype.controlloop.Actor
+        type: onap.datatype.acm.Actor
         description: The definition of the operation to be performed.
         required: true
       timeout:
@@ -397,17 +397,17 @@ policy_types:
     version: 1.0.0
     derived_from: onap.policies.Monitoring
     metadata: {}
-  onap.policies.controlloop.operational.Common:
+  onap.policies.acm.operational.Common:
     derived_from: tosca.policies.Root
     version: 1.0.0
-    name: onap.policies.controlloop.operational.Common
+    name: onap.policies.acm.operational.Common
     description: |
-      Operational Policy for Control Loop execution. Originated in Frankfurt to support TOSCA Compliant
+      Operational Policy for Automation Composition execution. Originated in Frankfurt to support TOSCA Compliant
       Policy Types. This does NOT support the legacy Policy YAML policy type.
     properties:
       id:
         type: string
-        description: The unique control loop id.
+        description: The unique automation composition id.
         required: true
       timeout:
         type: integer
@@ -417,24 +417,24 @@ policy_types:
         required: true
       abatement:
         type: boolean
-        description: Whether an abatement event message will be expected for the control loop from DCAE.
+        description: Whether an abatement event message will be expected for the automation composition from DCAE.
         required: true
         default: false
       trigger:
         type: string
-        description: Initial operation to execute upon receiving an Onset event message for the Control Loop.
+        description: Initial operation to execute upon receiving an Onset event message for the Automation Composition.
         required: true
       operations:
         type: list
-        description: List of operations to be performed when Control Loop is triggered.
+        description: List of operations to be performed when Automation Composition is triggered.
         required: true
         entry_schema:
-          type: onap.datatype.controlloop.Operation
-  onap.policies.controlloop.operational.common.Apex:
-    derived_from: onap.policies.controlloop.operational.Common
+          type: onap.datatype.acm.Operation
+  onap.policies.acm.operational.common.Apex:
+    derived_from: onap.policies.acm.operational.Common
     type_version: 1.0.0
     version: 1.0.0
-    name: onap.policies.controlloop.operational.common.Apex
+    name: onap.policies.acm.operational.common.Apex
     description: Operational policies for Apex PDP
     properties:
       engineServiceParameters:
@@ -454,14 +454,14 @@ policy_types:
         description: Name/value pairs of properties to be set for APEX if needed.
         required: false
 node_types:
-  org.onap.policy.clamp.controlloop.Participant:
+  org.onap.policy.clamp.acm.Participant:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
       provider:
         type: string
         requred: false
-  org.onap.policy.clamp.controlloop.ControlLoopElement:
+  org.onap.policy.clamp.acm.AutomationCompositionElement:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
@@ -470,13 +470,13 @@ node_types:
         required: false
         metadata:
           common: true
-        description: Specifies the organization that provides the control loop element
+        description: Specifies the organization that provides the automation composition element
       participantType:
         type: onap.datatypes.ToscaConceptIdentifier
         required: true
         metadata:
           common: true
-        description: The identity of the participant type that hosts this type of Control Loop Element
+        description: The identity of the participant type that hosts this type of Automation Composition Element
       startPhase:
         type: integer
         required: false
@@ -484,9 +484,9 @@ node_types:
           - greater_or_equal: 0
         metadata:
           common: true
-        description: A value indicating the start phase in which this control loop element will be started, the
-          first start phase is zero. Control Loop Elements are started in their start_phase order and stopped
-          in reverse start phase order. Control Loop Elements with the same start phase are started and
+        description: A value indicating the start phase in which this automation composition element will be started, the
+          first start phase is zero. Automation Composition Elements are started in their start_phase order and stopped
+          in reverse start phase order. Automation Composition Elements with the same start phase are started and
           stopped simultaneously
       uninitializedToPassiveTimeout:
         type: integer
@@ -524,7 +524,7 @@ node_types:
         metadata:
           common: true
         description: The maximum time in seconds to wait for a state chage from passive to uninitialized
-  org.onap.policy.clamp.controlloop.ControlLoop:
+  org.onap.policy.clamp.acm.AutomationComposition:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
@@ -533,7 +533,7 @@ node_types:
         required: false
         metadata:
           common: true
-        description: Specifies the organization that provides the control loop element
+        description: Specifies the organization that provides the automation composition element
       elements:
         type: list
         required: true
@@ -541,10 +541,10 @@ node_types:
           common: true
         entry_schema:
           type: onap.datatypes.ToscaConceptIdentifier
-        description: Specifies a list of control loop element definitions that make up this control loop definition
-  org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement:
+        description: Specifies a list of automation composition element definitions that make up this automation composition definition
+  org.onap.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       dcae_blueprint_id:
         type: onap.datatypes.ToscaConceptIdentifier
@@ -556,10 +556,10 @@ node_types:
         type: list
         required: false
         entry_schema:
-          type: org.onap.datatypes.policy.clamp.controlloop.DCAEMicroserviceControlLoopElementConsulInfo
-  org.onap.policy.clamp.controlloop.PolicyControlLoopElement:
+          type: org.onap.datatypes.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElementConsulInfo
+  org.onap.policy.clamp.acm.PolicyAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       policy_type_id:
         type: onap.datatypes.ToscaConceptIdentifier
@@ -567,9 +567,9 @@ node_types:
       policy_id:
         type: onap.datatypes.ToscaConceptIdentifier
         requred: false
-  org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement:
+  org.onap.policy.clamp.acm.DerivedPolicyAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.PolicyAutomationCompositionElement
     properties:
       policy_type_id:
         type: onap.datatypes.ToscaConceptIdentifier
@@ -577,9 +577,9 @@ node_types:
       policy_id:
         type: onap.datatypes.ToscaConceptIdentifier
         requred: false
-  org.onap.policy.clamp.controlloop.DerivedDerivedPolicyControlLoopElement:
+  org.onap.policy.clamp.acm.DerivedDerivedPolicyAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.DerivedPolicyAutomationCompositionElement
     properties:
       policy_type_id:
         type: onap.datatypes.ToscaConceptIdentifier
@@ -587,9 +587,9 @@ node_types:
       policy_id:
         type: onap.datatypes.ToscaConceptIdentifier
         requred: false
-  org.onap.policy.clamp.controlloop.CDSControlLoopElement:
+  org.onap.policy.clamp.acm.CDSAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       cds_blueprint_id:
         type: onap.datatypes.ToscaConceptIdentifier
@@ -609,29 +609,29 @@ topology_template:
         name: operational.apex.pmcontrol
         version: 1.0.0
   node_templates:
-    org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant:
+    org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant:
       version: 2.3.4
-      type: org.onap.policy.clamp.controlloop.Participant
+      type: org.onap.policy.clamp.acm.Participant
       type_version: 1.0.1
       description: Participant for DCAE microservices
       properties:
         provider: ONAP
-    org.onap.policy.controlloop.PolicyControlLoopParticipant:
+    org.onap.policy.acm.PolicyAutomationCompositionParticipant:
       version: 2.3.1
-      type: org.onap.policy.clamp.controlloop.Participant
+      type: org.onap.policy.clamp.acm.Participant
       type_version: 1.0.1
       description: Participant for DCAE microservices
       properties:
         provider: ONAP
     org.onap.domain.pmsh.PMSH_DCAEMicroservice:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement
+      type: org.onap.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the DCAE microservice for Performance Management Subscription Handling
+      description: Automation composition element for the DCAE microservice for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant
+          name: org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant
           version: 2.3.4
         dcae_blueprint:
           tosca_definitions_version: cloudify_dsl_1_3
@@ -847,73 +847,73 @@ topology_template:
                       managedObjectDNsBasic:
                         - DN: dnc
                         - DN: dnd
-    org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement:
+    org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
+      type: org.onap.policy.clamp.acm.PolicyAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the monitoring policy for Performance Management Subscription Handling
+      description: Automation composition element for the monitoring policy for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
+          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
           version: 2.3.1
         policy_type_id:
           name: onap.policies.monitoring.pm-subscription-handler
           version: 1.0.0
         policy_id:
           get_input: pmsh_monitoring_policy
-    org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement:
+    org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
+      type: org.onap.policy.clamp.acm.PolicyAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the operational policy for Performance Management Subscription Handling
+      description: Automation composition element for the operational policy for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
+          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
           version: 2.3.1
         policy_type_id:
           name: onap.policies.operational.pm-subscription-handler
           version: 1.0.0
         policy_id:
           get_input: pmsh_operational_policy
-    org.onap.domain.pmsh.DerivedPolicyControlLoopElement:
+    org.onap.domain.pmsh.DerivedPolicyAutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement
+      type: org.onap.policy.clamp.acm.DerivedPolicyAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop for Performance Management Subscription Handling
+      description: Automation composition for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         elements:
           - name: org.onap.domain.pmsh.PMSH_DCAEMicroservice
             version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement
+          - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement
             version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement
+          - name: org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement
             version: 1.2.3
-    org.onap.domain.pmsh.DerivedDerivedPolicyControlLoopElement:
+    org.onap.domain.pmsh.DerivedDerivedPolicyAutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.DerivedDerivedPolicyControlLoopElement
+      type: org.onap.policy.clamp.acm.DerivedDerivedPolicyAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop for Performance Management Subscription Handling
+      description: Automation composition for Performance Management Subscription Handling
       properties:
         provider: Ericsson Software Technologies
         elements:
           - name: org.onap.domain.pmsh.PMSH_DerivedTestMicroservice
             version: 1.2.3
-    org.onap.domain.pmsh.PMSHControlLoopDefinition:
+    org.onap.domain.pmsh.PMSHAutomationCompositionDefinition:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoop
+      type: org.onap.policy.clamp.acm.AutomationComposition
       type_version: 1.0.0
-      description: Control loop for Performance Management Subscription Handling
+      description: Automation composition for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         elements:
           - name: org.onap.domain.pmsh.PMSH_DCAEMicroservice
             version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement
+          - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement
             version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement
+          - name: org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement
             version: 1.2.3
   policies:
     - MICROSERVICE_vLoadBalancerMS_v1_0_dcae-pm-subscription-handler_1_0_0test:
@@ -974,7 +974,7 @@ topology_template:
                           onap.datatypes.monitoring.managedObjectDNsBasic:
                             DN: dnd
     - operational.apex.pmcontrol:
-        type: onap.policies.controlloop.operational.common.Apex
+        type: onap.policies.acm.operational.common.Apex
         type_version: 1.0.0
         version: 1.0.0
         metadata:
@@ -3433,7 +3433,7 @@ topology_template:
                     jsonAdapters:
                       Instant:
                         adaptedClass: java.time.Instant
-                        adaptorClass: org.onap.policy.controlloop.util.Serialization$GsonInstantAdapter
+                        adaptorClass: org.onap.policy.acm.util.Serialization$GsonInstantAdapter
           eventInputParameters:
             DCAEConsumer:
               carrierTechnologyParameters:
@@ -444,7 +444,7 @@ topology_template:
     org.onap.controlloop0:
       type: org.onap.APP
       properties:
-        application_name: Test Control Loop
+        application_name: Test Automation Composition
         provider: Ericsson
         application_version: 1.0.0
         status: NOT_DEPLOYED
@@ -10,14 +10,14 @@ data_types:
         type: string
         required: true
 node_types:
-  org.onap.policy.clamp.controlloop.Participant:
+  org.onap.policy.clamp.acm.Participant:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
       provider:
         type: string
         requred: false
-  org.onap.policy.clamp.controlloop.ControlLoopElement:
+  org.onap.policy.clamp.acm.AutomationCompositionElement:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
@@ -34,11 +34,11 @@ node_types:
         - greater-or-equal: 0
         metadata:
             common: true
-        description: A value indicating the start phase in which this control loop element will be started, the
-                     first start phase is zero. Control Loop Elements are started in their start_phase order and stopped
-                     in reverse start phase order. Control Loop Elements with the same start phase are started and
+        description: A value indicating the start phase in which this automation composition element will be started, the
+                     first start phase is zero. Automation Composition Elements are started in their start_phase order and stopped
+                     in reverse start phase order. Automation Composition Elements with the same start phase are started and
                      stopped simultaneously
-  org.onap.policy.clamp.controlloop.ControlLoop:
+  org.onap.policy.clamp.acm.AutomationComposition:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
@@ -50,140 +50,140 @@ node_types:
         required: true
         entry_schema:
           type: onap.datatypes.ToscaConceptIdentifier
-  org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement:
+  org.onap.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       dcae_blueprint_id:
         type: onap.datatypes.ToscaConceptIdentifier
         requred: true
-  org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement:
+  org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       policy_type_id:
         type: onap.datatypes.ToscaConceptIdentifier
         requred: true
-  org.onap.policy.clamp.controlloop.CDSControlLoopElement:
+  org.onap.policy.clamp.acm.CDSAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       cds_blueprint_id:
         type: onap.datatypes.ToscaConceptIdentifier
         requred: true
 topology_template:
   node_templates:
-    org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant:
+    org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant:
       version: 2.3.4
-      type: org.onap.policy.clamp.controlloop.Participant
+      type: org.onap.policy.clamp.acm.Participant
       type_version: 1.0.1
       description: Participant for DCAE microservices
       properties:
         provider: ONAP
-    org.onap.policy.controlloop.PolicyControlLoopParticipant:
+    org.onap.policy.acm.PolicyAutomationCompositionParticipant:
       version: 2.2.1
-      type: org.onap.policy.clamp.controlloop.Participant
+      type: org.onap.policy.clamp.acm.Participant
       type_version: 1.0.1
       description: Participant for DCAE microservices
       properties:
         provider: ONAP
-    org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant:
+    org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant:
       version: 2.2.1
-      type: org.onap.policy.clamp.controlloop.Participant
+      type: org.onap.policy.clamp.acm.Participant
       type_version: 1.0.1
       description: Participant for DCAE microservices
       properties:
         provider: ONAP
     org.onap.domain.pmsh.PMSH_DCAEMicroservice:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement
+      type: org.onap.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the DCAE microservice for Performance Management Subscription Handling
+      description: Automation composition element for the DCAE microservice for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant
+          name: org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant
           version: 2.3.4
         dcae_blueprint_id:
           name: org.onap.dcae.blueprints.PMSHBlueprint
           version: 1.0.0
-    org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement:
+    org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement
+      type: org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the monitoring policy for Performance Management Subscription Handling
+      description: Automation composition element for the monitoring policy for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
+          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
           version: 2.2.1
         policy_type_id:
           name: onap.policies.monitoring.pm-subscription-handler
           version: 1.0.0
-    org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement:
+    org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement
+      type: org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the operational policy for Performance Management Subscription Handling
+      description: Automation composition element for the operational policy for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
+          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
           version: 2.2.1
         policy_type_id:
           name: onap.policies.operational.pm-subscription-handler
           version: 1.0.0
-    org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement:
+    org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoopElement
+      type: org.onap.policy.clamp.acm.AutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for CDS for Performance Management Subscription Handling
+      description: Automation composition element for CDS for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant
+          name: org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant
           version: 3.2.1
         cds_blueprint_id:
           name: org.onap.ccsdk.cds.PMSHCdsBlueprint
           version: 1.0.0
-    org.onap.domain.pmsh.PMSHControlLoopDefinition:
+    org.onap.domain.pmsh.PMSHAutomationCompositionDefinition:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoop
+      type: org.onap.policy.clamp.acm.AutomationComposition
       type_version: 1.0.0
-      description: Control loop for Performance Management Subscription Handling
+      description: Automation composition for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         elements:
           - name: org.onap.domain.pmsh.PMSH_DCAEMicroservice
             version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement
+          - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement
             version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement
+          - name: org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement
             version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement
+          - name: org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement
             version: 1.2.3
     org.onap.domain.pmsh.PMSD_DCAEMicroservice:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement
+      type: org.onap.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the DCAE microservice for Performance Management Subscription Handling
+      description: Automation composition element for the DCAE microservice for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant
+          name: org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant
           version: 2.3.4
         dcae_blueprint_id:
           name: org.onap.dcae.blueprints.PMSDBlueprint
           version: 1.0.0
-    org.onap.domain.pmsh.PMSD_MonitoringPolicyControlLoopElement:
+    org.onap.domain.pmsh.PMSD_MonitoringPolicyAutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement
+      type: org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the monitoring policy for Performance Management Subscription Handling
+      description: Automation composition element for the monitoring policy for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
+          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
           version: 2.2.1
         policy_type_id:
           name: onap.policies.monitoring.pm-subscription-handler
@@ -191,15 +191,15 @@ topology_template:
         policy_id:
           name: onap.policies.monitoring.pm-subscription-handler
           version: 1.0.0
-    org.onap.domain.pmsh.PMSD_OperationalPolicyControlLoopElement:
+    org.onap.domain.pmsh.PMSD_OperationalPolicyAutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement
+      type: org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the operational policy for Performance Management Subscription Handling
+      description: Automation composition element for the operational policy for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
+          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
           version: 2.2.1
         policy_type_id:
           name: onap.policies.operational.pm-subscription-handler
@@ -207,32 +207,32 @@ topology_template:
         policy_id:
           name: onap.policies.monitoring.pm-subscription-handler
           version: 1.0.0
-    org.onap.domain.pmsh.PMSD_CDS_ControlLoopElement:
+    org.onap.domain.pmsh.PMSD_CDS_AutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoopElement
+      type: org.onap.policy.clamp.acm.AutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for CDS for Performance Management Subscription Handling
+      description: Automation composition element for CDS for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participantType:
-          name: org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant
+          name: org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant
           version: 3.2.1
         cds_blueprint_id:
           name: org.onap.ccsdk.cds.PMSDCdsBlueprint
           version: 1.0.0
-    org.onap.domain.pmsh.PMSDControlLoopDefinition:
+    org.onap.domain.pmsh.PMSDAutomationCompositionDefinition:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoop
+      type: org.onap.policy.clamp.acm.AutomationComposition
       type_version: 1.0.0
-      description: Control loop for Performance Management Subscription Handling
+      description: Automation composition for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         elements:
           - name: org.onap.domain.pmsh.PMSD_DCAEMicroservice
             version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSD_MonitoringPolicyControlLoopElement
+          - name: org.onap.domain.pmsh.PMSD_MonitoringPolicyAutomationCompositionElement
             version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSD_OperationalPolicyControlLoopElement
+          - name: org.onap.domain.pmsh.PMSD_OperationalPolicyAutomationCompositionElement
             version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSD_CDS_ControlLoopElement
+          - name: org.onap.domain.pmsh.PMSD_CDS_AutomationCompositionElement
             version: 1.2.3
@@ -9,7 +9,7 @@ data_types:
       version:
         type: string
         required: true
-  onap.datatype.controlloop.Target:
+  onap.datatype.acm.Target:
     derived_from: tosca.datatypes.Root
     description: Definition for a entity in A&AI to perform a control loop operation on
     properties:
@@ -33,7 +33,7 @@ data_types:
           clamp_possible_values: ClampExecution:CSAR_RESOURCES
         entry_schema:
           type: string
-  onap.datatype.controlloop.Actor:
+  onap.datatype.acm.Actor:
     derived_from: tosca.datatypes.Root
     description: An actor/operation/target definition
     properties:
@@ -50,7 +50,7 @@ data_types:
           clamp_possible_values: Dictionary:DefaultOperations,ClampExecution:CDS/operation
         required: true
       target:
-        type: onap.datatype.controlloop.Target
+        type: onap.datatype.acm.Target
         description: The resource the operation should be performed on.
         required: true
       payload:
@@ -61,7 +61,7 @@ data_types:
           clamp_possible_values: ClampExecution:CDS/payload
         entry_schema:
           type: string
-  onap.datatype.controlloop.Operation:
+  onap.datatype.acm.Operation:
     derived_from: tosca.datatypes.Root
     description: An operation supported by an actor
     properties:
@@ -74,7 +74,7 @@ data_types:
         description: A user-friendly description of the intent for the operation
         required: false
       operation:
-        type: onap.datatype.controlloop.Actor
+        type: onap.datatype.acm.Actor
         description: The definition of the operation to be performed.
         required: true
       timeout:
@@ -355,7 +355,7 @@ data_types:
     version: 0.0.0
     derived_from: tosca.datatypes.Root
     metadata: {}
-  org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.RestRequest:
+  org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.RestRequest:
     version: 1.0.0
     derived_from: tosca.datatypes.Root
     properties:
@@ -383,7 +383,7 @@ data_types:
         required: true
         constraints: []
         description: THe expected HTTP status code for the REST request
-    org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.ConfigurationEntity:
+    org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity:
       version: 1.0.0
       derived_from: tosca.datatypes.Root
       properties:
@@ -391,11 +391,11 @@ data_types:
           type:  onap.datatypes.ToscaConceptIdentifier
           typeVersion: 1.0.0
           required: true
-          description: The name and version of a Configuration Entity to be handled by the HTTP Control Loop Element
+          description: The name and version of a Configuration Entity to be handled by the HTTP Automation Composition Element
         restSequence:
           type: list
           entry_schema:
-            type: org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.RestRequest
+            type: org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.RestRequest
             typeVersion: 1.0.0
           description: A sequence of REST commands to send to the REST endpoint
 policy_types:
@@ -423,12 +423,12 @@ policy_types:
     version: 1.0.0
     derived_from: onap.policies.Monitoring
     metadata: {}
-  onap.policies.controlloop.operational.Common:
+  onap.policies.acm.operational.Common:
     derived_from: tosca.policies.Root
     version: 1.0.0
-    name: onap.policies.controlloop.operational.Common
+    name: onap.policies.acm.operational.Common
     description: |
-      Operational Policy for Control Loop execution. Originated in Frankfurt to support TOSCA Compliant
+      Operational Policy for Automation Composition execution. Originated in Frankfurt to support TOSCA Compliant
       Policy Types. This does NOT support the legacy Policy YAML policy type.
     properties:
       id:
@@ -448,19 +448,19 @@ policy_types:
         default: false
       trigger:
         type: string
-        description: Initial operation to execute upon receiving an Onset event message for the Control Loop.
+        description: Initial operation to execute upon receiving an Onset event message for the Automation Composition.
         required: true
       operations:
         type: list
-        description: List of operations to be performed when Control Loop is triggered.
+        description: List of operations to be performed when Automation Composition is triggered.
         required: true
         entry_schema:
-          type: onap.datatype.controlloop.Operation
-  onap.policies.controlloop.operational.common.Apex:
-    derived_from: onap.policies.controlloop.operational.Common
+          type: onap.datatype.acm.Operation
+  onap.policies.acm.operational.common.Apex:
+    derived_from: onap.policies.acm.operational.Common
     type_version: 1.0.0
     version: 1.0.0
-    name: onap.policies.controlloop.operational.common.Apex
+    name: onap.policies.acm.operational.common.Apex
     description: Operational policies for Apex PDP
     properties:
       engineServiceParameters:
@@ -480,14 +480,14 @@ policy_types:
         description: Name/value pairs of properties to be set for APEX if needed.
         required: false
 node_types:
-  org.onap.policy.clamp.controlloop.Participant:
+  org.onap.policy.clamp.acm.Participant:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
       provider:
         type: string
         requred: false
-  org.onap.policy.clamp.controlloop.ControlLoopElement:
+  org.onap.policy.clamp.acm.AutomationCompositionElement:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
@@ -496,7 +496,7 @@ node_types:
         required: false
         metadata:
           common: true
-        description: Specifies the organization that provides the control loop element
+        description: Specifies the organization that provides the automation composition element
       participant_id:
         type: onap.datatypes.ToscaConceptIdentifier
         requred: true
@@ -507,7 +507,7 @@ node_types:
         required: true
         metadata:
           common: true
-        description: The identity of the participant type that hosts this type of Control Loop Element
+        description: The identity of the participant type that hosts this type of Automation Composition Element
       startPhase:
         type: integer
         required: false
@@ -515,9 +515,9 @@ node_types:
           - greater_or_equal: 0
         metadata:
           common: true
-        description: A value indicating the start phase in which this control loop element will be started, the
-          first start phase is zero. Control Loop Elements are started in their start_phase order and stopped
-          in reverse start phase order. Control Loop Elements with the same start phase are started and
+        description: A value indicating the start phase in which this automation composition element will be started, the
+          first start phase is zero. Automation Composition Elements are started in their start_phase order and stopped
+          in reverse start phase order. Automation Composition Elements with the same start phase are started and
           stopped simultaneously
       uninitializedToPassiveTimeout:
         type: integer
@@ -555,7 +555,7 @@ node_types:
         metadata:
           common: true
         description: The maximum time in seconds to wait for a state chage from passive to uninitialized
-  org.onap.policy.clamp.controlloop.ControlLoop:
+  org.onap.policy.clamp.acm.AutomationComposition:
     version: 1.0.1
     derived_from: tosca.nodetypes.Root
     properties:
@@ -564,7 +564,7 @@ node_types:
         required: false
         metadata:
           common: true
-        description: Specifies the organization that provides the control loop element
+        description: Specifies the organization that provides the automation composition element
       elements:
         type: list
         required: true
@@ -572,10 +572,10 @@ node_types:
           common: true
         entry_schema:
           type: onap.datatypes.ToscaConceptIdentifier
-        description: Specifies a list of control loop element definitions that make up this control loop definition
-  org.onap.policy.clamp.controlloop.PolicyControlLoopElement:
+        description: Specifies a list of automation composition element definitions that make up this automation composition definition
+  org.onap.policy.clamp.acm.PolicyAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       policy_type_id:
         type: onap.datatypes.ToscaConceptIdentifier
@@ -583,16 +583,16 @@ node_types:
       policy_id:
         type: onap.datatypes.ToscaConceptIdentifier
         requred: false
-  org.onap.policy.clamp.controlloop.CDSControlLoopElement:
+  org.onap.policy.clamp.acm.CDSAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       cds_blueprint_id:
         type: onap.datatypes.ToscaConceptIdentifier
         requred: true
-  org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement:
+  org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       chart:
         type: string
@@ -610,9 +610,9 @@ node_types:
       values:
         type: string
         requred: true
-  org.onap.policy.clamp.controlloop.HttpControlLoopElement:
+  org.onap.policy.clamp.acm.HttpAutomationCompositionElement:
     version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
     properties:
       baseUrl:
         type: string
@@ -628,9 +628,9 @@ node_types:
         type: map
         required: true
         entry_schema:
-          type: org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.ConfigurationEntity
+          type: org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity
           typeVersion: 1.0.0
-        description: The connfiguration entities the Control Loop Element is managing and their associated REST requests
+        description: The connfiguration entities the Automation Composition Element is managing and their associated REST requests
 
 topology_template:
   inputs:
@@ -647,69 +647,69 @@ topology_template:
         name: operational.apex.pmcontrol
         version: 1.0.0
   node_templates:
-    org.onap.policy.controlloop.PolicyControlLoopParticipant:
+    org.onap.policy.acm.PolicyAutomationCompositionParticipant:
       version: 2.3.1
-      type: org.onap.policy.clamp.controlloop.Participant
+      type: org.onap.policy.clamp.acm.Participant
       type_version: 1.0.1
       description: Participant for DCAE microservices
       properties:
         provider: ONAP
-    org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement:
+    org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
+      type: org.onap.policy.clamp.acm.PolicyAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the monitoring policy for Performance Management Subscription Handling
+      description: Automation composition element for the monitoring policy for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participant_id:
           name: org.onap.PM_Policy
           version: 1.0.0
         participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
+          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
           version: 2.3.1
         policy_type_id:
           name: onap.policies.monitoring.pm-subscription-handler
           version: 1.0.0
         policy_id:
           get_input: pmsh_monitoring_policy
-    org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement:
+    org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
+      type: org.onap.policy.clamp.acm.PolicyAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the operational policy for Performance Management Subscription Handling
+      description: Automation composition element for the operational policy for Performance Management Subscription Handling
       properties:
         provider: Ericsson
         participant_id:
           name: org.onap.PM_Policy
           version: 1.0.0
         participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
+          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
           version: 2.3.1
         policy_type_id:
           name: onap.policies.operational.pm-subscription-handler
           version: 1.0.0
         policy_id:
           get_input: pmsh_operational_policy
-    org.onap.k8s.controlloop.K8SControlLoopParticipant:
+    org.onap.k8s.acm.K8SAutomationCompositionParticipant:
       version: 2.3.4
-      type: org.onap.policy.clamp.controlloop.Participant
+      type: org.onap.policy.clamp.acm.Participant
       type_version: 1.0.1
       description: Participant for K8S
       properties:
         provider: ONAP
-    org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement:
+    org.onap.domain.database.PMSH_K8SMicroserviceAutomationCompositionElement:
       # Chart from new repository
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement
+      type: org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the K8S microservice for PMSH
+      description: Automation composition element for the K8S microservice for PMSH
       properties:
         provider: ONAP
         participant_id:
           name: K8sParticipant0
           version: 1.0.0
         participantType:
-          name: org.onap.k8s.controlloop.K8SControlLoopParticipant
+          name: org.onap.k8s.acm.K8SAutomationCompositionParticipant
           version: 2.3.4
         chart:
           chartId:
@@ -727,19 +727,19 @@ topology_template:
           overrideParams:
             global.masterPassword: test
 
-    org.onap.domain.database.Local_K8SMicroserviceControlLoopElement:
+    org.onap.domain.database.Local_K8SMicroserviceAutomationCompositionElement:
       # Chart installation without passing repository info
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement
+      type: org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement
       type_version: 1.0.0
-      description: Control loop element for the K8S microservice for local chart
+      description: Automation composition element for the K8S microservice for local chart
       properties:
         provider: ONAP
         participant_id:
           name: K8sParticipant0
           version: 1.0.0
         participantType:
-          name: org.onap.k8s.controlloop.K8SControlLoopParticipant
+          name: org.onap.k8s.acm.K8SAutomationCompositionParticipant
           version: 2.3.4
         chart:
           chartId:
@@ -747,26 +747,26 @@ topology_template:
             version: 0.9.1
           releaseName: nginxms
           namespace: test
-    org.onap.controlloop.HttpControlLoopParticipant:
+    org.onap.acm.HttpAutomationCompositionParticipant:
       version: 2.3.4
-      type: org.onap.policy.clamp.controlloop.Participant
+      type: org.onap.policy.clamp.acm.Participant
       type_version: 1.0.1
       description: Participant for Http requests
       properties:
         provider: ONAP
-    org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement:
+    org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement:
       # Consul http config for PMSH.
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.HttpControlLoopElement
+      type: org.onap.policy.clamp.acm.HttpAutomationCompositionElement
       type_version: 1.0.1
-      description: Control loop element for the http requests of PMSH microservice
+      description: Automation composition element for the http requests of PMSH microservice
       properties:
         provider: ONAP
         participant_id:
           name: HttpParticipant0
           version: 1.0.0
         participantType:
-          name: org.onap.k8s.controlloop.HttpControlLoopParticipant
+          name: org.onap.k8s.acm.HttpAutomationCompositionParticipant
           version: 2.3.4
         uninitializedToPassiveTimeout: 180
         startPhase: 1
@@ -896,27 +896,27 @@ topology_template:
       }
    }'
                 expectedResponse: 200
-    org.onap.domain.sample.GenericK8s_ControlLoopDefinition:
+    org.onap.domain.sample.GenericK8s_AutomationCompositionDefinition:
       version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoop
+      type: org.onap.policy.clamp.acm.AutomationComposition
       type_version: 1.0.0
-      description: Control loop for Hello World
+      description: Automation composition for Hello World
       properties:
         provider: ONAP
         elements:
-          - name: org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement
+          - name: org.onap.domain.database.PMSH_K8SMicroserviceAutomationCompositionElement
             version: 1.2.3
-          - name: org.onap.domain.database.Local_K8SMicroserviceControlLoopElement
+          - name: org.onap.domain.database.Local_K8SMicroserviceAutomationCompositionElement
             version: 1.2.3
-          - name: org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement
+          - name: org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement
             version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement
+          - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement
             version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement
+          - name: org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement
             version: 1.2.3
   policies:
     - operational.apex.pmcontrol:
-        type: onap.policies.controlloop.operational.common.Apex
+        type: onap.policies.acm.operational.common.Apex
         type_version: 1.0.0
         version: 1.0.0
         metadata:
@@ -3375,7 +3375,7 @@ topology_template:
                     jsonAdapters:
                       Instant:
                         adaptedClass: java.time.Instant
-                        adaptorClass: org.onap.policy.controlloop.util.Serialization$GsonInstantAdapter
+                        adaptorClass: org.onap.policy.acm.util.Serialization$GsonInstantAdapter
           eventInputParameters:
             DCAEConsumer:
               carrierTechnologyParameters:
diff --git a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/instantiation/ControlLoopInstantiationProvider.java b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/instantiation/ControlLoopInstantiationProvider.java
deleted file mode 100644 (file)
index 1bff2d7..0000000
+++ /dev/null
@@ -1,619 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
- * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.runtime.instantiation;
-
-import com.google.gson.Gson;
-import com.google.gson.internal.LinkedTreeMap;
-import com.google.gson.reflect.TypeToken;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.function.Function;
-import java.util.function.UnaryOperator;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.Status;
-import lombok.AllArgsConstructor;
-import org.onap.policy.clamp.controlloop.common.exception.ControlLoopException;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ControlLoopProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantProvider;
-import org.onap.policy.clamp.controlloop.models.messages.rest.GenericNameVersion;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.ControlLoopOrderStateResponse;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.ControlLoopPrimed;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.ControlLoopPrimedResponse;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstancePropertiesResponse;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationCommand;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationResponse;
-import org.onap.policy.clamp.controlloop.runtime.commissioning.CommissioningProvider;
-import org.onap.policy.clamp.controlloop.runtime.supervision.SupervisionHandler;
-import org.onap.policy.common.parameters.BeanValidationResult;
-import org.onap.policy.common.parameters.ObjectValidationResult;
-import org.onap.policy.common.parameters.ValidationResult;
-import org.onap.policy.common.parameters.ValidationStatus;
-import org.onap.policy.models.base.PfModelException;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaNameVersion;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * This class is dedicated to the Instantiation of Commissioned control loop.
- */
-@Service
-@Transactional
-@AllArgsConstructor
-public class ControlLoopInstantiationProvider {
-    private static final String CONTROL_LOOP_NODE_TYPE = "org.onap.policy.clamp.controlloop.ControlLoop";
-    private static final String CONTROL_LOOP_NODE_ELEMENT_TYPE = "ControlLoopElement";
-    private static final String PARTICIPANT_ID_PROPERTY_KEY = "participant_id";
-    private static final String PARTICIPANT_TYPE_PROPERTY_KEY = "participantType";
-    private static final String CL_ELEMENT_NAME = "name";
-    private static final String CL_ELEMENT_VERSION = "version";
-    private static final String INSTANCE_TEXT = "_Instance";
-
-    private static final Gson GSON = new Gson();
-
-    private final ControlLoopProvider controlLoopProvider;
-    private final CommissioningProvider commissioningProvider;
-    private final SupervisionHandler supervisionHandler;
-    private final ParticipantProvider participantProvider;
-    private static final String ENTRY = "entry ";
-
-    /**
-     * Creates Instance Properties and Control Loop.
-     *
-     * @param serviceTemplate the service template
-     * @return the result of the instantiation operation
-     * @throws PfModelException on creation errors
-     */
-    public InstancePropertiesResponse createInstanceProperties(ToscaServiceTemplate serviceTemplate)
-            throws PfModelException {
-
-        String instanceName = generateSequentialInstanceName();
-        ControlLoop controlLoop = new ControlLoop();
-        Map<UUID, ControlLoopElement> controlLoopElements = new HashMap<>();
-
-        ToscaServiceTemplate toscaServiceTemplate = commissioningProvider.getAllToscaServiceTemplate().get(0);
-
-        Map<String, ToscaNodeTemplate> persistedNodeTemplateMap =
-                toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates();
-
-        Map<String, ToscaNodeTemplate> nodeTemplates = deepCloneNodeTemplate(serviceTemplate);
-
-        nodeTemplates.forEach((key, template) -> {
-            ToscaNodeTemplate newNodeTemplate = new ToscaNodeTemplate();
-            String name = key + instanceName;
-            String version = template.getVersion();
-            String description = template.getDescription() + instanceName;
-            newNodeTemplate.setName(name);
-            newNodeTemplate.setVersion(version);
-            newNodeTemplate.setDescription(description);
-            newNodeTemplate.setProperties(new HashMap<>(template.getProperties()));
-            newNodeTemplate.setType(template.getType());
-            newNodeTemplate.setTypeVersion(template.getTypeVersion());
-            newNodeTemplate.setMetadata(template.getMetadata());
-
-            crateNewControlLoopInstance(instanceName, controlLoop, controlLoopElements, template, newNodeTemplate);
-
-            persistedNodeTemplateMap.put(name, newNodeTemplate);
-        });
-
-        ControlLoops controlLoops = new ControlLoops();
-
-        serviceTemplate.getToscaTopologyTemplate().getNodeTemplates().putAll(persistedNodeTemplateMap);
-
-        controlLoop.setElements(controlLoopElements);
-        controlLoops.getControlLoopList().add(controlLoop);
-
-        return saveInstancePropertiesAndControlLoop(serviceTemplate, controlLoops);
-    }
-
-    /**
-     * Deletes Instance Properties.
-     *
-     * @param name the name of the control loop to delete
-     * @param version the version of the control loop to delete
-     * @return the result of the deletion
-     * @throws PfModelException on deletion errors
-     */
-    public InstantiationResponse deleteInstanceProperties(String name, String version) throws PfModelException {
-
-        String instanceName = getInstancePropertyName(name, version);
-
-        Map<String, ToscaNodeTemplate> filteredToscaNodeTemplateMap = new HashMap<>();
-
-        ToscaServiceTemplate toscaServiceTemplate = commissioningProvider.getAllToscaServiceTemplate().get(0);
-
-        toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates().forEach((key, nodeTemplate) -> {
-            if (!nodeTemplate.getName().contains(instanceName)) {
-                filteredToscaNodeTemplateMap.put(key, nodeTemplate);
-            }
-        });
-
-        List<ToscaNodeTemplate> filteredToscaNodeTemplateList = toscaServiceTemplate.getToscaTopologyTemplate()
-                .getNodeTemplates().values().stream()
-                .filter(nodeTemplate -> nodeTemplate.getName().contains(instanceName)).collect(Collectors.toList());
-
-        InstantiationResponse response = this.deleteControlLoop(name, version);
-
-        controlLoopProvider.deleteInstanceProperties(filteredToscaNodeTemplateMap, filteredToscaNodeTemplateList);
-
-        return response;
-    }
-
-    /**
-     * Create control loops.
-     *
-     * @param controlLoops the control loop
-     * @return the result of the instantiation operation
-     * @throws PfModelException on creation errors
-     */
-    public InstantiationResponse createControlLoops(ControlLoops controlLoops) throws PfModelException {
-        for (ControlLoop controlLoop : controlLoops.getControlLoopList()) {
-            var checkControlLoopOpt = controlLoopProvider.findControlLoop(controlLoop.getKey().asIdentifier());
-            if (checkControlLoopOpt.isPresent()) {
-                throw new PfModelException(Response.Status.BAD_REQUEST,
-                        controlLoop.getKey().asIdentifier() + " already defined");
-            }
-        }
-        BeanValidationResult validationResult = validateControlLoops(controlLoops);
-        if (!validationResult.isValid()) {
-            throw new PfModelException(Response.Status.BAD_REQUEST, validationResult.getResult());
-        }
-        controlLoopProvider.saveControlLoops(controlLoops.getControlLoopList());
-
-        var response = new InstantiationResponse();
-        response.setAffectedControlLoops(controlLoops.getControlLoopList().stream()
-                .map(cl -> cl.getKey().asIdentifier()).collect(Collectors.toList()));
-
-        return response;
-    }
-
-    /**
-     * Update control loops.
-     *
-     * @param controlLoops the control loop
-     * @return the result of the instantiation operation
-     * @throws PfModelException on update errors
-     */
-    public InstantiationResponse updateControlLoops(ControlLoops controlLoops) throws PfModelException {
-        BeanValidationResult validationResult = validateControlLoops(controlLoops);
-        if (!validationResult.isValid()) {
-            throw new PfModelException(Response.Status.BAD_REQUEST, validationResult.getResult());
-        }
-        controlLoopProvider.saveControlLoops(controlLoops.getControlLoopList());
-
-        var response = new InstantiationResponse();
-        response.setAffectedControlLoops(controlLoops.getControlLoopList().stream()
-                .map(cl -> cl.getKey().asIdentifier()).collect(Collectors.toList()));
-
-        return response;
-    }
-
-    /**
-     * Validate ControlLoops.
-     *
-     * @param controlLoops ControlLoops to validate
-     * @return the result of validation
-     * @throws PfModelException if controlLoops is not valid
-     */
-    private BeanValidationResult validateControlLoops(ControlLoops controlLoops) throws PfModelException {
-
-        var result = new BeanValidationResult("ControlLoops", controlLoops);
-
-        for (ControlLoop controlLoop : controlLoops.getControlLoopList()) {
-            var subResult = new BeanValidationResult(ENTRY + controlLoop.getDefinition().getName(), controlLoop);
-
-            List<ToscaNodeTemplate> toscaNodeTemplates = commissioningProvider.getControlLoopDefinitions(
-                    controlLoop.getDefinition().getName(), controlLoop.getDefinition().getVersion());
-
-            if (toscaNodeTemplates.isEmpty()) {
-                subResult.addResult(new ObjectValidationResult("ControlLoop", controlLoop.getDefinition().getName(),
-                        ValidationStatus.INVALID, "Commissioned control loop definition not FOUND"));
-            } else if (toscaNodeTemplates.size() > 1) {
-                subResult.addResult(new ObjectValidationResult("ControlLoop", controlLoop.getDefinition().getName(),
-                        ValidationStatus.INVALID, "Commissioned control loop definition not VALID"));
-            } else {
-
-                List<ToscaNodeTemplate> clElementDefinitions =
-                        commissioningProvider.getControlLoopElementDefinitions(toscaNodeTemplates.get(0));
-
-                // @formatter:off
-                Map<String, ToscaConceptIdentifier> definitions = clElementDefinitions
-                        .stream()
-                        .map(nodeTemplate -> nodeTemplate.getKey().asIdentifier())
-                        .collect(Collectors.toMap(ToscaConceptIdentifier::getName, UnaryOperator.identity()));
-                // @formatter:on
-
-                for (ControlLoopElement element : controlLoop.getElements().values()) {
-                    subResult.addResult(validateDefinition(definitions, element.getDefinition()));
-                }
-            }
-            result.addResult(subResult);
-        }
-        return result;
-    }
-
-    /**
-     * Validate ToscaConceptIdentifier, checking if exist in ToscaConceptIdentifiers map.
-     *
-     * @param definitions map of all ToscaConceptIdentifiers
-     * @param definition ToscaConceptIdentifier to validate
-     * @return the validation result
-     */
-    private ValidationResult validateDefinition(Map<String, ToscaConceptIdentifier> definitions,
-            ToscaConceptIdentifier definition) {
-        var result = new BeanValidationResult(ENTRY + definition.getName(), definition);
-        ToscaConceptIdentifier identifier = definitions.get(definition.getName());
-        if (identifier == null) {
-            result.setResult(ValidationStatus.INVALID, "Not FOUND");
-        } else if (!identifier.equals(definition)) {
-            result.setResult(ValidationStatus.INVALID, "Version not matching");
-        }
-        return (result.isClean() ? null : result);
-    }
-
-    /**
-     * Delete the control loop with the given name and version.
-     *
-     * @param name the name of the control loop to delete
-     * @param version the version of the control loop to delete
-     * @return the result of the deletion
-     * @throws PfModelException on deletion errors
-     */
-    public InstantiationResponse deleteControlLoop(String name, String version) throws PfModelException {
-        var controlLoopOpt = controlLoopProvider.findControlLoop(name, version);
-        if (controlLoopOpt.isEmpty()) {
-            throw new PfModelException(Response.Status.NOT_FOUND, "Control Loop not found");
-        }
-        var controlLoop = controlLoopOpt.get();
-        if (!ControlLoopState.UNINITIALISED.equals(controlLoop.getState())) {
-            throw new PfModelException(Response.Status.BAD_REQUEST,
-                    "Control Loop State is still " + controlLoop.getState());
-        }
-        var response = new InstantiationResponse();
-        response.setAffectedControlLoops(
-                List.of(controlLoopProvider.deleteControlLoop(name, version).getKey().asIdentifier()));
-        return response;
-    }
-
-    /**
-     * Get the requested control loops.
-     *
-     * @param name the name of the control loop to get, null for all control loops
-     * @param version the version of the control loop to get, null for all control loops
-     * @return the control loops
-     * @throws PfModelException on errors getting control loops
-     */
-    @Transactional(readOnly = true)
-    public ControlLoops getControlLoops(String name, String version) throws PfModelException {
-        var controlLoops = new ControlLoops();
-        controlLoops.setControlLoopList(controlLoopProvider.getControlLoops(name, version));
-
-        return controlLoops;
-    }
-
-    /**
-     * Issue a command to control loops, setting their ordered state.
-     *
-     * @param command the command to issue to control loops
-     * @return the result of the initiation command
-     * @throws PfModelException on errors setting the ordered state on the control loops
-     * @throws ControlLoopException on ordered state invalid
-     */
-    public InstantiationResponse issueControlLoopCommand(InstantiationCommand command)
-            throws ControlLoopException, PfModelException {
-
-        if (command.getOrderedState() == null) {
-            throw new ControlLoopException(Status.BAD_REQUEST, "ordered state invalid or not specified on command");
-        }
-
-        var participants = participantProvider.getParticipants();
-        if (participants.isEmpty()) {
-            throw new ControlLoopException(Status.BAD_REQUEST, "No participants registered");
-        }
-        var validationResult = new BeanValidationResult("InstantiationCommand", command);
-        List<ControlLoop> controlLoops = new ArrayList<>(command.getControlLoopIdentifierList().size());
-        for (ToscaConceptIdentifier id : command.getControlLoopIdentifierList()) {
-            var controlLoopOpt = controlLoopProvider.findControlLoop(id);
-            if (controlLoopOpt.isEmpty()) {
-                validationResult.addResult("ToscaConceptIdentifier", id, ValidationStatus.INVALID,
-                        "ControlLoop with id " + id + " not found");
-            } else {
-                var controlLoop = controlLoopOpt.get();
-                controlLoop.setCascadedOrderedState(command.getOrderedState());
-                controlLoops.add(controlLoop);
-            }
-        }
-        if (validationResult.isValid()) {
-            validationResult = validateIssueControlLoops(controlLoops, participants);
-        }
-        if (!validationResult.isValid()) {
-            throw new PfModelException(Response.Status.BAD_REQUEST, validationResult.getResult());
-        }
-        controlLoopProvider.saveControlLoops(controlLoops);
-
-        supervisionHandler.triggerControlLoopSupervision(command.getControlLoopIdentifierList());
-        var response = new InstantiationResponse();
-        response.setAffectedControlLoops(command.getControlLoopIdentifierList());
-
-        return response;
-    }
-
-    private BeanValidationResult validateIssueControlLoops(List<ControlLoop> controlLoops,
-            List<Participant> participants) {
-        var result = new BeanValidationResult("ControlLoops", controlLoops);
-
-        Map<ToscaConceptIdentifier, Participant> participantMap = participants.stream()
-                .collect(Collectors.toMap(participant -> participant.getKey().asIdentifier(), Function.identity()));
-
-        for (ControlLoop controlLoop : controlLoops) {
-
-            for (var element : controlLoop.getElements().values()) {
-
-                var subResult = new BeanValidationResult(ENTRY + element.getDefinition().getName(), element);
-                Participant p = participantMap.get(element.getParticipantId());
-                if (p == null) {
-                    subResult.addResult(new ObjectValidationResult(CONTROL_LOOP_NODE_ELEMENT_TYPE,
-                            element.getDefinition().getName(), ValidationStatus.INVALID,
-                            "Participant with ID " + element.getParticipantId() + " is not registered"));
-                } else if (!p.getParticipantType().equals(element.getParticipantType())) {
-                    subResult.addResult(new ObjectValidationResult(CONTROL_LOOP_NODE_ELEMENT_TYPE,
-                            element.getDefinition().getName(), ValidationStatus.INVALID,
-                            "Participant with ID " + element.getParticipantType() + " - " + element.getParticipantId()
-                                    + " is not registered"));
-                }
-                result.addResult(subResult);
-            }
-
-        }
-
-        return result;
-    }
-
-    /**
-     * Gets a list of control loops with it's ordered state.
-     *
-     * @param name the name of the control loop to get, null for all control loops
-     * @param version the version of the control loop to get, null for all control loops
-     * @return a list of Instantiation Command
-     * @throws PfModelException on errors getting control loops
-     */
-    @Transactional(readOnly = true)
-    public ControlLoopOrderStateResponse getInstantiationOrderState(String name, String version)
-            throws PfModelException {
-
-        List<ControlLoop> controlLoops = controlLoopProvider.getControlLoops(name, version);
-
-        var response = new ControlLoopOrderStateResponse();
-
-        controlLoops.forEach(controlLoop -> {
-            var genericNameVersion = new GenericNameVersion();
-            genericNameVersion.setName(controlLoop.getName());
-            genericNameVersion.setVersion(controlLoop.getVersion());
-            response.getControlLoopIdentifierList().add(genericNameVersion);
-        });
-
-        return response;
-    }
-
-    /**
-     * Saves Instance Properties and Control Loop.
-     * Gets a list of control loops which are primed or de-primed.
-     *
-     * @param name the name of the control loop to get, null for all control loops
-     * @param version the version of the control loop to get, null for all control loops
-     * @return a list of Instantiation Command
-     * @throws PfModelException on errors getting control loops
-     */
-    @Transactional(readOnly = true)
-    public ControlLoopPrimedResponse getControlLoopPriming(String name, String version) throws PfModelException {
-
-        List<ControlLoop> controlLoops = controlLoopProvider.getControlLoops(name, version);
-
-        var response = new ControlLoopPrimedResponse();
-
-        controlLoops.forEach(controlLoop -> {
-            var primed = new ControlLoopPrimed();
-            primed.setName(controlLoop.getName());
-            primed.setVersion(controlLoop.getVersion());
-            primed.setPrimed(controlLoop.getPrimed());
-            response.getPrimedControlLoopsList().add(primed);
-        });
-
-        return response;
-    }
-
-    /**
-     * Creates instance element name.
-     *
-     * @param serviceTemplate the service template
-     * @param controlLoops a list of control loops
-     * @return the result of the instance properties and instantiation operation
-     * @throws PfModelException on creation errors
-     */
-    private InstancePropertiesResponse saveInstancePropertiesAndControlLoop(ToscaServiceTemplate serviceTemplate,
-            ControlLoops controlLoops) throws PfModelException {
-
-        for (var controlLoop : controlLoops.getControlLoopList()) {
-            var checkControlLoopOpt = controlLoopProvider.findControlLoop(controlLoop.getKey().asIdentifier());
-            if (checkControlLoopOpt.isPresent()) {
-                throw new PfModelException(Response.Status.BAD_REQUEST,
-                        "Control loop with id " + controlLoop.getKey().asIdentifier() + " already defined");
-            }
-        }
-        Map<String, ToscaNodeTemplate> toscaSavedNodeTemplate =
-                controlLoopProvider.saveInstanceProperties(serviceTemplate);
-        controlLoopProvider.saveControlLoops(controlLoops.getControlLoopList());
-        List<ToscaConceptIdentifier> affectedControlLoops = controlLoops.getControlLoopList().stream()
-                .map(cl -> cl.getKey().asIdentifier()).collect(Collectors.toList());
-
-        List<ToscaConceptIdentifier> toscaAffectedProperties = toscaSavedNodeTemplate.values().stream()
-                .map(template -> template.getKey().asIdentifier()).collect(Collectors.toList());
-
-        var response = new InstancePropertiesResponse();
-        response.setAffectedInstanceProperties(Stream.of(affectedControlLoops, toscaAffectedProperties)
-                .flatMap(Collection::stream).collect(Collectors.toList()));
-
-        return response;
-    }
-
-    /**
-     * Crates a new Control Loop instance.
-     *
-     * @param instanceName Control Loop Instance name
-     * @param controlLoop empty Control Loop
-     * @param controlLoopElements new Control Loop Element map
-     * @param template original Cloned Tosca Node Template
-     * @param newNodeTemplate new Tosca Node Template
-     */
-    private void crateNewControlLoopInstance(String instanceName, ControlLoop controlLoop,
-            Map<UUID, ControlLoopElement> controlLoopElements, ToscaNodeTemplate template,
-            ToscaNodeTemplate newNodeTemplate) {
-        if (template.getType().equals(CONTROL_LOOP_NODE_TYPE)) {
-            controlLoop.setDefinition(getControlLoopDefinition(newNodeTemplate));
-        }
-
-        if (template.getType().contains(CONTROL_LOOP_NODE_ELEMENT_TYPE)) {
-            ControlLoopElement controlLoopElement = getControlLoopElement(newNodeTemplate);
-            controlLoopElements.put(controlLoopElement.getId(), controlLoopElement);
-        }
-
-        controlLoop.setName("PMSH" + instanceName);
-        controlLoop.setVersion(template.getVersion());
-        controlLoop.setDescription("PMSH control loop " + instanceName);
-        controlLoop.setState(ControlLoopState.UNINITIALISED);
-        controlLoop.setOrderedState(ControlLoopOrderedState.UNINITIALISED);
-    }
-
-    /**
-     * Get's the instance property name of the control loop.
-     *
-     * @param name the name of the control loop to get, null for all control loops
-     * @param version the version of the control loop to get, null for all control loops
-     * @return the instance name of the control loop instance properties
-     * @throws PfModelException on errors getting control loops
-     */
-    private String getInstancePropertyName(String name, String version) throws PfModelException {
-        List<String> toscaDefinitionsNames = controlLoopProvider.getControlLoops(name, version).stream()
-                .map(ControlLoop::getDefinition).map(ToscaNameVersion::getName).collect(Collectors.toList());
-
-        return toscaDefinitionsNames.stream().reduce("", (s1, s2) -> {
-
-            if (s2.contains(INSTANCE_TEXT)) {
-                String[] instances = s2.split(INSTANCE_TEXT);
-
-                return INSTANCE_TEXT + instances[1];
-            }
-
-            return s1;
-        });
-    }
-
-    /**
-     * Generates Instance Name in sequential order and return it to append to the Node Template Name.
-     *
-     * @return instanceName
-     */
-    private String generateSequentialInstanceName() {
-        List<ToscaNodeTemplate> nodeTemplates = controlLoopProvider.getAllNodeTemplates();
-
-        int instanceNumber = nodeTemplates.stream().map(ToscaNodeTemplate::getName)
-                .filter(name -> name.contains(INSTANCE_TEXT)).map(n -> {
-                    String[] defNameArr = n.split(INSTANCE_TEXT);
-
-                    return Integer.parseInt(defNameArr[1]);
-                }).reduce(0, Math::max);
-
-        return INSTANCE_TEXT + (instanceNumber + 1);
-    }
-
-    /**
-     * Retrieves Control Loop Definition.
-     *
-     * @param template tosca node template
-     * @return control loop definition
-     */
-    private ToscaConceptIdentifier getControlLoopDefinition(ToscaNodeTemplate template) {
-        ToscaConceptIdentifier definition = new ToscaConceptIdentifier();
-        definition.setName(template.getName());
-        definition.setVersion(template.getVersion());
-        return definition;
-    }
-
-    /**
-     * Retrieves Control Loop Element.
-     *
-     * @param template tosca node template
-     * @return a control loop element
-     */
-    @SuppressWarnings("unchecked")
-    private ControlLoopElement getControlLoopElement(ToscaNodeTemplate template) {
-        ControlLoopElement controlLoopElement = new ControlLoopElement();
-        ToscaConceptIdentifier definition = new ToscaConceptIdentifier();
-        definition.setName(template.getName());
-        definition.setVersion(template.getVersion());
-        controlLoopElement.setDefinition(definition);
-        LinkedTreeMap<String, Object> participantId =
-                (LinkedTreeMap<String, Object>) template.getProperties().get(PARTICIPANT_ID_PROPERTY_KEY);
-        if (participantId != null) {
-            ToscaConceptIdentifier participantIdProperty = new ToscaConceptIdentifier();
-            participantIdProperty.setName(String.valueOf(participantId.get(CL_ELEMENT_NAME)));
-            participantIdProperty.setVersion(String.valueOf(participantId.get(CL_ELEMENT_VERSION)));
-            controlLoopElement.setParticipantId(participantIdProperty);
-        }
-        LinkedTreeMap<String, Object> participantType =
-                (LinkedTreeMap<String, Object>) template.getProperties().get(PARTICIPANT_TYPE_PROPERTY_KEY);
-        if (participantType != null) {
-            ToscaConceptIdentifier participantTypeProperty = new ToscaConceptIdentifier();
-            participantTypeProperty.setName(String.valueOf(participantType.get(CL_ELEMENT_NAME)));
-            participantTypeProperty.setVersion(participantType.get(CL_ELEMENT_VERSION).toString());
-            controlLoopElement.setParticipantType(participantTypeProperty);
-        }
-        return controlLoopElement;
-    }
-
-    /**
-     * Deep clones ToscaNodeTemplate.
-     *
-     * @param serviceTemplate ToscaServiceTemplate
-     * @return a cloned Hash Map of ToscaNodeTemplate
-     */
-    private Map<String, ToscaNodeTemplate> deepCloneNodeTemplate(ToscaServiceTemplate serviceTemplate) {
-        String jsonString = GSON.toJson(serviceTemplate.getToscaTopologyTemplate().getNodeTemplates());
-        Type type = new TypeToken<HashMap<String, ToscaNodeTemplate>>() {}.getType();
-        return GSON.fromJson(jsonString, type);
-    }
-}
diff --git a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/monitoring/MonitoringProvider.java b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/monitoring/MonitoringProvider.java
deleted file mode 100644 (file)
index 2ec438b..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.runtime.monitoring;
-
-import java.time.Instant;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import lombok.AllArgsConstructor;
-import lombok.NonNull;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatisticsList;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatisticsList;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ClElementStatisticsProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ControlLoopProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantStatisticsProvider;
-import org.onap.policy.models.base.PfModelException;
-import org.onap.policy.models.base.PfModelRuntimeException;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * This class provides information about statistics data of CL elements and CL Participants in database to callers.
- */
-@Service
-@Transactional
-@AllArgsConstructor
-public class MonitoringProvider {
-
-    private static final String DESC_ORDER = "DESC";
-    private final ParticipantStatisticsProvider participantStatisticsProvider;
-    private final ClElementStatisticsProvider clElementStatisticsProvider;
-    private final ControlLoopProvider controlLoopProvider;
-
-    /**
-     * Create participant statistics.
-     *
-     * @param participantStatistics the participant statistics
-     * @return the result of create operation
-     * @throws PfModelException on creation errors
-     */
-    public ParticipantStatisticsList createParticipantStatistics(List<ParticipantStatistics> participantStatistics)
-            throws PfModelException {
-        var participantStatisticsList = new ParticipantStatisticsList();
-        participantStatisticsList
-                .setStatisticsList(participantStatisticsProvider.createParticipantStatistics(participantStatistics));
-
-        return participantStatisticsList;
-    }
-
-    /**
-     * Create clElement statistics.
-     *
-     * @param clElementStatisticsList the clElement statistics
-     * @return the result of create operation
-     * @throws PfModelException on creation errors
-     */
-    public ClElementStatisticsList createClElementStatistics(List<ClElementStatistics> clElementStatisticsList)
-            throws PfModelException {
-        var elementStatisticsList = new ClElementStatisticsList();
-        elementStatisticsList
-                .setClElementStatistics(clElementStatisticsProvider.createClElementStatistics(clElementStatisticsList));
-
-        return elementStatisticsList;
-    }
-
-    /**
-     * Get participant statistics based on specific filters.
-     *
-     * @param name the name of the participant statistics to get, null to get all statistics
-     * @param version the version of the participant statistics to get, null to get all statistics
-     * @param recordCount number of records to be fetched.
-     * @param startTime start of the timestamp, from statistics to be filtered
-     * @param endTime end of the timestamp up to which statistics to be filtered
-     * @return the participant found
-     */
-    @Transactional(readOnly = true)
-    public ParticipantStatisticsList fetchFilteredParticipantStatistics(@NonNull final String name,
-            final String version, int recordCount, Instant startTime, Instant endTime) {
-        var participantStatisticsList = new ParticipantStatisticsList();
-
-        // Additional parameters can be added in filterMap for filtering data.
-        Map<String, Object> filterMap = null;
-        participantStatisticsList.setStatisticsList(participantStatisticsProvider.getFilteredParticipantStatistics(name,
-                version, startTime, endTime, filterMap, DESC_ORDER, recordCount));
-
-        return participantStatisticsList;
-    }
-
-    /**
-     * Get all participant statistics records found for a specific control loop. *
-     *
-     * @param controlLoopName name of the control loop
-     * @param controlLoopVersion version of the control loop
-     * @return All the participant statistics found
-     * @throws PfModelRuntimeException on errors getting participant statistics
-     */
-    @Transactional(readOnly = true)
-    public ParticipantStatisticsList fetchParticipantStatsPerControlLoop(@NonNull final String controlLoopName,
-            @NonNull final String controlLoopVersion) {
-        var statisticsList = new ParticipantStatisticsList();
-        List<ParticipantStatistics> participantStatistics = new ArrayList<>();
-        try {
-            // Fetch all participantIds for a specific control loop
-            List<ToscaConceptIdentifier> participantIds =
-                    getAllParticipantIdsPerControlLoop(controlLoopName, controlLoopVersion);
-            for (ToscaConceptIdentifier id : participantIds) {
-                participantStatistics.addAll(participantStatisticsProvider.getFilteredParticipantStatistics(
-                        id.getName(), id.getVersion(), null, null, null, DESC_ORDER, 0));
-            }
-            statisticsList.setStatisticsList(participantStatistics);
-        } catch (PfModelException e) {
-            throw new PfModelRuntimeException(e);
-        }
-        return statisticsList;
-    }
-
-    /**
-     * Get clElement statistics based on specific filters.
-     *
-     * @param name the name of the clElement statistics to get, null to get all statistics
-     * @param version the version of the clElement statistics to get, null to get all statistics
-     * @param id UUID of the control loop element
-     * @param startTime start of the timestamp, from statistics to be filtered
-     * @param endTime end of the timestamp up to which statistics to be filtered
-     * @param recordCount number of records to be fetched.
-     * @return the participant found
-     * @throws PfModelException on errors getting control loop statistics
-     */
-    @Transactional(readOnly = true)
-    public ClElementStatisticsList fetchFilteredClElementStatistics(@NonNull final String name, final String version,
-            final String id, Instant startTime, Instant endTime, int recordCount) throws PfModelException {
-        var clElementStatisticsList = new ClElementStatisticsList();
-        Map<String, Object> filterMap = new HashMap<>();
-        // Adding UUID in filter if present
-        if (id != null) {
-            filterMap.put("localName", id);
-        }
-        clElementStatisticsList.setClElementStatistics(clElementStatisticsProvider.getFilteredClElementStatistics(name,
-                version, startTime, endTime, filterMap, DESC_ORDER, recordCount));
-
-        return clElementStatisticsList;
-    }
-
-    /**
-     * Get clElement statistics per control loop.
-     *
-     * @param name the name of the control loop
-     * @param version the version of the control loop
-     * @return the clElement statistics found
-     * @throws PfModelRuntimeException on errors getting control loop statistics
-     */
-    @Transactional(readOnly = true)
-    public ClElementStatisticsList fetchClElementStatsPerControlLoop(@NonNull final String name,
-            @NonNull final String version) {
-        var clElementStatisticsList = new ClElementStatisticsList();
-        List<ClElementStatistics> clElementStats = new ArrayList<>();
-        try {
-            List<ControlLoopElement> clElements = new ArrayList<>();
-            // Fetch all control loop elements for the control loop
-            var controlLoopOpt = controlLoopProvider.findControlLoop(new ToscaConceptIdentifier(name, version));
-            if (controlLoopOpt.isPresent()) {
-                clElements.addAll(controlLoopOpt.get().getElements().values());
-                // Collect control loop element statistics for each cl element.
-                for (ControlLoopElement clElement : clElements) {
-                    clElementStats.addAll(fetchFilteredClElementStatistics(clElement.getParticipantId().getName(),
-                            clElement.getParticipantId().getVersion(), clElement.getId().toString(), null, null, 0)
-                                    .getClElementStatistics());
-                }
-            }
-            clElementStatisticsList.setClElementStatistics(clElementStats);
-        } catch (PfModelException e) {
-            throw new PfModelRuntimeException(e);
-        }
-        return clElementStatisticsList;
-    }
-
-    /**
-     * If required, REST end point can be defined for this method to fetch associated participant Ids
-     * for a control loop.
-     *
-     * @param name the name of the control loop
-     * @param version the version of the control loop
-     * @return List of participant Id
-     * @throws PfModelException on errors
-     */
-    @Transactional(readOnly = true)
-    public List<ToscaConceptIdentifier> getAllParticipantIdsPerControlLoop(String name, String version)
-            throws PfModelException {
-        List<ToscaConceptIdentifier> participantIds = new ArrayList<>();
-        var controlLoopOpt = controlLoopProvider.findControlLoop(new ToscaConceptIdentifier(name, version));
-        if (controlLoopOpt.isPresent()) {
-            for (ControlLoopElement clElement : controlLoopOpt.get().getElements().values()) {
-                participantIds.add(clElement.getParticipantId());
-            }
-        }
-        return participantIds;
-    }
-
-    /**
-     * If required, REST end point can be defined for this method to fetch associated control loop element Ids
-     * for a control loop.
-     *
-     * @param name the name of the control loop
-     * @param version the version of the control loop
-     * @return Map of control loop Id and participant details
-     * @throws PfModelException on errors
-     */
-    @Transactional(readOnly = true)
-    public Map<String, ToscaConceptIdentifier> getAllClElementsIdPerControlLoop(String name, String version)
-            throws PfModelException {
-        Map<String, ToscaConceptIdentifier> clElementId = new HashMap<>();
-        var controlLoopOpt = controlLoopProvider.findControlLoop(new ToscaConceptIdentifier(name, version));
-        if (controlLoopOpt.isPresent()) {
-            for (ControlLoopElement clElement : controlLoopOpt.get().getElements().values()) {
-                clElementId.put(clElement.getId().toString(), clElement.getParticipantId());
-            }
-        }
-        return clElementId;
-    }
-}
diff --git a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionHandler.java b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionHandler.java
deleted file mode 100644 (file)
index 6af2788..0000000
+++ /dev/null
@@ -1,491 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.runtime.supervision;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.Status;
-import lombok.AllArgsConstructor;
-import org.apache.commons.collections4.CollectionUtils;
-import org.onap.policy.clamp.controlloop.common.exception.ControlLoopException;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElementAck;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopInfo;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantHealthStatus;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantUtils;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ControlLoopProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ServiceTemplateProvider;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopAck;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregister;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessage;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegister;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatus;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdateAck;
-import org.onap.policy.clamp.controlloop.runtime.monitoring.MonitoringProvider;
-import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ControlLoopStateChangePublisher;
-import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ControlLoopUpdatePublisher;
-import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ParticipantDeregisterAckPublisher;
-import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ParticipantRegisterAckPublisher;
-import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ParticipantUpdatePublisher;
-import org.onap.policy.models.base.PfModelException;
-import org.onap.policy.models.base.PfModelRuntimeException;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-
-/**
- * This class handles supervision of control loop instances, so only one object of this type should be built at a time.
- *
- * <p/>
- * It is effectively a singleton that is started at system start.
- */
-@Component
-@AllArgsConstructor
-public class SupervisionHandler {
-    private static final Logger LOGGER = LoggerFactory.getLogger(SupervisionHandler.class);
-
-    private static final String CONTROL_LOOP_CANNOT_TRANSITION_FROM_STATE = "Control loop can't transition from state ";
-    private static final String CONTROL_LOOP_IS_ALREADY_IN_STATE = "Control loop is already in state ";
-    private static final String TO_STATE = " to state ";
-    private static final String AND_TRANSITIONING_TO_STATE = " and transitioning to state ";
-
-    private final ControlLoopProvider controlLoopProvider;
-    private final ParticipantProvider participantProvider;
-    private final MonitoringProvider monitoringProvider;
-    private final ServiceTemplateProvider serviceTemplateProvider;
-
-    // Publishers for participant communication
-    private final ControlLoopUpdatePublisher controlLoopUpdatePublisher;
-    private final ControlLoopStateChangePublisher controlLoopStateChangePublisher;
-    private final ParticipantRegisterAckPublisher participantRegisterAckPublisher;
-    private final ParticipantDeregisterAckPublisher participantDeregisterAckPublisher;
-    private final ParticipantUpdatePublisher participantUpdatePublisher;
-
-    /**
-     * Supervision trigger called when a command is issued on control loops.
-     *
-     * <p/>
-     * Causes supervision to start or continue supervision on the control loops in question.
-     *
-     * @param controlLoopIdentifierList the control loops for which the supervision command has been issued
-     * @throws ControlLoopException on supervision triggering exceptions
-     */
-    public void triggerControlLoopSupervision(List<ToscaConceptIdentifier> controlLoopIdentifierList)
-            throws ControlLoopException {
-
-        LOGGER.debug("triggering control loop supervision on control loops {}", controlLoopIdentifierList);
-
-        if (CollectionUtils.isEmpty(controlLoopIdentifierList)) {
-            // This is just to force throwing of the exception in certain circumstances.
-            exceptionOccured(Response.Status.NOT_ACCEPTABLE, "The list of control loops for supervision is empty");
-        }
-
-        for (ToscaConceptIdentifier controlLoopId : controlLoopIdentifierList) {
-            try {
-                var controlLoop = controlLoopProvider.getControlLoop(controlLoopId);
-
-                superviseControlLoop(controlLoop);
-
-                controlLoopProvider.saveControlLoop(controlLoop);
-            } catch (PfModelException pfme) {
-                throw new ControlLoopException(pfme.getErrorResponse().getResponseCode(), pfme.getMessage(), pfme);
-            }
-        }
-    }
-
-    /**
-     * Handle a ParticipantStatus message from a participant.
-     *
-     * @param participantStatusMessage the ParticipantStatus message received from a participant
-     */
-    @MessageIntercept
-    public void handleParticipantMessage(ParticipantStatus participantStatusMessage) {
-        LOGGER.debug("Participant Status received {}", participantStatusMessage);
-        try {
-            superviseParticipant(participantStatusMessage);
-        } catch (PfModelException | ControlLoopException svExc) {
-            LOGGER.warn("error supervising participant {}", participantStatusMessage.getParticipantId(), svExc);
-            return;
-        }
-
-        try {
-            superviseControlLoops(participantStatusMessage);
-        } catch (PfModelException | ControlLoopException svExc) {
-            LOGGER.warn("error supervising participant {}", participantStatusMessage.getParticipantId(), svExc);
-        }
-    }
-
-    /**
-     * Handle a ParticipantRegister message from a participant.
-     *
-     * @param participantRegisterMessage the ParticipantRegister message received from a participant
-     */
-    @MessageIntercept
-    public boolean handleParticipantMessage(ParticipantRegister participantRegisterMessage) {
-        LOGGER.debug("Participant Register received {}", participantRegisterMessage);
-        try {
-            checkParticipant(participantRegisterMessage, ParticipantState.UNKNOWN, ParticipantHealthStatus.UNKNOWN);
-        } catch (PfModelException | ControlLoopException svExc) {
-            LOGGER.warn("error saving participant {}", participantRegisterMessage.getParticipantId(), svExc);
-        }
-
-        var isCommissioning = participantUpdatePublisher.sendCommissioning(null, null,
-                participantRegisterMessage.getParticipantId(), participantRegisterMessage.getParticipantType());
-
-        participantRegisterAckPublisher.send(participantRegisterMessage.getMessageId(),
-                participantRegisterMessage.getParticipantId(), participantRegisterMessage.getParticipantType());
-        return isCommissioning;
-    }
-
-    /**
-     * Handle a ParticipantDeregister message from a participant.
-     *
-     * @param participantDeregisterMessage the ParticipantDeregister message received from a participant
-     */
-    @MessageIntercept
-    public void handleParticipantMessage(ParticipantDeregister participantDeregisterMessage) {
-        LOGGER.debug("Participant Deregister received {}", participantDeregisterMessage);
-        try {
-            var participantOpt =
-                    participantProvider.findParticipant(participantDeregisterMessage.getParticipantId().getName(),
-                            participantDeregisterMessage.getParticipantId().getVersion());
-
-            if (participantOpt.isPresent()) {
-                var participant = participantOpt.get();
-                participant.setParticipantState(ParticipantState.TERMINATED);
-                participant.setHealthStatus(ParticipantHealthStatus.OFF_LINE);
-                participantProvider.saveParticipant(participant);
-            }
-        } catch (PfModelException pfme) {
-            LOGGER.warn("Model exception occured with participant id {}",
-                    participantDeregisterMessage.getParticipantId());
-        }
-
-        participantDeregisterAckPublisher.send(participantDeregisterMessage.getMessageId());
-    }
-
-    /**
-     * Handle a ParticipantUpdateAck message from a participant.
-     *
-     * @param participantUpdateAckMessage the ParticipantUpdateAck message received from a participant
-     */
-    @MessageIntercept
-    public void handleParticipantMessage(ParticipantUpdateAck participantUpdateAckMessage) {
-        LOGGER.debug("Participant Update Ack received {}", participantUpdateAckMessage);
-        try {
-            var participantOpt =
-                    participantProvider.findParticipant(participantUpdateAckMessage.getParticipantId().getName(),
-                            participantUpdateAckMessage.getParticipantId().getVersion());
-
-            if (participantOpt.isPresent()) {
-                var participant = participantOpt.get();
-                participant.setParticipantState(participantUpdateAckMessage.getState());
-                participantProvider.saveParticipant(participant);
-            } else {
-                LOGGER.warn("Participant not found in database {}", participantUpdateAckMessage.getParticipantId());
-            }
-        } catch (PfModelException pfme) {
-            LOGGER.warn("Model exception occured with participant id {}",
-                    participantUpdateAckMessage.getParticipantId());
-        }
-    }
-
-    /**
-     * Send commissioning update message to dmaap.
-     *
-     * @param name the ToscaServiceTemplate name
-     * @param version the ToscaServiceTemplate version
-     */
-    public void handleSendCommissionMessage(String name, String version) {
-        LOGGER.debug("Participant update message with serviveTemplate {} {} being sent to all participants", name,
-                version);
-        participantUpdatePublisher.sendComissioningBroadcast(name, version);
-    }
-
-    /**
-     * Send decommissioning update message to dmaap.
-     *
-     */
-    public void handleSendDeCommissionMessage() {
-        LOGGER.debug("Participant update message being sent");
-        participantUpdatePublisher.sendDecomisioning();
-    }
-
-    /**
-     * Handle a ControlLoop update acknowledge message from a participant.
-     *
-     * @param controlLoopAckMessage the ControlLoopAck message received from a participant
-     */
-    @MessageIntercept
-    public void handleControlLoopUpdateAckMessage(ControlLoopAck controlLoopAckMessage) {
-        LOGGER.debug("ControlLoop Update Ack message received {}", controlLoopAckMessage);
-        setClElementStateInDb(controlLoopAckMessage);
-    }
-
-    /**
-     * Handle a ControlLoop statechange acknowledge message from a participant.
-     *
-     * @param controlLoopAckMessage the ControlLoopAck message received from a participant
-     */
-    @MessageIntercept
-    public void handleControlLoopStateChangeAckMessage(ControlLoopAck controlLoopAckMessage) {
-        LOGGER.debug("ControlLoop StateChange Ack message received {}", controlLoopAckMessage);
-        setClElementStateInDb(controlLoopAckMessage);
-    }
-
-    private void setClElementStateInDb(ControlLoopAck controlLoopAckMessage) {
-        if (controlLoopAckMessage.getControlLoopResultMap() != null) {
-            try {
-                var controlLoop = controlLoopProvider.getControlLoop(controlLoopAckMessage.getControlLoopId());
-                if (controlLoop != null) {
-                    var updated = updateState(controlLoop, controlLoopAckMessage.getControlLoopResultMap().entrySet());
-                    updated |= setPrimed(controlLoop);
-                    if (updated) {
-                        controlLoopProvider.saveControlLoop(controlLoop);
-                    }
-                } else {
-                    LOGGER.warn("ControlLoop not found in database {}", controlLoopAckMessage.getControlLoopId());
-                }
-            } catch (PfModelException pfme) {
-                LOGGER.warn("Model exception occured with ControlLoop Id {}", controlLoopAckMessage.getControlLoopId());
-            }
-        }
-    }
-
-    private boolean updateState(ControlLoop controlLoop,
-            Set<Map.Entry<UUID, ControlLoopElementAck>> controlLoopResultSet) {
-        var updated = false;
-        for (var clElementAck : controlLoopResultSet) {
-            var element = controlLoop.getElements().get(clElementAck.getKey());
-            if (element != null) {
-                element.setState(clElementAck.getValue().getState());
-                updated = true;
-            }
-        }
-        return updated;
-    }
-
-    private boolean setPrimed(ControlLoop controlLoop) {
-        var clElements = controlLoop.getElements().values();
-        if (clElements != null) {
-            Boolean primedFlag = true;
-            var checkOpt = controlLoop.getElements().values().stream()
-                    .filter(clElement -> (!clElement.getState().equals(ControlLoopState.PASSIVE)
-                            || !clElement.getState().equals(ControlLoopState.RUNNING)))
-                    .findAny();
-            if (checkOpt.isEmpty()) {
-                primedFlag = false;
-            }
-            controlLoop.setPrimed(primedFlag);
-            return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Supervise a control loop, performing whatever actions need to be performed on the control loop.
-     *
-     * @param controlLoop the control loop to supervises
-     * @throws ControlLoopException on supervision errors
-     */
-    private void superviseControlLoop(ControlLoop controlLoop) throws ControlLoopException {
-        switch (controlLoop.getOrderedState()) {
-            case UNINITIALISED:
-                superviseControlLoopUninitialization(controlLoop);
-                break;
-
-            case PASSIVE:
-                superviseControlLoopPassivation(controlLoop);
-                break;
-
-            case RUNNING:
-                superviseControlLoopActivation(controlLoop);
-                break;
-
-            default:
-                exceptionOccured(Response.Status.NOT_ACCEPTABLE,
-                        "A control loop cannot be commanded to go into state " + controlLoop.getOrderedState().name());
-        }
-    }
-
-    /**
-     * Supervise a control loop uninitialisation, performing whatever actions need to be performed on the control loop,
-     * control loop ordered state is UNINITIALIZED.
-     *
-     * @param controlLoop the control loop to supervises
-     * @throws ControlLoopException on supervision errors
-     */
-    private void superviseControlLoopUninitialization(ControlLoop controlLoop) throws ControlLoopException {
-        switch (controlLoop.getState()) {
-            case UNINITIALISED:
-                exceptionOccured(Response.Status.NOT_ACCEPTABLE,
-                        CONTROL_LOOP_IS_ALREADY_IN_STATE + controlLoop.getState().name());
-                break;
-
-            case UNINITIALISED2PASSIVE:
-            case PASSIVE:
-                controlLoop.setState(ControlLoopState.PASSIVE2UNINITIALISED);
-                controlLoopStateChangePublisher.send(controlLoop, getFirstStartPhase(controlLoop));
-                break;
-
-            case PASSIVE2UNINITIALISED:
-                exceptionOccured(Response.Status.NOT_ACCEPTABLE, CONTROL_LOOP_IS_ALREADY_IN_STATE
-                        + controlLoop.getState().name() + AND_TRANSITIONING_TO_STATE + controlLoop.getOrderedState());
-                break;
-
-            default:
-                exceptionOccured(Response.Status.NOT_ACCEPTABLE, CONTROL_LOOP_CANNOT_TRANSITION_FROM_STATE
-                        + controlLoop.getState().name() + TO_STATE + controlLoop.getOrderedState());
-                break;
-        }
-    }
-
-    private void superviseControlLoopPassivation(ControlLoop controlLoop) throws ControlLoopException {
-        switch (controlLoop.getState()) {
-            case PASSIVE:
-                exceptionOccured(Response.Status.NOT_ACCEPTABLE,
-                        CONTROL_LOOP_IS_ALREADY_IN_STATE + controlLoop.getState().name());
-                break;
-            case UNINITIALISED:
-                controlLoop.setState(ControlLoopState.UNINITIALISED2PASSIVE);
-                controlLoopUpdatePublisher.send(controlLoop);
-                break;
-
-            case UNINITIALISED2PASSIVE:
-            case RUNNING2PASSIVE:
-                exceptionOccured(Response.Status.NOT_ACCEPTABLE, CONTROL_LOOP_IS_ALREADY_IN_STATE
-                        + controlLoop.getState().name() + AND_TRANSITIONING_TO_STATE + controlLoop.getOrderedState());
-                break;
-
-            case RUNNING:
-                controlLoop.setState(ControlLoopState.RUNNING2PASSIVE);
-                controlLoopStateChangePublisher.send(controlLoop, getFirstStartPhase(controlLoop));
-                break;
-
-            default:
-                exceptionOccured(Response.Status.NOT_ACCEPTABLE, CONTROL_LOOP_CANNOT_TRANSITION_FROM_STATE
-                        + controlLoop.getState().name() + TO_STATE + controlLoop.getOrderedState());
-                break;
-        }
-    }
-
-    private void superviseControlLoopActivation(ControlLoop controlLoop) throws ControlLoopException {
-        switch (controlLoop.getState()) {
-            case RUNNING:
-                exceptionOccured(Response.Status.NOT_ACCEPTABLE,
-                        CONTROL_LOOP_IS_ALREADY_IN_STATE + controlLoop.getState().name());
-                break;
-
-            case PASSIVE2RUNNING:
-                exceptionOccured(Response.Status.NOT_ACCEPTABLE, CONTROL_LOOP_IS_ALREADY_IN_STATE
-                        + controlLoop.getState().name() + AND_TRANSITIONING_TO_STATE + controlLoop.getOrderedState());
-                break;
-
-            case PASSIVE:
-                controlLoop.setState(ControlLoopState.PASSIVE2RUNNING);
-                controlLoopStateChangePublisher.send(controlLoop, getFirstStartPhase(controlLoop));
-                break;
-
-            default:
-                exceptionOccured(Response.Status.NOT_ACCEPTABLE, CONTROL_LOOP_CANNOT_TRANSITION_FROM_STATE
-                        + controlLoop.getState().name() + TO_STATE + controlLoop.getOrderedState());
-                break;
-        }
-    }
-
-    private int getFirstStartPhase(ControlLoop controlLoop) {
-        ToscaServiceTemplate toscaServiceTemplate = null;
-        try {
-            toscaServiceTemplate = serviceTemplateProvider.getAllServiceTemplates().get(0);
-        } catch (PfModelException e) {
-            throw new PfModelRuntimeException(Status.BAD_REQUEST, "Canont load ToscaServiceTemplate from DB", e);
-        }
-        return ParticipantUtils.getFirstStartPhase(controlLoop, toscaServiceTemplate);
-    }
-
-    private void checkParticipant(ParticipantMessage participantMessage, ParticipantState participantState,
-            ParticipantHealthStatus healthStatus) throws ControlLoopException, PfModelException {
-        if (participantMessage.getParticipantId() == null) {
-            exceptionOccured(Response.Status.NOT_FOUND, "Participant ID on PARTICIPANT_STATUS message is null");
-        }
-        var participantOpt = participantProvider.findParticipant(participantMessage.getParticipantId().getName(),
-                participantMessage.getParticipantId().getVersion());
-
-        if (participantOpt.isEmpty()) {
-            var participant = new Participant();
-            participant.setName(participantMessage.getParticipantId().getName());
-            participant.setVersion(participantMessage.getParticipantId().getVersion());
-            participant.setDefinition(participantMessage.getParticipantId());
-            participant.setParticipantType(participantMessage.getParticipantType());
-            participant.setParticipantState(participantState);
-            participant.setHealthStatus(healthStatus);
-
-            participantProvider.saveParticipant(participant);
-        } else {
-            var participant = participantOpt.get();
-            participant.setParticipantState(participantState);
-            participant.setHealthStatus(healthStatus);
-
-            participantProvider.saveParticipant(participant);
-        }
-    }
-
-    private void superviseParticipant(ParticipantStatus participantStatusMessage)
-            throws PfModelException, ControlLoopException {
-
-        checkParticipant(participantStatusMessage, participantStatusMessage.getState(),
-                participantStatusMessage.getHealthStatus());
-
-        monitoringProvider.createParticipantStatistics(List.of(participantStatusMessage.getParticipantStatistics()));
-    }
-
-    private void superviseControlLoops(ParticipantStatus participantStatusMessage)
-            throws PfModelException, ControlLoopException {
-        if (participantStatusMessage.getControlLoopInfoList() != null) {
-            for (ControlLoopInfo clEntry : participantStatusMessage.getControlLoopInfoList()) {
-                var dbControlLoop =
-                        controlLoopProvider.getControlLoop(new ToscaConceptIdentifier(clEntry.getControlLoopId()));
-                if (dbControlLoop == null) {
-                    exceptionOccured(Response.Status.NOT_FOUND,
-                            "PARTICIPANT_STATUS control loop not found in database: " + clEntry.getControlLoopId());
-                }
-                dbControlLoop.setState(clEntry.getState());
-                monitoringProvider.createClElementStatistics(
-                        clEntry.getControlLoopStatistics().getClElementStatisticsList().getClElementStatistics());
-            }
-        }
-    }
-
-    private void exceptionOccured(Response.Status status, String reason) throws ControlLoopException {
-        throw new ControlLoopException(status, reason);
-    }
-}
diff --git a/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionScanner.java b/runtime-controlloop/src/main/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionScanner.java
deleted file mode 100644 (file)
index 01e035b..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.runtime.supervision;
-
-import java.util.HashMap;
-import java.util.Map;
-import org.apache.commons.lang3.tuple.Pair;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantHealthStatus;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantUtils;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ControlLoopProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ServiceTemplateProvider;
-import org.onap.policy.clamp.controlloop.runtime.main.parameters.ClRuntimeParameterGroup;
-import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ControlLoopStateChangePublisher;
-import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ControlLoopUpdatePublisher;
-import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ParticipantStatusReqPublisher;
-import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ParticipantUpdatePublisher;
-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;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-
-/**
- * This class is used to scan the control loops in the database and check if they are in the correct state.
- */
-@Component
-public class SupervisionScanner {
-    private static final Logger LOGGER = LoggerFactory.getLogger(SupervisionScanner.class);
-
-    private final HandleCounter<ToscaConceptIdentifier> controlLoopCounter = new HandleCounter<>();
-    private final HandleCounter<ToscaConceptIdentifier> participantStatusCounter = new HandleCounter<>();
-    private final HandleCounter<Pair<ToscaConceptIdentifier, ToscaConceptIdentifier>> participantUpdateCounter =
-            new HandleCounter<>();
-
-    private final Map<ToscaConceptIdentifier, Integer> phaseMap = new HashMap<>();
-
-    private final ControlLoopProvider controlLoopProvider;
-    private final ServiceTemplateProvider serviceTemplateProvider;
-    private final ControlLoopStateChangePublisher controlLoopStateChangePublisher;
-    private final ControlLoopUpdatePublisher controlLoopUpdatePublisher;
-    private final ParticipantProvider participantProvider;
-    private final ParticipantStatusReqPublisher participantStatusReqPublisher;
-    private final ParticipantUpdatePublisher participantUpdatePublisher;
-
-    /**
-     * Constructor for instantiating SupervisionScanner.
-     *
-     * @param controlLoopProvider the provider to use to read control loops from the database
-     * @param serviceTemplateProvider the Policy Models Provider
-     * @param controlLoopStateChangePublisher the ControlLoop StateChange Publisher
-     * @param controlLoopUpdatePublisher the ControlLoopUpdate Publisher
-     * @param participantProvider the Participant Provider
-     * @param participantStatusReqPublisher the Participant StatusReq Publisher
-     * @param participantUpdatePublisher the Participant Update Publisher
-     * @param clRuntimeParameterGroup the parameters for the control loop runtime
-     */
-    public SupervisionScanner(final ControlLoopProvider controlLoopProvider,
-            ServiceTemplateProvider serviceTemplateProvider,
-            final ControlLoopStateChangePublisher controlLoopStateChangePublisher,
-            ControlLoopUpdatePublisher controlLoopUpdatePublisher, ParticipantProvider participantProvider,
-            ParticipantStatusReqPublisher participantStatusReqPublisher,
-            ParticipantUpdatePublisher participantUpdatePublisher,
-            final ClRuntimeParameterGroup clRuntimeParameterGroup) {
-        this.controlLoopProvider = controlLoopProvider;
-        this.serviceTemplateProvider = serviceTemplateProvider;
-        this.controlLoopStateChangePublisher = controlLoopStateChangePublisher;
-        this.controlLoopUpdatePublisher = controlLoopUpdatePublisher;
-        this.participantProvider = participantProvider;
-        this.participantStatusReqPublisher = participantStatusReqPublisher;
-        this.participantUpdatePublisher = participantUpdatePublisher;
-
-        controlLoopCounter.setMaxRetryCount(
-                clRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().getMaxRetryCount());
-        controlLoopCounter.setMaxWaitMs(clRuntimeParameterGroup.getParticipantParameters().getMaxStatusWaitMs());
-
-        participantUpdateCounter.setMaxRetryCount(
-                clRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().getMaxRetryCount());
-        participantUpdateCounter
-                .setMaxWaitMs(clRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().getMaxWaitMs());
-
-        participantStatusCounter.setMaxRetryCount(
-                clRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().getMaxRetryCount());
-        participantStatusCounter.setMaxWaitMs(clRuntimeParameterGroup.getParticipantParameters().getMaxStatusWaitMs());
-    }
-
-    /**
-     * Run Scanning.
-     *
-     * @param counterCheck if true activate counter and retry
-     */
-    public void run(boolean counterCheck) {
-        LOGGER.debug("Scanning control loops in the database . . .");
-
-        if (counterCheck) {
-            try {
-                for (var participant : participantProvider.getParticipants()) {
-                    scanParticipantStatus(participant);
-                }
-            } catch (PfModelException pfme) {
-                LOGGER.warn("error reading participant from database", pfme);
-                return;
-            }
-        }
-
-        try {
-            var list = serviceTemplateProvider.getAllServiceTemplates();
-            if (list != null && !list.isEmpty()) {
-                ToscaServiceTemplate toscaServiceTemplate = list.get(0);
-
-                for (ControlLoop controlLoop : controlLoopProvider.getControlLoops()) {
-                    scanControlLoop(controlLoop, toscaServiceTemplate, counterCheck);
-                }
-            }
-        } catch (PfModelException pfme) {
-            LOGGER.warn("error reading control loops from database", pfme);
-        }
-
-        if (counterCheck) {
-            scanParticipantUpdate();
-        }
-
-        LOGGER.debug("Control loop scan complete . . .");
-    }
-
-    private void scanParticipantUpdate() {
-        LOGGER.debug("Scanning participants to update . . .");
-
-        for (var id : participantUpdateCounter.keySet()) {
-            if (participantUpdateCounter.isFault(id)) {
-                LOGGER.debug("report Participant Update fault");
-
-            } else if (participantUpdateCounter.getDuration(id) > participantUpdateCounter.getMaxWaitMs()) {
-
-                if (participantUpdateCounter.count(id)) {
-                    LOGGER.debug("retry message ParticipantUpdate");
-                    participantUpdatePublisher.sendCommissioning(null, null, id.getLeft(), id.getRight());
-                } else {
-                    LOGGER.debug("report Participant Update fault");
-                    participantUpdateCounter.setFault(id);
-                }
-            }
-        }
-
-        LOGGER.debug("Participants to update scan complete . . .");
-    }
-
-    private void scanParticipantStatus(Participant participant) throws PfModelException {
-        ToscaConceptIdentifier id = participant.getKey().asIdentifier();
-        if (participantStatusCounter.isFault(id)) {
-            LOGGER.debug("report Participant fault");
-            return;
-        }
-        if (participantStatusCounter.getDuration(id) > participantStatusCounter.getMaxWaitMs()) {
-            if (participantStatusCounter.count(id)) {
-                LOGGER.debug("retry message ParticipantStatusReq");
-                participantStatusReqPublisher.send(id);
-                participant.setHealthStatus(ParticipantHealthStatus.NOT_HEALTHY);
-            } else {
-                LOGGER.debug("report Participant fault");
-                participantStatusCounter.setFault(id);
-                participant.setHealthStatus(ParticipantHealthStatus.OFF_LINE);
-            }
-            participantProvider.saveParticipant(participant);
-        }
-    }
-
-    /**
-     * handle participant Status message.
-     */
-    public void handleParticipantStatus(ToscaConceptIdentifier id) {
-        participantStatusCounter.clear(id);
-    }
-
-    public void handleParticipantRegister(Pair<ToscaConceptIdentifier, ToscaConceptIdentifier> id) {
-        participantUpdateCounter.clear(id);
-    }
-
-    public void handleParticipantUpdateAck(Pair<ToscaConceptIdentifier, ToscaConceptIdentifier> id) {
-        participantUpdateCounter.remove(id);
-    }
-
-    private void scanControlLoop(final ControlLoop controlLoop, ToscaServiceTemplate toscaServiceTemplate,
-            boolean counterCheck) throws PfModelException {
-        LOGGER.debug("scanning control loop {} . . .", controlLoop.getKey().asIdentifier());
-
-        if (controlLoop.getState().equals(controlLoop.getOrderedState().asState())) {
-            LOGGER.debug("control loop {} scanned, OK", controlLoop.getKey().asIdentifier());
-
-            // Clear missed report counter on Control Loop
-            clearFaultAndCounter(controlLoop);
-            return;
-        }
-
-        var completed = true;
-        var minSpNotCompleted = 1000; // min startPhase not completed
-        var maxSpNotCompleted = 0; // max startPhase not completed
-        var defaultMin = 1000; // min startPhase
-        var defaultMax = 0; // max startPhase
-        for (ControlLoopElement element : controlLoop.getElements().values()) {
-            ToscaNodeTemplate toscaNodeTemplate = toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates()
-                    .get(element.getDefinition().getName());
-            int startPhase = ParticipantUtils.findStartPhase(toscaNodeTemplate.getProperties());
-            defaultMin = Math.min(defaultMin, startPhase);
-            defaultMax = Math.max(defaultMax, startPhase);
-            if (!element.getState().equals(element.getOrderedState().asState())) {
-                completed = false;
-                minSpNotCompleted = Math.min(minSpNotCompleted, startPhase);
-                maxSpNotCompleted = Math.max(maxSpNotCompleted, startPhase);
-            }
-        }
-
-        if (completed) {
-            LOGGER.debug("control loop scan: transition from state {} to {} completed", controlLoop.getState(),
-                    controlLoop.getOrderedState());
-
-            controlLoop.setState(controlLoop.getOrderedState().asState());
-            controlLoopProvider.saveControlLoop(controlLoop);
-
-            // Clear missed report counter on Control Loop
-            clearFaultAndCounter(controlLoop);
-        } else {
-            LOGGER.debug("control loop scan: transition from state {} to {} not completed", controlLoop.getState(),
-                    controlLoop.getOrderedState());
-
-            var nextSpNotCompleted = ControlLoopState.UNINITIALISED2PASSIVE.equals(controlLoop.getState())
-                    || ControlLoopState.PASSIVE2RUNNING.equals(controlLoop.getState()) ? minSpNotCompleted
-                            : maxSpNotCompleted;
-
-            var firstStartPhase = ControlLoopState.UNINITIALISED2PASSIVE.equals(controlLoop.getState())
-                    || ControlLoopState.PASSIVE2RUNNING.equals(controlLoop.getState()) ? defaultMin : defaultMax;
-
-            if (nextSpNotCompleted != phaseMap.getOrDefault(controlLoop.getKey().asIdentifier(), firstStartPhase)) {
-                phaseMap.put(controlLoop.getKey().asIdentifier(), nextSpNotCompleted);
-                sendControlLoopMsg(controlLoop, nextSpNotCompleted);
-            } else if (counterCheck) {
-                phaseMap.put(controlLoop.getKey().asIdentifier(), nextSpNotCompleted);
-                handleCounter(controlLoop, nextSpNotCompleted);
-            }
-        }
-    }
-
-    private void clearFaultAndCounter(ControlLoop controlLoop) {
-        controlLoopCounter.clear(controlLoop.getKey().asIdentifier());
-        phaseMap.clear();
-    }
-
-    private void handleCounter(ControlLoop controlLoop, int startPhase) {
-        ToscaConceptIdentifier id = controlLoop.getKey().asIdentifier();
-        if (controlLoopCounter.isFault(id)) {
-            LOGGER.debug("report ControlLoop fault");
-            return;
-        }
-
-        if (controlLoopCounter.getDuration(id) > controlLoopCounter.getMaxWaitMs()) {
-            if (controlLoopCounter.count(id)) {
-                phaseMap.put(id, startPhase);
-                sendControlLoopMsg(controlLoop, startPhase);
-            } else {
-                LOGGER.debug("report ControlLoop fault");
-                controlLoopCounter.setFault(id);
-            }
-        }
-    }
-
-    private void sendControlLoopMsg(ControlLoop controlLoop, int startPhase) {
-        if (ControlLoopState.UNINITIALISED2PASSIVE.equals(controlLoop.getState())) {
-            LOGGER.debug("retry message ControlLoopUpdate");
-            controlLoopUpdatePublisher.send(controlLoop, startPhase);
-        } else {
-            LOGGER.debug("retry message ControlLoopStateChange");
-            controlLoopStateChangePublisher.send(controlLoop, startPhase);
-        }
-    }
-}
diff --git a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/instantiation/ControlLoopInstantiationProviderTest.java b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/instantiation/ControlLoopInstantiationProviderTest.java
deleted file mode 100644 (file)
index ba1cc08..0000000
+++ /dev/null
@@ -1,378 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.runtime.instantiation;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Optional;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Test;
-import org.mockito.Mockito;
-import org.onap.policy.clamp.controlloop.common.exception.ControlLoopRuntimeException;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ControlLoopProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantProvider;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationCommand;
-import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationResponse;
-import org.onap.policy.clamp.controlloop.runtime.commissioning.CommissioningProvider;
-import org.onap.policy.clamp.controlloop.runtime.supervision.SupervisionHandler;
-import org.onap.policy.clamp.controlloop.runtime.util.CommonTestData;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-
-/**
- * Class to perform unit test of {@link ControlLoopInstantiationProvider}}.
- *
- */
-class ControlLoopInstantiationProviderTest {
-    private static final String ID_NAME = "PMSH_Instance1";
-    private static final String ID_VERSION = "1.2.3";
-    private static final String CL_INSTANTIATION_CREATE_JSON = "src/test/resources/rest/controlloops/ControlLoops.json";
-    private static final String CL_INSTANTIATION_UPDATE_JSON =
-            "src/test/resources/rest/controlloops/ControlLoopsUpdate.json";
-    private static final String CL_INSTANTIATION_CHANGE_STATE_JSON =
-            "src/test/resources/rest/controlloops/PassiveCommand.json";
-    private static final String CL_INSTANTIATION_DEFINITION_NAME_NOT_FOUND_JSON =
-            "src/test/resources/rest/controlloops/ControlLoopElementsNotFound.json";
-    private static final String CL_INSTANTIATION_CONTROLLOOP_DEFINITION_NOT_FOUND_JSON =
-            "src/test/resources/rest/controlloops/ControlLoopsNotFound.json";
-    private static final String TOSCA_TEMPLATE_YAML =
-            "src/test/resources/rest/servicetemplates/pmsh_multiple_cl_tosca.yaml";
-    private static final String CONTROL_LOOP_NOT_FOUND = "Control Loop not found";
-    private static final String DELETE_BAD_REQUEST = "Control Loop State is still %s";
-    private static final String ORDERED_STATE_INVALID = "ordered state invalid or not specified on command";
-    private static final String CONTROLLOOP_ELEMENT_NAME_NOT_FOUND =
-            "\"ControlLoops\" INVALID, item has status INVALID\n"
-                    + "  \"entry org.onap.domain.pmsh.PMSHControlLoopDefinition\" INVALID, item has status INVALID\n"
-                    + "    \"entry org.onap.domain.pmsh.DCAEMicroservice\" INVALID, Not FOUND\n"
-                    + "  \"entry org.onap.domain.pmsh.PMSHControlLoopDefinition\" INVALID, item has status INVALID\n"
-                    + "    \"entry org.onap.domain.pmsh.DCAEMicroservice\" INVALID, Not FOUND\n";
-
-    private static final String CONTROLLOOP_DEFINITION_NOT_FOUND = "\"ControlLoops\" INVALID, item has status INVALID\n"
-            + "  \"entry org.onap.domain.PMSHControlLoopDefinition\" INVALID, item has status INVALID\n"
-            + "    item \"ControlLoop\" value \"org.onap.domain.PMSHControlLoopDefinition\" INVALID,"
-            + " Commissioned control loop definition not FOUND\n"
-            + "  \"entry org.onap.domain.PMSHControlLoopDefinition\" INVALID, item has status INVALID\n"
-            + "    item \"ControlLoop\" value \"org.onap.domain.PMSHControlLoopDefinition\" INVALID,"
-            + " Commissioned control loop definition not FOUND\n";
-
-    private static ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate();
-
-    @BeforeAll
-    public static void setUpBeforeClass() throws Exception {
-        serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_TEMPLATE_YAML);
-    }
-
-    @Test
-    void testIntanceResponses() throws Exception {
-        var participantProvider = Mockito.mock(ParticipantProvider.class);
-        var clProvider = mock(ControlLoopProvider.class);
-        var supervisionHandler = mock(SupervisionHandler.class);
-        var commissioningProvider = mock(CommissioningProvider.class);
-
-        when(commissioningProvider.getAllToscaServiceTemplate()).thenReturn(List.of(serviceTemplate));
-        when(commissioningProvider.getToscaServiceTemplate(ID_NAME, ID_VERSION)).thenReturn(serviceTemplate);
-
-        var instantiationProvider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider,
-                supervisionHandler, participantProvider);
-        var instancePropertyList = instantiationProvider.createInstanceProperties(serviceTemplate);
-        assertNull(instancePropertyList.getErrorDetails());
-        var id = new ToscaConceptIdentifier(ID_NAME, ID_VERSION);
-        assertEquals(id, instancePropertyList.getAffectedInstanceProperties().get(0));
-
-        ControlLoops controlLoops =
-                InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Crud");
-        var controlLoop = controlLoops.getControlLoopList().get(0);
-        controlLoop.setName(ID_NAME);
-        controlLoop.setVersion(ID_VERSION);
-        when(clProvider.getControlLoops(ID_NAME, ID_VERSION)).thenReturn(List.of(controlLoop));
-
-        var instanceOrderState = instantiationProvider.getInstantiationOrderState(ID_NAME, ID_VERSION);
-        assertEquals(ControlLoopOrderedState.UNINITIALISED, instanceOrderState.getOrderedState());
-        assertEquals(ID_NAME, instanceOrderState.getControlLoopIdentifierList().get(0).getName());
-
-        when(clProvider.findControlLoop(ID_NAME, ID_VERSION)).thenReturn(Optional.of(controlLoop));
-        when(clProvider.deleteControlLoop(ID_NAME, ID_VERSION)).thenReturn(controlLoop);
-
-        var instanceResponse = instantiationProvider.deleteInstanceProperties(ID_NAME, ID_VERSION);
-        assertEquals(ID_NAME, instanceResponse.getAffectedControlLoops().get(0).getName());
-
-    }
-
-    @Test
-    void testInstantiationCrud() throws Exception {
-        var participantProvider = Mockito.mock(ParticipantProvider.class);
-        var participants = CommonTestData.createParticipants();
-        when(participantProvider.getParticipants()).thenReturn(participants);
-
-        var commissioningProvider = mock(CommissioningProvider.class);
-        var toscaNodeTemplate1 = new ToscaNodeTemplate();
-        toscaNodeTemplate1.setName("org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement");
-        toscaNodeTemplate1.setVersion("1.2.3");
-        when(commissioningProvider.getControlLoopDefinitions(anyString(), anyString()))
-                .thenReturn(List.of(toscaNodeTemplate1));
-
-        var toscaNodeTemplate2 = new ToscaNodeTemplate();
-        toscaNodeTemplate2.setName("org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement");
-        toscaNodeTemplate2.setVersion("1.2.3");
-        var toscaNodeTemplate3 = new ToscaNodeTemplate();
-        toscaNodeTemplate3.setName("org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement");
-        toscaNodeTemplate3.setVersion("1.2.3");
-        var toscaNodeTemplate4 = new ToscaNodeTemplate();
-        toscaNodeTemplate4.setName("org.onap.domain.pmsh.PMSH_DCAEMicroservice");
-        toscaNodeTemplate4.setVersion("1.2.3");
-
-        when(commissioningProvider.getControlLoopElementDefinitions(toscaNodeTemplate1))
-                .thenReturn(List.of(toscaNodeTemplate1, toscaNodeTemplate2, toscaNodeTemplate3, toscaNodeTemplate4));
-
-        var supervisionHandler = mock(SupervisionHandler.class);
-        var clProvider = mock(ControlLoopProvider.class);
-        var instantiationProvider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider,
-                supervisionHandler, participantProvider);
-        ControlLoops controlLoopsCreate =
-                InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Crud");
-        InstantiationResponse instantiationResponse = instantiationProvider.createControlLoops(controlLoopsCreate);
-        InstantiationUtils.assertInstantiationResponse(instantiationResponse, controlLoopsCreate);
-
-        verify(clProvider).saveControlLoops(controlLoopsCreate.getControlLoopList());
-
-        for (var controlLoop : controlLoopsCreate.getControlLoopList()) {
-            when(clProvider.getControlLoops(controlLoop.getName(), controlLoop.getVersion()))
-                    .thenReturn(List.of(controlLoop));
-
-            ControlLoops controlLoopsGet =
-                    instantiationProvider.getControlLoops(controlLoop.getName(), controlLoop.getVersion());
-            assertThat(controlLoopsGet.getControlLoopList()).hasSize(1);
-            assertThat(controlLoop).isEqualTo(controlLoopsGet.getControlLoopList().get(0));
-        }
-
-        ControlLoops controlLoopsUpdate =
-                InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_UPDATE_JSON, "Crud");
-
-        instantiationResponse = instantiationProvider.updateControlLoops(controlLoopsUpdate);
-        InstantiationUtils.assertInstantiationResponse(instantiationResponse, controlLoopsUpdate);
-
-        verify(clProvider).saveControlLoops(controlLoopsUpdate.getControlLoopList());
-
-        for (var controlLoop : controlLoopsUpdate.getControlLoopList()) {
-            when(clProvider.findControlLoop(controlLoop.getKey().asIdentifier())).thenReturn(Optional.of(controlLoop));
-            when(clProvider.findControlLoop(controlLoop.getName(), controlLoop.getVersion()))
-                    .thenReturn(Optional.of(controlLoop));
-            when(clProvider.deleteControlLoop(controlLoop.getName(), controlLoop.getVersion())).thenReturn(controlLoop);
-        }
-
-        InstantiationCommand instantiationCommand =
-                InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Crud");
-        instantiationResponse = instantiationProvider.issueControlLoopCommand(instantiationCommand);
-        InstantiationUtils.assertInstantiationResponse(instantiationResponse, instantiationCommand);
-
-        verify(supervisionHandler).triggerControlLoopSupervision(instantiationCommand.getControlLoopIdentifierList());
-
-        // in order to delete a controlLoop the state must be UNINITIALISED
-        controlLoopsCreate.getControlLoopList().forEach(cl -> cl.setState(ControlLoopState.UNINITIALISED));
-        instantiationProvider.updateControlLoops(controlLoopsCreate);
-
-        for (ControlLoop controlLoop : controlLoopsCreate.getControlLoopList()) {
-            instantiationProvider.deleteControlLoop(controlLoop.getName(), controlLoop.getVersion());
-
-            verify(clProvider).deleteControlLoop(controlLoop.getName(), controlLoop.getVersion());
-        }
-    }
-
-    @Test
-    void testInstantiationDelete() throws Exception {
-
-        ControlLoops controlLoops =
-                InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Delete");
-
-        ControlLoop controlLoop0 = controlLoops.getControlLoopList().get(0);
-        var participantProvider = Mockito.mock(ParticipantProvider.class);
-        var clProvider = mock(ControlLoopProvider.class);
-        var supervisionHandler = mock(SupervisionHandler.class);
-        var commissioningProvider = mock(CommissioningProvider.class);
-
-        var instantiationProvider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider,
-                supervisionHandler, participantProvider);
-
-        assertThatThrownBy(
-                () -> instantiationProvider.deleteControlLoop(controlLoop0.getName(), controlLoop0.getVersion()))
-                        .hasMessageMatching(CONTROL_LOOP_NOT_FOUND);
-
-        for (ControlLoopState state : ControlLoopState.values()) {
-            if (!ControlLoopState.UNINITIALISED.equals(state)) {
-                assertThatDeleteThrownBy(controlLoops, state);
-            }
-        }
-        controlLoop0.setState(ControlLoopState.UNINITIALISED);
-
-        for (ControlLoop controlLoop : controlLoops.getControlLoopList()) {
-            when(clProvider.findControlLoop(controlLoop.getName(), controlLoop.getVersion()))
-                    .thenReturn(Optional.of(controlLoop));
-            when(clProvider.deleteControlLoop(controlLoop.getName(), controlLoop.getVersion())).thenReturn(controlLoop);
-
-            instantiationProvider.deleteControlLoop(controlLoop.getName(), controlLoop.getVersion());
-        }
-    }
-
-    private void assertThatDeleteThrownBy(ControlLoops controlLoops, ControlLoopState state) throws Exception {
-        ControlLoop controlLoop = controlLoops.getControlLoopList().get(0);
-        controlLoop.setState(state);
-        var participantProvider = Mockito.mock(ParticipantProvider.class);
-        var clProvider = mock(ControlLoopProvider.class);
-        var supervisionHandler = mock(SupervisionHandler.class);
-        var commissioningProvider = mock(CommissioningProvider.class);
-
-        var instantiationProvider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider,
-                supervisionHandler, participantProvider);
-
-        when(clProvider.findControlLoop(controlLoop.getName(), controlLoop.getVersion()))
-                .thenReturn(Optional.of(controlLoop));
-
-        assertThatThrownBy(
-                () -> instantiationProvider.deleteControlLoop(controlLoop.getName(), controlLoop.getVersion()))
-                        .hasMessageMatching(String.format(DELETE_BAD_REQUEST, state));
-    }
-
-    @Test
-    void testCreateControlLoops_NoDuplicates() throws Exception {
-        var commissioningProvider = mock(CommissioningProvider.class);
-
-        var toscaNodeTemplate1 = new ToscaNodeTemplate();
-        toscaNodeTemplate1.setName("org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement");
-        toscaNodeTemplate1.setVersion("1.2.3");
-        when(commissioningProvider.getControlLoopDefinitions(anyString(), anyString()))
-                .thenReturn(List.of(toscaNodeTemplate1));
-
-        var toscaNodeTemplate2 = new ToscaNodeTemplate();
-        toscaNodeTemplate2.setName("org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement");
-        toscaNodeTemplate2.setVersion("1.2.3");
-        var toscaNodeTemplate3 = new ToscaNodeTemplate();
-        toscaNodeTemplate3.setName("org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement");
-        toscaNodeTemplate3.setVersion("1.2.3");
-        var toscaNodeTemplate4 = new ToscaNodeTemplate();
-        toscaNodeTemplate4.setName("org.onap.domain.pmsh.PMSH_DCAEMicroservice");
-        toscaNodeTemplate4.setVersion("1.2.3");
-
-        when(commissioningProvider.getControlLoopElementDefinitions(toscaNodeTemplate1))
-                .thenReturn(List.of(toscaNodeTemplate1, toscaNodeTemplate2, toscaNodeTemplate3, toscaNodeTemplate4));
-
-        ControlLoops controlLoopsCreate =
-                InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "NoDuplicates");
-
-        var clProvider = mock(ControlLoopProvider.class);
-        var participantProvider = Mockito.mock(ParticipantProvider.class);
-        var supervisionHandler = mock(SupervisionHandler.class);
-
-        var instantiationProvider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider,
-                supervisionHandler, participantProvider);
-
-        InstantiationResponse instantiationResponse = instantiationProvider.createControlLoops(controlLoopsCreate);
-        InstantiationUtils.assertInstantiationResponse(instantiationResponse, controlLoopsCreate);
-
-        when(clProvider.findControlLoop(controlLoopsCreate.getControlLoopList().get(0).getKey().asIdentifier()))
-                .thenReturn(Optional.of(controlLoopsCreate.getControlLoopList().get(0)));
-
-        assertThatThrownBy(() -> instantiationProvider.createControlLoops(controlLoopsCreate)).hasMessageMatching(
-                controlLoopsCreate.getControlLoopList().get(0).getKey().asIdentifier() + " already defined");
-    }
-
-    @Test
-    void testCreateControlLoops_CommissionedClElementNotFound() throws Exception {
-        var toscaNodeTemplate1 = new ToscaNodeTemplate();
-        toscaNodeTemplate1.setName("org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement");
-        toscaNodeTemplate1.setVersion("1.2.3");
-
-        var toscaNodeTemplate2 = new ToscaNodeTemplate();
-        toscaNodeTemplate2.setName("org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement");
-        toscaNodeTemplate2.setVersion("1.2.3");
-        var toscaNodeTemplate3 = new ToscaNodeTemplate();
-        toscaNodeTemplate3.setName("org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement");
-        toscaNodeTemplate3.setVersion("1.2.3");
-        var commissioningProvider = mock(CommissioningProvider.class);
-        ControlLoops controlLoops = InstantiationUtils
-                .getControlLoopsFromResource(CL_INSTANTIATION_DEFINITION_NAME_NOT_FOUND_JSON, "ClElementNotFound");
-
-        when(commissioningProvider.getControlLoopDefinitions(
-                controlLoops.getControlLoopList().get(0).getDefinition().getName(),
-                controlLoops.getControlLoopList().get(0).getDefinition().getVersion()))
-                        .thenReturn(List.of(toscaNodeTemplate1));
-
-        when(commissioningProvider.getControlLoopElementDefinitions(toscaNodeTemplate1))
-                .thenReturn(List.of(toscaNodeTemplate1, toscaNodeTemplate2, toscaNodeTemplate3));
-
-        var clProvider = mock(ControlLoopProvider.class);
-        var participantProvider = mock(ParticipantProvider.class);
-        var supervisionHandler = mock(SupervisionHandler.class);
-        var provider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider, supervisionHandler,
-                participantProvider);
-
-        assertThatThrownBy(() -> provider.createControlLoops(controlLoops))
-                .hasMessageMatching(CONTROLLOOP_ELEMENT_NAME_NOT_FOUND);
-
-        assertThatThrownBy(() -> provider.updateControlLoops(controlLoops))
-                .hasMessageMatching(CONTROLLOOP_ELEMENT_NAME_NOT_FOUND);
-    }
-
-    @Test
-    void testCreateControlLoops_CommissionedClNotFound() throws Exception {
-        ControlLoops controlLoops = InstantiationUtils
-                .getControlLoopsFromResource(CL_INSTANTIATION_CONTROLLOOP_DEFINITION_NOT_FOUND_JSON, "ClNotFound");
-
-        var participantProvider = Mockito.mock(ParticipantProvider.class);
-        var clProvider = mock(ControlLoopProvider.class);
-        var supervisionHandler = mock(SupervisionHandler.class);
-        var commissioningProvider = mock(CommissioningProvider.class);
-        var provider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider, supervisionHandler,
-                participantProvider);
-
-        assertThatThrownBy(() -> provider.createControlLoops(controlLoops))
-                .hasMessageMatching(CONTROLLOOP_DEFINITION_NOT_FOUND);
-
-        assertThatThrownBy(() -> provider.updateControlLoops(controlLoops))
-                .hasMessageMatching(CONTROLLOOP_DEFINITION_NOT_FOUND);
-    }
-
-    @Test
-    void testIssueControlLoopCommand_OrderedStateInvalid() throws ControlLoopRuntimeException, IOException {
-        var participantProvider = Mockito.mock(ParticipantProvider.class);
-        var clProvider = mock(ControlLoopProvider.class);
-        var supervisionHandler = mock(SupervisionHandler.class);
-        var commissioningProvider = mock(CommissioningProvider.class);
-        var instantiationProvider = new ControlLoopInstantiationProvider(clProvider, commissioningProvider,
-                supervisionHandler, participantProvider);
-        assertThatThrownBy(() -> instantiationProvider.issueControlLoopCommand(new InstantiationCommand()))
-                .hasMessageMatching(ORDERED_STATE_INVALID);
-    }
-}
diff --git a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/monitoring/TestMonitoringProvider.java b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/monitoring/TestMonitoringProvider.java
deleted file mode 100644 (file)
index cbc4c71..0000000
+++ /dev/null
@@ -1,319 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.runtime.monitoring;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyMap;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.io.File;
-import java.time.Instant;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.UUID;
-import javax.ws.rs.core.Response;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Test;
-import org.mockito.Mockito;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatisticsList;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatisticsList;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ClElementStatisticsProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ControlLoopProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantStatisticsProvider;
-import org.onap.policy.common.utils.coder.Coder;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.common.utils.coder.StandardCoder;
-import org.onap.policy.models.base.PfModelRuntimeException;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-
-class TestMonitoringProvider {
-
-    private static final String CL_PARTICIPANT_STATISTICS_JSON =
-            "src/test/resources/rest/monitoring/TestParticipantStatistics.json";
-    private static final String INVALID_PARTICIPANT_JSON_INPUT =
-            "src/test/resources/rest/monitoring/TestParticipantStatistics_Invalid.json";
-    private static final String CL_ELEMENT_STATISTICS_JSON =
-            "src/test/resources/rest/monitoring/TestClElementStatistics.json";
-    private static final String INVALID_CL_ELEMENT_JSON_INPUT =
-            "src/test/resources/rest/monitoring/TestClElementStatistics_Invalid.json";
-    private static final Coder CODER = new StandardCoder();
-
-    private static final String STAT_LIST_IS_NULL = ".*StatisticsList is marked .*ull but is null";
-    private static final String PARTICIPANT_STAT_LIST_IS_NULL =
-            "participantStatisticsList is marked .*null but is null";
-    private static final String NAME_IS_NULL = "name is marked .*null but is null";
-    private static final String CL_LIST_IS_NULL = "clElementStatisticsList is marked .*null but is null";
-    private static final String ID_VERSION1 = "1.001";
-    private static final String ID_VERSION2 = "1.002";
-    private static final String ID_NAME1 = "name1";
-    private static final String ID_NAME2 = "name2";
-    private static final String SORT_DESC = "DESC";
-    private static final String ID_NAME3 = "testCLName";
-    private static final String ID_INVALID_NAME = "invalidCLName";
-    private static ParticipantStatisticsList inputParticipantStatistics;
-    private static ParticipantStatisticsList invalidParticipantInput;
-    private static ClElementStatisticsList inputClElementStatistics;
-    private static ClElementStatisticsList invalidClElementInput;
-
-    @BeforeAll
-    public static void beforeSetupStatistics() throws CoderException {
-        // Reading input json for statistics data
-        inputParticipantStatistics =
-                CODER.decode(new File(CL_PARTICIPANT_STATISTICS_JSON), ParticipantStatisticsList.class);
-        invalidParticipantInput =
-                CODER.decode(new File(INVALID_PARTICIPANT_JSON_INPUT), ParticipantStatisticsList.class);
-        inputClElementStatistics = CODER.decode(new File(CL_ELEMENT_STATISTICS_JSON), ClElementStatisticsList.class);
-        invalidClElementInput = CODER.decode(new File(INVALID_CL_ELEMENT_JSON_INPUT), ClElementStatisticsList.class);
-    }
-
-    @Test
-    void testCreateParticipantStatistics() throws Exception {
-        var participantStatisticsProvider = mock(ParticipantStatisticsProvider.class);
-        var clElementStatisticsProvider = mock(ClElementStatisticsProvider.class);
-        var clProvider = mock(ControlLoopProvider.class);
-        MonitoringProvider provider =
-                new MonitoringProvider(participantStatisticsProvider, clElementStatisticsProvider, clProvider);
-
-        when(participantStatisticsProvider.createParticipantStatistics(any()))
-                .thenReturn(inputParticipantStatistics.getStatisticsList());
-
-        when(participantStatisticsProvider.createParticipantStatistics(eq(null)))
-                .thenThrow(new PfModelRuntimeException(Response.Status.BAD_REQUEST, PARTICIPANT_STAT_LIST_IS_NULL));
-
-        // Creating statistics data in db with null input
-
-        assertThatThrownBy(() -> {
-            provider.createParticipantStatistics(null);
-        }).hasMessageMatching(STAT_LIST_IS_NULL);
-
-        assertThatThrownBy(() -> {
-            provider.createParticipantStatistics(invalidParticipantInput.getStatisticsList());
-        }).hasMessageMatching(PARTICIPANT_STAT_LIST_IS_NULL);
-
-        // Creating statistics data from input json
-        ParticipantStatisticsList createResponse =
-                provider.createParticipantStatistics(inputParticipantStatistics.getStatisticsList());
-
-        assertThat(createResponse.getStatisticsList()).hasSize(3);
-        assertEquals(createResponse.getStatisticsList().toString().replaceAll("\\s+", ""),
-                inputParticipantStatistics.getStatisticsList().toString().replaceAll("\\s+", ""));
-    }
-
-    @Test
-    void testGetParticipantStatistics() throws Exception {
-        var participantStatisticsProvider = mock(ParticipantStatisticsProvider.class);
-        when(participantStatisticsProvider.getFilteredParticipantStatistics(eq(ID_NAME1), any(), any(), any(), eq(null),
-                eq(SORT_DESC), eq(0))).thenReturn(List.of(inputParticipantStatistics.getStatisticsList().get(0)));
-
-        when(participantStatisticsProvider.getFilteredParticipantStatistics(eq(ID_NAME1), any(),
-                eq(Instant.parse("2021-01-11T12:00:00.000Z")), eq(Instant.parse("2021-01-11T16:00:00.000Z")), eq(null),
-                eq(SORT_DESC), eq(0))).thenReturn(List.of());
-
-        when(participantStatisticsProvider.getFilteredParticipantStatistics(eq(ID_NAME2), any(), any(), any(), eq(null),
-                eq(SORT_DESC), eq(1))).thenReturn(List.of(inputParticipantStatistics.getStatisticsList().get(2)));
-
-        var clProvider = mock(ControlLoopProvider.class);
-        var clElementStatisticsProvider = mock(ClElementStatisticsProvider.class);
-        MonitoringProvider provider =
-                new MonitoringProvider(participantStatisticsProvider, clElementStatisticsProvider, clProvider);
-        provider.createParticipantStatistics(inputParticipantStatistics.getStatisticsList());
-
-        assertThatThrownBy(() -> {
-            provider.fetchFilteredParticipantStatistics(null, null, 0, null, null);
-        }).hasMessageMatching(NAME_IS_NULL);
-
-        // Fetch specific statistics record with name, version and record count
-        ParticipantStatisticsList getResponse =
-                provider.fetchFilteredParticipantStatistics(ID_NAME2, ID_VERSION1, 1, null, null);
-        assertThat(getResponse.getStatisticsList()).hasSize(1);
-        assertEquals(getResponse.getStatisticsList().get(0).toString().replaceAll("\\s+", ""),
-                inputParticipantStatistics.getStatisticsList().get(2).toString().replaceAll("\\s+", ""));
-
-        // Fetch statistics using timestamp
-        getResponse = provider.fetchFilteredParticipantStatistics(ID_NAME1, ID_VERSION1, 0, null,
-                Instant.parse("2021-01-10T15:00:00.000Z"));
-        assertThat(getResponse.getStatisticsList()).hasSize(1);
-
-        getResponse = provider.fetchFilteredParticipantStatistics(ID_NAME1, ID_VERSION1, 0,
-                Instant.parse("2021-01-11T12:00:00.000Z"), Instant.parse("2021-01-11T16:00:00.000Z"));
-
-        assertThat(getResponse.getStatisticsList()).isEmpty();
-    }
-
-    @Test
-    void testCreateClElementStatistics() throws Exception {
-        var clElementStatisticsProvider = mock(ClElementStatisticsProvider.class);
-        when(clElementStatisticsProvider.createClElementStatistics(any()))
-                .thenReturn(inputClElementStatistics.getClElementStatistics());
-
-        when(clElementStatisticsProvider.createClElementStatistics(eq(null)))
-                .thenThrow(new PfModelRuntimeException(Response.Status.BAD_REQUEST, CL_LIST_IS_NULL));
-
-        var clProvider = mock(ControlLoopProvider.class);
-
-        var participantStatisticsProvider = mock(ParticipantStatisticsProvider.class);
-        MonitoringProvider provider =
-                new MonitoringProvider(participantStatisticsProvider, clElementStatisticsProvider, clProvider);
-        // Creating statistics data in db with null input
-        assertThatThrownBy(() -> {
-            provider.createClElementStatistics(null);
-        }).hasMessageMatching(STAT_LIST_IS_NULL);
-
-        assertThatThrownBy(() -> {
-            provider.createClElementStatistics(invalidClElementInput.getClElementStatistics());
-        }).hasMessageMatching(CL_LIST_IS_NULL);
-
-        // Creating clElement statistics data from input json
-        ClElementStatisticsList createResponse =
-                provider.createClElementStatistics(inputClElementStatistics.getClElementStatistics());
-
-        assertThat(createResponse.getClElementStatistics()).hasSize(4);
-        assertEquals(createResponse.getClElementStatistics().toString().replaceAll("\\s+", ""),
-                inputClElementStatistics.getClElementStatistics().toString().replaceAll("\\s+", ""));
-    }
-
-    @Test
-    void testGetClElementStatistics() throws Exception {
-        var participantStatisticsProvider = mock(ParticipantStatisticsProvider.class);
-        var clElementStatisticsProvider = mock(ClElementStatisticsProvider.class);
-        var clProvider = mock(ControlLoopProvider.class);
-
-        when(clElementStatisticsProvider.getFilteredClElementStatistics(eq(ID_NAME1), any(), any(), any(), anyMap(),
-                eq(SORT_DESC), eq(0)))
-                        .thenReturn(List.of(inputClElementStatistics.getClElementStatistics().get(0),
-                                inputClElementStatistics.getClElementStatistics().get(1)));
-
-        when(clElementStatisticsProvider.getFilteredClElementStatistics(eq(ID_NAME1), any(), any(), any(), anyMap(),
-                eq(SORT_DESC), eq(0)))
-                        .thenReturn(List.of(inputClElementStatistics.getClElementStatistics().get(0),
-                                inputClElementStatistics.getClElementStatistics().get(1)));
-
-        MonitoringProvider provider =
-                new MonitoringProvider(participantStatisticsProvider, clElementStatisticsProvider, clProvider);
-        assertThatThrownBy(() -> {
-            provider.fetchFilteredClElementStatistics(null, null, null, null, null, 0);
-        }).hasMessageMatching(NAME_IS_NULL);
-
-        provider.createClElementStatistics(inputClElementStatistics.getClElementStatistics());
-
-        ClElementStatisticsList getResponse =
-                provider.fetchFilteredClElementStatistics(ID_NAME1, null, null, null, null, 0);
-
-        assertThat(getResponse.getClElementStatistics()).hasSize(2);
-        assertEquals(getResponse.getClElementStatistics().get(0).toString().replaceAll("\\s+", ""),
-                inputClElementStatistics.getClElementStatistics().get(0).toString().replaceAll("\\s+", ""));
-
-        // Fetch specific statistics record with name, id and record count
-        getResponse = provider.fetchFilteredClElementStatistics(ID_NAME1, ID_VERSION1,
-                "709c62b3-8918-41b9-a747-d21eb79c6c20", null, null, 0);
-        assertThat(getResponse.getClElementStatistics()).hasSize(2);
-
-        // Fetch statistics using timestamp
-        getResponse = provider.fetchFilteredClElementStatistics(ID_NAME1, ID_VERSION1, null,
-                Instant.parse("2021-01-10T13:45:00.000Z"), null, 0);
-        assertThat(getResponse.getClElementStatistics()).hasSize(2);
-    }
-
-    @Test
-    void testGetParticipantStatsPerCL() throws Exception {
-        var participantStatisticsProvider = mock(ParticipantStatisticsProvider.class);
-        var clElementStatisticsProvider = mock(ClElementStatisticsProvider.class);
-        var mockClProvider = Mockito.mock(ControlLoopProvider.class);
-        var provider =
-                new MonitoringProvider(participantStatisticsProvider, clElementStatisticsProvider, mockClProvider);
-
-        provider.createParticipantStatistics(inputParticipantStatistics.getStatisticsList());
-
-        var controlLoop = new ControlLoop();
-        var element = new ControlLoopElement();
-        element.setParticipantId(new ToscaConceptIdentifier(ID_NAME1, ID_VERSION1));
-        controlLoop.setElements(Map.of(UUID.randomUUID(), element));
-        when(mockClProvider.findControlLoop(new ToscaConceptIdentifier(ID_NAME2, ID_VERSION1)))
-                .thenReturn(Optional.of(controlLoop));
-
-        when(participantStatisticsProvider.getFilteredParticipantStatistics(eq(ID_NAME1), eq(ID_VERSION1), any(), any(),
-                eq(null), eq(SORT_DESC), eq(0)))
-                        .thenReturn(List.of(inputParticipantStatistics.getStatisticsList().get(0),
-                                inputParticipantStatistics.getStatisticsList().get(1)));
-
-        ParticipantStatisticsList getResponse = provider.fetchParticipantStatsPerControlLoop(ID_NAME2, ID_VERSION1);
-        assertThat(getResponse.getStatisticsList()).hasSize(2);
-        assertEquals(getResponse.getStatisticsList().get(0).toString().replaceAll("\\s+", ""),
-                inputParticipantStatistics.getStatisticsList().get(0).toString().replaceAll("\\s+", ""));
-        assertThat(provider.fetchParticipantStatsPerControlLoop(ID_INVALID_NAME, ID_VERSION2).getStatisticsList())
-                .isEmpty();
-    }
-
-    @Test
-    void testClElementStatsPerCL() throws Exception {
-        // Setup a dummy Control loop data
-        var mockClElement = new ControlLoopElement();
-        mockClElement.setId(inputClElementStatistics.getClElementStatistics().get(0).getId());
-        mockClElement.setParticipantId(new ToscaConceptIdentifier(
-                inputClElementStatistics.getClElementStatistics().get(0).getParticipantId().getName(),
-                inputClElementStatistics.getClElementStatistics().get(0).getParticipantId().getVersion()));
-        var mockCL = new ControlLoop();
-        mockCL.setElements(new LinkedHashMap<>());
-        mockCL.getElements().put(mockClElement.getId(), mockClElement);
-
-        var participantStatisticsProvider = mock(ParticipantStatisticsProvider.class);
-        var clElementStatisticsProvider = mock(ClElementStatisticsProvider.class);
-        var mockClProvider = Mockito.mock(ControlLoopProvider.class);
-        var monitoringProvider =
-                new MonitoringProvider(participantStatisticsProvider, clElementStatisticsProvider, mockClProvider);
-
-        // Mock controlloop data to be returned for the given CL Id
-        when(mockClProvider.findControlLoop(new ToscaConceptIdentifier(ID_NAME3, ID_VERSION1)))
-                .thenReturn(Optional.of(mockCL));
-
-        when(clElementStatisticsProvider.getFilteredClElementStatistics(eq(ID_NAME1), eq(ID_VERSION1), any(), any(),
-                anyMap(), eq(SORT_DESC), eq(0)))
-                        .thenReturn(List.of(inputClElementStatistics.getClElementStatistics().get(0),
-                                inputClElementStatistics.getClElementStatistics().get(1)));
-
-        monitoringProvider.createClElementStatistics(inputClElementStatistics.getClElementStatistics());
-
-        ClElementStatisticsList getResponse =
-                monitoringProvider.fetchClElementStatsPerControlLoop(ID_NAME3, ID_VERSION1);
-
-        assertThat(getResponse.getClElementStatistics()).hasSize(2);
-        assertEquals(getResponse.getClElementStatistics().get(1).toString().replaceAll("\\s+", ""),
-                inputClElementStatistics.getClElementStatistics().get(1).toString().replaceAll("\\s+", ""));
-
-        assertThat(monitoringProvider.fetchClElementStatsPerControlLoop(ID_INVALID_NAME, ID_VERSION2)
-                .getClElementStatistics()).isEmpty();
-
-        Map<String, ToscaConceptIdentifier> clElementIds =
-                monitoringProvider.getAllClElementsIdPerControlLoop(ID_NAME3, ID_VERSION1);
-        assertThat(clElementIds)
-                .containsKey(inputClElementStatistics.getClElementStatistics().get(0).getId().toString());
-    }
-}
diff --git a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionHandlerTest.java b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionHandlerTest.java
deleted file mode 100644 (file)
index 21a8267..0000000
+++ /dev/null
@@ -1,307 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.runtime.supervision;
-
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyList;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.UUID;
-import org.junit.jupiter.api.Test;
-import org.mockito.Mockito;
-import org.onap.policy.clamp.controlloop.common.exception.ControlLoopException;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantHealthStatus;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatistics;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ControlLoopProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ServiceTemplateProvider;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ControlLoopAck;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantDeregister;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantMessageType;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantRegister;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantStatus;
-import org.onap.policy.clamp.controlloop.models.messages.dmaap.participant.ParticipantUpdateAck;
-import org.onap.policy.clamp.controlloop.runtime.instantiation.InstantiationUtils;
-import org.onap.policy.clamp.controlloop.runtime.monitoring.MonitoringProvider;
-import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ControlLoopStateChangePublisher;
-import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ControlLoopUpdatePublisher;
-import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ParticipantDeregisterAckPublisher;
-import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ParticipantRegisterAckPublisher;
-import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ParticipantUpdatePublisher;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.models.base.PfModelException;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-
-class SupervisionHandlerTest {
-    private static final String TOSCA_TEMPLATE_YAML =
-            "src/test/resources/rest/servicetemplates/tosca-for-smoke-testing.yaml";
-    private static final String CL_INSTANTIATION_CREATE_JSON = "src/test/resources/rest/controlloops/ControlLoops.json";
-    private static final ToscaConceptIdentifier identifier = new ToscaConceptIdentifier("PMSHInstance0Crud", "1.0.1");
-    private static final ToscaConceptIdentifier participantId = new ToscaConceptIdentifier("ParticipantId", "1.0.0");
-    private static final ToscaConceptIdentifier participantType =
-            new ToscaConceptIdentifier("ParticipantType", "1.0.0");
-
-    @Test
-    void testTriggerControlLoopSupervisionEmpty() throws ControlLoopException, PfModelException, CoderException {
-        var handler = createSupervisionHandler(mock(ControlLoopProvider.class), mock(ParticipantProvider.class),
-                mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
-                mock(ParticipantDeregisterAckPublisher.class), mock(ControlLoopUpdatePublisher.class),
-                mock(ParticipantUpdatePublisher.class), ControlLoopOrderedState.PASSIVE);
-
-        assertThatThrownBy(() -> handler.triggerControlLoopSupervision(List.of()))
-                .hasMessageMatching("The list of control loops for supervision is empty");
-    }
-
-    @Test
-    void testTriggerControlLoopSupervision() throws ControlLoopException, PfModelException, CoderException {
-        var controlLoopProvider = mock(ControlLoopProvider.class);
-        var controlLoopUpdatePublisher = mock(ControlLoopUpdatePublisher.class);
-        var handler = createSupervisionHandler(controlLoopProvider, mock(ParticipantProvider.class),
-                mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
-                mock(ParticipantDeregisterAckPublisher.class), controlLoopUpdatePublisher,
-                mock(ParticipantUpdatePublisher.class), ControlLoopOrderedState.PASSIVE);
-
-        handler.triggerControlLoopSupervision(List.of(identifier));
-
-        verify(controlLoopUpdatePublisher).send(any(ControlLoop.class));
-        verify(controlLoopProvider).saveControlLoop(any(ControlLoop.class));
-    }
-
-    @Test
-    void testTriggerControlLoopUninitialised() throws ControlLoopException, PfModelException, CoderException {
-        var controlLoopProvider = mock(ControlLoopProvider.class);
-        var controlLoopUpdatePublisher = mock(ControlLoopUpdatePublisher.class);
-        var handler = createSupervisionHandler(controlLoopProvider, mock(ParticipantProvider.class),
-                mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
-                mock(ParticipantDeregisterAckPublisher.class), controlLoopUpdatePublisher,
-                mock(ParticipantUpdatePublisher.class), ControlLoopOrderedState.UNINITIALISED);
-
-        assertThatThrownBy(() -> handler.triggerControlLoopSupervision(List.of(identifier)))
-            .hasMessageMatching("Control loop is already in state UNINITIALISED");
-    }
-
-    @Test
-    void testTriggerControlLoopRunning() throws ControlLoopException, PfModelException, CoderException {
-        var controlLoopProvider = mock(ControlLoopProvider.class);
-        var controlLoopUpdatePublisher = mock(ControlLoopUpdatePublisher.class);
-        var handler = createSupervisionHandler(controlLoopProvider, mock(ParticipantProvider.class),
-                mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
-                mock(ParticipantDeregisterAckPublisher.class), controlLoopUpdatePublisher,
-                mock(ParticipantUpdatePublisher.class), ControlLoopOrderedState.RUNNING);
-
-        assertThatThrownBy(() -> handler.triggerControlLoopSupervision(List.of(identifier)))
-            .hasMessageMatching("Control loop can't transition from state UNINITIALISED to state RUNNING");
-    }
-
-    @Test
-    void testHandleControlLoopStateChangeAckMessage() throws PfModelException, CoderException {
-        var controlLoopProvider = mock(ControlLoopProvider.class);
-        var handler = createSupervisionHandler(controlLoopProvider, mock(ParticipantProvider.class),
-                mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
-                mock(ParticipantDeregisterAckPublisher.class), mock(ControlLoopUpdatePublisher.class),
-                mock(ParticipantUpdatePublisher.class), ControlLoopOrderedState.PASSIVE);
-        var controlLoopAckMessage = new ControlLoopAck(ParticipantMessageType.CONTROLLOOP_STATECHANGE_ACK);
-        controlLoopAckMessage.setControlLoopResultMap(Map.of());
-        controlLoopAckMessage.setControlLoopId(identifier);
-
-        handler.handleControlLoopStateChangeAckMessage(controlLoopAckMessage);
-
-        verify(controlLoopProvider).saveControlLoop(any(ControlLoop.class));
-    }
-
-    @Test
-    void testHandleControlLoopUpdateAckMessage() throws PfModelException, CoderException {
-        var controlLoopAckMessage = new ControlLoopAck(ParticipantMessageType.CONTROLLOOP_UPDATE_ACK);
-        controlLoopAckMessage.setParticipantId(participantId);
-        controlLoopAckMessage.setParticipantType(participantType);
-        controlLoopAckMessage.setControlLoopResultMap(Map.of());
-        controlLoopAckMessage.setControlLoopId(identifier);
-        var controlLoopProvider = mock(ControlLoopProvider.class);
-        var handler = createSupervisionHandler(controlLoopProvider, mock(ParticipantProvider.class),
-                mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
-                mock(ParticipantDeregisterAckPublisher.class), mock(ControlLoopUpdatePublisher.class),
-                mock(ParticipantUpdatePublisher.class), ControlLoopOrderedState.PASSIVE);
-
-        handler.handleControlLoopUpdateAckMessage(controlLoopAckMessage);
-
-        verify(controlLoopProvider).saveControlLoop(any(ControlLoop.class));
-    }
-
-    @Test
-    void testHandleParticipantDeregister() throws PfModelException, CoderException {
-        var participant = new Participant();
-        participant.setName(participantId.getName());
-        participant.setVersion(participantId.getVersion());
-        participant.setParticipantType(participantType);
-
-        var participantProvider = mock(ParticipantProvider.class);
-        when(participantProvider.findParticipant(participantId.getName(), participantId.getVersion()))
-                .thenReturn(Optional.of(participant));
-
-        var participantDeregisterMessage = new ParticipantDeregister();
-        participantDeregisterMessage.setMessageId(UUID.randomUUID());
-        participantDeregisterMessage.setParticipantId(participantId);
-        participantDeregisterMessage.setParticipantType(participantType);
-        var participantDeregisterAckPublisher = mock(ParticipantDeregisterAckPublisher.class);
-        var handler = createSupervisionHandler(mock(ControlLoopProvider.class), participantProvider,
-                mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
-                participantDeregisterAckPublisher, mock(ControlLoopUpdatePublisher.class),
-                mock(ParticipantUpdatePublisher.class), ControlLoopOrderedState.PASSIVE);
-
-        handler.handleParticipantMessage(participantDeregisterMessage);
-
-        verify(participantProvider).saveParticipant(any());
-        verify(participantDeregisterAckPublisher).send(participantDeregisterMessage.getMessageId());
-    }
-
-    @Test
-    void testHandleParticipantRegister() throws PfModelException, CoderException {
-        var participant = new Participant();
-        participant.setName(participantId.getName());
-        participant.setVersion(participantId.getVersion());
-        participant.setParticipantType(participantType);
-
-        var participantRegisterMessage = new ParticipantRegister();
-        participantRegisterMessage.setMessageId(UUID.randomUUID());
-        participantRegisterMessage.setParticipantId(participantId);
-        participantRegisterMessage.setParticipantType(participantType);
-        var participantProvider = mock(ParticipantProvider.class);
-        var participantRegisterAckPublisher = mock(ParticipantRegisterAckPublisher.class);
-        var handler = createSupervisionHandler(mock(ControlLoopProvider.class), participantProvider,
-                mock(MonitoringProvider.class), participantRegisterAckPublisher,
-                mock(ParticipantDeregisterAckPublisher.class), mock(ControlLoopUpdatePublisher.class),
-                mock(ParticipantUpdatePublisher.class), ControlLoopOrderedState.PASSIVE);
-
-        handler.handleParticipantMessage(participantRegisterMessage);
-
-        verify(participantProvider).saveParticipant(any());
-        verify(participantRegisterAckPublisher).send(participantRegisterMessage.getMessageId(), participantId,
-                participantType);
-    }
-
-    @Test
-    void testParticipantUpdateAck() throws PfModelException, CoderException {
-        var participant = new Participant();
-        participant.setName(participantId.getName());
-        participant.setVersion(participantId.getVersion());
-        participant.setParticipantType(participantType);
-
-        var participantProvider = mock(ParticipantProvider.class);
-        when(participantProvider.findParticipant(participantId.getName(), participantId.getVersion()))
-                .thenReturn(Optional.of(participant));
-
-        var participantUpdateAckMessage = new ParticipantUpdateAck();
-        participantUpdateAckMessage.setParticipantId(participantId);
-        participantUpdateAckMessage.setParticipantType(participantType);
-        participantUpdateAckMessage.setState(ParticipantState.PASSIVE);
-        var handler = createSupervisionHandler(mock(ControlLoopProvider.class), participantProvider,
-                mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
-                mock(ParticipantDeregisterAckPublisher.class), mock(ControlLoopUpdatePublisher.class),
-                mock(ParticipantUpdatePublisher.class), ControlLoopOrderedState.PASSIVE);
-
-        handler.handleParticipantMessage(participantUpdateAckMessage);
-
-        verify(participantProvider).saveParticipant(any());
-    }
-
-    @Test
-    void testHandleParticipantStatus() throws PfModelException, CoderException {
-        var participantStatusMessage = new ParticipantStatus();
-        participantStatusMessage.setParticipantId(participantId);
-        participantStatusMessage.setParticipantType(participantType);
-        participantStatusMessage.setState(ParticipantState.PASSIVE);
-        participantStatusMessage.setHealthStatus(ParticipantHealthStatus.HEALTHY);
-        participantStatusMessage.setParticipantStatistics(new ParticipantStatistics());
-
-        var participantProvider = mock(ParticipantProvider.class);
-        var monitoringProvider = mock(MonitoringProvider.class);
-        var handler = createSupervisionHandler(mock(ControlLoopProvider.class), participantProvider, monitoringProvider,
-                mock(ParticipantRegisterAckPublisher.class), mock(ParticipantDeregisterAckPublisher.class),
-                mock(ControlLoopUpdatePublisher.class), mock(ParticipantUpdatePublisher.class),
-                ControlLoopOrderedState.PASSIVE);
-        handler.handleParticipantMessage(participantStatusMessage);
-
-        verify(participantProvider).saveParticipant(any());
-        verify(monitoringProvider).createParticipantStatistics(anyList());
-    }
-
-    @Test
-    void testHandleSendCommissionMessage() throws PfModelException, CoderException {
-        var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
-        var handler = createSupervisionHandler(mock(ControlLoopProvider.class), mock(ParticipantProvider.class),
-                mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
-                mock(ParticipantDeregisterAckPublisher.class), mock(ControlLoopUpdatePublisher.class),
-                participantUpdatePublisher, ControlLoopOrderedState.PASSIVE);
-        handler.handleSendCommissionMessage(participantId.getName(), participantId.getVersion());
-
-        verify(participantUpdatePublisher).sendComissioningBroadcast(participantId.getName(),
-                participantId.getVersion());
-    }
-
-    @Test
-    void testHandleSendDeCommissionMessage() throws PfModelException, CoderException {
-        var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
-        var handler = createSupervisionHandler(mock(ControlLoopProvider.class), mock(ParticipantProvider.class),
-                mock(MonitoringProvider.class), mock(ParticipantRegisterAckPublisher.class),
-                mock(ParticipantDeregisterAckPublisher.class), mock(ControlLoopUpdatePublisher.class),
-                participantUpdatePublisher, ControlLoopOrderedState.PASSIVE);
-        handler.handleSendDeCommissionMessage();
-
-        verify(participantUpdatePublisher).sendDecomisioning();
-    }
-
-    private SupervisionHandler createSupervisionHandler(ControlLoopProvider controlLoopProvider,
-            ParticipantProvider participantProvider, MonitoringProvider monitoringProvider,
-            ParticipantRegisterAckPublisher participantRegisterAckPublisher,
-            ParticipantDeregisterAckPublisher participantDeregisterAckPublisher,
-            ControlLoopUpdatePublisher controlLoopUpdatePublisher,
-            ParticipantUpdatePublisher participantUpdatePublisher,
-            ControlLoopOrderedState orderedState) throws PfModelException, CoderException {
-        var controlLoopsCreate = InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Crud");
-
-        var controlLoop = controlLoopsCreate.getControlLoopList().get(0);
-        controlLoop.setOrderedState(orderedState);
-
-        when(controlLoopProvider.findControlLoop(identifier)).thenReturn(Optional.of(controlLoop));
-        when(controlLoopProvider.getControlLoop(identifier)).thenReturn(controlLoop);
-
-        var serviceTemplateProvider = Mockito.mock(ServiceTemplateProvider.class);
-        when(serviceTemplateProvider.getServiceTemplateList(any(), any()))
-                .thenReturn(List.of(InstantiationUtils.getToscaServiceTemplate(TOSCA_TEMPLATE_YAML)));
-
-        var controlLoopStateChangePublisher = mock(ControlLoopStateChangePublisher.class);
-
-        return new SupervisionHandler(controlLoopProvider, participantProvider, monitoringProvider,
-                serviceTemplateProvider, controlLoopUpdatePublisher, controlLoopStateChangePublisher,
-                participantRegisterAckPublisher, participantDeregisterAckPublisher, participantUpdatePublisher);
-
-    }
-}
diff --git a/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionScannerTest.java b/runtime-controlloop/src/test/java/org/onap/policy/clamp/controlloop/runtime/supervision/SupervisionScannerTest.java
deleted file mode 100644 (file)
index b7a3fe0..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.controlloop.runtime.supervision;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.util.List;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Test;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopOrderedState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopState;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantHealthStatus;
-import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantState;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ControlLoopProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ParticipantProvider;
-import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ServiceTemplateProvider;
-import org.onap.policy.clamp.controlloop.runtime.instantiation.InstantiationUtils;
-import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ControlLoopStateChangePublisher;
-import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ControlLoopUpdatePublisher;
-import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ParticipantStatusReqPublisher;
-import org.onap.policy.clamp.controlloop.runtime.supervision.comm.ParticipantUpdatePublisher;
-import org.onap.policy.clamp.controlloop.runtime.util.CommonTestData;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.models.base.PfModelException;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-
-class SupervisionScannerTest {
-
-    private static final String TOSCA_SERVICE_TEMPLATE_YAML =
-            "src/test/resources/rest/servicetemplates/tosca-for-smoke-testing.yaml";
-    private static final String CONTROLLOOP_JSON = "src/test/resources/rest/controlloops/ControlLoopsSmoke.json";
-
-    private static ServiceTemplateProvider serviceTemplateProvider = mock(ServiceTemplateProvider.class);
-
-    @BeforeAll
-    public static void setUpBeforeAll() throws Exception {
-        ToscaServiceTemplate serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
-        when(serviceTemplateProvider.getAllServiceTemplates()).thenReturn(List.of(serviceTemplate));
-    }
-
-    @Test
-    void testScannerOrderedStateEqualsToState() throws PfModelException, CoderException {
-        var controlLoopProvider = mock(ControlLoopProvider.class);
-        var controlLoopStateChangePublisher = mock(ControlLoopStateChangePublisher.class);
-        var controlLoopUpdatePublisher = mock(ControlLoopUpdatePublisher.class);
-        var participantProvider = mock(ParticipantProvider.class);
-        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
-        var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
-        var clRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
-
-        var controlLoops =
-                InstantiationUtils.getControlLoopsFromResource(CONTROLLOOP_JSON, "Crud").getControlLoopList();
-        when(controlLoopProvider.getControlLoops()).thenReturn(controlLoops);
-
-        var supervisionScanner = new SupervisionScanner(controlLoopProvider, serviceTemplateProvider,
-                controlLoopStateChangePublisher, controlLoopUpdatePublisher, participantProvider,
-                participantStatusReqPublisher, participantUpdatePublisher, clRuntimeParameterGroup);
-        supervisionScanner.run(false);
-
-        verify(controlLoopProvider, times(0)).saveControlLoop(any(ControlLoop.class));
-    }
-
-    @Test
-    void testScannerOrderedStateDifferentToState() throws PfModelException, CoderException {
-        var controlLoops =
-                InstantiationUtils.getControlLoopsFromResource(CONTROLLOOP_JSON, "Crud").getControlLoopList();
-        controlLoops.get(0).setState(ControlLoopState.UNINITIALISED2PASSIVE);
-        controlLoops.get(0).setOrderedState(ControlLoopOrderedState.UNINITIALISED);
-        var controlLoopProvider = mock(ControlLoopProvider.class);
-        when(controlLoopProvider.getControlLoops()).thenReturn(controlLoops);
-
-        var controlLoopUpdatePublisher = mock(ControlLoopUpdatePublisher.class);
-        var controlLoopStateChangePublisher = mock(ControlLoopStateChangePublisher.class);
-        var participantProvider = mock(ParticipantProvider.class);
-        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
-        var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
-        var clRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
-
-        var supervisionScanner = new SupervisionScanner(controlLoopProvider, serviceTemplateProvider,
-                controlLoopStateChangePublisher, controlLoopUpdatePublisher, participantProvider,
-                participantStatusReqPublisher, participantUpdatePublisher, clRuntimeParameterGroup);
-        supervisionScanner.run(false);
-
-        verify(controlLoopProvider, times(1)).saveControlLoop(any(ControlLoop.class));
-    }
-
-    @Test
-    void testScanner() throws PfModelException {
-        var controlLoopProvider = mock(ControlLoopProvider.class);
-        var controlLoop = new ControlLoop();
-        when(controlLoopProvider.getControlLoops()).thenReturn(List.of(controlLoop));
-
-        var participantProvider = mock(ParticipantProvider.class);
-        var participant = new Participant();
-        participant.setName("Participant0");
-        participant.setVersion("1.0.0");
-        when(participantProvider.getParticipants(null, null)).thenReturn(List.of(participant));
-
-        var controlLoopUpdatePublisher = mock(ControlLoopUpdatePublisher.class);
-        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
-        var controlLoopStateChangePublisher = mock(ControlLoopStateChangePublisher.class);
-        var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
-        var clRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
-
-        var supervisionScanner = new SupervisionScanner(controlLoopProvider, serviceTemplateProvider,
-                controlLoopStateChangePublisher, controlLoopUpdatePublisher, participantProvider,
-                participantStatusReqPublisher, participantUpdatePublisher, clRuntimeParameterGroup);
-
-        supervisionScanner.handleParticipantStatus(participant.getKey().asIdentifier());
-        supervisionScanner.run(true);
-        verify(controlLoopProvider, times(0)).saveControlLoop(any(ControlLoop.class));
-        verify(participantStatusReqPublisher, times(0)).send(any(ToscaConceptIdentifier.class));
-    }
-
-    @Test
-    void testSendControlLoopMsgUpdate() throws PfModelException, CoderException {
-        var controlLoops =
-                InstantiationUtils.getControlLoopsFromResource(CONTROLLOOP_JSON, "Crud").getControlLoopList();
-        controlLoops.get(0).setState(ControlLoopState.UNINITIALISED2PASSIVE);
-        controlLoops.get(0).setOrderedState(ControlLoopOrderedState.PASSIVE);
-        for (var element : controlLoops.get(0).getElements().values()) {
-            if ("org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement"
-                    .equals(element.getDefinition().getName())) {
-                element.setOrderedState(ControlLoopOrderedState.PASSIVE);
-                element.setState(ControlLoopState.UNINITIALISED);
-            } else {
-                element.setOrderedState(ControlLoopOrderedState.PASSIVE);
-                element.setState(ControlLoopState.PASSIVE);
-            }
-        }
-
-        var controlLoopProvider = mock(ControlLoopProvider.class);
-        when(controlLoopProvider.getControlLoops()).thenReturn(controlLoops);
-
-        var participantProvider = mock(ParticipantProvider.class);
-        var controlLoopUpdatePublisher = mock(ControlLoopUpdatePublisher.class);
-        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
-        var controlLoopStateChangePublisher = mock(ControlLoopStateChangePublisher.class);
-        var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
-        var clRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
-
-        var supervisionScanner = new SupervisionScanner(controlLoopProvider, serviceTemplateProvider,
-                controlLoopStateChangePublisher, controlLoopUpdatePublisher, participantProvider,
-                participantStatusReqPublisher, participantUpdatePublisher, clRuntimeParameterGroup);
-
-        supervisionScanner.run(false);
-
-        verify(controlLoopUpdatePublisher).send(any(ControlLoop.class), anyInt());
-    }
-
-    @Test
-    void testScanParticipant() throws PfModelException {
-        var controlLoopProvider = mock(ControlLoopProvider.class);
-        var controlLoop = new ControlLoop();
-        when(controlLoopProvider.getControlLoops()).thenReturn(List.of(controlLoop));
-
-        var clRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanParticipant");
-        clRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().setMaxWaitMs(-1);
-        clRuntimeParameterGroup.getParticipantParameters().setMaxStatusWaitMs(-1);
-
-        var participant = new Participant();
-        participant.setName("Participant0");
-        participant.setVersion("1.0.0");
-        participant.setHealthStatus(ParticipantHealthStatus.HEALTHY);
-        participant.setParticipantState(ParticipantState.ACTIVE);
-        participant.setDefinition(new ToscaConceptIdentifier("unknown", "0.0.0"));
-        participant.setParticipantType(new ToscaConceptIdentifier("ParticipantType1", "1.0.0"));
-        var participantProvider = mock(ParticipantProvider.class);
-        when(participantProvider.getParticipants()).thenReturn(List.of(participant));
-
-        var controlLoopUpdatePublisher = mock(ControlLoopUpdatePublisher.class);
-        var participantStatusReqPublisher = mock(ParticipantStatusReqPublisher.class);
-        var controlLoopStateChangePublisher = mock(ControlLoopStateChangePublisher.class);
-        var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
-
-        var supervisionScanner = new SupervisionScanner(controlLoopProvider, serviceTemplateProvider,
-                controlLoopStateChangePublisher, controlLoopUpdatePublisher, participantProvider,
-                participantStatusReqPublisher, participantUpdatePublisher, clRuntimeParameterGroup);
-
-        supervisionScanner.handleParticipantStatus(participant.getKey().asIdentifier());
-        supervisionScanner.run(true);
-        verify(participantStatusReqPublisher).send(any(ToscaConceptIdentifier.class));
-        verify(participantProvider).saveParticipant(any());
-
-        supervisionScanner.run(true);
-        verify(participantProvider, times(2)).saveParticipant(any());
-    }
-}
diff --git a/runtime-controlloop/src/test/resources/rest/servicetemplates/PMSHMultipleCLTosca.yaml b/runtime-controlloop/src/test/resources/rest/servicetemplates/PMSHMultipleCLTosca.yaml
deleted file mode 100644 (file)
index 9acff13..0000000
+++ /dev/null
@@ -1,232 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_3
-data_types:
-  onap.datatypes.ToscaConceptIdentifier:
-    derived_from: tosca.datatypes.Root
-    properties:
-      name:
-        type: string
-        required: true
-      version:
-        type: string
-        required: true
-node_types:
-  org.onap.policy.clamp.controlloop.Participant:
-    version: 1.0.1
-    derived_from: tosca.nodetypes.Root
-    properties:
-      provider:
-        type: string
-        requred: false
-  org.onap.policy.clamp.controlloop.ControlLoopElement:
-    version: 1.0.1
-    derived_from: tosca.nodetypes.Root
-    properties:
-      provider:
-        type: string
-        requred: false
-      participantType:
-        type: onap.datatypes.ToscaConceptIdentifier
-        requred: true
-      startPhase:
-        type: integer
-        required: false
-        constraints:
-        - greater-or-equal: 0
-        metadata:
-            common: true
-        description: A value indicating the start phase in which this control loop element will be started, the
-                     first start phase is zero. Control Loop Elements are started in their start_phase order and stopped
-                     in reverse start phase order. Control Loop Elements with the same start phase are started and
-                     stopped simultaneously
-  org.onap.policy.clamp.controlloop.ControlLoop:
-    version: 1.0.1
-    derived_from: tosca.nodetypes.Root
-    properties:
-      provider:
-        type: string
-        requred: false
-      elements:
-        type: list
-        required: true
-        entry_schema:
-          type: onap.datatypes.ToscaConceptIdentifier
-  org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement:
-    version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
-    properties:
-      dcae_blueprint_id:
-        type: onap.datatypes.ToscaConceptIdentifier
-        requred: true
-  org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement:
-    version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
-    properties:
-      policy_type_id:
-        type: onap.datatypes.ToscaConceptIdentifier
-        requred: true
-  org.onap.policy.clamp.controlloop.CDSControlLoopElement:
-    version: 1.0.1
-    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
-    properties:
-      cds_blueprint_id:
-        type: onap.datatypes.ToscaConceptIdentifier
-        requred: true
-topology_template:
-  node_templates:
-    org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant:
-      version: 2.3.4
-      type: org.onap.policy.clamp.controlloop.Participant
-      type_version: 1.0.1
-      description: Participant for DCAE microservices
-      properties:
-        provider: ONAP
-    org.onap.policy.controlloop.PolicyControlLoopParticipant:
-      version: 2.2.1
-      type: org.onap.policy.clamp.controlloop.Participant
-      type_version: 1.0.1
-      description: Participant for DCAE microservices
-      properties:
-        provider: ONAP
-    org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant:
-      version: 2.2.1
-      type: org.onap.policy.clamp.controlloop.Participant
-      type_version: 1.0.1
-      description: Participant for DCAE microservices
-      properties:
-        provider: ONAP
-    org.onap.domain.pmsh.PMSH_DCAEMicroservice:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement
-      type_version: 1.0.0
-      description: Control loop element for the DCAE microservice for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant
-          version: 2.3.4
-        dcae_blueprint_id:
-          name: org.onap.dcae.blueprints.PMSHBlueprint
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement
-      type_version: 1.0.0
-      description: Control loop element for the monitoring policy for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
-          version: 2.2.1
-        policy_type_id:
-          name: onap.policies.monitoring.pm-subscription-handler
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement
-      type_version: 1.0.0
-      description: Control loop element for the operational policy for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
-          version: 2.2.1
-        policy_type_id:
-          name: onap.policies.operational.pm-subscription-handler
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoopElement
-      type_version: 1.0.0
-      description: Control loop element for CDS for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant
-          version: 3.2.1
-        cds_blueprint_id:
-          name: org.onap.ccsdk.cds.PMSHCdsBlueprint
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSHControlLoopDefinition:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoop
-      type_version: 1.0.0
-      description: Control loop for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        elements:
-          - name: org.onap.domain.pmsh.PMSH_DCAEMicroservice
-            version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement
-            version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement
-            version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_CDS_ControlLoopElement
-            version: 1.2.3
-    org.onap.domain.pmsh.PMSD_DCAEMicroservice:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.DCAEMicroserviceControlLoopElement
-      type_version: 1.0.0
-      description: Control loop element for the DCAE microservice for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.dcae.controlloop.DCAEMicroserviceControlLoopParticipant
-          version: 2.3.4
-        dcae_blueprint_id:
-          name: org.onap.dcae.blueprints.PMSDBlueprint
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSD_MonitoringPolicyControlLoopElement:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement
-      type_version: 1.0.0
-      description: Control loop element for the monitoring policy for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
-          version: 2.2.1
-        policy_type_id:
-          name: onap.policies.monitoring.pm-subscription-handler
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSD_OperationalPolicyControlLoopElement:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.PolicyTypeControlLoopElement
-      type_version: 1.0.0
-      description: Control loop element for the operational policy for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.policy.controlloop.PolicyControlLoopParticipant
-          version: 2.2.1
-        policy_type_id:
-          name: onap.policies.operational.pm-subscription-handler
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSD_CDS_ControlLoopElement:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoopElement
-      type_version: 1.0.0
-      description: Control loop element for CDS for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.ccsdk.cds.controlloop.CdsControlLoopParticipant
-          version: 3.2.1
-        cds_blueprint_id:
-          name: org.onap.ccsdk.cds.PMSDCdsBlueprint
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSDControlLoopDefinition:
-      version: 1.2.3
-      type: org.onap.policy.clamp.controlloop.ControlLoop
-      type_version: 1.0.0
-      description: Control loop for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        elements:
-          - name: org.onap.domain.pmsh.PMSD_DCAEMicroservice
-            version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSD_MonitoringPolicyControlLoopElement
-            version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSD_OperationalPolicyControlLoopElement
-            version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSD_CDS_ControlLoopElement
-            version: 1.2.3
index e8502b7..bdefdfe 100644 (file)
@@ -61,7 +61,7 @@ public class AafConfiguration {
         registration.addUrlPatterns("/restservices/clds/v2/policyToscaModels/*");
         registration.addUrlPatterns("/restservices/clds/v2/policies/*");
         registration.addUrlPatterns("/restservices/clds/v2/loop/*");
-        registration.addUrlPatterns("/restservices/clds/v2/toscaControlLoop/*");
+        registration.addUrlPatterns("/restservices/clds/v2/acm/*");
         registration.setName("cadiFilter");
         registration.setOrder(0);
         return registration;
index 9f13a31..22f9774 100644 (file)
@@ -193,6 +193,6 @@ clamp.config.cds.userName=ccsdkapps
 clamp.config.cds.password=ccsdkapps
 
 # Configuration settings for ControlLoop Runtime Rest API
-clamp.config.controlloop.runtime.url=http://localhost:6969
-clamp.config.controlloop.runtime.userName=runtimeUser
-clamp.config.controlloop.runtime.password=zb!XztG34
+clamp.config.acm.runtime.url=http://localhost:6969
+clamp.config.acm.runtime.userName=runtimeUser
+clamp.config.acm.runtime.password=zb!XztG34
index 21b37c6..054b889 100644 (file)
@@ -203,6 +203,6 @@ clamp.config.cds.userName=ccsdkapps
 clamp.config.cds.password=ccsdkapps
 
 # Configuration settings for ControlLoop Runtime Rest API
-clamp.config.controlloop.runtime.url=http://localhost:6969
-clamp.config.controlloop.runtime.userName=runtimeUser
-clamp.config.controlloop.runtime.password=zb!XztG34
+clamp.config.acm.runtime.url=http://localhost:6969
+clamp.config.acm.runtime.userName=runtimeUser
+clamp.config.acm.runtime.password=zb!XztG34
index 8c9824e..8ad20a8 100644 (file)
             </route>
         </post>
 
-        <get uri="/v2/toscaControlLoop/getToscaTemplate" outType="java.lang.String" bindingMode="off"
+        <get uri="/v2/acm/getToscaTemplate" outType="java.lang.String" bindingMode="off"
              produces="application/json">
             <route>
                 <removeHeaders pattern="*"
             </route>
         </get>
 
-        <post uri="/v2/toscaControlLoop/commissionToscaTemplate"
+        <post uri="/v2/acm/commissionToscaTemplate"
               type="java.lang.String"
               consumes="plain/text"
               outType="java.lang.String"
             </route>
         </post>
 
-        <delete uri="/v2/toscaControlLoop/decommissionToscaTemplate"
+        <delete uri="/v2/acm/decommissionToscaTemplate"
               type="java.lang.String"
               consumes="plain/text"
               outType="java.lang.String"
             </route>
         </delete>
 
-        <delete uri="/v2/toscaControlLoop/deleteToscaInstantiation"
+        <delete uri="/v2/acm/deleteToscaInstantiation"
                 type="java.lang.String"
                 consumes="plain/text"
                 outType="java.lang.String"
             </route>
         </delete>
 
-        <get uri="/v2/toscaControlLoop/getToscaInstantiation" outType="java.lang.String" bindingMode="off" produces="application/json">
+        <get uri="/v2/acm/getToscaInstantiation" outType="java.lang.String" bindingMode="off" produces="application/json">
             <route>
                 <removeHeaders pattern="*"/>
                 <doTry>
                 </doTry>
             </route>
         </get>
-        <get uri="/v2/toscaControlLoop/getInstantiationOrderState" outType="java.lang.String" bindingMode="off" produces="application/json">
+        <get uri="/v2/acm/getInstantiationOrderState" outType="java.lang.String" bindingMode="off" produces="application/json">
             <route>
                 <removeHeaders pattern="*"
                                excludePattern="name|version|requestId"/>
                 </doTry>
             </route>
         </get>
-        <get uri="/v2/toscaControlLoop/getJsonSchema" outType="java.lang.String" bindingMode="off" produces="application/json">
+        <get uri="/v2/acm/getJsonSchema" outType="java.lang.String" bindingMode="off" produces="application/json">
             <route>
                 <removeHeaders pattern="*"
                                excludePattern="section"/>
             </route>
         </get>
 
-        <get uri="/v2/toscaControlLoop/getElementDefinitions" outType="java.lang.String" bindingMode="off" produces="application/json">
+        <get uri="/v2/acm/getElementDefinitions" outType="java.lang.String" bindingMode="off" produces="application/json">
             <route>
                 <removeHeaders pattern="*"
                                excludePattern="name|version|requestId"/>
             </route>
         </get>
 
-        <get uri="/v2/toscaControlLoop/getControlLoopDefinitions" outType="java.lang.String" bindingMode="off" produces="application/json">
+        <get uri="/v2/acm/getAutomationCompositionDefinitions" outType="java.lang.String" bindingMode="off" produces="application/json">
             <route>
                 <removeHeaders pattern="*"
                                excludePattern="name|version|requestId"/>
                     <setProperty name="raiseHttpExceptionFlag">
                         <simple resultType="java.lang.Boolean">true</simple>
                     </setProperty>
-                    <to uri="direct:get-control-loop-definitions"/>
+                    <to uri="direct:get-acm-definitions"/>
                     <to uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=endLog()"/>
                     <doCatch>
                         <exception>java.lang.Exception</exception>
                         <to
                                 uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=errorLog()"/>
                         <log loggingLevel="ERROR"
-                             message="GET Control Loop Definitions request failed: ${exception.stacktrace}"/>
+                             message="GET Automation Composition Definitions request failed: ${exception.stacktrace}"/>
                         <setHeader name="CamelHttpResponseCode">
                             <constant>500</constant>
                         </setHeader>
                         <setBody>
-                            <simple>GET Control Loop Definitions FAILED</simple>
+                            <simple>GET Automation Composition Definitions FAILED</simple>
                         </setBody>
                     </doCatch>
                 </doTry>
             </route>
         </get>
 
-        <post uri="/v2/toscaControlLoop/postToscaInstanceProperties"
+        <post uri="/v2/acm/postToscaInstanceProperties"
               type="java.lang.String"
               consumes="plain/text"
               outType="java.lang.String"
                 </doTry>
             </route>
         </post>
-        <delete uri="/v2/toscaControlLoop/deleteToscaInstanceProperties"
+        <delete uri="/v2/acm/deleteToscaInstanceProperties"
                 type="java.lang.String"
                 consumes="plain/text"
                 outType="java.lang.String"
             </route>
         </delete>
 
-        <get uri="/v2/toscaControlLoop/getCommonOrInstanceProperties" outType="java.lang.String" bindingMode="off" produces="application/json">
+        <get uri="/v2/acm/getCommonOrInstanceProperties" outType="java.lang.String" bindingMode="off" produces="application/json">
             <route>
                 <removeHeaders pattern="*"
                                excludePattern="name|version|requestId|common"/>
             </route>
         </get>
 
-        <post uri="/v2/toscaControlLoop/postToscaInstantiation"
+        <post uri="/v2/acm/postToscaInstantiation"
               type="java.lang.String"
               consumes="plain/text"
               outType="java.lang.String"
             </route>
         </post>
 
-        <put uri="/v2/toscaControlLoop/putToscaInstantiationStateChange"
+        <put uri="/v2/acm/putToscaInstantiationStateChange"
               type="java.lang.String"
               consumes="plain/text"
               outType="java.lang.String"
@@ -5,7 +5,7 @@
             <log loggingLevel="INFO"
                  message="Getting the tosca service template"/>
             <to
-                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Controlloop', 'Getting the tosca service template')"/>
+                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('AutomationComposition', 'Getting the tosca service template')"/>
             <setHeader name="CamelHttpMethod">
                 <constant>GET</constant>
             </setHeader>
@@ -19,8 +19,8 @@
                 <simple>${header.version}</simple>
             </setProperty>
             <log loggingLevel="INFO"
-                 message="Endpoint to get Tosca Service Template: {{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/commission/toscaservicetemplate"></log>
-            <toD uri="{{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/commission/toscaservicetemplate?name=${exchangeProperty[name]}&amp;version=${exchangeProperty[version]}&amp;bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.controlloop.runtime.userName}}&amp;authPassword={{clamp.config.controlloop.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
+                 message="Endpoint to get Tosca Service Template: {{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/commission/toscaservicetemplate"></log>
+            <toD uri="{{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/commission/toscaservicetemplate?name=${exchangeProperty[name]}&amp;version=${exchangeProperty[version]}&amp;bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.acm.runtime.userName}}&amp;authPassword={{clamp.config.acm.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
             <convertBodyTo type="java.lang.String"/>
             <doFinally>
                 <to uri="direct:reset-raise-http-exception-flag"/>
@@ -35,7 +35,7 @@
             <log loggingLevel="INFO"
                  message="Commissioning the tosca service template"/>
             <to
-                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Controlloop', 'Commissioning the tosca service template')"/>
+                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('AutomationComposition', 'Commissioning the tosca service template')"/>
             <setHeader name="CamelHttpMethod">
                 <constant>POST</constant>
             </setHeader>
@@ -43,9 +43,9 @@
                 <constant>application/json</constant>
             </setHeader>
             <log loggingLevel="INFO"
-                 message="Endpoint to send Tosca Service Template: {{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/commission"></log>
+                 message="Endpoint to send Tosca Service Template: {{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/commission"></log>
             <toD
-                    uri="{{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/commission? bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.controlloop.runtime.userName}}&amp;authPassword={{clamp.config.controlloop.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
+                    uri="{{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/commission? bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.acm.runtime.userName}}&amp;authPassword={{clamp.config.acm.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
             <convertBodyTo type="java.lang.String"/>
             <doFinally>
                 <to uri="direct:reset-raise-http-exception-flag"/>
@@ -60,7 +60,7 @@
             <log loggingLevel="INFO"
                  message="Decommissioning the tosca service template"/>
             <to
-                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Controlloop', 'Decommissioning the tosca service template')"/>
+                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('AutomationComposition', 'Decommissioning the tosca service template')"/>
             <setHeader name="CamelHttpMethod">
                 <constant>DELETE</constant>
             </setHeader>
@@ -74,9 +74,9 @@
                 <simple>${header.version}</simple>
             </setProperty>
             <log loggingLevel="INFO"
-                 message="Endpoint to send Tosca Service Template: {{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/commission"></log>
+                 message="Endpoint to send Tosca Service Template: {{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/commission"></log>
             <toD
-                    uri="{{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/commission?name=${exchangeProperty[name]}&amp;version=${exchangeProperty[version]}&amp;bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.controlloop.runtime.userName}}&amp;authPassword={{clamp.config.controlloop.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
+                    uri="{{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/commission?name=${exchangeProperty[name]}&amp;version=${exchangeProperty[version]}&amp;bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.acm.runtime.userName}}&amp;authPassword={{clamp.config.acm.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
             <convertBodyTo type="java.lang.String"/>
             <doFinally>
                 <to uri="direct:reset-raise-http-exception-flag"/>
@@ -91,7 +91,7 @@
             <log loggingLevel="INFO"
                  message="Getting the Tosca instantiation"/>
             <to
-                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('ControlLoop', 'Getting the Tosca instantiation')"/>
+                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('AutomationComposition', 'Getting the Tosca instantiation')"/>
             <setHeader name="CamelHttpMethod">
                 <constant>GET</constant>
             </setHeader>
@@ -99,9 +99,9 @@
                 <constant>application/json</constant>
             </setHeader>
             <log loggingLevel="INFO"
-                 message="Endpoint to get Tosca Instantiation: {{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/instantiation"></log>
+                 message="Endpoint to get Tosca Instantiation: {{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/instantiation"></log>
             <toD
-                    uri="{{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/instantiation?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.controlloop.runtime.userName}}&amp;authPassword={{clamp.config.controlloop.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
+                    uri="{{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/instantiation?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.acm.runtime.userName}}&amp;authPassword={{clamp.config.acm.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
             <convertBodyTo type="java.lang.String"/>
             <doFinally>
                 <to uri="direct:reset-raise-http-exception-flag"/>
             <log loggingLevel="INFO"
                  message="Deleting Tosca Instantiation"/>
             <to
-                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Controlloop', 'Deleting Tosca Instantiation')"/>
+                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('AutomationComposition', 'Deleting Tosca Instantiation')"/>
             <setHeader name="CamelHttpMethod">
                 <constant>DELETE</constant>
             </setHeader>
                 <simple>${header.version}</simple>
             </setProperty>
             <log loggingLevel="INFO"
-                 message="Endpoint to delete Tosca Instantiation: {{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/instantiation"></log>
+                 message="Endpoint to delete Tosca Instantiation: {{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/instantiation"></log>
             <toD
-                    uri="{{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/instantiation?name=${exchangeProperty[name]}&amp;version=${exchangeProperty[version]}&amp;bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.controlloop.runtime.userName}}&amp;authPassword={{clamp.config.controlloop.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
+                    uri="{{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/instantiation?name=${exchangeProperty[name]}&amp;version=${exchangeProperty[version]}&amp;bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.acm.runtime.userName}}&amp;authPassword={{clamp.config.acm.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
             <convertBodyTo type="java.lang.String"/>
             <doFinally>
                 <to uri="direct:reset-raise-http-exception-flag"/>
             <log loggingLevel="INFO"
                  message="Creating the tosca instance properties"/>
             <to
-                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Controlloop', 'Creating the tosca instance properties')"/>
+                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('AutomationComposition', 'Creating the tosca instance properties')"/>
             <setHeader name="CamelHttpMethod">
                 <constant>POST</constant>
             </setHeader>
                 <constant>application/json</constant>
             </setHeader>
             <log loggingLevel="INFO"
-                 message="Endpoint to send Tosca Instance Properties: {{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/instanceProperties"></log>
+                 message="Endpoint to send Tosca Instance Properties: {{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/instanceProperties"></log>
             <toD
-                    uri="{{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/instanceProperties?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.controlloop.runtime.userName}}&amp;authPassword={{clamp.config.controlloop.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
+                    uri="{{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/instanceProperties?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.acm.runtime.userName}}&amp;authPassword={{clamp.config.acm.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
             <convertBodyTo type="java.lang.String"/>
             <doFinally>
                 <to uri="direct:reset-raise-http-exception-flag"/>
             <log loggingLevel="INFO"
                  message="Deleting Tosca Instance Properties"/>
             <to
-                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Controlloop', 'Deleting Tosca Instance Properties')"/>
+                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('AutomationComposition', 'Deleting Tosca Instance Properties')"/>
             <setHeader name="CamelHttpMethod">
                 <constant>DELETE</constant>
             </setHeader>
                 <simple>${header.version}</simple>
             </setProperty>
             <log loggingLevel="INFO"
-                 message="Endpoint to delete Tosca Instance Properties: {{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/instanceProperties"></log>
+                 message="Endpoint to delete Tosca Instance Properties: {{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/instanceProperties"></log>
             <toD
-                    uri="{{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/instanceProperties?name=${exchangeProperty[name]}&amp;version=${exchangeProperty[version]}&amp;bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.controlloop.runtime.userName}}&amp;authPassword={{clamp.config.controlloop.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
+                    uri="{{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/instanceProperties?name=${exchangeProperty[name]}&amp;version=${exchangeProperty[version]}&amp;bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.acm.runtime.userName}}&amp;authPassword={{clamp.config.acm.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
             <convertBodyTo type="java.lang.String"/>
             <doFinally>
                 <to uri="direct:reset-raise-http-exception-flag"/>
             <log loggingLevel="INFO"
                  message="Create the tosca instantiation service"/>
             <to
-                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Controlloop', 'Create the tosca instantiation service')"/>
+                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('AutomationComposition', 'Create the tosca instantiation service')"/>
             <setHeader name="CamelHttpMethod">
                 <constant>POST</constant>
             </setHeader>
                 <constant>application/json</constant>
             </setHeader>
             <log loggingLevel="INFO"
-                 message="Endpoint to send Tosca Instantiation Service: {{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/instantiation"></log>
+                 message="Endpoint to send Tosca Instantiation Service: {{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/instantiation"></log>
             <toD
-                    uri="{{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/instantiation?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.controlloop.runtime.userName}}&amp;authPassword={{clamp.config.controlloop.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
+                    uri="{{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/instantiation?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.acm.runtime.userName}}&amp;authPassword={{clamp.config.acm.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
             <convertBodyTo type="java.lang.String"/>
             <doFinally>
                 <to uri="direct:reset-raise-http-exception-flag"/>
             <log loggingLevel="INFO"
                  message="Change the tosca instantiation state service"/>
             <to
-                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('Controlloop', 'Change the tosca instantiation state service')"/>
+                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('AutomationComposition', 'Change the tosca instantiation state service')"/>
             <setHeader name="CamelHttpMethod">
                 <constant>PUT</constant>
             </setHeader>
                 <constant>application/json</constant>
             </setHeader>
             <log loggingLevel="INFO"
-                 message="Endpoint to send Tosca Instantiation state change Service: {{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/instantiation/command"></log>
+                 message="Endpoint to send Tosca Instantiation state change Service: {{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/instantiation/command"></log>
             <toD
-                    uri="{{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/instantiation/command?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.controlloop.runtime.userName}}&amp;authPassword={{clamp.config.controlloop.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
+                    uri="{{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/instantiation/command?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.acm.runtime.userName}}&amp;authPassword={{clamp.config.acm.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
             <convertBodyTo type="java.lang.String"/>
             <doFinally>
                 <to uri="direct:reset-raise-http-exception-flag"/>
             <log loggingLevel="INFO"
                  message="Getting the Tosca Instantiation Order State"/>
             <to
-                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('ControlLoop', 'Getting the Tosca Instantiation Order State')"/>
+                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('AutomationComposition', 'Getting the Tosca Instantiation Order State')"/>
             <setHeader name="CamelHttpMethod">
                 <constant>GET</constant>
             </setHeader>
                 <simple>${header.version}</simple>
             </setProperty>
             <log loggingLevel="INFO"
-                 message="Endpoint to get Tosca Instantiation Order State: {{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/instantiationState"></log>
+                 message="Endpoint to get Tosca Instantiation Order State: {{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/instantiationState"></log>
             <toD
-                    uri="{{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/instantiationState?name=${exchangeProperty[name]}&amp;version=${exchangeProperty[version]}&amp;bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.controlloop.runtime.userName}}&amp;authPassword={{clamp.config.controlloop.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
+                    uri="{{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/instantiationState?name=${exchangeProperty[name]}&amp;version=${exchangeProperty[version]}&amp;bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.acm.runtime.userName}}&amp;authPassword={{clamp.config.acm.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
             <convertBodyTo type="java.lang.String"/>
             <doFinally>
                 <to uri="direct:reset-raise-http-exception-flag"/>
             <log loggingLevel="INFO"
                  message="Getting the JSON Schema"/>
             <to
-                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('ControlLoop', 'Getting the JSON Schema')"/>
+                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('AutomationComposition', 'Getting the JSON Schema')"/>
             <setHeader name="CamelHttpMethod">
                 <constant>GET</constant>
             </setHeader>
                 <simple>${header.section}</simple>
             </setProperty>
             <log loggingLevel="INFO"
-                 message="Endpoint to get Json Schema: {{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/commission/toscaServiceTemplateSchema"></log>
+                 message="Endpoint to get Json Schema: {{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/commission/toscaServiceTemplateSchema"></log>
             <toD
-                    uri="{{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/commission/toscaServiceTemplateSchema?section=${exchangeProperty[section]}&amp;bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.controlloop.runtime.userName}}&amp;authPassword={{clamp.config.controlloop.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
+                    uri="{{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/commission/toscaServiceTemplateSchema?section=${exchangeProperty[section]}&amp;bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.acm.runtime.userName}}&amp;authPassword={{clamp.config.acm.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
             <convertBodyTo type="java.lang.String"/>
             <doFinally>
                 <to uri="direct:reset-raise-http-exception-flag"/>
         <from uri="direct:get-element-definitions"/>
         <doTry>
             <log loggingLevel="INFO"
-                 message="Getting the Control Loop Element Definitions"/>
+                 message="Getting the Automation Composition Element Definitions"/>
             <to
-                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('ControlLoop', 'Getting the Controlloop Element Definitions')"/>
+                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('AutomationComposition', 'Getting the Automation Composition Element Definitions')"/>
             <setHeader name="CamelHttpMethod">
                 <constant>GET</constant>
             </setHeader>
                 <constant>application/json</constant>
             </setHeader>
             <log loggingLevel="INFO"
-                 message="Endpoint to get Json Schema: {{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/commission/elements"></log>
+                 message="Endpoint to get Json Schema: {{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/commission/elements"></log>
             <toD
-                    uri="{{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/commission/elements?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.controlloop.runtime.userName}}&amp;authPassword={{clamp.config.controlloop.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
+                    uri="{{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/commission/elements?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.acm.runtime.userName}}&amp;authPassword={{clamp.config.acm.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
             <convertBodyTo type="java.lang.String"/>
             <doFinally>
                 <to uri="direct:reset-raise-http-exception-flag"/>
             </doFinally>
         </doTry>
     </route>
-    <route id="get-control-loop-definitions">
-        <from uri="direct:get-control-loop-definitions"/>
+    <route id="get-acm-definitions">
+        <from uri="direct:get-acm-definitions"/>
         <doTry>
             <log loggingLevel="INFO"
-                 message="Getting the Control Loop  Definitions"/>
+                 message="Getting the Automation Composition  Definitions"/>
             <to
-                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('ControlLoop', 'Getting the Controlloop Element Definitions')"/>
+                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('AutomationComposition', 'Getting the Automation Composition Element Definitions')"/>
             <setHeader name="CamelHttpMethod">
                 <constant>GET</constant>
             </setHeader>
                 <constant>application/json</constant>
             </setHeader>
             <log loggingLevel="INFO"
-                 message="Endpoint to get Json Schema: {{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/commission/elements"></log>
+                 message="Endpoint to get Json Schema: {{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/commission/elements"></log>
             <toD
-                    uri="{{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/commission? bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.controlloop.runtime.userName}}&amp;authPassword={{clamp.config.controlloop.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
+                    uri="{{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/commission? bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.acm.runtime.userName}}&amp;authPassword={{clamp.config.acm.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
             <convertBodyTo type="java.lang.String"/>
             <doFinally>
                 <to uri="direct:reset-raise-http-exception-flag"/>
             <log loggingLevel="INFO"
                  message="Getting Common Or Instance Properties"/>
             <to
-                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('ControlLoop', 'Getting Common Or Instance Properties')"/>
+                    uri="bean:org.onap.policy.clamp.flow.log.FlowLogOperation?method=invokeLog('AutomationComposition', 'Getting Common Or Instance Properties')"/>
             <setHeader name="CamelHttpMethod">
                 <constant>GET</constant>
             </setHeader>
                 <simple>${header.common}</simple>
             </setProperty>
             <log loggingLevel="INFO"
-                 message="Endpoint to get Common Or Instance Properties: {{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/commission/getCommonOrInstanceProperties"></log>
+                 message="Endpoint to get Common Or Instance Properties: {{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/commission/getCommonOrInstanceProperties"></log>
             <toD
-                    uri="{{clamp.config.controlloop.runtime.url}}/onap/controlloop/v2/commission/getCommonOrInstanceProperties?common=${exchangeProperty[common]}&amp;bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.controlloop.runtime.userName}}&amp;authPassword={{clamp.config.controlloop.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
+                    uri="{{clamp.config.acm.runtime.url}}/onap/policy/clamp/acm/v2/commission/getCommonOrInstanceProperties?common=${exchangeProperty[common]}&amp;bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.acm.runtime.userName}}&amp;authPassword={{clamp.config.acm.runtime.password}}&amp;authenticationPreemptive=true&amp;connectionClose=true"/>
             <convertBodyTo type="java.lang.String"/>
             <doFinally>
                 <to uri="direct:reset-raise-http-exception-flag"/>
index 7824be4..8c9c5b3 100644 (file)
@@ -125,7 +125,7 @@ public class RuntimeCommissioningResponseItTestCase {
         ProducerTemplate prodTemplate = camelContext.createProducerTemplate();
 
         Exchange exchangeResponse =
-            prodTemplate.send("direct:get-control-loop-definitions", ExchangeBuilder.anExchange(camelContext)
+            prodTemplate.send("direct:get-acm-definitions", ExchangeBuilder.anExchange(camelContext)
                 .withProperty("name", "ToscaServiceTemplate")
                 .withProperty("version", "1.0.0")
                 .withProperty("raiseHttpExceptionFlag", "true")
index cc08ea0..d655257 100644 (file)
@@ -53,9 +53,10 @@ public class RuntimeInstantiationResponseItTestCase {
 
     private static final String RAISE_HTTP_EXCEPTION_FLAG = "raiseHttpExceptionFlag";
 
-    private static final String SAMPLE_CONTROL_LOOP_LIST = "{\"controlLoopList\": [{\"name\": \"PMSHInstance0\","
+    private static final String SAMPLE_CONTROL_LOOP_LIST =
+        "{\"automationCompositionList\": [{\"name\": \"PMSHInstance0\","
         + "\"version\": \"1.0.1\",\"definition\": {},\"state\": \"UNINITIALISED\",\"orderedState\": \"UNINITIALISED\","
-        + "\"description\": \"PMSH control loop instance 0\",\"elements\": {}}]}";
+        + "\"description\": \"PMSH Automation Composition instance 0\",\"elements\": {}}]}";
 
     private static final String SAMPLE_TOSCA_TEMPLATE =
         "{\"tosca_definitions_version\": \"tosca_simple_yaml_1_1_0\","
index f2cf0dd..d09b3ce 100644 (file)
@@ -182,6 +182,6 @@ clamp.config.tosca.converter.default.datatypes=classpath:/clds/tosca-converter/d
 clamp.config.tosca.converter.dictionary.support.enabled=true
 
 # Configuration settings for ControlLoop Runtime Rest API
-clamp.config.controlloop.runtime.url=http://localhost:${docker.http-cache.port.host}
-clamp.config.controlloop.runtime.userName=runtimeUser
-clamp.config.controlloop.runtime.password=zb!XztG34
+clamp.config.acm.runtime.url=http://localhost:${docker.http-cache.port.host}
+clamp.config.acm.runtime.userName=runtimeUser
+clamp.config.acm.runtime.password=zb!XztG34
index 786c366..9c22f3f 100644 (file)
@@ -276,44 +276,44 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
             with open(cached_file_content, 'w') as f:
                 f.write(response)
         return True
-     elif (self.path.startswith("/onap/controlloop/v2/commission/toscaservicetemplate")) and http_type == "GET":
+     elif (self.path.startswith("/onap/policy/clamp/acm/v2/commission/toscaservicetemplate")) and http_type == "GET":
          if not _file_available:
              cached_file_folder = cached_file_folder.split('bridgeEndpoint')[0]
              print(("cached file folder for onap is %s: ", cached_file_folder))
-             print("self.path start with /onap/controlloop/v2/commission/, generating response json...")
+             print("self.path start with /onap/policy/clamp/acm/v2/commission/, generating response json...")
              jsonGenerated =  "{\"tosca_definitions_version\": \"tosca_simple_yaml_1_1_0\",\"data_types\": {},\"node_types\": {}, \"policy_types\": {}, \"topology_template\": {}, \"name\": \"ToscaServiceTemplateSimple\", \"version\": \"1.0.0\", \"metadata\": {}}"
              self._create_cache(jsonGenerated, cached_file_folder, cached_file_header, cached_file_content)
          return True
-     elif (self.path.startswith("/onap/controlloop/v2/commission/toscaServiceTemplateSchema")) and http_type == "GET":
+     elif (self.path.startswith("/onap/policy/clamp/acm/v2/commission/toscaServiceTemplateSchema")) and http_type == "GET":
          if not _file_available:
              cached_file_folder = cached_file_folder.split('bridgeEndpoint')[0]
              print(("cached file folder for onap is %s: ", cached_file_folder))
-             print("self.path start with /onap/controlloop/v2/commission/, generating response json...")
+             print("self.path start with /onap/policy/clamp/acm/v2/commission/, generating response json...")
              jsonGenerated =  "{\"tosca_definitions_version\": \"tosca_simple_yaml_1_1_0\",\"data_types\": {},\"node_types\": {}, \"policy_types\": {}, \"topology_template\": {}, \"name\": \"ToscaServiceTemplateSimple\", \"version\": \"1.0.0\", \"metadata\": {}}"
              self._create_cache(jsonGenerated, cached_file_folder, cached_file_header, cached_file_content)
          return True
-     elif (self.path.startswith("/onap/controlloop/v2/commission/elements")) and http_type == "GET":
+     elif (self.path.startswith("/onap/policy/clamp/acm/v2/commission/elements")) and http_type == "GET":
          if not _file_available:
-             print("self.path start with /commission/elements Control Loop Elements, generating response json...")
+             print("self.path start with /commission/elements Automation Composition Elements, generating response json...")
              jsonGenerated = "[{\"name\": ,\"org.onap.domain.pmsh.PMSH_DCAEMicroservice\": [{ \"version\": \"1.2.3\", \"derived_from\": null }]}]"
              self._create_cache(jsonGenerated, cached_file_folder, cached_file_header, cached_file_content)
          return True
-     elif (self.path.startswith("/onap/controlloop/v2/commission")) and http_type == "GET":
+     elif (self.path.startswith("/onap/policy/clamp/acm/v2/commission")) and http_type == "GET":
          if not _file_available:
-             print("self.path start with /commission control loop definition, generating response json...")
+             print("self.path start with /commission Automation Composition definition, generating response json...")
              #jsondata = json.loads(self.data_string)
              jsonGenerated = "[{\"name\": ,\"org.onap.domain.pmsh.PMSHControlLoopDefinition\": [{ \"version\": \"1.2.3\", \"derived_from\": null }]}]"
              self._create_cache(jsonGenerated, cached_file_folder, cached_file_header, cached_file_content)
          return True
-     elif (self.path.startswith("/onap/controlloop/v2/commission/getCommonOrInstanceProperties")) and http_type == "GET":
+     elif (self.path.startswith("/onap/policy/clamp/acm/v2/commission/getCommonOrInstanceProperties")) and http_type == "GET":
          if not _file_available:
              print("self.path start with /commission getting common properties, generating response json...")
              with open("example/node_template.json", "r") as f:
                  jsonGenerated = f.read()
              self._create_cache(jsonGenerated, cached_file_folder, cached_file_header, cached_file_content)
          return True
-     elif (self.path.startswith("/onap/controlloop/v2/commission")) and http_type == "POST":
-         print("self.path start with POST /onap/controlloop/v2/commission, copying body to response ...")
+     elif (self.path.startswith("/onap/policy/clamp/acm/v2/commission")) and http_type == "POST":
+         print("self.path start with POST /onap/policy/clamp/acm/v2/commission, copying body to response ...")
          if not os.path.exists(cached_file_folder):
              os.makedirs(cached_file_folder, 0o777)
          with open(cached_file_header, 'w+') as f:
@@ -321,18 +321,18 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
          with open(cached_file_content, 'w+') as f:
              f.write(self.data_string)
          return True
-     elif (self.path.startswith("/onap/controlloop/v2/commission")) and http_type == "DELETE":
+     elif (self.path.startswith("/onap/policy/clamp/acm/v2/commission")) and http_type == "DELETE":
          print("self.path start with /commission Decommissioning, generating response json...")
          jsonGenerated = "{\"errorDetails\": null,\"affectedControlLoopDefinitions\": [{ \"name\": \"ToscaServiceTemplateSimple\", \"version\": \"1.0.0\" }]}"
          self._create_cache(jsonGenerated, cached_file_folder, cached_file_header, cached_file_content)
          return True
-     elif (self.path.startswith("/onap/controlloop/v2/instantiation")) and http_type == "GET":
+     elif (self.path.startswith("/onap/policy/clamp/acm/v2/instantiation")) and http_type == "GET":
          print("self.path start with /instantiation Retrieving Instantiation, generating response json...")
-         jsonGenerated = "{\"controlLoopList\": [{\"name\": \"PMSHInstance0\",\"version\": \"1.0.1\",\"definition\": {},\"state\": \"UNINITIALISED\",\"orderedState\": \"UNINITIALISED\",\"description\": \"PMSH control loop instance 0\",\"elements\": {}}]}";
+         jsonGenerated = "{\"automationCompositionList\": [{\"name\": \"PMSHInstance0\",\"version\": \"1.0.1\",\"definition\": {},\"state\": \"UNINITIALISED\",\"orderedState\": \"UNINITIALISED\",\"description\": \"PMSH Automation Composition instance 0\",\"elements\": {}}]}";
          self._create_cache(jsonGenerated, cached_file_folder, cached_file_header, cached_file_content)
          return True
-     elif (self.path.startswith("/onap/controlloop/v2/instanceProperties")) and http_type == "POST":
-         print("self.path start with POST /onap/controlloop/v2/instanceProperties, copying body to response ...")
+     elif (self.path.startswith("/onap/policy/clamp/acm/v2/instanceProperties")) and http_type == "POST":
+         print("self.path start with POST /onap/policy/clamp/acm/v2/instanceProperties, copying body to response ...")
          if not os.path.exists(cached_file_folder):
              os.makedirs(cached_file_folder, 0o777)
          with open(cached_file_header, 'w+') as f:
@@ -340,12 +340,12 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
          with open(cached_file_content, 'w+') as f:
              f.write(self.data_string)
          return True
-     elif (self.path.startswith("/onap/controlloop/v2/instanceProperties")) and http_type == "DELETE":
+     elif (self.path.startswith("/onap/policy/clamp/acm/v2/instanceProperties")) and http_type == "DELETE":
          print("self.path start with /instanceProperties Deleting instance properties, generating response json...")
          jsonGenerated = "{\"errorDetails\": null,\"affectedControlLoopDefinitions\": [{ \"name\": \"PMSH_Instance1\", \"version\": \"2.3.1\" }]}"
          self._create_cache(jsonGenerated, cached_file_folder, cached_file_header, cached_file_content)
          return True
-     elif (self.path.startswith("/onap/controlloop/v2/instantiation/command")) and http_type == "PUT":
+     elif (self.path.startswith("/onap/policy/clamp/acm/v2/instantiation/command")) and http_type == "PUT":
          print("self.path start with /instantiation/command Changing order state, generating response json...")
          jsonGenerated = "{\"orderedState\":\"PASSIVE\",\"controlLoopIdentifierList\":[{\"name\":\"PMSH_Instance1\",\"version\":\"2.3.1\"}]}"
          self._create_cache(jsonGenerated, cached_file_folder, cached_file_header, cached_file_content)