Add validation in create instance 68/141368/2 master
authorFrancescoFioraEst <francesco.fiora@est.tech>
Mon, 23 Jun 2025 13:47:30 +0000 (14:47 +0100)
committerFrancesco Fiora <francesco.fiora@est.tech>
Tue, 24 Jun 2025 09:15:15 +0000 (09:15 +0000)
The instance elements have to be aligned with the composition
definition elements.

Issue-ID: POLICY-5402
Change-Id: If80dec61f924d3643972dd68bd30d293f3519cb9
Signed-off-by: FrancescoFioraEst <francesco.fiora@est.tech>
examples/src/main/resources/clamp/acm/pmsh/funtional-pmsh-usecase-migration.yaml [new file with mode: 0644]
models/src/main/java/org/onap/policy/clamp/models/acm/utils/AcmUtils.java
models/src/test/java/org/onap/policy/clamp/models/acm/utils/AcmUtilsTest.java
models/src/test/java/org/onap/policy/clamp/models/acm/utils/CommonTestData.java
models/src/test/resources/json/AutomationComposition.json [new file with mode: 0644]
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProviderTest.java
runtime-acm/src/test/resources/rest/acm/AutomationCompositionMigrate.json

diff --git a/examples/src/main/resources/clamp/acm/pmsh/funtional-pmsh-usecase-migration.yaml b/examples/src/main/resources/clamp/acm/pmsh/funtional-pmsh-usecase-migration.yaml
new file mode 100644 (file)
index 0000000..d9e73c9
--- /dev/null
@@ -0,0 +1,3378 @@
+# ============LICENSE_START=======================================================
+# Copyright (C) 2025 OpenInfra Foundation Europe. 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=========================================================
+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
+  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
+  org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.RestRequest:
+    version: 1.0.0
+    derived_from: tosca.datatypes.Root
+    properties:
+      restRequestId:
+        type: onap.datatypes.ToscaConceptIdentifier
+        required: true
+        description: The name and version of a REST request to be sent to a REST endpoint
+      httpMethod:
+        type: string
+        required: true
+        constraints:
+          - valid_values:
+              - POST
+              - PUT
+              - GET
+              - DELETE
+        description: The REST method to use
+      path:
+        type: string
+        required: true
+        description: The path of the REST request relative to the base URL
+      body:
+        type: string
+        required: false
+        description: The body of the REST request for PUT and POST requests
+      expectedResponse:
+        type: integer
+        required: true
+        constraints: []
+        description: THe expected HTTP status code for the REST request
+  org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity:
+    version: 1.0.0
+    derived_from: tosca.datatypes.Root
+    properties:
+      configurationEntityId:
+        type: onap.datatypes.ToscaConceptIdentifier
+        required: true
+        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.acm.httpAutomationCompositionElement.RestRequest
+          type_version: 1.0.0
+        description: A sequence of REST commands to send to the REST endpoint
+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.customPolicyType:
+    derived_from: tosca.policies.Root
+    description: a base policy type for all policies that govern monitoring provisioning
+    version: 1.0.0
+    name: onap.policies.customPolicyType
+  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
+  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
+
+node_types:
+  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.acm.AutomationCompositionElement:
+    version: 1.0.1
+    derived_from: tosca.nodetypes.Root
+    properties:
+      provider:
+        type: string
+        required: false
+        metadata:
+          common: true
+        description: Specifies the organization that provides the automation composition element
+      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
+      uninitializedToPassiveTimeout:
+        type: integer
+        required: false
+        constraints:
+          - greater_or_equal: 0
+        default: 60
+        metadata:
+          common: true
+        description: The maximum time in seconds to wait for a state chage from uninitialized to passive
+      passiveToRunningTimeout:
+        type: integer
+        required: false
+        constraints:
+          - greater_or_equal: 0
+        default: 60
+        metadata:
+          common: true
+        description: The maximum time in seconds to wait for a state chage from passive to running
+      runningToPassiveTimeout:
+        type: integer
+        required: false
+        constraints:
+          - greater_or_equal: 0
+        default: 60
+        metadata:
+          common: true
+        description: The maximum time in seconds to wait for a state chage from running to passive
+      passiveToUninitializedTimeout:
+        type: integer
+        required: false
+        constraints:
+          - greater_or_equal: 0
+        default: 60
+        metadata:
+          common: true
+        description: The maximum time in seconds to wait for a state chage from passive to uninitialized
+  org.onap.policy.clamp.acm.AutomationComposition:
+    version: 1.0.1
+    derived_from: tosca.nodetypes.Root
+    properties:
+      provider:
+        type: string
+        required: false
+        metadata:
+          common: true
+        description: Specifies the organization that provides the automation composition element
+      elements:
+        type: list
+        required: true
+        metadata:
+          common: true
+        entry_schema:
+          type: onap.datatypes.ToscaConceptIdentifier
+        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.0
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
+    properties:
+      policy_type_id:
+        type: onap.datatypes.ToscaConceptIdentifier
+        required: true
+      policy_id:
+        type: onap.datatypes.ToscaConceptIdentifier
+        required: false
+  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
+        required: true
+  org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement:
+    version: 1.0.0
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
+    properties:
+      chart:
+        type: string
+        required: true
+      configs:
+        type: list
+        required: false
+      requirements:
+        type: string
+        required: false
+      templates:
+        type: list
+        required: false
+        entry_schema:
+      values:
+        type: string
+        required: true
+  org.onap.policy.clamp.acm.HttpAutomationCompositionElement:
+    version: 1.0.0
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
+    properties:
+      baseUrl:
+        type: string
+        required: true
+        description: The base URL to be prepended to each path, identifies the host for the REST endpoints.
+      httpHeaders:
+        type: map
+        required: false
+        entry_schema:
+          type: string
+        description: HTTP headers to send on REST requests
+      configurationEntities:
+        type: map
+        required: true
+        entry_schema:
+          type: org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity
+          type_version: 1.0.0
+        description: The connfiguration entities the Automation Composition Element is managing and their associated REST requests
+
+topology_template:
+  inputs:
+    pmsh_operational_policy:
+      type: onap.datatypes.ToscaConceptIdentifier
+      description: The ID of the PMSH operational policy to use
+      default:
+        name: operational.apex.pmcontrol
+        version: 1.0.0
+  node_templates:
+    org.onap.policy.clamp.acm.PolicyParticipant:
+      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.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement:
+      version: 1.2.4
+      type: org.onap.policy.clamp.acm.PolicyAutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element for the operational policy for Performance Management Subscription Handling
+      properties:
+        provider: Ericsson
+        policy_type_id:
+          name: onap.policies.operational.pm-subscription-handler
+          version: 1.0.0
+        policy_id:
+          get_input: pmsh_operational_policy
+
+
+    org.onap.policy.clamp.acm.KubernetesParticipant:
+      version: 2.3.4
+      type: org.onap.policy.clamp.acm.Participant
+      type_version: 1.0.1
+      description: Participant for K8S
+      properties:
+        provider: ONAP
+    org.onap.domain.database.PMSH_K8SMicroserviceAutomationCompositionElement:
+      # Chart from new repository
+      version: 1.2.4
+      type: org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element for the K8S microservice for PMSH
+      properties:
+        provider: ONAP
+        chart:
+          chartId:
+            name: dcae-pmsh
+            version: 10.0.0
+          namespace: onap
+          releaseName: dcae-pmsh
+          repository:
+            repoName: chartmuseum
+            address: http://chart-museum:80
+            userName: onapinitializer
+            password: demo123456!
+          overrideParams:
+            global.masterPassword: test
+            global.centralizedLoggingEnabled: false
+    org.onap.policy.clamp.acm.HttpParticipant:
+      version: 2.3.4
+      type: org.onap.policy.clamp.acm.Participant
+      type_version: 1.0.1
+      description: Participant for Http requests
+      properties:
+        provider: ONAP
+    org.onap.domain.database.PMSH_HttpMicroserviceAutomationCompositionElement:
+      # Http config for PMSH.
+      version: 1.2.4
+      type: org.onap.policy.clamp.acm.HttpAutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element for the http requests of PMSH microservice
+      properties:
+        provider: ONAP
+        uninitializedToPassiveTimeout: 180
+        startPhase: 1
+        baseUrl: https://dcae-pmsh:8443
+        httpHeaders:
+          Content-Type: application/json
+        configurationEntities:
+          - configurationEntityId:
+              name: entity1
+              version: 1.0.1
+            restSequence:
+              - restRequestId:
+                  name: request1
+                  version: 1.0.1
+                httpMethod: POST
+                path: subscription
+                body: '{
+                         "subscription":{
+                         "subscriptionName":"new_sub_01",
+                         "operationalPolicyName":"pmsh-operational-policy",
+                         "controlLoopName":"controlLoop-name",
+                         "nfFilter":{
+                         "nfNames":[
+                                "^pnf*"
+                         ],
+                         "modelInvariantIDs":[
+                            "7129e420-d396-4efb-af02-6b83499b12f5"
+                         ],
+                            "modelVersionIDs":[
+                         "e80a6ae3-cafd-4d24-850d-e14c084a5ca7"
+                         ],
+                        "modelNames":[
+                        "pnf_134"
+                        ]
+                        },
+                        "measurementGroups":[
+                        {
+                            "measurementGroup":{
+                            "measurementGroupName":"msgroup_01",
+                            "administrativeState":"UNLOCKED",
+                            "fileBasedGP":15,
+                            "fileLocation":"/pm/pm.xml",
+                            "measurementTypes":[
+                            {
+                            "measurementType":"EutranCell.*"
+                            },
+                            {
+                            "measurementType":"EutranCellRelation.pmCounter1"
+                            },
+                            {
+                            "measurementType":"EutranCellRelation.pmCounter2"
+                            }
+                        ],
+                        "managedObjectDNsBasic":[
+                        {
+                        "DN":"ManagedElement=1,ENodeBFunction=1,EUtranCell=CityCenter1"
+                        },
+                        {
+                        "DN":"ManagedElement=1,ENodeBFunction=1,EUtranCell=CityCenter1, EUtranCellRelation=CityCenter2"
+                        },
+                        {
+                        "DN":"ManagedElement=1,ENodeBFunction=1,EUtranCell=CityCenter1, EUtranCellRelation=CityCenter3"
+                        }
+                        ]
+                        }
+                            }
+                        ]
+                        }
+                }'
+                expectedResponse: 201
+
+
+    org.onap.domain.pmsh.PMSHAutomationCompositionDefinition:
+      version: 1.2.4
+      type: org.onap.policy.clamp.acm.AutomationComposition
+      type_version: 1.0.1
+      description: Automation composition for PMSH
+      properties:
+        provider: ONAP
+        elements:
+          - name: org.onap.domain.database.PMSH_K8SMicroserviceAutomationCompositionElement
+            version: 1.2.4
+          - name: org.onap.domain.database.PMSH_HttpMicroserviceAutomationCompositionElement
+            version: 1.2.4
+          - name: org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement
+            version: 1.2.4
+  policies:
+    - operational.apex.pmcontrol:
+        type: onap.policies.controlloop.operational.common.Apex
+        type_version: 1.0.0
+        version: 1.0.0
+        properties:
+          engineServiceParameters:
+            name: MyApexEngine
+            version: 0.0.1
+            id: 45
+            instanceCount: 2
+            deploymentPort: 12561
+            engineParameters:
+              executorParameters:
+                JAVASCRIPT:
+                  parameterClassName: org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters
+              contextParameters:
+                parameterClassName: org.onap.policy.apex.context.parameters.ContextParameters
+                schemaParameters:
+                  Avro:
+                    parameterClassName: org.onap.policy.apex.plugins.context.schema.avro.AvroSchemaHelperParameters
+                  Java:
+                    parameterClassName: org.onap.policy.apex.context.impl.schema.java.JavaSchemaHelperParameters
+                    jsonAdapters:
+                      Instant:
+                        adaptedClass: java.time.Instant
+                        adaptorClass: org.onap.policy.common.gson.InstantAsMillisTypeAdapter
+            policy_type_impl:
+              apexPolicyModel:
+                key:
+                  name: PMControlPolicy
+                  version: 0.0.1
+                keyInformation:
+                  key:
+                    name: PMControlPolicy_KeyInfo
+                    version: 0.0.1
+                  keyInfoMap:
+                    entry:
+                      - key:
+                          name: CDSActionIdentifiersType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSActionIdentifiersType
+                            version: 0.0.1
+                          UUID: 6e5fa19b-14df-37e3-a4ae-8c537e861a82
+                          description: Generated description for concept referred to by
+                            key "CDSActionIdentifiersType:0.0.1"
+                      - key:
+                          name: CDSCreateResponseEvent
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSCreateResponseEvent
+                            version: 0.0.1
+                          UUID: 14b29e38-ac75-3273-aa4e-8583c0aa7dad
+                          description: Generated description for concept referred to by
+                            key "CDSCreateResponseEvent:0.0.1"
+                      - key:
+                          name: CDSCreateResponsePayloadType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSCreateResponsePayloadType
+                            version: 0.0.1
+                          UUID: 04573f8f-e772-30a5-b1d9-d7318d4a1e13
+                          description: Generated description for concept referred to by
+                            key "CDSCreateResponsePayloadType:0.0.1"
+                      - key:
+                          name: CDSCreateResponsePolicy
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSCreateResponsePolicy
+                            version: 0.0.1
+                          UUID: e126c965-fc09-3bfe-8f55-70f380a4a49c
+                          description: Generated description for concept referred to by
+                            key "CDSCreateResponsePolicy:0.0.1"
+                      - key:
+                          name: CDSCreateResponseTask
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSCreateResponseTask
+                            version: 0.0.1
+                          UUID: 6165ee82-afd2-3aab-a517-f00b3f2461d2
+                          description: Generated description for concept referred to by
+                            key "CDSCreateResponseTask:0.0.1"
+                      - key:
+                          name: CDSCreateSubscriptionPayloadType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSCreateSubscriptionPayloadType
+                            version: 0.0.1
+                          UUID: 8350ac5e-c157-38b9-9614-a0f93a830e60
+                          description: Generated description for concept referred to by
+                            key "CDSCreateSubscriptionPayloadType:0.0.1"
+                      - key:
+                          name: CDSCreateSubscriptionRequestEvent
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSCreateSubscriptionRequestEvent
+                            version: 0.0.1
+                          UUID: cfa325ba-226b-3a31-9183-ec43e2b6e9a2
+                          description: Generated description for concept referred to by
+                            key "CDSCreateSubscriptionRequestEvent:0.0.1"
+                      - key:
+                          name: CDSDeleteResponseEvent
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSDeleteResponseEvent
+                            version: 0.0.1
+                          UUID: 8be9c0fa-7437-3841-aff2-b3cec6ae3bd8
+                          description: Generated description for concept referred to by
+                            key "CDSDeleteResponseEvent:0.0.1"
+                      - key:
+                          name: CDSDeleteResponsePayloadType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSDeleteResponsePayloadType
+                            version: 0.0.1
+                          UUID: 3fbfe0c9-152e-34d3-a504-09cd13c058d0
+                          description: Generated description for concept referred to by
+                            key "CDSDeleteResponsePayloadType:0.0.1"
+                      - key:
+                          name: CDSDeleteResponsePolicy
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSDeleteResponsePolicy
+                            version: 0.0.1
+                          UUID: a780251c-edd5-3132-b865-04313246b43c
+                          description: Generated description for concept referred to by
+                            key "CDSDeleteResponsePolicy:0.0.1"
+                      - key:
+                          name: CDSDeleteResponseTask
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSDeleteResponseTask
+                            version: 0.0.1
+                          UUID: afce4555-3aa3-3521-a7d8-ee8cdf0d3efc
+                          description: Generated description for concept referred to by
+                            key "CDSDeleteResponseTask:0.0.1"
+                      - key:
+                          name: CDSDeleteSubscriptionPayloadType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSDeleteSubscriptionPayloadType
+                            version: 0.0.1
+                          UUID: 12658406-9147-3c9d-a38c-5ad5e30b092b
+                          description: Generated description for concept referred to by
+                            key "CDSDeleteSubscriptionPayloadType:0.0.1"
+                      - key:
+                          name: CDSDeleteSubscriptionRequestEvent
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSDeleteSubscriptionRequestEvent
+                            version: 0.0.1
+                          UUID: 24380c95-9289-36e6-8cbf-0edefa15ccd9
+                          description: Generated description for concept referred to by
+                            key "CDSDeleteSubscriptionRequestEvent:0.0.1"
+                      - key:
+                          name: CDSRequestCommonHeaderType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSRequestCommonHeaderType
+                            version: 0.0.1
+                          UUID: 35590ac0-062c-39f1-8786-b4ff716e30b1
+                          description: Generated description for concept referred to by
+                            key "CDSRequestCommonHeaderType:0.0.1"
+                      - key:
+                          name: CDSResponseCommonHeaderType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSResponseCommonHeaderType
+                            version: 0.0.1
+                          UUID: dd7e1805-885a-350b-aaf9-ed541321ae3c
+                          description: Generated description for concept referred to by
+                            key "CDSResponseCommonHeaderType:0.0.1"
+                      - key:
+                          name: CDSResponseStatusEvent
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSResponseStatusEvent
+                            version: 0.0.1
+                          UUID: 7986e21b-32f7-302e-9554-31f21b673493
+                          description: Generated description for concept referred to by
+                            key "CDSResponseStatusEvent:0.0.1"
+                      - key:
+                          name: CDSResponseStatusType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSResponseStatusType
+                            version: 0.0.1
+                          UUID: 92b8a2cf-344e-3ce1-8cc0-2b7d3cb695fa
+                          description: Generated description for concept referred to by
+                            key "CDSResponseStatusType:0.0.1"
+                      - key:
+                          name: CreateSubscriptionPayloadEvent
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CreateSubscriptionPayloadEvent
+                            version: 0.0.1
+                          UUID: 92162397-1a8e-3a3f-a469-d2af7700af4a
+                          description: Generated description for concept referred to by
+                            key "CreateSubscriptionPayloadEvent:0.0.1"
+                      - key:
+                          name: CreateSubscriptionPayloadTask
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CreateSubscriptionPayloadTask
+                            version: 0.0.1
+                          UUID: bc0c69f0-52ed-38ea-b468-ae4a6fd1730d
+                          description: Generated description for concept referred to by
+                            key "CreateSubscriptionPayloadTask:0.0.1"
+                      - key:
+                          name: CreateSubscriptionRequestTask
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CreateSubscriptionRequestTask
+                            version: 0.0.1
+                          UUID: 89cb75e9-f06c-30d3-b4ff-698d45f63869
+                          description: Generated description for concept referred to by
+                            key "CreateSubscriptionRequestTask:0.0.1"
+                      - key:
+                          name: DeleteSubscriptionPayloadEvent
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: DeleteSubscriptionPayloadEvent
+                            version: 0.0.1
+                          UUID: 994fa441-04ab-33bb-832d-1cd12ab5d074
+                          description: Generated description for concept referred to by
+                            key "DeleteSubscriptionPayloadEvent:0.0.1"
+                      - key:
+                          name: DeleteSubscriptionPayloadTask
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: DeleteSubscriptionPayloadTask
+                            version: 0.0.1
+                          UUID: 0f519117-5fea-3e4b-941f-8f778100465f
+                          description: Generated description for concept referred to by
+                            key "DeleteSubscriptionPayloadTask:0.0.1"
+                      - key:
+                          name: DeleteSubscriptionRequestTask
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: DeleteSubscriptionRequestTask
+                            version: 0.0.1
+                          UUID: acb772fe-d442-39e3-98f9-b1080caf4150
+                          description: Generated description for concept referred to by
+                            key "DeleteSubscriptionRequestTask:0.0.1"
+                      - key:
+                          name: MRResponseEvent
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: MRResponseEvent
+                            version: 0.0.1
+                          UUID: 13c747a3-6bae-3bcf-9c80-b152e01dc194
+                          description: Generated description for concept referred to by
+                            key "MRResponseEvent:0.0.1"
+                      - key:
+                          name: PMControlPolicy
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: PMControlPolicy
+                            version: 0.0.1
+                          UUID: acf1e55c-7bc5-3bd5-975a-0ca54afcd8a4
+                          description: Generated description for concept referred to by
+                            key "PMControlPolicy:0.0.1"
+                      - key:
+                          name: PMControlPolicy_Albums
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: PMControlPolicy_Albums
+                            version: 0.0.1
+                          UUID: b38ad204-c2c8-32f4-9b5a-dda0aeb0145b
+                          description: Generated description for concept referred to by
+                            key "PMControlPolicy_Albums:0.0.1"
+                      - key:
+                          name: PMControlPolicy_Events
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: PMControlPolicy_Events
+                            version: 0.0.1
+                          UUID: be3871a0-c42a-3113-a066-82d192840eca
+                          description: Generated description for concept referred to by
+                            key "PMControlPolicy_Events:0.0.1"
+                      - key:
+                          name: PMControlPolicy_KeyInfo
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: PMControlPolicy_KeyInfo
+                            version: 0.0.1
+                          UUID: ced37634-28a4-3178-b7f6-2980794927b0
+                          description: Generated description for concept referred to by
+                            key "PMControlPolicy_KeyInfo:0.0.1"
+                      - key:
+                          name: PMControlPolicy_Policies
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: PMControlPolicy_Policies
+                            version: 0.0.1
+                          UUID: be3d180d-ef9c-3a75-8e9c-84271a038bed
+                          description: Generated description for concept referred to by
+                            key "PMControlPolicy_Policies:0.0.1"
+                      - key:
+                          name: PMControlPolicy_Schemas
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: PMControlPolicy_Schemas
+                            version: 0.0.1
+                          UUID: e61973f1-189c-39e5-82f6-0d3afe298a20
+                          description: Generated description for concept referred to by
+                            key "PMControlPolicy_Schemas:0.0.1"
+                      - key:
+                          name: PMControlPolicy_Tasks
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: PMControlPolicy_Tasks
+                            version: 0.0.1
+                          UUID: 5658adb3-2962-30a3-a241-fae75bb8eb4a
+                          description: Generated description for concept referred to by
+                            key "PMControlPolicy_Tasks:0.0.1"
+                      - key:
+                          name: PMSubscriptionAlbum
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: PMSubscriptionAlbum
+                            version: 0.0.1
+                          UUID: c2bd6f0d-6854-317a-9be2-97c08338428c
+                          description: Generated description for concept referred to by
+                            key "PMSubscriptionAlbum:0.0.1"
+                      - key:
+                          name: PMSubscriptionOutputEvent
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: PMSubscriptionOutputEvent
+                            version: 0.0.1
+                          UUID: 992b7819-9f69-3aa0-bb0f-6e45ea15ce05
+                          description: Generated description for concept referred to by
+                            key "PMSubscriptionOutputEvent:0.0.1"
+                      - key:
+                          name: PMSubscriptionType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: PMSubscriptionType
+                            version: 0.0.1
+                          UUID: 73c1c397-4fc3-357f-93b6-a8ad707fbaae
+                          description: Generated description for concept referred to by
+                            key "PMSubscriptionType:0.0.1"
+                      - key:
+                          name: ReceiveEventPolicy
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: ReceiveEventPolicy
+                            version: 0.0.1
+                          UUID: 568b7345-9de1-36d3-b6a3-9b857e6809a1
+                          description: Generated description for concept referred to by
+                            key "ReceiveEventPolicy:0.0.1"
+                      - key:
+                          name: ReceiveSubscriptionTask
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: ReceiveSubscriptionTask
+                            version: 0.0.1
+                          UUID: f596afc8-100c-35eb-92c8-352355ea457d
+                          description: Generated description for concept referred to by
+                            key "ReceiveSubscriptionTask:0.0.1"
+                      - key:
+                          name: SimpleIntType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: SimpleIntType
+                            version: 0.0.1
+                          UUID: 153791fd-ae0a-36a7-88a5-309a7936415d
+                          description: Generated description for concept referred to by
+                            key "SimpleIntType:0.0.1"
+                      - key:
+                          name: SimpleStringType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: SimpleStringType
+                            version: 0.0.1
+                          UUID: 8a4957cf-9493-3a76-8c22-a208e23259af
+                          description: Generated description for concept referred to by
+                            key "SimpleStringType:0.0.1"
+                      - key:
+                          name: SubscriptionStatusType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: SubscriptionStatusType
+                            version: 0.0.1
+                          UUID: 597643b1-9db1-31ce-85d0-e1c63c43b30b
+                          description: Generated description for concept referred to by
+                            key "SubscriptionStatusType:0.0.1"
+                      - key:
+                          name: SubscriptionType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: SubscriptionType
+                            version: 0.0.1
+                          UUID: 184547bb-7d64-3cb2-a273-d7185102c5ce
+                          description: Generated description for concept referred to by
+                            key "SubscriptionType:0.0.1"
+                      - key:
+                          name: UUIDType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: UUIDType
+                            version: 0.0.1
+                          UUID: 6a8cc68e-dfc8-3403-9c6d-071c886b319c
+                          description: Generated description for concept referred to by
+                            key "UUIDType:0.0.1"
+                      - key:
+                          name: pmsh-operational-policy
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: pmsh-operational-policy
+                            version: 0.0.1
+                          UUID: fdf2c9ff-6422-3ea6-b6b6-49b12116265d
+                          description: Generated description for concept referred to by
+                            key "pmsh-operational-policy:0.0.1"
+                policies:
+                  key:
+                    name: PMControlPolicy_Policies
+                    version: 0.0.1
+                  policyMap:
+                    entry:
+                      - key:
+                          name: CDSCreateResponsePolicy
+                          version: 0.0.1
+                        value:
+                          policyKey:
+                            name: CDSCreateResponsePolicy
+                            version: 0.0.1
+                          template: Freestyle
+                          state:
+                            entry:
+                              - key: CDSCreateResponseState
+                                value:
+                                  stateKey:
+                                    parentKeyName: CDSCreateResponsePolicy
+                                    parentKeyVersion: 0.0.1
+                                    parentLocalName: 'NULL'
+                                    localName: CDSCreateResponseState
+                                  trigger:
+                                    name: CDSCreateResponseEvent
+                                    version: 0.0.1
+                                  stateOutputs:
+                                    entry:
+                                      - key: ResponseOutput
+                                        value:
+                                          key:
+                                            parentKeyName: CDSCreateResponsePolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: CDSCreateResponseState
+                                            localName: ResponseOutput
+                                          outgoingEvent:
+                                            name: CDSResponseStatusEvent
+                                            version: 0.0.1
+                                          outgoingEventReference:
+                                            - name: CDSResponseStatusEvent
+                                              version: 0.0.1
+                                          nextState:
+                                            parentKeyName: 'NULL'
+                                            parentKeyVersion: 0.0.0
+                                            parentLocalName: 'NULL'
+                                            localName: 'NULL'
+                                  contextAlbumReference: [ ]
+                                  taskSelectionLogic:
+                                    key: 'NULL'
+                                    logicFlavour: UNDEFINED
+                                    logic: ''
+                                  stateFinalizerLogicMap:
+                                    entry: [ ]
+                                  defaultTask:
+                                    name: CDSCreateResponseTask
+                                    version: 0.0.1
+                                  taskReferences:
+                                    entry:
+                                      - key:
+                                          name: CDSCreateResponseTask
+                                          version: 0.0.1
+                                        value:
+                                          key:
+                                            parentKeyName: CDSCreateResponsePolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: CDSCreateResponseState
+                                            localName: CDSCreateResponsePolicy
+                                          outputType: DIRECT
+                                          output:
+                                            parentKeyName: CDSCreateResponsePolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: CDSCreateResponseState
+                                            localName: ResponseOutput
+                          firstState: CDSCreateResponseState
+                      - key:
+                          name: CDSDeleteResponsePolicy
+                          version: 0.0.1
+                        value:
+                          policyKey:
+                            name: CDSDeleteResponsePolicy
+                            version: 0.0.1
+                          template: Freestyle
+                          state:
+                            entry:
+                              - key: CDSDeleteResponseState
+                                value:
+                                  stateKey:
+                                    parentKeyName: CDSDeleteResponsePolicy
+                                    parentKeyVersion: 0.0.1
+                                    parentLocalName: 'NULL'
+                                    localName: CDSDeleteResponseState
+                                  trigger:
+                                    name: CDSDeleteResponseEvent
+                                    version: 0.0.1
+                                  stateOutputs:
+                                    entry:
+                                      - key: ResponseOutput
+                                        value:
+                                          key:
+                                            parentKeyName: CDSDeleteResponsePolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: CDSDeleteResponseState
+                                            localName: ResponseOutput
+                                          outgoingEvent:
+                                            name: CDSResponseStatusEvent
+                                            version: 0.0.1
+                                          outgoingEventReference:
+                                            - name: CDSResponseStatusEvent
+                                              version: 0.0.1
+                                          nextState:
+                                            parentKeyName: 'NULL'
+                                            parentKeyVersion: 0.0.0
+                                            parentLocalName: 'NULL'
+                                            localName: 'NULL'
+                                  contextAlbumReference: [ ]
+                                  taskSelectionLogic:
+                                    key: 'NULL'
+                                    logicFlavour: UNDEFINED
+                                    logic: ''
+                                  stateFinalizerLogicMap:
+                                    entry: [ ]
+                                  defaultTask:
+                                    name: CDSDeleteResponseTask
+                                    version: 0.0.1
+                                  taskReferences:
+                                    entry:
+                                      - key:
+                                          name: CDSDeleteResponseTask
+                                          version: 0.0.1
+                                        value:
+                                          key:
+                                            parentKeyName: CDSDeleteResponsePolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: CDSDeleteResponseState
+                                            localName: CDSDeleteResponsePolicy
+                                          outputType: DIRECT
+                                          output:
+                                            parentKeyName: CDSDeleteResponsePolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: CDSDeleteResponseState
+                                            localName: ResponseOutput
+                          firstState: CDSDeleteResponseState
+                      - key:
+                          name: ReceiveEventPolicy
+                          version: 0.0.1
+                        value:
+                          policyKey:
+                            name: ReceiveEventPolicy
+                            version: 0.0.1
+                          template: Freestyle
+                          state:
+                            entry:
+                              - key: CreateOrDeleteState
+                                value:
+                                  stateKey:
+                                    parentKeyName: ReceiveEventPolicy
+                                    parentKeyVersion: 0.0.1
+                                    parentLocalName: 'NULL'
+                                    localName: CreateOrDeleteState
+                                  trigger:
+                                    name: PMSubscriptionOutputEvent
+                                    version: 0.0.1
+                                  stateOutputs:
+                                    entry:
+                                      - key: CreateSubscriptionPayload
+                                        value:
+                                          key:
+                                            parentKeyName: ReceiveEventPolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: CreateOrDeleteState
+                                            localName: CreateSubscriptionPayload
+                                          outgoingEvent:
+                                            name: CreateSubscriptionPayloadEvent
+                                            version: 0.0.1
+                                          outgoingEventReference:
+                                            - name: CreateSubscriptionPayloadEvent
+                                              version: 0.0.1
+                                          nextState:
+                                            parentKeyName: ReceiveEventPolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: 'NULL'
+                                            localName: CreateSubscription
+                                      - key: DeleteSubscriptionPayload
+                                        value:
+                                          key:
+                                            parentKeyName: ReceiveEventPolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: CreateOrDeleteState
+                                            localName: DeleteSubscriptionPayload
+                                          outgoingEvent:
+                                            name: DeleteSubscriptionPayloadEvent
+                                            version: 0.0.1
+                                          outgoingEventReference:
+                                            - name: DeleteSubscriptionPayloadEvent
+                                              version: 0.0.1
+                                          nextState:
+                                            parentKeyName: ReceiveEventPolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: 'NULL'
+                                            localName: DeleteSubscription
+                                  contextAlbumReference:
+                                    - name: PMSubscriptionAlbum
+                                      version: 0.0.1
+                                  taskSelectionLogic:
+                                    key: TaskSelectionLogic
+                                    logicFlavour: JAVASCRIPT
+                                    logic: |-
+                                      /*
+                                       * ============LICENSE_START=======================================================
+                                       *  Copyright (C) 2020 Nordix. 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=========================================================
+                                       */
+                                      executor.logger.info(executor.subject.id);
+                                      var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(executor.inFields.get("albumID").toString())
+                                      var changeType = pmSubscriptionInfo.get("changeType").toString()
+                                      executor.logger.info("Change Type is " + changeType)
+                                      if ("CREATE".equals(changeType)) {
+                                          executor.logger.info("Choosing to create a subscription")
+                                          executor.subject.getTaskKey("CreateSubscriptionPayloadTask").copyTo(executor.selectedTask);
+                                      }
+                                      else if ("DELETE".equals(changeType)) {
+                                          executor.logger.info("Choosing to delete a subscription")
+                                          executor.subject.getTaskKey("DeleteSubscriptionPayloadTask").copyTo(executor.selectedTask);
+                                      }
+                                      returnValue = executor.isTrue;
+                                      true;
+                                  stateFinalizerLogicMap:
+                                    entry: [ ]
+                                  defaultTask:
+                                    name: CreateSubscriptionPayloadTask
+                                    version: 0.0.1
+                                  taskReferences:
+                                    entry:
+                                      - key:
+                                          name: CreateSubscriptionPayloadTask
+                                          version: 0.0.1
+                                        value:
+                                          key:
+                                            parentKeyName: ReceiveEventPolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: CreateOrDeleteState
+                                            localName: ReceiveEventPolicy
+                                          outputType: DIRECT
+                                          output:
+                                            parentKeyName: ReceiveEventPolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: CreateOrDeleteState
+                                            localName: CreateSubscriptionPayload
+                                      - key:
+                                          name: DeleteSubscriptionPayloadTask
+                                          version: 0.0.1
+                                        value:
+                                          key:
+                                            parentKeyName: ReceiveEventPolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: CreateOrDeleteState
+                                            localName: ReceiveEventPolicy
+                                          outputType: DIRECT
+                                          output:
+                                            parentKeyName: ReceiveEventPolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: CreateOrDeleteState
+                                            localName: DeleteSubscriptionPayload
+                              - key: CreateSubscription
+                                value:
+                                  stateKey:
+                                    parentKeyName: ReceiveEventPolicy
+                                    parentKeyVersion: 0.0.1
+                                    parentLocalName: 'NULL'
+                                    localName: CreateSubscription
+                                  trigger:
+                                    name: CreateSubscriptionPayloadEvent
+                                    version: 0.0.1
+                                  stateOutputs:
+                                    entry:
+                                      - key: IssueCreateSubscriptionRequestOutput
+                                        value:
+                                          key:
+                                            parentKeyName: ReceiveEventPolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: CreateSubscription
+                                            localName: IssueCreateSubscriptionRequestOutput
+                                          outgoingEvent:
+                                            name: CDSCreateSubscriptionRequestEvent
+                                            version: 0.0.1
+                                          outgoingEventReference:
+                                            - name: CDSCreateSubscriptionRequestEvent
+                                              version: 0.0.1
+                                          nextState:
+                                            parentKeyName: 'NULL'
+                                            parentKeyVersion: 0.0.0
+                                            parentLocalName: 'NULL'
+                                            localName: 'NULL'
+                                  contextAlbumReference:
+                                    - name: PMSubscriptionAlbum
+                                      version: 0.0.1
+                                  taskSelectionLogic:
+                                    key: 'NULL'
+                                    logicFlavour: UNDEFINED
+                                    logic: ''
+                                  stateFinalizerLogicMap:
+                                    entry: [ ]
+                                  defaultTask:
+                                    name: CreateSubscriptionRequestTask
+                                    version: 0.0.1
+                                  taskReferences:
+                                    entry:
+                                      - key:
+                                          name: CreateSubscriptionRequestTask
+                                          version: 0.0.1
+                                        value:
+                                          key:
+                                            parentKeyName: ReceiveEventPolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: CreateSubscription
+                                            localName: ReceiveEventPolicy
+                                          outputType: DIRECT
+                                          output:
+                                            parentKeyName: ReceiveEventPolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: CreateSubscription
+                                            localName: IssueCreateSubscriptionRequestOutput
+                              - key: DeleteSubscription
+                                value:
+                                  stateKey:
+                                    parentKeyName: ReceiveEventPolicy
+                                    parentKeyVersion: 0.0.1
+                                    parentLocalName: 'NULL'
+                                    localName: DeleteSubscription
+                                  trigger:
+                                    name: DeleteSubscriptionPayloadEvent
+                                    version: 0.0.1
+                                  stateOutputs:
+                                    entry:
+                                      - key: IssueDeleteSubscriptionRequestOutput
+                                        value:
+                                          key:
+                                            parentKeyName: ReceiveEventPolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: DeleteSubscription
+                                            localName: IssueDeleteSubscriptionRequestOutput
+                                          outgoingEvent:
+                                            name: CDSDeleteSubscriptionRequestEvent
+                                            version: 0.0.1
+                                          outgoingEventReference:
+                                            - name: CDSDeleteSubscriptionRequestEvent
+                                              version: 0.0.1
+                                          nextState:
+                                            parentKeyName: 'NULL'
+                                            parentKeyVersion: 0.0.0
+                                            parentLocalName: 'NULL'
+                                            localName: 'NULL'
+                                  contextAlbumReference:
+                                    - name: PMSubscriptionAlbum
+                                      version: 0.0.1
+                                  taskSelectionLogic:
+                                    key: 'NULL'
+                                    logicFlavour: UNDEFINED
+                                    logic: ''
+                                  stateFinalizerLogicMap:
+                                    entry: [ ]
+                                  defaultTask:
+                                    name: DeleteSubscriptionRequestTask
+                                    version: 0.0.1
+                                  taskReferences:
+                                    entry:
+                                      - key:
+                                          name: DeleteSubscriptionRequestTask
+                                          version: 0.0.1
+                                        value:
+                                          key:
+                                            parentKeyName: ReceiveEventPolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: DeleteSubscription
+                                            localName: ReceiveEventPolicy
+                                          outputType: DIRECT
+                                          output:
+                                            parentKeyName: ReceiveEventPolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: DeleteSubscription
+                                            localName: IssueDeleteSubscriptionRequestOutput
+                              - key: ReceiveSubscriptionState
+                                value:
+                                  stateKey:
+                                    parentKeyName: ReceiveEventPolicy
+                                    parentKeyVersion: 0.0.1
+                                    parentLocalName: 'NULL'
+                                    localName: ReceiveSubscriptionState
+                                  trigger:
+                                    name: pmsh-operational-policy
+                                    version: 0.0.1
+                                  stateOutputs:
+                                    entry:
+                                      - key: ReceivePMSubscriptionOutput
+                                        value:
+                                          key:
+                                            parentKeyName: ReceiveEventPolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: ReceiveSubscriptionState
+                                            localName: ReceivePMSubscriptionOutput
+                                          outgoingEvent:
+                                            name: PMSubscriptionOutputEvent
+                                            version: 0.0.1
+                                          outgoingEventReference:
+                                            - name: PMSubscriptionOutputEvent
+                                              version: 0.0.1
+                                          nextState:
+                                            parentKeyName: ReceiveEventPolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: 'NULL'
+                                            localName: CreateOrDeleteState
+                                  contextAlbumReference:
+                                    - name: PMSubscriptionAlbum
+                                      version: 0.0.1
+                                  taskSelectionLogic:
+                                    key: 'NULL'
+                                    logicFlavour: UNDEFINED
+                                    logic: ''
+                                  stateFinalizerLogicMap:
+                                    entry: [ ]
+                                  defaultTask:
+                                    name: ReceiveSubscriptionTask
+                                    version: 0.0.1
+                                  taskReferences:
+                                    entry:
+                                      - key:
+                                          name: ReceiveSubscriptionTask
+                                          version: 0.0.1
+                                        value:
+                                          key:
+                                            parentKeyName: ReceiveEventPolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: ReceiveSubscriptionState
+                                            localName: ReceiveEventPolicy
+                                          outputType: DIRECT
+                                          output:
+                                            parentKeyName: ReceiveEventPolicy
+                                            parentKeyVersion: 0.0.1
+                                            parentLocalName: ReceiveSubscriptionState
+                                            localName: ReceivePMSubscriptionOutput
+                          firstState: ReceiveSubscriptionState
+                tasks:
+                  key:
+                    name: PMControlPolicy_Tasks
+                    version: 0.0.1
+                  taskMap:
+                    entry:
+                      - key:
+                          name: CDSCreateResponseTask
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSCreateResponseTask
+                            version: 0.0.1
+                          inputEvent:
+                            key:
+                              name: CDSCreateResponseEvent
+                              version: 0.0.1
+                            nameSpace: org.onap.policy.apex.onap.pmcontrol
+                            source: CDS
+                            target: APEX
+                            parameter:
+                              entry:
+                                - key: actionIdentifiers
+                                  value:
+                                    key: actionIdentifiers
+                                    fieldSchemaKey:
+                                      name: CDSActionIdentifiersType
+                                      version: 0.0.1
+                                    optional: false
+                                - key: commonHeader
+                                  value:
+                                    key: commonHeader
+                                    fieldSchemaKey:
+                                      name: CDSResponseCommonHeaderType
+                                      version: 0.0.1
+                                    optional: false
+                                - key: payload
+                                  value:
+                                    key: payload
+                                    fieldSchemaKey:
+                                      name: CDSCreateResponsePayloadType
+                                      version: 0.0.1
+                                    optional: false
+                                - key: status
+                                  value:
+                                    key: status
+                                    fieldSchemaKey:
+                                      name: CDSResponseStatusType
+                                      version: 0.0.1
+                                    optional: false
+                          outputEvents:
+                            entry:
+                              - key: CDSResponseStatusEvent
+                                value:
+                                  key:
+                                    name: CDSResponseStatusEvent
+                                    version: 0.0.1
+                                  nameSpace: org.onap.policy.apex.onap.pmcontrol
+                                  source: APEX
+                                  target: DCAE
+                                  parameter:
+                                    entry:
+                                      - key: status
+                                        value:
+                                          key: status
+                                          fieldSchemaKey:
+                                            name: SubscriptionStatusType
+                                            version: 0.0.1
+                                          optional: false
+                          taskParameters:
+                            entry: [ ]
+                          contextAlbumReference:
+                            - name: PMSubscriptionAlbum
+                              version: 0.0.1
+                          taskLogic:
+                            key: TaskLogic
+                            logicFlavour: JAVASCRIPT
+                            logic: |-
+                              /*
+                               * ============LICENSE_START=======================================================
+                               *  Copyright (C) 2020 Nordix. 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=========================================================
+                               */
+                              executor.logger.info(executor.subject.id);
+                              var commonHeader = executor.inFields.get("commonHeader")
+                              var response = executor.inFields.get("payload")
+                              var albumID = commonHeader.get("requestId")
+                              var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(albumID.toString());
+                              var responseStatus = executor.subject.getOutFieldSchemaHelper("status").createNewInstance();
+                              var changeType = pmSubscriptionInfo.get("changeType").toUpperCase()
+                              responseStatus.put("nfName", pmSubscriptionInfo.get("nfName"))
+                              responseStatus.put("changeType", pmSubscriptionInfo.get("changeType"))
+                              if ("CREATE".equals(changeType)) {
+                                  responseStatus.put("subscriptionName", pmSubscriptionInfo.get("subscription").get("subscriptionName"))
+                                  responseStatus.put("measurementGroupName", pmSubscriptionInfo.get("subscription").get("measurementGroup").get("measurementGroupName"))
+                              }
+                              else if ("DELETE".equals(changeType)) {
+                                  responseStatus.put("subscriptionName", pmSubscriptionInfo.get("subscriptionName"))
+                                  responseStatus.put("measurementGroupName", pmSubscriptionInfo.get("measurementGroupName"))
+                              }
+                              var status = response.get(pmSubscriptionInfo.get("changeType").toLowerCase() + "_DasH_subscription_DasH_response").get("odl_DasH_response").get("status")
+                              executor.logger.info("RESPONSE STATUS = " + status)
+                              if(status == "success") {
+                                  responseStatus.put("message", "success")
+                              } else {
+                                  responseStatus.put("message", "failed")
+                              }
+                              executor.outFields.put("status", responseStatus)
+                              returnValue = executor.isTrue;
+                              true;
+                      - key:
+                          name: CDSDeleteResponseTask
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSDeleteResponseTask
+                            version: 0.0.1
+                          inputEvent:
+                            key:
+                              name: CDSDeleteResponseEvent
+                              version: 0.0.1
+                            nameSpace: org.onap.policy.apex.onap.pmcontrol
+                            source: CDS
+                            target: APEX
+                            parameter:
+                              entry:
+                                - key: actionIdentifiers
+                                  value:
+                                    key: actionIdentifiers
+                                    fieldSchemaKey:
+                                      name: CDSActionIdentifiersType
+                                      version: 0.0.1
+                                    optional: false
+                                - key: commonHeader
+                                  value:
+                                    key: commonHeader
+                                    fieldSchemaKey:
+                                      name: CDSResponseCommonHeaderType
+                                      version: 0.0.1
+                                    optional: false
+                                - key: payload
+                                  value:
+                                    key: payload
+                                    fieldSchemaKey:
+                                      name: CDSDeleteResponsePayloadType
+                                      version: 0.0.1
+                                    optional: false
+                                - key: status
+                                  value:
+                                    key: status
+                                    fieldSchemaKey:
+                                      name: CDSResponseStatusType
+                                      version: 0.0.1
+                                    optional: false
+                          outputEvents:
+                            entry:
+                              - key: CDSResponseStatusEvent
+                                value:
+                                  key:
+                                    name: CDSResponseStatusEvent
+                                    version: 0.0.1
+                                  nameSpace: org.onap.policy.apex.onap.pmcontrol
+                                  source: APEX
+                                  target: DCAE
+                                  parameter:
+                                    entry:
+                                      - key: status
+                                        value:
+                                          key: status
+                                          fieldSchemaKey:
+                                            name: SubscriptionStatusType
+                                            version: 0.0.1
+                                          optional: false
+                          taskParameters:
+                            entry: [ ]
+                          contextAlbumReference:
+                            - name: PMSubscriptionAlbum
+                              version: 0.0.1
+                          taskLogic:
+                            key: TaskLogic
+                            logicFlavour: JAVASCRIPT
+                            logic: |-
+                              /*
+                               * ============LICENSE_START=======================================================
+                               *  Copyright (C) 2020 Nordix. 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=========================================================
+                               */
+                              executor.logger.info(executor.subject.id);
+                              var commonHeader = executor.inFields.get("commonHeader")
+                              var response = executor.inFields.get("payload")
+                              var albumID = commonHeader.get("requestId")
+                              var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(albumID.toString());
+                              var responseStatus = executor.subject.getOutFieldSchemaHelper("status").createNewInstance();
+                              var changeType = pmSubscriptionInfo.get("changeType").toUpperCase()
+                              responseStatus.put("nfName", pmSubscriptionInfo.get("nfName"))
+                              responseStatus.put("changeType", pmSubscriptionInfo.get("changeType"))
+                              if ("CREATE".equals(changeType)) {
+                                  responseStatus.put("subscriptionName", pmSubscriptionInfo.get("subscription").get("subscriptionName"))
+                                  responseStatus.put("measurementGroupName", pmSubscriptionInfo.get("subscription").get("measurementGroup").get("measurementGroupName"))
+                              }
+                              else if ("DELETE".equals(changeType)) {
+                                  responseStatus.put("subscriptionName", pmSubscriptionInfo.get("subscriptionName"))
+                                  responseStatus.put("measurementGroupName", pmSubscriptionInfo.get("measurementGroupName"))
+                              }
+                              var status = response.get(pmSubscriptionInfo.get("changeType").toLowerCase() + "_DasH_subscription_DasH_response").get("odl_DasH_response").get("status")
+                              executor.logger.info("RESPONSE STATUS = " + status)
+                              if(status == "success") {
+                                  responseStatus.put("message", "success")
+                              } else {
+                                  responseStatus.put("message", "failed")
+                              }
+                              executor.outFields.put("status", responseStatus)
+                              returnValue = executor.isTrue;
+                              true;
+                      - key:
+                          name: CreateSubscriptionPayloadTask
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CreateSubscriptionPayloadTask
+                            version: 0.0.1
+                          inputEvent:
+                            key:
+                              name: PMSubscriptionOutputEvent
+                              version: 0.0.1
+                            nameSpace: org.onap.policy.apex.onap.pmcontrol
+                            source: APEX
+                            target: APEX
+                            parameter:
+                              entry:
+                                - key: albumID
+                                  value:
+                                    key: albumID
+                                    fieldSchemaKey:
+                                      name: UUIDType
+                                      version: 0.0.1
+                                    optional: false
+                          outputEvents:
+                            entry:
+                              - key: CreateSubscriptionPayloadEvent
+                                value:
+                                  key:
+                                    name: CreateSubscriptionPayloadEvent
+                                    version: 0.0.1
+                                  nameSpace: org.onap.policy.apex.onap.pmcontrol
+                                  source: APEX
+                                  target: APEX
+                                  parameter:
+                                    entry:
+                                      - key: albumID
+                                        value:
+                                          key: albumID
+                                          fieldSchemaKey:
+                                            name: UUIDType
+                                            version: 0.0.1
+                                          optional: false
+                                      - key: payload
+                                        value:
+                                          key: payload
+                                          fieldSchemaKey:
+                                            name: CDSCreateSubscriptionPayloadType
+                                            version: 0.0.1
+                                          optional: false
+                          taskParameters:
+                            entry: [ ]
+                          contextAlbumReference:
+                            - name: PMSubscriptionAlbum
+                              version: 0.0.1
+                          taskLogic:
+                            key: TaskLogic
+                            logicFlavour: JAVASCRIPT
+                            logic: |-
+                              /*
+                               * ============LICENSE_START=======================================================
+                               *  Copyright (C) 2020 Nordix. 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=========================================================
+                               */
+                              executor.logger.info(executor.subject.id);
+                              var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(executor.inFields.get("albumID").toString())
+                              var changeType = pmSubscriptionInfo.get("changeType").toLowerCase()
+                              var payloadProperties = executor.subject.getOutFieldSchemaHelper("payload").createNewSubInstance(changeType + "_DasH_subscription_DasH_properties_record");
+                              payloadProperties.put("nfName",  pmSubscriptionInfo.get("nfName"))
+                              payloadProperties.put("ipAddress", pmSubscriptionInfo.get("ipAddress"))
+                              if ("create".equals(changeType)) {
+                                  payloadProperties.put("subscriptionName",  pmSubscriptionInfo.get("subscription").get("subscriptionName"))
+                                  payloadProperties.put("fileBasedGP",  pmSubscriptionInfo.get("subscription").get("fileBasedGP").toString())
+                                  payloadProperties.put("fileLocation", pmSubscriptionInfo.get("subscription").get("fileLocation"))
+                                  payloadProperties.put("measurementGroup", pmSubscriptionInfo.get("subscription").get("measurementGroup"))
+                              }
+                              else if ("delete".equals(changeType)) {
+                                  payloadProperties.put("subscriptionName", pmSubscriptionInfo.get("subscriptionName"))
+                                  payloadProperties.put("measurementGroupName", pmSubscriptionInfo.get("measurementGroupName"))
+                              }
+                              var payloadEntry = executor.subject.getOutFieldSchemaHelper("payload").createNewSubInstance("CDSRequestPayloadEntry");
+                              payloadEntry.put(changeType + "_DasH_subscription_DasH_properties", payloadProperties)
+                              var payload = executor.subject.getOutFieldSchemaHelper("payload").createNewInstance();
+                              payload.put(changeType + "_DasH_subscription_DasH_request", payloadEntry);
+                              executor.outFields.put("albumID", executor.inFields.get("albumID"))
+                              executor.outFields.put("payload", payload);
+                              returnValue = executor.isTrue;
+                              true;
+                      - key:
+                          name: CreateSubscriptionRequestTask
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CreateSubscriptionRequestTask
+                            version: 0.0.1
+                          inputEvent:
+                            key:
+                              name: CreateSubscriptionPayloadEvent
+                              version: 0.0.1
+                            nameSpace: org.onap.policy.apex.onap.pmcontrol
+                            source: APEX
+                            target: APEX
+                            parameter:
+                              entry:
+                                - key: albumID
+                                  value:
+                                    key: albumID
+                                    fieldSchemaKey:
+                                      name: UUIDType
+                                      version: 0.0.1
+                                    optional: false
+                                - key: payload
+                                  value:
+                                    key: payload
+                                    fieldSchemaKey:
+                                      name: CDSCreateSubscriptionPayloadType
+                                      version: 0.0.1
+                                    optional: false
+                          outputEvents:
+                            entry:
+                              - key: CDSCreateSubscriptionRequestEvent
+                                value:
+                                  key:
+                                    name: CDSCreateSubscriptionRequestEvent
+                                    version: 0.0.1
+                                  nameSpace: org.onap.policy.apex.onap.pmcontrol
+                                  source: APEX
+                                  target: APEX
+                                  parameter:
+                                    entry:
+                                      - key: actionIdentifiers
+                                        value:
+                                          key: actionIdentifiers
+                                          fieldSchemaKey:
+                                            name: CDSActionIdentifiersType
+                                            version: 0.0.1
+                                          optional: false
+                                      - key: commonHeader
+                                        value:
+                                          key: commonHeader
+                                          fieldSchemaKey:
+                                            name: CDSRequestCommonHeaderType
+                                            version: 0.0.1
+                                          optional: false
+                                      - key: payload
+                                        value:
+                                          key: payload
+                                          fieldSchemaKey:
+                                            name: CDSCreateSubscriptionPayloadType
+                                            version: 0.0.1
+                                          optional: false
+                          taskParameters:
+                            entry: [ ]
+                          contextAlbumReference:
+                            - name: PMSubscriptionAlbum
+                              version: 0.0.1
+                          taskLogic:
+                            key: TaskLogic
+                            logicFlavour: JAVASCRIPT
+                            logic: |-
+                              /*
+                               * ============LICENSE_START=======================================================
+                               *  Copyright (C) 2020 Nordix. 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=========================================================
+                               */
+                              executor.logger.info(executor.subject.id);
+                              var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(executor.inFields.get("albumID").toString())
+                              executor.logger.info(pmSubscriptionInfo)
+                              var changeType = pmSubscriptionInfo.get("changeType").toLowerCase()
+                              var blueprintName = pmSubscriptionInfo.get("blueprintName").toLowerCase()
+                              var blueprintVersion = pmSubscriptionInfo.get("blueprintVersion").toLowerCase()
+                              var payload = executor.inFields.get("payload")
+                              var actionName = changeType + "-subscription"
+                              var commonHeader = executor.subject.getOutFieldSchemaHelper("commonHeader").createNewInstance();
+                              commonHeader.put("originatorId", "sdnc");
+                              commonHeader.put("requestId", executor.inFields.get("albumID").toString());
+                              commonHeader.put("subRequestId", "sub-123456-1000");
+                              var actionIdentifiers = executor.subject.getOutFieldSchemaHelper("actionIdentifiers").createNewInstance();
+                              actionIdentifiers.put("actionName", actionName);
+                              actionIdentifiers.put("blueprintName", blueprintName);
+                              actionIdentifiers.put("blueprintVersion", blueprintVersion);
+                              actionIdentifiers.put("mode", "sync");
+                              executor.outFields.put("commonHeader", commonHeader);
+                              executor.outFields.put("actionIdentifiers", actionIdentifiers);
+                              executor.outFields.put("payload", payload);
+                              returnValue = executor.isTrue;
+                              true;
+                      - key:
+                          name: DeleteSubscriptionPayloadTask
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: DeleteSubscriptionPayloadTask
+                            version: 0.0.1
+                          inputEvent:
+                            key:
+                              name: PMSubscriptionOutputEvent
+                              version: 0.0.1
+                            nameSpace: org.onap.policy.apex.onap.pmcontrol
+                            source: APEX
+                            target: APEX
+                            parameter:
+                              entry:
+                                - key: albumID
+                                  value:
+                                    key: albumID
+                                    fieldSchemaKey:
+                                      name: UUIDType
+                                      version: 0.0.1
+                                    optional: false
+                          outputEvents:
+                            entry:
+                              - key: DeleteSubscriptionPayloadEvent
+                                value:
+                                  key:
+                                    name: DeleteSubscriptionPayloadEvent
+                                    version: 0.0.1
+                                  nameSpace: org.onap.policy.apex.onap.pmcontrol
+                                  source: APEX
+                                  target: APEX
+                                  parameter:
+                                    entry:
+                                      - key: albumID
+                                        value:
+                                          key: albumID
+                                          fieldSchemaKey:
+                                            name: UUIDType
+                                            version: 0.0.1
+                                          optional: false
+                                      - key: payload
+                                        value:
+                                          key: payload
+                                          fieldSchemaKey:
+                                            name: CDSDeleteSubscriptionPayloadType
+                                            version: 0.0.1
+                                          optional: false
+                          taskParameters:
+                            entry: [ ]
+                          contextAlbumReference:
+                            - name: PMSubscriptionAlbum
+                              version: 0.0.1
+                          taskLogic:
+                            key: TaskLogic
+                            logicFlavour: JAVASCRIPT
+                            logic: |-
+                              /*
+                               * ============LICENSE_START=======================================================
+                               *  Copyright (C) 2020 Nordix. 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=========================================================
+                               */
+                              executor.logger.info(executor.subject.id);
+                              var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(executor.inFields.get("albumID").toString())
+                              var changeType = pmSubscriptionInfo.get("changeType").toLowerCase()
+                              var payloadProperties = executor.subject.getOutFieldSchemaHelper("payload").createNewSubInstance(changeType + "_DasH_subscription_DasH_properties_record");
+                              payloadProperties.put("nfName",  pmSubscriptionInfo.get("nfName"))
+                              payloadProperties.put("ipAddress", pmSubscriptionInfo.get("ipAddress"))
+                              if ("create".equals(changeType)) {
+                                  payloadProperties.put("subscriptionName",  pmSubscriptionInfo.get("subscription").get("subscriptionName"))
+                                  payloadProperties.put("fileBasedGP",  pmSubscriptionInfo.get("subscription").get("fileBasedGP").toString())
+                                  payloadProperties.put("fileLocation", pmSubscriptionInfo.get("subscription").get("fileLocation"))
+                                  payloadProperties.put("measurementGroup", pmSubscriptionInfo.get("subscription").get("measurementGroup"))
+                              }
+                              else if ("delete".equals(changeType)) {
+                                  payloadProperties.put("subscriptionName", pmSubscriptionInfo.get("subscriptionName"))
+                                  payloadProperties.put("measurementGroupName", pmSubscriptionInfo.get("measurementGroupName"))
+                              }
+                              var payloadEntry = executor.subject.getOutFieldSchemaHelper("payload").createNewSubInstance("CDSRequestPayloadEntry");
+                              payloadEntry.put(changeType + "_DasH_subscription_DasH_properties", payloadProperties)
+                              var payload = executor.subject.getOutFieldSchemaHelper("payload").createNewInstance();
+                              payload.put(changeType + "_DasH_subscription_DasH_request", payloadEntry);
+                              executor.outFields.put("albumID", executor.inFields.get("albumID"))
+                              executor.outFields.put("payload", payload);
+                              returnValue = executor.isTrue;
+                              true;
+                      - key:
+                          name: DeleteSubscriptionRequestTask
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: DeleteSubscriptionRequestTask
+                            version: 0.0.1
+                          inputEvent:
+                            key:
+                              name: DeleteSubscriptionPayloadEvent
+                              version: 0.0.1
+                            nameSpace: org.onap.policy.apex.onap.pmcontrol
+                            source: APEX
+                            target: APEX
+                            parameter:
+                              entry:
+                                - key: albumID
+                                  value:
+                                    key: albumID
+                                    fieldSchemaKey:
+                                      name: UUIDType
+                                      version: 0.0.1
+                                    optional: false
+                                - key: payload
+                                  value:
+                                    key: payload
+                                    fieldSchemaKey:
+                                      name: CDSDeleteSubscriptionPayloadType
+                                      version: 0.0.1
+                                    optional: false
+                          outputEvents:
+                            entry:
+                              - key: CDSDeleteSubscriptionRequestEvent
+                                value:
+                                  key:
+                                    name: CDSDeleteSubscriptionRequestEvent
+                                    version: 0.0.1
+                                  nameSpace: org.onap.policy.apex.onap.pmcontrol
+                                  source: APEX
+                                  target: APEX
+                                  parameter:
+                                    entry:
+                                      - key: actionIdentifiers
+                                        value:
+                                          key: actionIdentifiers
+                                          fieldSchemaKey:
+                                            name: CDSActionIdentifiersType
+                                            version: 0.0.1
+                                          optional: false
+                                      - key: commonHeader
+                                        value:
+                                          key: commonHeader
+                                          fieldSchemaKey:
+                                            name: CDSRequestCommonHeaderType
+                                            version: 0.0.1
+                                          optional: false
+                                      - key: payload
+                                        value:
+                                          key: payload
+                                          fieldSchemaKey:
+                                            name: CDSDeleteSubscriptionPayloadType
+                                            version: 0.0.1
+                                          optional: false
+                          taskParameters:
+                            entry: [ ]
+                          contextAlbumReference:
+                            - name: PMSubscriptionAlbum
+                              version: 0.0.1
+                          taskLogic:
+                            key: TaskLogic
+                            logicFlavour: JAVASCRIPT
+                            logic: |-
+                              /*
+                               * ============LICENSE_START=======================================================
+                               *  Copyright (C) 2020 Nordix. 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=========================================================
+                               */
+                              executor.logger.info(executor.subject.id);
+                              var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").get(executor.inFields.get("albumID").toString())
+                              executor.logger.info(pmSubscriptionInfo)
+                              var changeType = pmSubscriptionInfo.get("changeType").toLowerCase()
+                              var blueprintName = pmSubscriptionInfo.get("blueprintName").toLowerCase()
+                              var blueprintVersion = pmSubscriptionInfo.get("blueprintVersion").toLowerCase()
+                              var payload = executor.inFields.get("payload")
+                              var actionName = changeType + "-subscription"
+                              var commonHeader = executor.subject.getOutFieldSchemaHelper("commonHeader").createNewInstance();
+                              commonHeader.put("originatorId", "sdnc");
+                              commonHeader.put("requestId", executor.inFields.get("albumID").toString());
+                              commonHeader.put("subRequestId", "sub-123456-1000");
+                              var actionIdentifiers = executor.subject.getOutFieldSchemaHelper("actionIdentifiers").createNewInstance();
+                              actionIdentifiers.put("actionName", actionName);
+                              actionIdentifiers.put("blueprintName", blueprintName);
+                              actionIdentifiers.put("blueprintVersion", blueprintVersion);
+                              actionIdentifiers.put("mode", "sync");
+                              executor.outFields.put("commonHeader", commonHeader);
+                              executor.outFields.put("actionIdentifiers", actionIdentifiers);
+                              executor.outFields.put("payload", payload);
+                              returnValue = executor.isTrue;
+                              true;
+                      - key:
+                          name: ReceiveSubscriptionTask
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: ReceiveSubscriptionTask
+                            version: 0.0.1
+                          inputEvent:
+                            key:
+                              name: pmsh-operational-policy
+                              version: 0.0.1
+                            nameSpace: org.onap.policy.apex.onap.pmcontrol
+                            source: DCAE
+                            target: APEX
+                            parameter:
+                              entry:
+                                - key: blueprintName
+                                  value:
+                                    key: blueprintName
+                                    fieldSchemaKey:
+                                      name: SimpleStringType
+                                      version: 0.0.1
+                                    optional: false
+                                - key: blueprintVersion
+                                  value:
+                                    key: blueprintVersion
+                                    fieldSchemaKey:
+                                      name: SimpleStringType
+                                      version: 0.0.1
+                                    optional: false
+                                - key: changeType
+                                  value:
+                                    key: changeType
+                                    fieldSchemaKey:
+                                      name: SimpleStringType
+                                      version: 0.0.1
+                                    optional: false
+                                - key: controlLoopName
+                                  value:
+                                    key: controlLoopName
+                                    fieldSchemaKey:
+                                      name: SimpleStringType
+                                      version: 0.0.1
+                                    optional: false
+                                - key: ipAddress
+                                  value:
+                                    key: ipAddress
+                                    fieldSchemaKey:
+                                      name: SimpleStringType
+                                      version: 0.0.1
+                                    optional: false
+                                - key: measurementGroupName
+                                  value:
+                                    key: measurementGroupName
+                                    fieldSchemaKey:
+                                      name: SimpleStringType
+                                      version: 0.0.1
+                                    optional: true
+                                - key: nfName
+                                  value:
+                                    key: nfName
+                                    fieldSchemaKey:
+                                      name: SimpleStringType
+                                      version: 0.0.1
+                                    optional: false
+                                - key: operationalPolicyName
+                                  value:
+                                    key: operationalPolicyName
+                                    fieldSchemaKey:
+                                      name: SimpleStringType
+                                      version: 0.0.1
+                                    optional: false
+                                - key: subscription
+                                  value:
+                                    key: subscription
+                                    fieldSchemaKey:
+                                      name: SubscriptionType
+                                      version: 0.0.1
+                                    optional: true
+                                - key: subscriptionName
+                                  value:
+                                    key: subscriptionName
+                                    fieldSchemaKey:
+                                      name: SimpleStringType
+                                      version: 0.0.1
+                                    optional: true
+                          outputEvents:
+                            entry:
+                              - key: PMSubscriptionOutputEvent
+                                value:
+                                  key:
+                                    name: PMSubscriptionOutputEvent
+                                    version: 0.0.1
+                                  nameSpace: org.onap.policy.apex.onap.pmcontrol
+                                  source: APEX
+                                  target: APEX
+                                  parameter:
+                                    entry:
+                                      - key: albumID
+                                        value:
+                                          key: albumID
+                                          fieldSchemaKey:
+                                            name: UUIDType
+                                            version: 0.0.1
+                                          optional: false
+                          taskParameters:
+                            entry: [ ]
+                          contextAlbumReference:
+                            - name: PMSubscriptionAlbum
+                              version: 0.0.1
+                          taskLogic:
+                            key: TaskLogic
+                            logicFlavour: JAVASCRIPT
+                            logic: |-
+                              /*
+                               * ============LICENSE_START=======================================================
+                               *  Copyright (C) 2020 Nordix. 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=========================================================
+                               */
+                              var uuidType = java.util.UUID;
+                              executor.logger.info(executor.subject.id);
+                              //albumID will be used to fetch info from our album later
+                              var albumID = uuidType.randomUUID();
+                              var pmSubscriptionInfo = executor.getContextAlbum("PMSubscriptionAlbum").getSchemaHelper().createNewInstance();
+                              var returnValue = true;
+                              if(executor.inFields.get("operationalPolicyName") != null) {
+                                  executor.logger.info("nfName in receive sub event " + executor.inFields.get("nfName"));
+                                  var changeType = executor.inFields.get("changeType")
+                                  var nfName = executor.inFields.get("nfName")
+                                  var ipAddress = executor.inFields.get("ipAddress")
+                                  var operationalPolicyName = executor.inFields.get("operationalPolicyName")
+                                  var controlLoopName = executor.inFields.get("controlLoopName")
+                                  var subscription = executor.inFields.get("subscription")
+                                  var blueprintName = executor.inFields.get("blueprintName")
+                                  var blueprintVersion = executor.inFields.get("blueprintVersion")
+                                  pmSubscriptionInfo.put("nfName", executor.inFields.get("nfName"));
+                                  pmSubscriptionInfo.put("ipAddress", executor.inFields.get("ipAddress"));
+                                  pmSubscriptionInfo.put("changeType", executor.inFields.get("changeType"))
+                                  pmSubscriptionInfo.put("operationalPolicyName", executor.inFields.get("operationalPolicyName"))
+                                  pmSubscriptionInfo.put("controlLoopName", executor.inFields.get("controlLoopName"))
+                                  pmSubscriptionInfo.put("subscription", subscription)
+                                  pmSubscriptionInfo.put("blueprintName", blueprintName)
+                                  pmSubscriptionInfo.put("blueprintVersion", blueprintVersion)
+                                  if ("delete".equals(changeType.toLowerCase())) {
+                                      pmSubscriptionInfo.put("subscriptionName",  executor.inFields.get("subscriptionName"))
+                                      pmSubscriptionInfo.put("measurementGroupName",  executor.inFields.get("measurementGroupName"))
+                                  }
+                                  executor.getContextAlbum("PMSubscriptionAlbum").put(albumID.toString(), pmSubscriptionInfo);
+                                  executor.outFields.put("albumID", albumID)
+                              } else {
+                                  executor.message = "Received invalid event"
+                                  returnValue = false;
+                              }
+                              returnValue;
+                events:
+                  key:
+                    name: PMControlPolicy_Events
+                    version: 0.0.1
+                  eventMap:
+                    entry:
+                      - key:
+                          name: CDSCreateResponseEvent
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSCreateResponseEvent
+                            version: 0.0.1
+                          nameSpace: org.onap.policy.apex.onap.pmcontrol
+                          source: CDS
+                          target: APEX
+                          parameter:
+                            entry:
+                              - key: actionIdentifiers
+                                value:
+                                  key: actionIdentifiers
+                                  fieldSchemaKey:
+                                    name: CDSActionIdentifiersType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: commonHeader
+                                value:
+                                  key: commonHeader
+                                  fieldSchemaKey:
+                                    name: CDSResponseCommonHeaderType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: payload
+                                value:
+                                  key: payload
+                                  fieldSchemaKey:
+                                    name: CDSCreateResponsePayloadType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: status
+                                value:
+                                  key: status
+                                  fieldSchemaKey:
+                                    name: CDSResponseStatusType
+                                    version: 0.0.1
+                                  optional: false
+                      - key:
+                          name: CDSCreateSubscriptionRequestEvent
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSCreateSubscriptionRequestEvent
+                            version: 0.0.1
+                          nameSpace: org.onap.policy.apex.onap.pmcontrol
+                          source: APEX
+                          target: APEX
+                          parameter:
+                            entry:
+                              - key: actionIdentifiers
+                                value:
+                                  key: actionIdentifiers
+                                  fieldSchemaKey:
+                                    name: CDSActionIdentifiersType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: commonHeader
+                                value:
+                                  key: commonHeader
+                                  fieldSchemaKey:
+                                    name: CDSRequestCommonHeaderType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: payload
+                                value:
+                                  key: payload
+                                  fieldSchemaKey:
+                                    name: CDSCreateSubscriptionPayloadType
+                                    version: 0.0.1
+                                  optional: false
+                      - key:
+                          name: CDSDeleteResponseEvent
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSDeleteResponseEvent
+                            version: 0.0.1
+                          nameSpace: org.onap.policy.apex.onap.pmcontrol
+                          source: CDS
+                          target: APEX
+                          parameter:
+                            entry:
+                              - key: actionIdentifiers
+                                value:
+                                  key: actionIdentifiers
+                                  fieldSchemaKey:
+                                    name: CDSActionIdentifiersType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: commonHeader
+                                value:
+                                  key: commonHeader
+                                  fieldSchemaKey:
+                                    name: CDSResponseCommonHeaderType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: payload
+                                value:
+                                  key: payload
+                                  fieldSchemaKey:
+                                    name: CDSDeleteResponsePayloadType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: status
+                                value:
+                                  key: status
+                                  fieldSchemaKey:
+                                    name: CDSResponseStatusType
+                                    version: 0.0.1
+                                  optional: false
+                      - key:
+                          name: CDSDeleteSubscriptionRequestEvent
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSDeleteSubscriptionRequestEvent
+                            version: 0.0.1
+                          nameSpace: org.onap.policy.apex.onap.pmcontrol
+                          source: APEX
+                          target: APEX
+                          parameter:
+                            entry:
+                              - key: actionIdentifiers
+                                value:
+                                  key: actionIdentifiers
+                                  fieldSchemaKey:
+                                    name: CDSActionIdentifiersType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: commonHeader
+                                value:
+                                  key: commonHeader
+                                  fieldSchemaKey:
+                                    name: CDSRequestCommonHeaderType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: payload
+                                value:
+                                  key: payload
+                                  fieldSchemaKey:
+                                    name: CDSDeleteSubscriptionPayloadType
+                                    version: 0.0.1
+                                  optional: false
+                      - key:
+                          name: CDSResponseStatusEvent
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSResponseStatusEvent
+                            version: 0.0.1
+                          nameSpace: org.onap.policy.apex.onap.pmcontrol
+                          source: APEX
+                          target: DCAE
+                          parameter:
+                            entry:
+                              - key: status
+                                value:
+                                  key: status
+                                  fieldSchemaKey:
+                                    name: SubscriptionStatusType
+                                    version: 0.0.1
+                                  optional: false
+                      - key:
+                          name: CreateSubscriptionPayloadEvent
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CreateSubscriptionPayloadEvent
+                            version: 0.0.1
+                          nameSpace: org.onap.policy.apex.onap.pmcontrol
+                          source: APEX
+                          target: APEX
+                          parameter:
+                            entry:
+                              - key: albumID
+                                value:
+                                  key: albumID
+                                  fieldSchemaKey:
+                                    name: UUIDType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: payload
+                                value:
+                                  key: payload
+                                  fieldSchemaKey:
+                                    name: CDSCreateSubscriptionPayloadType
+                                    version: 0.0.1
+                                  optional: false
+                      - key:
+                          name: DeleteSubscriptionPayloadEvent
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: DeleteSubscriptionPayloadEvent
+                            version: 0.0.1
+                          nameSpace: org.onap.policy.apex.onap.pmcontrol
+                          source: APEX
+                          target: APEX
+                          parameter:
+                            entry:
+                              - key: albumID
+                                value:
+                                  key: albumID
+                                  fieldSchemaKey:
+                                    name: UUIDType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: payload
+                                value:
+                                  key: payload
+                                  fieldSchemaKey:
+                                    name: CDSDeleteSubscriptionPayloadType
+                                    version: 0.0.1
+                                  optional: false
+                      - key:
+                          name: MRResponseEvent
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: MRResponseEvent
+                            version: 0.0.1
+                          nameSpace: org.onap.policy.apex.onap.pmcontrol
+                          source: DCAE
+                          target: APEX
+                          parameter:
+                            entry:
+                              - key: count
+                                value:
+                                  key: count
+                                  fieldSchemaKey:
+                                    name: SimpleIntType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: serverTimeMs
+                                value:
+                                  key: serverTimeMs
+                                  fieldSchemaKey:
+                                    name: SimpleIntType
+                                    version: 0.0.1
+                                  optional: false
+                      - key:
+                          name: PMSubscriptionOutputEvent
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: PMSubscriptionOutputEvent
+                            version: 0.0.1
+                          nameSpace: org.onap.policy.apex.onap.pmcontrol
+                          source: APEX
+                          target: APEX
+                          parameter:
+                            entry:
+                              - key: albumID
+                                value:
+                                  key: albumID
+                                  fieldSchemaKey:
+                                    name: UUIDType
+                                    version: 0.0.1
+                                  optional: false
+                      - key:
+                          name: pmsh-operational-policy
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: pmsh-operational-policy
+                            version: 0.0.1
+                          nameSpace: org.onap.policy.apex.onap.pmcontrol
+                          source: DCAE
+                          target: APEX
+                          parameter:
+                            entry:
+                              - key: blueprintName
+                                value:
+                                  key: blueprintName
+                                  fieldSchemaKey:
+                                    name: SimpleStringType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: blueprintVersion
+                                value:
+                                  key: blueprintVersion
+                                  fieldSchemaKey:
+                                    name: SimpleStringType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: changeType
+                                value:
+                                  key: changeType
+                                  fieldSchemaKey:
+                                    name: SimpleStringType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: controlLoopName
+                                value:
+                                  key: controlLoopName
+                                  fieldSchemaKey:
+                                    name: SimpleStringType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: ipAddress
+                                value:
+                                  key: ipAddress
+                                  fieldSchemaKey:
+                                    name: SimpleStringType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: measurementGroupName
+                                value:
+                                  key: measurementGroupName
+                                  fieldSchemaKey:
+                                    name: SimpleStringType
+                                    version: 0.0.1
+                                  optional: true
+                              - key: nfName
+                                value:
+                                  key: nfName
+                                  fieldSchemaKey:
+                                    name: SimpleStringType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: operationalPolicyName
+                                value:
+                                  key: operationalPolicyName
+                                  fieldSchemaKey:
+                                    name: SimpleStringType
+                                    version: 0.0.1
+                                  optional: false
+                              - key: subscription
+                                value:
+                                  key: subscription
+                                  fieldSchemaKey:
+                                    name: SubscriptionType
+                                    version: 0.0.1
+                                  optional: true
+                              - key: subscriptionName
+                                value:
+                                  key: subscriptionName
+                                  fieldSchemaKey:
+                                    name: SimpleStringType
+                                    version: 0.0.1
+                                  optional: true
+                albums:
+                  key:
+                    name: PMControlPolicy_Albums
+                    version: 0.0.1
+                  albums:
+                    entry:
+                      - key:
+                          name: PMSubscriptionAlbum
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: PMSubscriptionAlbum
+                            version: 0.0.1
+                          scope: policy
+                          isWritable: true
+                          itemSchema:
+                            name: PMSubscriptionType
+                            version: 0.0.1
+                schemas:
+                  key:
+                    name: PMControlPolicy_Schemas
+                    version: 0.0.1
+                  schemas:
+                    entry:
+                      - key:
+                          name: CDSActionIdentifiersType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSActionIdentifiersType
+                            version: 0.0.1
+                          schemaFlavour: Avro
+                          schemaDefinition: |-
+                            {
+                                "type": "record",
+                                "name": "ActionIdentifiers_Type",
+                                "namespace": "org.onap.policy.apex.onap.helloworld",
+                                "fields": [
+                                    {
+                                        "name": "actionName",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "blueprintName",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "blueprintVersion",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "mode",
+                                        "type": "string"
+                                    }
+                                ]
+                            }
+                      - key:
+                          name: CDSCreateResponsePayloadType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSCreateResponsePayloadType
+                            version: 0.0.1
+                          schemaFlavour: Avro
+                          schemaDefinition: |-
+                            {
+                              "name": "CreateResponsePayloadEntry",
+                              "type": "record",
+                              "namespace": "com.acme.avro",
+                              "fields": [
+                                {
+                                  "name": "create_DasH_subscription_DasH_response",
+                                  "type": {
+                                    "name": "create_DasH_subscription_DasH_response",
+                                    "type": "record",
+                                    "fields": [
+                                      {
+                                        "name": "odl_DasH_response",
+                                        "type": {
+                                          "name": "odl_DasH_response",
+                                          "type": "record",
+                                          "fields": [
+                                              {
+                                                "name": "status",
+                                                "type": "string"
+                                              }
+                                          ]
+                                        }
+                                      }
+                                    ]
+                                  }
+                                }
+                              ]
+                            }
+                      - key:
+                          name: CDSCreateSubscriptionPayloadType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSCreateSubscriptionPayloadType
+                            version: 0.0.1
+                          schemaFlavour: Avro
+                          schemaDefinition: |-
+                            {
+                               "type":"map",
+                               "values":{
+                                  "type":"record",
+                                  "name":"CDSRequestPayloadEntry",
+                                  "fields":[
+                                     {
+                                        "name":"create_DasH_subscription_DasH_properties",
+                                        "type":{
+                                           "name":"create_DasH_subscription_DasH_properties_record",
+                                           "type":"record",
+                                           "fields":[
+                                              {
+                                                 "name":"nfName",
+                                                 "type":"string"
+                                              },
+                                              {
+                                                 "name":"ipAddress",
+                                                 "type":"string"
+                                              },
+                                              {
+                                                 "name":"subscriptionName",
+                                                 "type":"string"
+                                              },
+                                              {
+                                                 "name":"fileBasedGP",
+                                                 "type":"string"
+                                              },
+                                              {
+                                                 "name":"fileLocation",
+                                                 "type":"string"
+                                              },
+                                              {
+                                                 "name":"measurementGroup",
+                                                 "type":{
+                                                    "name":"Measurement_Group_Type",
+                                                    "type":"record",
+                                                    "fields":[
+                                                       {
+                                                          "name":"measurementGroupName",
+                                                          "type":"string"
+                                                       },
+                                                       {
+                                                          "name":"measurementTypes",
+                                                          "type":{
+                                                             "type":"array",
+                                                             "items":{
+                                                                "name":"Measurement_Types_Type",
+                                                                "type":"record",
+                                                                "fields":[
+                                                                   {
+                                                                      "name":"measurementType",
+                                                                      "type":"string"
+                                                                   }
+                                                                ]
+                                                             }
+                                                          }
+                                                       },
+                                                       {
+                                                          "name":"managedObjectDNsBasic",
+                                                          "type":{
+                                                             "type":"array",
+                                                             "items":{
+                                                                "name":"Managed_Object_Dns_Basic_Type",
+                                                                "type":"record",
+                                                                "fields":[
+                                                                   {
+                                                                      "name":"DN",
+                                                                      "type":"string"
+                                                                   }
+                                                                ]
+                                                             }
+                                                          }
+                                                       }
+                                                    ]
+                                                 }
+                                              }
+                                           ]
+                                        }
+                                     }
+                                  ]
+                               }
+                            }
+                      - key:
+                          name: CDSDeleteResponsePayloadType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSDeleteResponsePayloadType
+                            version: 0.0.1
+                          schemaFlavour: Avro
+                          schemaDefinition: |-
+                            {
+                              "name": "DeleteResponsePayloadEntry",
+                              "type": "record",
+                              "namespace": "com.acme.avro",
+                              "fields": [
+                                {
+                                  "name": "delete_DasH_subscription_DasH_response",
+                                  "type": {
+                                    "name": "delete_DasH_subscription_DasH_response",
+                                    "type": "record",
+                                    "fields": [
+                                      {
+                                        "name": "odl_DasH_response",
+                                        "type": {
+                                          "name": "odl_DasH_response",
+                                          "type": "record",
+                                          "fields": [
+                                              {
+                                                "name": "status",
+                                                "type": "string"
+                                              }
+                                          ]
+                                        }
+                                      }
+                                    ]
+                                  }
+                                }
+                              ]
+                            }
+                      - key:
+                          name: CDSDeleteSubscriptionPayloadType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSDeleteSubscriptionPayloadType
+                            version: 0.0.1
+                          schemaFlavour: Avro
+                          schemaDefinition: |-
+                            {
+                               "type":"map",
+                               "values":{
+                                  "type":"record",
+                                  "name":"CDSRequestPayloadEntry",
+                                  "fields":[
+                                     {
+                                        "name":"delete_DasH_subscription_DasH_properties",
+                                        "type":{
+                                           "name":"delete_DasH_subscription_DasH_properties_record",
+                                           "type":"record",
+                                           "fields":[
+                                              {
+                                                 "name":"nfName",
+                                                 "type":"string"
+                                              },
+                                              {
+                                                 "name":"ipAddress",
+                                                 "type":"string"
+                                              },
+                                              {
+                                                 "name":"subscriptionName",
+                                                 "type":"string"
+                                              },
+                                              {
+                                                 "name":"measurementGroupName",
+                                                 "type":"string"
+                                              }
+                                           ]
+                                        }
+                                     }
+                                  ]
+                               }
+                            }
+                      - key:
+                          name: CDSRequestCommonHeaderType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSRequestCommonHeaderType
+                            version: 0.0.1
+                          schemaFlavour: Avro
+                          schemaDefinition: |-
+                            {
+                                "type": "record",
+                                "name": "RequestCommonHeader_Type",
+                                "namespace": "org.onap.policy.apex.onap.helloworld",
+                                "fields": [
+                                    {
+                                        "name": "originatorId",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "requestId",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "subRequestId",
+                                        "type": "string"
+                                    }
+                                ]
+                            }
+                      - key:
+                          name: CDSResponseCommonHeaderType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSResponseCommonHeaderType
+                            version: 0.0.1
+                          schemaFlavour: Avro
+                          schemaDefinition: |-
+                            {
+                                "type": "record",
+                                "name": "ResponseCommonHeader_Type",
+                                "namespace": "org.onap.policy.apex.onap.helloworld",
+                                "fields": [
+                                    {
+                                        "name": "originatorId",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "requestId",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "subRequestId",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "timestamp",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "flags",
+                                        "type": ["null", "string"]
+                                    }
+                                ]
+                            }
+                      - key:
+                          name: CDSResponseStatusType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: CDSResponseStatusType
+                            version: 0.0.1
+                          schemaFlavour: Avro
+                          schemaDefinition: |-
+                            {
+                                "type": "record",
+                                "name": "ResponseStatus_Type",
+                                "namespace": "org.onap.policy.apex.onap.helloworld",
+                                "fields": [
+                                    {
+                                        "name": "code",
+                                        "type": "int"
+                                    },
+                                    {
+                                        "name": "eventType",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "timestamp",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "message",
+                                        "type": "string"
+                                    }
+                                ]
+                            }
+                      - key:
+                          name: PMSubscriptionType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: PMSubscriptionType
+                            version: 0.0.1
+                          schemaFlavour: Avro
+                          schemaDefinition: |-
+                            {
+                                "name": "PMSubscription",
+                                "type": "record",
+                                "namespace": "org.onap.policy.apex.onap.pmcontrol",
+                                "fields": [
+                                    {
+                                        "name": "nfName",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "ipAddress",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "changeType",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "controlLoopName",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "operationalPolicyName",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "blueprintName",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "blueprintVersion",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "subscriptionName",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "measurementGroupName",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "subscription",
+                                        "type": {
+                                            "name": "subscription",
+                                            "type": "record",
+                                            "fields": [
+                                                {
+                                                    "name": "subscriptionName",
+                                                    "type": "string"
+                                                },
+                                                {
+                                                    "name": "fileBasedGP",
+                                                    "type": "int"
+                                                },
+                                                {
+                                                    "name": "fileLocation",
+                                                    "type": "string"
+                                                },
+                                                {
+                                                    "name": "measurementGroup",
+                                                    "type": {
+                                                        "name": "Measurement_Group_Type",
+                                                        "type": "record",
+                                                        "fields": [
+                                                            {
+                                                                "name": "measurementGroupName",
+                                                                "type": "string"
+                                                            },
+                                                            {
+                                                                "name": "measurementTypes",
+                                                                "type": {
+                                                                    "type": "array",
+                                                                    "items": {
+                                                                        "name": "Measurement_Types_Type",
+                                                                        "type": "record",
+                                                                        "fields": [
+                                                                            {
+                                                                                "name": "measurementType",
+                                                                                "type": "string"
+                                                                            }
+                                                                        ]
+                                                                    }
+                                                                }
+                                                            },
+                                                            {
+                                                                "name": "managedObjectDNsBasic",
+                                                                "type": {
+                                                                    "type": "array",
+                                                                    "items": {
+                                                                        "name": "Managed_Object_Dns_Basic_Type",
+                                                                        "type": "record",
+                                                                        "fields": [
+                                                                            {
+                                                                                "name": "DN",
+                                                                                "type": "string"
+                                                                            }
+                                                                        ]
+                                                                    }
+                                                                }
+                                                            }
+                                                        ]
+                                                    }
+                                                }
+                                            ]
+                                        }
+                                    }
+                                ]
+                            }
+                      - key:
+                          name: SimpleIntType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: SimpleIntType
+                            version: 0.0.1
+                          schemaFlavour: Java
+                          schemaDefinition: java.lang.Integer
+                      - key:
+                          name: SimpleStringType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: SimpleStringType
+                            version: 0.0.1
+                          schemaFlavour: Java
+                          schemaDefinition: java.lang.String
+                      - key:
+                          name: SubscriptionStatusType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: SubscriptionStatusType
+                            version: 0.0.1
+                          schemaFlavour: Avro
+                          schemaDefinition: |-
+                            {
+                                "type": "record",
+                                "name": "ActivateSubscriptionStatus_Type",
+                                "namespace": "org.onap.policy.apex.onap.helloworld",
+                                "fields": [
+                                    {
+                                        "name": "subscriptionName",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "measurementGroupName",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "nfName",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "changeType",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "message",
+                                        "type": "string"
+                                    }
+                                ]
+                            }
+                      - key:
+                          name: SubscriptionType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: SubscriptionType
+                            version: 0.0.1
+                          schemaFlavour: Avro
+                          schemaDefinition: |-
+                            {
+                                "name": "subscription",
+                                "type": "record",
+                                "default": "null",
+                                "fields": [
+                                    {
+                                        "name": "subscriptionName",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "fileBasedGP",
+                                        "type": "int"
+                                    },
+                                    {
+                                        "name": "fileLocation",
+                                        "type": "string"
+                                    },
+                                    {
+                                        "name": "measurementGroup",
+                                        "type": {
+                                            "name": "Measurement_Group_Type",
+                                            "type": "record",
+                                            "fields": [
+                                                {
+                                                    "name": "measurementGroupName",
+                                                    "type": "string"
+                                                },
+                                                {
+                                                    "name": "measurementTypes",
+                                                    "type": {
+                                                        "type": "array",
+                                                        "items": {
+                                                            "name": "Measurement_Types_Type",
+                                                            "type": "record",
+                                                            "fields": [
+                                                                {
+                                                                    "name": "measurementType",
+                                                                    "type": "string"
+                                                                }
+                                                            ]
+                                                        }
+                                                    }
+                                                },
+                                                {
+                                                    "name": "managedObjectDNsBasic",
+                                                    "type": {
+                                                        "type": "array",
+                                                        "items": {
+                                                            "name": "Managed_Object_Dns_Basic_Type",
+                                                            "type": "record",
+                                                            "fields": [
+                                                                {
+                                                                    "name": "DN",
+                                                                    "type": "string"
+                                                                }
+                                                            ]
+                                                        }
+                                                    }
+                                                }
+                                            ]
+                                        }
+                                    }
+                                ]
+                            }
+                      - key:
+                          name: UUIDType
+                          version: 0.0.1
+                        value:
+                          key:
+                            name: UUIDType
+                            version: 0.0.1
+                          schemaFlavour: Java
+                          schemaDefinition: java.util.UUID
+          eventInputParameters:
+            DCAEConsumer:
+              carrierTechnologyParameters:
+                carrierTechnology: RESTCLIENT
+                parameterClassName: org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters
+                parameters:
+                  consumerPollTime: '50'
+                  url: https://message-router:3905/events/unauthenticated.DCAE_CL_OUTPUT/cg1/sg1
+              eventProtocolParameters:
+                eventProtocol: JSON
+                parameters:
+                  nameAlias: operationalPolicyName
+              eventName: pmsh-operational-policy
+              eventNameFilter: pmsh-operational-policy
+            CDSRequestConsumer:
+              carrierTechnologyParameters:
+                carrierTechnology: RESTREQUESTOR
+                parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters
+                parameters:
+                  url: http://cds-blueprints-processor-http:8080/api/v1/execution-service/process
+                  httpMethod: POST
+                  restRequestTimeout: 2000
+                  httpHeaders:
+                    - - Authorization
+                      - Basic Y2NzZGthcHBzOmNjc2RrYXBwcw==
+              eventProtocolParameters:
+                eventProtocol: JSON
+              eventName: CDSCreateResponseEvent
+              eventNameFilter: CDSCreateResponseEvent
+              requestorMode: true
+              requestorPeer: CDSRequestProducer
+              requestorTimeout: 500
+            CDSDeleteRequestConsumer:
+              carrierTechnologyParameters:
+                carrierTechnology: RESTREQUESTOR
+                parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters
+                parameters:
+                  url: http://cds-blueprints-processor-http:8080/api/v1/execution-service/process
+                  httpMethod: POST
+                  restRequestTimeout: 2000
+                  httpHeaders:
+                    - - Authorization
+                      - Basic Y2NzZGthcHBzOmNjc2RrYXBwcw==
+              eventProtocolParameters:
+                eventProtocol: JSON
+              eventName: CDSDeleteResponseEvent
+              eventNameFilter: CDSDeleteResponseEvent
+              requestorMode: true
+              requestorPeer: CDSDeleteRequestProducer
+              requestorTimeout: 500
+          eventOutputParameters:
+            logOutputter:
+              carrierTechnologyParameters:
+                carrierTechnology: FILE
+                parameters:
+                  standardIo: true
+              eventProtocolParameters:
+                eventProtocol: JSON
+            StdOutOutputter:
+              carrierTechnologyParameters:
+                carrierTechnology: FILE
+                parameters:
+                  standardIo: true
+              eventProtocolParameters:
+                eventProtocol: JSON
+            CDSRequestProducer:
+              carrierTechnologyParameters:
+                carrierTechnology: RESTREQUESTOR
+                parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters
+              eventProtocolParameters:
+                eventProtocol: JSON
+              eventNameFilter: CDSCreateSubscriptionRequestEvent
+              requestorMode: true
+              requestorPeer: CDSRequestConsumer
+              requestorTimeout: 500
+            CDSDeleteRequestProducer:
+              carrierTechnologyParameters:
+                carrierTechnology: RESTREQUESTOR
+                parameterClassName: org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters
+              eventProtocolParameters:
+                eventProtocol: JSON
+              eventNameFilter: CDSDeleteSubscriptionRequestEvent
+              requestorMode: true
+              requestorPeer: CDSDeleteRequestConsumer
+              requestorTimeout: 500
+            CDSReplyProducer:
+              carrierTechnologyParameters:
+                carrierTechnology: RESTCLIENT
+                parameterClassName: org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters
+                parameters:
+                  url: https://message-router:3905/events/unauthenticated.PMSH_CL_INPUT
+                  httpMethod: POST
+                  restRequestTimeout: 2000
+              eventProtocolParameters:
+                eventProtocol: JSON
+              eventNameFilter: CDSResponseStatusEvent
+metadata:
+  primeTimeoutMs: 200000
+  deprimeTimeoutMs: 100000
index 22985fb..09d4dce 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2024 Nordix Foundation.
+ *  Copyright (C) 2021-2025 OpenInfra Foundation Europe. 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.
@@ -216,6 +216,11 @@ public final class AcmUtils {
                     .collect(Collectors.toMap(ToscaConceptIdentifier::getName, UnaryOperator.identity()));
             // @formatter:on
 
+            if (definitions.size() != automationComposition.getElements().size()) {
+                result.setResult(ValidationStatus.INVALID,
+                        "Elements of the instance not matching with the elements of the composition");
+            }
+
             for (var element : automationComposition.getElements().values()) {
                 result.addResult(validateDefinition(definitions, element.getDefinition()));
             }
index ce1a752..8feeb87 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021-2024 Nordix Foundation.
+ *  Copyright (C) 2021-2025 OpenInfra Foundation Europe. 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.
@@ -28,9 +28,7 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
 
-import java.io.File;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -47,7 +45,6 @@ import org.onap.policy.clamp.models.acm.concepts.SubState;
 import org.onap.policy.clamp.models.acm.document.concepts.DocToscaServiceTemplate;
 import org.onap.policy.clamp.models.acm.messages.rest.instantiation.DeployOrder;
 import org.onap.policy.clamp.models.acm.messages.rest.instantiation.LockOrder;
-import org.onap.policy.common.utils.coder.StandardCoder;
 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;
@@ -62,7 +59,7 @@ class AcmUtilsTest {
             "org.onap.policy.clamp.acm.PolicyAutomationCompositionElement";
     private static final String PARTICIPANT_AUTOMATION_COMPOSITION_ELEMENT = "org.onap.policy.clamp.acm.Participant";
     private static final String TOSCA_TEMPLATE_YAML = "clamp/acm/pmsh/funtional-pmsh-usecase.yaml";
-
+    private static final String AC_INSTANTIATION_JSON = "src/test/resources/json/AutomationComposition.json";
     public static final String AUTOMATION_COMPOSITION_ELEMENT =
             "org.onap.policy.clamp.acm.AutomationCompositionElement";
     public static final String AUTOMATION_COMPOSITION_NODE_TYPE = "org.onap.policy.clamp.acm.AutomationComposition";
@@ -120,6 +117,22 @@ class AcmUtilsTest {
 
     @Test
     void testValidateAutomationComposition() {
+        var doc = new DocToscaServiceTemplate(CommonTestData.getToscaServiceTemplate(TOSCA_TEMPLATE_YAML));
+        var automationComposition = CommonTestData.getJsonObject(AC_INSTANTIATION_JSON, AutomationComposition.class);
+        var result = AcmUtils.validateAutomationComposition(automationComposition, doc.toAuthorative(),
+                AUTOMATION_COMPOSITION_NODE_TYPE);
+        assertTrue(result.isValid());
+
+        var element = automationComposition.getElements().values().iterator().next();
+        automationComposition.getElements().remove(element.getId());
+        result = AcmUtils.validateAutomationComposition(automationComposition, doc.toAuthorative(),
+                AUTOMATION_COMPOSITION_NODE_TYPE);
+        assertFalse(result.isValid());
+        assertThat(result.getMessage()).contains("not matching");
+    }
+
+    @Test
+    void testNotValidateAutomationComposition() {
         var automationComposition = getDummyAutomationComposition();
         var toscaServiceTemplate = getDummyToscaServiceTemplate();
         var result = AcmUtils.validateAutomationComposition(automationComposition,
@@ -234,15 +247,10 @@ class AcmUtilsTest {
         var automationComposition = new AutomationComposition();
         automationComposition.setCompositionId(UUID.randomUUID());
         Map<UUID, AutomationCompositionElement> map = new LinkedHashMap<>();
-        try {
-            var element = new StandardCoder().decode(
-                    new File("src/test/resources/json/AutomationCompositionElementNoOrderedState.json"),
-                    AutomationCompositionElement.class);
-            map.put(UUID.randomUUID(), element);
-        } catch (Exception e) {
-            fail("Cannot read or decode " + e.getMessage());
-            return null;
-        }
+        var element = CommonTestData.getJsonObject(
+                "src/test/resources/json/AutomationCompositionElementNoOrderedState.json",
+                AutomationCompositionElement.class);
+        map.put(UUID.randomUUID(), element);
         automationComposition.setElements(map);
         return automationComposition;
     }
index 1d111b8..990c1c4 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2023-2024 Nordix Foundation.
+ *  Copyright (C) 2023-2025 OpenInfra Foundation Europe. 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.
@@ -22,9 +22,12 @@ package org.onap.policy.clamp.models.acm.utils;
 
 import static org.junit.jupiter.api.Assertions.fail;
 
+import java.io.File;
 import java.util.UUID;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition;
+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.StandardYamlCoder;
 import org.onap.policy.common.utils.resources.ResourceUtils;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
@@ -40,6 +43,7 @@ public class CommonTestData {
     public static final UUID PARTICIPANT_ID = UUID.randomUUID();
     public static final UUID REPLICA_ID = UUID.randomUUID();
     private static final StandardYamlCoder YAML_TRANSLATOR = new StandardYamlCoder();
+    private static final Coder CODER = new StandardCoder();
 
     /**
      * Returns participantId for test cases.
@@ -107,6 +111,22 @@ public class CommonTestData {
         }
     }
 
+    /**
+     * Get Object from json file.
+     *
+     * @param path path of the resource
+     * @param clazz the Class of the Object
+     * @return the Object
+     */
+    public static <T> T getJsonObject(final String path, Class<T> clazz) {
+        try {
+            return CODER.decode(new File(path), clazz);
+        } catch (CoderException e) {
+            fail("Cannot decode " + path);
+            return null;
+        }
+    }
+
     /**
      * Get new AutomationCompositionElementDefinition.
      *
diff --git a/models/src/test/resources/json/AutomationComposition.json b/models/src/test/resources/json/AutomationComposition.json
new file mode 100644 (file)
index 0000000..b8fa8b2
--- /dev/null
@@ -0,0 +1,55 @@
+{
+    "name": "PMSHInstance0",
+    "version": "1.0.1",
+    "compositionId": "709c62b3-8918-41b9-a747-d21eb79c6c40",
+    "deployState": "UNDEPLOYED",
+    "lockState": "NONE",
+    "description": "PMSH automation composition instance 0",
+    "elements": {
+        "709c62b3-8918-41b9-a747-d21eb79c6c20": {
+            "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
+            "definition": {
+                "name": "org.onap.domain.database.PMSH_K8SMicroserviceAutomationCompositionElement",
+                "version": "1.2.3"
+            },
+            "deployState": "UNDEPLOYED",
+            "lockState": "NONE",
+            "description": "Automation composition element for the K8S microservice for PMSH",
+            "deployTimeoutMs": "200000",
+            "undeployTimeoutMs": "150000",
+            "updateTimeoutMs": "200000",
+            "migrateTimeoutMs": "200000",
+            "deleteTimeoutMs": "100000"
+        },
+        "709c62b3-8918-41b9-a747-d21eb79c6c21": {
+            "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
+            "definition": {
+                "name": "org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement",
+                "version": "1.2.3"
+            },
+            "deployState": "UNDEPLOYED",
+            "lockState": "NONE",
+            "description": "Automation composition element for the http requests of PMSH microservice",
+            "deployTimeoutMs": "200000",
+            "undeployTimeoutMs": "150000",
+            "updateTimeoutMs": "200000",
+            "migrateTimeoutMs": "200000",
+            "deleteTimeoutMs": "100000"
+        },
+        "709c62b3-8918-41b9-a747-d21eb79c6c22": {
+            "id": "709c62b3-8918-41b9-a747-d21eb79c6c22",
+            "definition": {
+                "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement",
+                "version": "1.2.3"
+            },
+            "deployState": "UNDEPLOYED",
+            "lockState": "NONE",
+            "description": "Automation composition element for the operational policy for Performance Management Subscription Handling",
+            "deployTimeoutMs": "200000",
+            "undeployTimeoutMs": "150000",
+            "updateTimeoutMs": "200000",
+            "migrateTimeoutMs": "200000",
+            "deleteTimeoutMs": "100000"
+        }
+    }
+}
index d9ada4b..70d6554 100644 (file)
@@ -77,6 +77,8 @@ import org.springframework.data.domain.Pageable;
  *
  */
 class AutomationCompositionInstantiationProviderTest {
+
+    public static final String MIGRATION_SERVICE_TEMPLATE_YAML = "clamp/acm/pmsh/funtional-pmsh-usecase-migration.yaml";
     private static final String AC_INSTANTIATION_CREATE_JSON = "src/test/resources/rest/acm/AutomationComposition.json";
     private static final String AC_INSTANTIATION_UPDATE_JSON =
             "src/test/resources/rest/acm/AutomationCompositionUpdate.json";
@@ -89,8 +91,6 @@ class AutomationCompositionInstantiationProviderTest {
     private static final String DELETE_BAD_REQUEST = "Not valid order DELETE;";
 
     private static final String AC_ELEMENT_NAME_NOT_FOUND = """
-            "AutomationComposition" INVALID, item has status INVALID
-              "entry PMSHInstance0AcElementNotFound" INVALID, item has status INVALID
                 "entry org.onap.domain.pmsh.DCAEMicroservice" INVALID, Not found
                 "entry org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement" INVALID, Not found
             """;
@@ -102,13 +102,17 @@ class AutomationCompositionInstantiationProviderTest {
     private static final String DO_NOT_MATCH = " do not match with ";
 
     private static ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate();
+    private static ToscaServiceTemplate serviceTemplateMigration = new ToscaServiceTemplate();
 
     @BeforeAll
     public static void setUpBeforeClass() {
-        serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
-        var jpa =
-                ProviderUtils.getJpaAndValidate(serviceTemplate, JpaToscaServiceTemplate::new, "toscaServiceTemplate");
+        var st = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
+        var jpa = ProviderUtils.getJpaAndValidate(st, JpaToscaServiceTemplate::new, "toscaServiceTemplate");
         serviceTemplate = jpa.toAuthorative();
+
+        st = InstantiationUtils.getToscaServiceTemplate(MIGRATION_SERVICE_TEMPLATE_YAML);
+        jpa = ProviderUtils.getJpaAndValidate(st, JpaToscaServiceTemplate::new, "migrationServiceTemplate");
+        serviceTemplateMigration = jpa.toAuthorative();
     }
 
     @Test
@@ -269,7 +273,7 @@ class AutomationCompositionInstantiationProviderTest {
         var instanceId = UUID.randomUUID();
 
         var automationComposition =
-                InstantiationUtils.getAutomationCompositionFromResource(AC_MIGRATE_JSON, "Crud");
+                InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Crud");
         automationComposition.setCompositionId(compositionId);
         automationComposition.setInstanceId(instanceId);
         automationComposition.setDeployState(DeployState.DEPLOYED);
@@ -278,29 +282,11 @@ class AutomationCompositionInstantiationProviderTest {
         when(acProvider.getAutomationComposition(automationComposition.getInstanceId()))
                 .thenReturn(automationComposition);
 
-        var automationCompositionTarget = new AutomationComposition(automationComposition);
+        var automationCompositionTarget =
+                InstantiationUtils.getAutomationCompositionFromResource(AC_MIGRATE_JSON, "Migrate");
         automationCompositionTarget.setInstanceId(instanceId);
         automationCompositionTarget.setCompositionId(compositionId);
-        // Add a new element
-        var uuid = UUID.randomUUID();
-        var newElement = new AutomationCompositionElement();
-        newElement.setId(uuid);
-        newElement.setDefinition(new ToscaConceptIdentifier(
-                "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement", "1.2.3"));
-        newElement.setProperties(Map.of("testVar", "1", "testVar2", "2"));
-        automationCompositionTarget.getElements().put(uuid, newElement);
-
-        //Remove an existing element
-        var elementIdToRemove = UUID.randomUUID();
-        for (var element : automationCompositionTarget.getElements().values()) {
-            if (element.getDefinition().getName()
-                    .equals("org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement")) {
-                elementIdToRemove = element.getId();
-            }
-        }
-        automationCompositionTarget.getElements().remove(elementIdToRemove);
-
-        var acDefinitionTarget = CommonTestData.createAcDefinition(serviceTemplate, AcTypeState.PRIMED);
+        var acDefinitionTarget = CommonTestData.createAcDefinition(serviceTemplateMigration, AcTypeState.PRIMED);
         var compositionTargetId = acDefinitionTarget.getCompositionId();
         automationCompositionTarget.setCompositionTargetId(compositionTargetId);
         when(acDefinitionProvider.findAcDefinition(compositionTargetId)).thenReturn(Optional.of(acDefinitionTarget));
@@ -734,13 +720,13 @@ class AutomationCompositionInstantiationProviderTest {
                 participantProvider, CommonTestData.getTestParamaterGroup(), encryptionUtils);
 
         assertThatThrownBy(() -> provider.createAutomationComposition(compositionId, automationComposition))
-                .hasMessageMatching(AC_ELEMENT_NAME_NOT_FOUND);
+                .hasMessageContaining(AC_ELEMENT_NAME_NOT_FOUND);
 
         when(acProvider.getAutomationComposition(automationComposition.getInstanceId()))
                 .thenReturn(automationComposition);
 
         assertThatThrownBy(() -> provider.updateAutomationComposition(compositionId, automationComposition))
-                .hasMessageMatching(AC_ELEMENT_NAME_NOT_FOUND);
+                .hasMessageContaining(AC_ELEMENT_NAME_NOT_FOUND);
     }
 
     @Test
index d74970d..d77fab7 100644 (file)
@@ -1,30 +1,47 @@
 {
-  "name": "PMSHInstance1",
+  "name": "PMSHInstance0",
   "version": "1.0.1",
   "compositionId": "709c62b3-8918-41b9-a747-d21eb79c6c40",
-  "deployState": "DEPLOYED",
-  "lockState": "LOCKED",
   "description": "PMSH automation composition instance 0",
   "elements": {
-    "709c62b3-8918-41b9-a747-d21eb79c6c21": {
-      "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
+    "709c62b3-8918-41b9-a747-d21eb79c6c20": {
+      "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
       "definition": {
         "name": "org.onap.domain.database.PMSH_K8SMicroserviceAutomationCompositionElement",
-        "version": "1.2.3"
+        "version": "1.2.4"
       },
-      "deployState": "DEPLOYED",
-      "lockState": "LOCKED",
-      "description": "Automation composition element for the K8S microservice for PMSH"
+      "description": "Automation composition element for the K8S microservice for PMSH",
+      "deployTimeoutMs": "200000",
+      "undeployTimeoutMs": "150000",
+      "updateTimeoutMs": "200000",
+      "migrateTimeoutMs": "200000",
+      "deleteTimeoutMs": "100000"
+    },
+    "709c62b3-8918-41b9-a747-d21eb79c6c29": {
+      "id": "709c62b3-8918-41b9-a747-d21eb79c6c29",
+      "definition": {
+        "name": "org.onap.domain.database.PMSH_HttpMicroserviceAutomationCompositionElement",
+        "version": "1.2.4"
+      },
+      "description": "Automation composition element for the http requests of PMSH microservice",
+      "deployTimeoutMs": "200000",
+      "undeployTimeoutMs": "150000",
+      "updateTimeoutMs": "200000",
+      "migrateTimeoutMs": "200000",
+      "deleteTimeoutMs": "100000"
     },
     "709c62b3-8918-41b9-a747-d21eb79c6c22": {
       "id": "709c62b3-8918-41b9-a747-d21eb79c6c22",
       "definition": {
-        "name": "org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement",
-        "version": "1.2.3"
+        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement",
+        "version": "1.2.4"
       },
-      "deployState": "DEPLOYED",
-      "lockState": "LOCKED",
-      "description": "Automation composition element for the operational policy for Performance Management Subscription Handling"
+      "description": "Automation composition element for the operational policy for Performance Management Subscription Handling",
+      "deployTimeoutMs": "200000",
+      "undeployTimeoutMs": "150000",
+      "updateTimeoutMs": "200000",
+      "migrateTimeoutMs": "200000",
+      "deleteTimeoutMs": "100000"
     }
   }
-}
\ No newline at end of file
+}