Link the AutomationComposition with AutomationCompositionDefinition 57/132457/1
authorFrancescoFioraEst <francesco.fiora@est.tech>
Thu, 24 Nov 2022 10:41:40 +0000 (10:41 +0000)
committerFrancescoFioraEst <francesco.fiora@est.tech>
Thu, 24 Nov 2022 14:52:18 +0000 (14:52 +0000)
In AutomationComposition replace the link to ToscaNodeTemplate
whit a link to AutomationCompositionDefinition
using compositionId.

Issue-ID: POLICY-4464
Change-Id: I66878f04ef93fb0754d0066e78bd074ce082f891
Signed-off-by: FrancescoFioraEst <francesco.fiora@est.tech>
34 files changed:
examples/src/main/resources/clamp/acm/test/pmsh_multiple_ac_tosca.yaml [deleted file]
models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationComposition.java
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationComposition.java
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationCompositionDefinition.java
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AcDefinitionProvider.java
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/ProviderUtils.java
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/AutomationCompositionRepository.java
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/ToscaNodeTemplateRepository.java [deleted file]
models/src/main/java/org/onap/policy/clamp/models/acm/utils/AcmUtils.java
models/src/test/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionTest.java
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationCompositionElementTest.java
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationCompositionTest.java
models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java
models/src/test/resources/json/AutomationCompositionNoOrderedState.json
models/src/test/resources/providers/TestAutomationCompositions.json
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/ParticipantIntermediaryApiImpl.java
participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionHandler.java
participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/ParticipantIntermediaryApiImplTest.java
participant/participant-intermediary/src/test/resources/providers/TestAutomationCompositions.json
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/commissioning/CommissioningProvider.java
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProvider.java
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandler.java
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScanner.java
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/comm/AutomationCompositionUpdatePublisher.java
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/CommissioningProviderTest.java
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/CommissioningControllerTest.java
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProviderTest.java
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/InstantiationControllerTest.java
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionHandlerTest.java
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionScannerTest.java
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/util/CommonTestData.java
runtime-acm/src/test/resources/rest/acm/AutomationCompositions.json
runtime-acm/src/test/resources/rest/acm/AutomationCompositionsUpdate.json

diff --git a/examples/src/main/resources/clamp/acm/test/pmsh_multiple_ac_tosca.yaml b/examples/src/main/resources/clamp/acm/test/pmsh_multiple_ac_tosca.yaml
deleted file mode 100644 (file)
index 69a8183..0000000
+++ /dev/null
@@ -1,239 +0,0 @@
-tosca_definitions_version: tosca_simple_yaml_1_3
-name: PMSH_Test_Instance
-data_types:
-  onap.datatypes.ToscaConceptIdentifier:
-    derived_from: tosca.datatypes.Root
-    properties:
-      name:
-        type: string
-        required: true
-      version:
-        type: string
-        required: true
-node_types:
-  org.onap.policy.clamp.acm.Participant:
-    version: 1.0.1
-    derived_from: tosca.nodetypes.Root
-    properties:
-      provider:
-        type: string
-        required: false
-  org.onap.policy.clamp.acm.AutomationCompositionElement:
-    version: 1.0.1
-    derived_from: tosca.nodetypes.Root
-    properties:
-      provider:
-        type: string
-        required: false
-      participantType:
-        type: onap.datatypes.ToscaConceptIdentifier
-        required: true
-      startPhase:
-        type: integer
-        required: false
-        constraints:
-          - greater-or-equal: 0
-        metadata:
-          common: true
-        description: A value indicating the start phase in which this automation composition element will be started,
-          the first start phase is zero. Automation Composition Elements are started in their start_phase order and
-          stopped in reverse start phase order. Automation Composition Elements with the same start phase are started
-          and stopped simultaneously
-  org.onap.policy.clamp.acm.AutomationComposition:
-    version: 1.0.1
-    derived_from: tosca.nodetypes.Root
-    properties:
-      provider:
-        type: string
-        required: false
-      elements:
-        type: list
-        required: true
-        entry_schema:
-          type: onap.datatypes.ToscaConceptIdentifier
-  org.onap.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElement:
-    version: 1.0.1
-    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
-    properties:
-      dcae_blueprint_id:
-        type: onap.datatypes.ToscaConceptIdentifier
-        required: true
-  org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement:
-    version: 1.0.1
-    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
-    properties:
-      policy_type_id:
-        type: onap.datatypes.ToscaConceptIdentifier
-        required: true
-  org.onap.policy.clamp.acm.CDSAutomationCompositionElement:
-    version: 1.0.1
-    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
-    properties:
-      cds_blueprint_id:
-        type: onap.datatypes.ToscaConceptIdentifier
-        required: true
-topology_template:
-  node_templates:
-    org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant:
-      version: 2.3.4
-      type: org.onap.policy.clamp.acm.Participant
-      type_version: 1.0.1
-      description: Participant for DCAE microservices
-      properties:
-        provider: ONAP
-    org.onap.policy.acm.PolicyAutomationCompositionParticipant:
-      version: 2.2.1
-      type: org.onap.policy.clamp.acm.Participant
-      type_version: 1.0.1
-      description: Participant for DCAE microservices
-      properties:
-        provider: ONAP
-    org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant:
-      version: 2.2.1
-      type: org.onap.policy.clamp.acm.Participant
-      type_version: 1.0.1
-      description: Participant for DCAE microservices
-      properties:
-        provider: ONAP
-    org.onap.domain.pmsh.PMSH_DCAEMicroservice:
-      version: 1.2.3
-      type: org.onap.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElement
-      type_version: 1.0.0
-      description: Automation composition element for the DCAE microservice for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant
-          version: 2.3.4
-        dcae_blueprint_id:
-          name: org.onap.dcae.blueprints.PMSHBlueprint
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement:
-      version: 1.2.3
-      type: org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement
-      type_version: 1.0.0
-      description: Automation composition element for the monitoring policy for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
-          version: 2.2.1
-        policy_type_id:
-          name: onap.policies.monitoring.pm-subscription-handler
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement:
-      version: 1.2.3
-      type: org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement
-      type_version: 1.0.0
-      description: Automation composition element for the operational policy for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
-          version: 2.2.1
-        policy_type_id:
-          name: onap.policies.operational.pm-subscription-handler
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement:
-      version: 1.2.3
-      type: org.onap.policy.clamp.acm.AutomationCompositionElement
-      type_version: 1.0.0
-      description: Automation composition element for CDS for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant
-          version: 3.2.1
-        cds_blueprint_id:
-          name: org.onap.ccsdk.cds.PMSHCdsBlueprint
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSHAutomationCompositionDefinition:
-      version: 1.2.3
-      type: org.onap.policy.clamp.acm.AutomationComposition
-      type_version: 1.0.0
-      description: Automation composition for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        elements:
-          - name: org.onap.domain.pmsh.PMSH_DCAEMicroservice
-            version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement
-            version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement
-            version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement
-            version: 1.2.3
-    org.onap.domain.pmsh.PMSD_DCAEMicroservice:
-      version: 1.2.3
-      type: org.onap.policy.clamp.acm.DCAEMicroserviceAutomationCompositionElement
-      type_version: 1.0.0
-      description: Automation composition element for the DCAE microservice for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant
-          version: 2.3.4
-        dcae_blueprint_id:
-          name: org.onap.dcae.blueprints.PMSDBlueprint
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSD_MonitoringPolicyAutomationCompositionElement:
-      version: 1.2.3
-      type: org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement
-      type_version: 1.0.0
-      description: Automation composition element for the monitoring policy for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
-          version: 2.2.1
-        policy_type_id:
-          name: onap.policies.monitoring.pm-subscription-handler
-          version: 1.0.0
-        policy_id:
-          name: onap.policies.monitoring.pm-subscription-handler
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSD_OperationalPolicyAutomationCompositionElement:
-      version: 1.2.3
-      type: org.onap.policy.clamp.acm.PolicyTypeAutomationCompositionElement
-      type_version: 1.0.0
-      description: Automation composition element for the operational policy for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.policy.acm.PolicyAutomationCompositionParticipant
-          version: 2.2.1
-        policy_type_id:
-          name: onap.policies.operational.pm-subscription-handler
-          version: 1.0.0
-        policy_id:
-          name: onap.policies.monitoring.pm-subscription-handler
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSD_CDS_AutomationCompositionElement:
-      version: 1.2.3
-      type: org.onap.policy.clamp.acm.AutomationCompositionElement
-      type_version: 1.0.0
-      description: Automation composition element for CDS for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        participantType:
-          name: org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant
-          version: 3.2.1
-        cds_blueprint_id:
-          name: org.onap.ccsdk.cds.PMSDCdsBlueprint
-          version: 1.0.0
-    org.onap.domain.pmsh.PMSDAutomationCompositionDefinition:
-      version: 1.2.3
-      type: org.onap.policy.clamp.acm.AutomationComposition
-      type_version: 1.0.0
-      description: Automation composition for Performance Management Subscription Handling
-      properties:
-        provider: Ericsson
-        elements:
-          - name: org.onap.domain.pmsh.PMSD_DCAEMicroservice
-            version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSD_MonitoringPolicyAutomationCompositionElement
-            version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSD_OperationalPolicyAutomationCompositionElement
-            version: 1.2.3
-          - name: org.onap.domain.pmsh.PMSD_CDS_AutomationCompositionElement
-            version: 1.2.3
index 4736d31..c3245d2 100644 (file)
@@ -27,9 +27,7 @@ import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 import lombok.NonNull;
 import org.apache.commons.collections4.MapUtils;
-import org.onap.policy.models.base.PfConceptKey;
 import org.onap.policy.models.base.PfUtils;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity;
 
 /**
@@ -40,7 +38,7 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity;
 @EqualsAndHashCode(callSuper = true)
 public class AutomationComposition extends ToscaEntity implements Comparable<AutomationComposition> {
     @NonNull
-    private ToscaConceptIdentifier definition = new ToscaConceptIdentifier(PfConceptKey.getNullKey());
+    private UUID compositionId;
 
     @NonNull
     private AutomationCompositionState state = AutomationCompositionState.UNINITIALISED;
@@ -53,16 +51,6 @@ public class AutomationComposition extends ToscaEntity implements Comparable<Aut
     @NonNull
     private Boolean primed = false;
 
-    @Override
-    public String getType() {
-        return definition.getName();
-    }
-
-    @Override
-    public String getTypeVersion() {
-        return definition.getVersion();
-    }
-
     /**
      * Copy contructor, does a deep copy.
      *
@@ -70,7 +58,7 @@ public class AutomationComposition extends ToscaEntity implements Comparable<Aut
      */
     public AutomationComposition(final AutomationComposition otherAutomationComposition) {
         super(otherAutomationComposition);
-        this.definition = new ToscaConceptIdentifier(otherAutomationComposition.definition);
+        this.compositionId = otherAutomationComposition.compositionId;
         this.state = otherAutomationComposition.state;
         this.orderedState = otherAutomationComposition.orderedState;
         this.elements = PfUtils.mapMap(otherAutomationComposition.elements, AutomationCompositionElement::new);
index e5c44d0..8268e90 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
+ * Copyright (C) 2021-2022 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,12 +25,12 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.UUID;
-import javax.persistence.AttributeOverride;
 import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.EmbeddedId;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
+import javax.persistence.Index;
 import javax.persistence.Inheritance;
 import javax.persistence.InheritanceType;
 import javax.persistence.ManyToMany;
@@ -52,7 +52,6 @@ import org.onap.policy.models.base.PfKey;
 import org.onap.policy.models.base.PfReferenceKey;
 import org.onap.policy.models.base.PfUtils;
 import org.onap.policy.models.base.validation.annotations.VerifyKey;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 /**
  * Class to represent a automation composition in the database.
@@ -60,7 +59,7 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
  * @author Liam Fallon (liam.fallon@est.tech)
  */
 @Entity
-@Table(name = "AutomationComposition")
+@Table(name = "AutomationComposition", indexes = {@Index(name = "ac_compositionId", columnList = "compositionId")})
 @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -72,13 +71,8 @@ public class JpaAutomationComposition extends PfConcept implements PfAuthorative
     @NotNull
     private PfConceptKey key;
 
-    // @formatter:off
-    @VerifyKey
     @NotNull
-    @AttributeOverride(name = "name",    column = @Column(name = "definition_name"))
-    @AttributeOverride(name = "version", column = @Column(name = "definition_version"))
-    private PfConceptKey definition;
-    // @formatter:on
+    private String compositionId;
 
     @Column
     @NotNull
@@ -112,22 +106,22 @@ public class JpaAutomationComposition extends PfConcept implements PfAuthorative
      * @param key the key
      */
     public JpaAutomationComposition(@NonNull final PfConceptKey key) {
-        this(key, new PfConceptKey(), AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>());
+        this(key, UUID.randomUUID().toString(), AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>());
     }
 
     /**
      * The Key Constructor creates a {@link JpaAutomationComposition} object with all mandatory fields.
      *
      * @param key the key
-     * @param definition the TOSCA definition of the automation composition
+     * @param compositionId the TOSCA compositionId of the automation composition definition
      * @param state the state of the automation composition
      * @param elements the elements of the automation composition in participants
      */
-    public JpaAutomationComposition(@NonNull final PfConceptKey key, @NonNull final PfConceptKey definition,
-        @NonNull final AutomationCompositionState state,
-        @NonNull final Map<UUID, JpaAutomationCompositionElement> elements) {
+    public JpaAutomationComposition(@NonNull final PfConceptKey key, @NonNull final String compositionId,
+            @NonNull final AutomationCompositionState state,
+            @NonNull final Map<UUID, JpaAutomationCompositionElement> elements) {
         this.key = key;
-        this.definition = definition;
+        this.compositionId = compositionId;
         this.state = state;
         this.elements = elements;
     }
@@ -140,12 +134,12 @@ public class JpaAutomationComposition extends PfConcept implements PfAuthorative
     public JpaAutomationComposition(@NonNull final JpaAutomationComposition copyConcept) {
         super(copyConcept);
         this.key = new PfConceptKey(copyConcept.key);
-        this.definition = new PfConceptKey(copyConcept.definition);
+        this.compositionId = copyConcept.compositionId;
         this.state = copyConcept.state;
         this.orderedState = copyConcept.orderedState;
         this.description = copyConcept.description;
         this.elements =
-            PfUtils.mapMap(copyConcept.elements, JpaAutomationCompositionElement::new, new LinkedHashMap<>(0));
+                PfUtils.mapMap(copyConcept.elements, JpaAutomationCompositionElement::new, new LinkedHashMap<>(0));
         this.primed = copyConcept.primed;
     }
 
@@ -164,12 +158,12 @@ public class JpaAutomationComposition extends PfConcept implements PfAuthorative
 
         automationComposition.setName(getKey().getName());
         automationComposition.setVersion(getKey().getVersion());
-        automationComposition.setDefinition(new ToscaConceptIdentifier(definition));
+        automationComposition.setCompositionId(UUID.fromString(compositionId));
         automationComposition.setState(state);
         automationComposition.setOrderedState(orderedState != null ? orderedState : state.asOrderedState());
         automationComposition.setDescription(description);
         automationComposition.setElements(
-            PfUtils.mapMap(elements, JpaAutomationCompositionElement::toAuthorative, new LinkedHashMap<>(0)));
+                PfUtils.mapMap(elements, JpaAutomationCompositionElement::toAuthorative, new LinkedHashMap<>(0)));
         automationComposition.setPrimed(primed);
 
         return automationComposition;
@@ -181,7 +175,7 @@ public class JpaAutomationComposition extends PfConcept implements PfAuthorative
             this.setKey(new PfConceptKey(automationComposition.getName(), automationComposition.getVersion()));
         }
 
-        this.definition = automationComposition.getDefinition().asConceptKey();
+        this.compositionId = automationComposition.getCompositionId().toString();
         this.state = automationComposition.getState();
         this.orderedState = automationComposition.getOrderedState();
         this.description = automationComposition.getDescription();
@@ -191,7 +185,7 @@ public class JpaAutomationComposition extends PfConcept implements PfAuthorative
         for (Entry<UUID, AutomationCompositionElement> elementEntry : automationComposition.getElements().entrySet()) {
             var jpaAutomationCompositionElement = new JpaAutomationCompositionElement();
             jpaAutomationCompositionElement
-                .setKey(new PfReferenceKey(getKey(), elementEntry.getValue().getId().toString()));
+                    .setKey(new PfReferenceKey(getKey(), elementEntry.getValue().getId().toString()));
             jpaAutomationCompositionElement.fromAuthorative(elementEntry.getValue());
             this.elements.put(elementEntry.getKey(), jpaAutomationCompositionElement);
         }
@@ -201,8 +195,6 @@ public class JpaAutomationComposition extends PfConcept implements PfAuthorative
     public List<PfKey> getKeys() {
         List<PfKey> keyList = getKey().getKeys();
 
-        keyList.add(definition);
-
         for (JpaAutomationCompositionElement element : elements.values()) {
             keyList.addAll(element.getKeys());
         }
@@ -213,7 +205,6 @@ public class JpaAutomationComposition extends PfConcept implements PfAuthorative
     @Override
     public void clean() {
         key.clean();
-        definition.clean();
         description = (description == null ? null : description.trim());
 
         for (JpaAutomationCompositionElement element : elements.values()) {
@@ -239,7 +230,7 @@ public class JpaAutomationComposition extends PfConcept implements PfAuthorative
             return result;
         }
 
-        result = definition.compareTo(other.definition);
+        result = ObjectUtils.compare(compositionId, other.compositionId);
         if (result != 0) {
             return result;
         }
index 46c09d3..247d8f2 100644 (file)
@@ -32,11 +32,14 @@ import javax.persistence.OneToOne;
 import javax.persistence.Table;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import lombok.NonNull;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionDefinition;
-import org.onap.policy.clamp.models.acm.persistence.provider.ProviderUtils;
+import org.onap.policy.clamp.models.acm.utils.AcmUtils;
+import org.onap.policy.common.parameters.BeanValidationResult;
 import org.onap.policy.common.parameters.annotations.NotNull;
 import org.onap.policy.common.parameters.annotations.Valid;
 import org.onap.policy.models.base.PfAuthorative;
+import org.onap.policy.models.base.Validated;
 import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
 
 /**
@@ -47,7 +50,8 @@ import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
 @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
 @Data
 @EqualsAndHashCode(callSuper = false)
-public class JpaAutomationCompositionDefinition implements PfAuthorative<AutomationCompositionDefinition> {
+public class JpaAutomationCompositionDefinition extends Validated
+        implements PfAuthorative<AutomationCompositionDefinition> {
 
     @Id
     @NotNull
@@ -69,9 +73,7 @@ public class JpaAutomationCompositionDefinition implements PfAuthorative<Automat
     @Override
     public void fromAuthorative(final AutomationCompositionDefinition copyConcept) {
         compositionId = copyConcept.getCompositionId().toString();
-        serviceTemplate = ProviderUtils.getJpaAndValidate(copyConcept.getServiceTemplate(),
-                JpaToscaServiceTemplate::new, "toscaServiceTemplate");
-
+        serviceTemplate = new JpaToscaServiceTemplate(copyConcept.getServiceTemplate());
     }
 
     public JpaAutomationCompositionDefinition(final AutomationCompositionDefinition acmDefinition) {
@@ -82,4 +84,16 @@ public class JpaAutomationCompositionDefinition implements PfAuthorative<Automat
         super();
     }
 
+    @Override
+    public BeanValidationResult validate(@NonNull String fieldName) {
+        var result = super.validate(fieldName);
+
+        AcmUtils.validateToscaTopologyTemplate(result, serviceTemplate);
+
+        if (!result.isValid()) {
+            return result;
+        }
+
+        return result;
+    }
 }
index 5740207..dc1785e 100644 (file)
@@ -21,6 +21,7 @@
 package org.onap.policy.clamp.models.acm.persistence.provider;
 
 import java.util.List;
+import java.util.Optional;
 import java.util.UUID;
 import javax.ws.rs.core.Response;
 import lombok.RequiredArgsConstructor;
@@ -53,7 +54,10 @@ public class AcDefinitionProvider {
         var acmDefinition = new AutomationCompositionDefinition();
         acmDefinition.setCompositionId(UUID.randomUUID());
         acmDefinition.setServiceTemplate(serviceTemplate);
-        var result = acmDefinitionRepository.save(new JpaAutomationCompositionDefinition(acmDefinition));
+        var jpaAcmDefinition = ProviderUtils.getJpaAndValidate(acmDefinition, JpaAutomationCompositionDefinition::new,
+                "AutomationCompositionDefinition");
+        var result = acmDefinitionRepository.save(jpaAcmDefinition);
+
         return result.toAuthorative();
     }
 
@@ -107,13 +111,26 @@ public class AcDefinitionProvider {
     }
 
     /**
-     * Get service templates.
+     * Get the requested automation composition definition.
      *
-     * @return the topology templates found
+     * @param compositionId The UUID of the automation composition definition to delete
+     * @return the automation composition definition
+     */
+    @Transactional(readOnly = true)
+    public Optional<ToscaServiceTemplate> findAcDefinition(UUID compositionId) {
+        var jpaGet = acmDefinitionRepository.findById(compositionId.toString());
+        return jpaGet.stream().map(JpaAutomationCompositionDefinition::getServiceTemplate)
+                .map(JpaToscaServiceTemplate::toAuthorative).findFirst();
+    }
+
+    /**
+     * Get Automation Composition Definitions.
+     *
+     * @return the Automation Composition Definitions found
      */
     @Transactional(readOnly = true)
-    public List<ToscaServiceTemplate> getAllServiceTemplates() {
-        var jpaList = serviceTemplateRepository.findAll();
+    public List<AutomationCompositionDefinition> getAllAcDefinitions() {
+        var jpaList = acmDefinitionRepository.findAll();
         return ProviderUtils.asEntityList(jpaList);
     }
 
index c4f8b91..272ea42 100644 (file)
@@ -24,6 +24,7 @@ package org.onap.policy.clamp.models.acm.persistence.provider;
 
 import java.util.List;
 import java.util.Optional;
+import java.util.UUID;
 import javax.persistence.EntityNotFoundException;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
@@ -32,13 +33,9 @@ import lombok.NonNull;
 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
 import org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationComposition;
 import org.onap.policy.clamp.models.acm.persistence.repository.AutomationCompositionRepository;
-import org.onap.policy.clamp.models.acm.persistence.repository.ToscaNodeTemplateRepository;
 import org.onap.policy.models.base.PfConceptKey;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaTypedEntityFilter;
-import org.onap.policy.models.tosca.simple.concepts.JpaToscaNodeTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -51,7 +48,6 @@ import org.springframework.transaction.annotation.Transactional;
 public class AutomationCompositionProvider {
 
     private final AutomationCompositionRepository automationCompositionRepository;
-    private final ToscaNodeTemplateRepository toscaNodeTemplateRepository;
 
     /**
      * Get automation composition.
@@ -62,7 +58,7 @@ public class AutomationCompositionProvider {
      */
     @Transactional(readOnly = true)
     public AutomationComposition getAutomationComposition(final ToscaConceptIdentifier automationCompositionId)
-        throws PfModelException {
+            throws PfModelException {
         try {
             return automationCompositionRepository.getById(automationCompositionId.asConceptKey()).toAuthorative();
         } catch (EntityNotFoundException e) {
@@ -80,7 +76,7 @@ public class AutomationCompositionProvider {
      */
     @Transactional(readOnly = true)
     public Optional<AutomationComposition> findAutomationComposition(@NonNull final String name,
-        @NonNull final String version) throws PfModelException {
+            @NonNull final String version) throws PfModelException {
         return findAutomationComposition(new PfConceptKey(name, version));
     }
 
@@ -93,12 +89,12 @@ public class AutomationCompositionProvider {
      */
     @Transactional(readOnly = true)
     public Optional<AutomationComposition> findAutomationComposition(
-        final ToscaConceptIdentifier automationCompositionId) throws PfModelException {
+            final ToscaConceptIdentifier automationCompositionId) throws PfModelException {
         return findAutomationComposition(automationCompositionId.asConceptKey());
     }
 
     private Optional<AutomationComposition> findAutomationComposition(@NonNull final PfConceptKey key)
-        throws PfModelException {
+            throws PfModelException {
         try {
             return automationCompositionRepository.findById(key).map(JpaAutomationComposition::toAuthorative);
         } catch (IllegalArgumentException e) {
@@ -114,10 +110,10 @@ public class AutomationCompositionProvider {
      * @throws PfModelException on errors updating the automation composition
      */
     public AutomationComposition saveAutomationComposition(final AutomationComposition automationComposition)
-        throws PfModelException {
+            throws PfModelException {
         try {
             var result = automationCompositionRepository.save(ProviderUtils.getJpaAndValidate(automationComposition,
-                JpaAutomationComposition::new, "automation composition"));
+                    JpaAutomationComposition::new, "automation composition"));
 
             // Return the saved participant
             return result.toAuthorative();
@@ -127,14 +123,15 @@ public class AutomationCompositionProvider {
     }
 
     /**
-     * Get all automation compositions.
+     * Get all automation compositions by compositionId.
      *
+     * @param compositionId the compositionId of the automation composition definition
      * @return all automation compositions found
      */
     @Transactional(readOnly = true)
-    public List<AutomationComposition> getAutomationCompositions() {
-
-        return ProviderUtils.asEntityList(automationCompositionRepository.findAll());
+    public List<AutomationComposition> getAcInstancesByCompositionId(UUID compositionId) {
+        return ProviderUtils
+                .asEntityList(automationCompositionRepository.findByCompositionId(compositionId.toString()));
     }
 
     /**
@@ -147,8 +144,8 @@ public class AutomationCompositionProvider {
     @Transactional(readOnly = true)
     public List<AutomationComposition> getAutomationCompositions(final String name, final String version) {
 
-        return ProviderUtils
-            .asEntityList(automationCompositionRepository.getFiltered(JpaAutomationComposition.class, name, version));
+        return ProviderUtils.asEntityList(
+                automationCompositionRepository.getFiltered(JpaAutomationComposition.class, name, version));
     }
 
     /**
@@ -159,11 +156,11 @@ public class AutomationCompositionProvider {
      * @throws PfModelException on errors creating automation compositions
      */
     public List<AutomationComposition> saveAutomationCompositions(
-        @NonNull final List<AutomationComposition> automationCompositions) throws PfModelException {
+            @NonNull final List<AutomationComposition> automationCompositions) throws PfModelException {
         try {
             var result =
-                automationCompositionRepository.saveAll(ProviderUtils.getJpaAndValidateList(automationCompositions,
-                    JpaAutomationComposition::new, "automation compositions"));
+                    automationCompositionRepository.saveAll(ProviderUtils.getJpaAndValidateList(automationCompositions,
+                            JpaAutomationComposition::new, "automation compositions"));
 
             // Return the saved participant
             return ProviderUtils.asEntityList(result);
@@ -181,14 +178,14 @@ public class AutomationCompositionProvider {
      * @throws PfModelException on errors deleting the automation composition
      */
     public AutomationComposition deleteAutomationComposition(@NonNull final String name, @NonNull final String version)
-        throws PfModelException {
+            throws PfModelException {
 
         var automationCompositionKey = new PfConceptKey(name, version);
         var jpaDeleteAutomationComposition = automationCompositionRepository.findById(automationCompositionKey);
 
         if (jpaDeleteAutomationComposition.isEmpty()) {
             String errorMessage = "delete of automation composition \"" + automationCompositionKey.getId()
-                + "\" failed, automation composition does not exist";
+                    + "\" failed, automation composition does not exist";
             throw new PfModelException(Response.Status.NOT_FOUND, errorMessage);
         }
 
@@ -196,43 +193,4 @@ public class AutomationCompositionProvider {
 
         return jpaDeleteAutomationComposition.get().toAuthorative();
     }
-
-    /**
-     * Get All Node Templates.
-     *
-     * @return the list of node templates found
-     */
-    @Transactional(readOnly = true)
-    public List<ToscaNodeTemplate> getAllNodeTemplates() {
-        return ProviderUtils.asEntityList(toscaNodeTemplateRepository.findAll());
-    }
-
-    /**
-     * Get Node Templates.
-     *
-     * @param name the name of the node template to get, null to get all node templates
-     * @param version the version of the node template to get, null to get all node templates
-     * @return the node templates found
-     * @throws PfModelException on errors getting node templates
-     */
-    @Transactional(readOnly = true)
-    public List<ToscaNodeTemplate> getNodeTemplates(final String name, final String version) {
-        return ProviderUtils
-            .asEntityList(toscaNodeTemplateRepository.getFiltered(JpaToscaNodeTemplate.class, name, version));
-    }
-
-    /**
-     * Get filtered node templates.
-     *
-     * @param filter the filter for the node templates to get
-     * @return the node templates found
-     * @throws PfModelException on errors getting node templates
-     */
-    @Transactional(readOnly = true)
-    public List<ToscaNodeTemplate> getFilteredNodeTemplates(
-        @NonNull final ToscaTypedEntityFilter<ToscaNodeTemplate> filter) {
-
-        return filter.filter(ProviderUtils.asEntityList(toscaNodeTemplateRepository
-            .getFiltered(JpaToscaNodeTemplate.class, filter.getName(), filter.getVersion())));
-    }
 }
index 7d751fa..9dc07ae 100644 (file)
@@ -31,7 +31,7 @@ import org.onap.policy.common.parameters.BeanValidationResult;
 import org.onap.policy.models.base.PfAuthorative;
 import org.onap.policy.models.base.PfConcept;
 import org.onap.policy.models.base.PfModelRuntimeException;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity;
+import org.onap.policy.models.base.Validated;
 
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class ProviderUtils {
@@ -72,7 +72,7 @@ public final class ProviderUtils {
      * @param conceptDescription the description used for validation result
      * @return the Jpa object
      */
-    public static <A, J extends PfConcept & PfAuthorative<A>> J getJpaAndValidate(A authorativeConcept,
+    public static <A, J extends Validated & PfAuthorative<A>> J getJpaAndValidate(A authorativeConcept,
             Supplier<J> jpaSupplier, String conceptDescription) {
         var validationResult = new BeanValidationResult(conceptDescription, authorativeConcept);
 
@@ -95,7 +95,7 @@ public final class ProviderUtils {
      * @param jpaEntityList the list to convert
      * @return the authorative list
      */
-    public static <T extends ToscaEntity, J extends PfAuthorative<T>> List<T> asEntityList(List<J> jpaEntityList) {
+    public static <T, J extends PfAuthorative<T>> List<T> asEntityList(List<J> jpaEntityList) {
         return jpaEntityList.stream().map(J::toAuthorative).collect(Collectors.toList());
     }
 }
index 8eeb77e..273b99a 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
+ *  Copyright (C) 2021-2022 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +20,7 @@
 
 package org.onap.policy.clamp.models.acm.persistence.repository;
 
+import java.util.List;
 import org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationComposition;
 import org.onap.policy.models.base.PfConceptKey;
 import org.springframework.data.jpa.repository.JpaRepository;
@@ -28,4 +29,6 @@ import org.springframework.stereotype.Repository;
 @Repository
 public interface AutomationCompositionRepository
     extends JpaRepository<JpaAutomationComposition, PfConceptKey>, FilterRepository {
+
+    List<JpaAutomationComposition> findByCompositionId(String compositionId);
 }
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/ToscaNodeTemplateRepository.java b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/ToscaNodeTemplateRepository.java
deleted file mode 100644 (file)
index 20d0f0f..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.clamp.models.acm.persistence.repository;
-
-import org.onap.policy.models.base.PfConceptKey;
-import org.onap.policy.models.tosca.simple.concepts.JpaToscaNodeTemplate;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-public interface ToscaNodeTemplateRepository
-        extends JpaRepository<JpaToscaNodeTemplate, PfConceptKey>, FilterRepository {
-
-}
index 283edd4..a820348 100644 (file)
@@ -48,6 +48,7 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeType;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
+import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
 
 /**
  * Utility functions used in acm-runtime and participants.
@@ -57,6 +58,8 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
 public final class AcmUtils {
 
     private static final String AUTOMATION_COMPOSITION_NODE_TYPE = "org.onap.policy.clamp.acm.AutomationComposition";
+    private static final String AC_NODE_TYPE_NOT_PRESENT =
+            "NodeTemplate with type " + AUTOMATION_COMPOSITION_NODE_TYPE + " must exist!";
     public static final String ENTRY = "entry ";
 
     /**
@@ -175,20 +178,19 @@ public final class AcmUtils {
      */
     public static BeanValidationResult validateAutomationComposition(AutomationComposition automationComposition,
             ToscaServiceTemplate serviceTemplate) {
-        var result = new BeanValidationResult(ENTRY + automationComposition.getDefinition().getName(),
-                automationComposition);
+        var result = new BeanValidationResult(ENTRY + automationComposition.getName(), automationComposition);
 
         var map = getMapToscaNodeTemplates(serviceTemplate);
 
-        var toscaNodeTemplate = map.get(new ToscaConceptIdentifier(automationComposition.getDefinition().getName(),
-                automationComposition.getDefinition().getVersion()));
+        var nodeTemplateGet = map.values().stream()
+                .filter(nodeTemplate -> AUTOMATION_COMPOSITION_NODE_TYPE.equals(nodeTemplate.getType())).findFirst();
 
-        if (toscaNodeTemplate == null || !AUTOMATION_COMPOSITION_NODE_TYPE.equals(toscaNodeTemplate.getType())) {
-            result.addResult(
-                    new ObjectValidationResult("AutomationComposition", automationComposition.getDefinition().getName(),
-                            ValidationStatus.INVALID, "Commissioned automation composition definition not found"));
+        if (nodeTemplateGet.isEmpty()) {
+            result.addResult(new ObjectValidationResult("ToscaServiceTemplate", serviceTemplate.getName(),
+                    ValidationStatus.INVALID, "Commissioned automation composition definition not consistent"));
         } else {
 
+            var toscaNodeTemplate = nodeTemplateGet.get();
             var acElementDefinitions = getAutomationCompositionElementDefinitions(map, toscaNodeTemplate);
 
             // @formatter:off
@@ -354,4 +356,32 @@ public final class AcmUtils {
 
         return getFinalNodeTypesMap(serviceTemplate.getNodeTypes(), tempNodeTypesMap);
     }
+
+    /**
+     * Validate ToscaTopologyTemplate.
+     *
+     * @param result
+     *
+     * @param serviceTemplate the ToscaServiceTemplate
+     */
+    public static void validateToscaTopologyTemplate(BeanValidationResult result,
+            JpaToscaServiceTemplate serviceTemplate) {
+        if (serviceTemplate.getTopologyTemplate() != null
+                && serviceTemplate.getTopologyTemplate().getNodeTemplates() != null) {
+            var nodeTemplates = serviceTemplate.getTopologyTemplate().getNodeTemplates();
+            var acNumber = nodeTemplates.getConceptMap().values().stream()
+                    .filter(nodeTemplate -> AUTOMATION_COMPOSITION_NODE_TYPE.equals(nodeTemplate.getType().getName()))
+                    .count();
+            if (acNumber == 0) {
+                result.addResult("TopologyTemplate", nodeTemplates, ValidationStatus.INVALID, AC_NODE_TYPE_NOT_PRESENT);
+            }
+            if (acNumber > 1) {
+                result.addResult("TopologyTemplate", nodeTemplates, ValidationStatus.INVALID, "NodeTemplate with type "
+                        + AUTOMATION_COMPOSITION_NODE_TYPE + " not allowed to be more than one!");
+            }
+        } else {
+            result.addResult("ServiceTemplate", serviceTemplate, ValidationStatus.INVALID, AC_NODE_TYPE_NOT_PRESENT);
+        }
+    }
+
 }
index aaa8368..e32735f 100644 (file)
@@ -30,16 +30,12 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 import java.util.LinkedHashMap;
 import java.util.UUID;
 import org.junit.jupiter.api.Test;
-import org.onap.policy.models.base.PfKey;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 class AutomationCompositionTest {
     @Test
     void testAutomationComposition() {
         var ac0 = new AutomationComposition();
-        ac0.setDefinition(new ToscaConceptIdentifier("dfName", "1.2.3"));
-        assertEquals("dfName", ac0.getType());
-        assertEquals("1.2.3", ac0.getTypeVersion());
+        ac0.setCompositionId(UUID.randomUUID());
 
         var ac1 = new AutomationComposition(ac0);
         assertEquals(ac0, ac1);
@@ -60,7 +56,7 @@ class AutomationCompositionTest {
 
         var ac1 = new AutomationComposition();
 
-        ac1.setDefinition(new ToscaConceptIdentifier("defName", "0.0.1"));
+        ac1.setCompositionId(UUID.randomUUID());
         ac1.setDescription("Description");
         ac1.setElements(new LinkedHashMap<>());
         ac1.setName("Name");
@@ -79,7 +75,7 @@ class AutomationCompositionTest {
         ac2.setElements(new LinkedHashMap<>());
 
         // @formatter:off
-        assertThatThrownBy(() -> ac2.setDefinition(null)).  isInstanceOf(NullPointerException.class);
+        assertThatThrownBy(() -> ac2.setCompositionId(null)).  isInstanceOf(NullPointerException.class);
         assertThatThrownBy(() -> ac2.setOrderedState(null)).isInstanceOf(NullPointerException.class);
         assertThatThrownBy(() -> ac2.setState(null)).       isInstanceOf(NullPointerException.class);
         // @formatter:on
@@ -97,18 +93,5 @@ class AutomationCompositionTest {
 
         assertNull(ac0.getElements().get(UUID.randomUUID()));
         assertNull(ac1.getElements().get(UUID.randomUUID()));
-
-        assertEquals(PfKey.NULL_KEY_NAME, ac0.getDefinition().getName());
-
-    }
-
-    private AutomationCompositionElement getAutomationCompositionElementTest(UUID uuid, ToscaConceptIdentifier id) {
-        var acElement = new AutomationCompositionElement();
-        acElement.setId(uuid);
-        acElement.setParticipantId(id);
-        acElement.setDefinition(id);
-        acElement.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
-
-        return acElement;
     }
 }
index 20030e9..7103f7f 100644 (file)
@@ -136,10 +136,10 @@ class JpaAutomationCompositionElementTest {
 
     @Test
     void testJpaAutomationCompositionElement() {
-        JpaAutomationCompositionElement testJpaAutomationCompositionElement =
+        var testJpaAutomationCompositionElement =
             createJpaAutomationCompositionElementInstance();
 
-        AutomationCompositionElement ace = createAutomationCompositionElementInstance();
+        var ace = createAutomationCompositionElementInstance();
         assertEquals(ace, testJpaAutomationCompositionElement.toAuthorative());
 
         assertThatThrownBy(() -> {
@@ -149,7 +149,7 @@ class JpaAutomationCompositionElementTest {
         assertThatThrownBy(() -> new JpaAutomationCompositionElement((JpaAutomationCompositionElement) null))
             .isInstanceOf(NullPointerException.class);
 
-        JpaAutomationCompositionElement testJpaAutomationCompositionElementFa = new JpaAutomationCompositionElement();
+        var testJpaAutomationCompositionElementFa = new JpaAutomationCompositionElement();
         testJpaAutomationCompositionElementFa.setKey(null);
         testJpaAutomationCompositionElementFa.fromAuthorative(ace);
         assertEquals(testJpaAutomationCompositionElement, testJpaAutomationCompositionElementFa);
@@ -177,26 +177,26 @@ class JpaAutomationCompositionElementTest {
         testJpaAutomationCompositionElement.clean();
         assertEquals("A Message", testJpaAutomationCompositionElement.getDescription());
 
-        JpaAutomationCompositionElement testJpaAutomationCompositionElement2 =
+        var testJpaAutomationCompositionElement2 =
             new JpaAutomationCompositionElement(testJpaAutomationCompositionElement);
         assertEquals(testJpaAutomationCompositionElement, testJpaAutomationCompositionElement2);
     }
 
     @Test
     void testJpaAutomationCompositionElementOrderedState() throws CoderException {
-        AutomationCompositionElement testAutomationCompositionElement = createAutomationCompositionElementInstance();
-        JpaAutomationCompositionElement testJpaAutomationCompositionElement =
+        var testAutomationCompositionElement = createAutomationCompositionElementInstance();
+        var testJpaAutomationCompositionElement =
             createJpaAutomationCompositionElementInstance();
 
         testJpaAutomationCompositionElement.setOrderedState(null);
         assertEquals(testAutomationCompositionElement, testJpaAutomationCompositionElement.toAuthorative());
         testJpaAutomationCompositionElement.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
 
-        AutomationCompositionElement noOrderedStateAce = new StandardCoder().decode(
+        var noOrderedStateAce = new StandardCoder().decode(
             new File("src/test/resources/json/AutomationCompositionElementNoOrderedState.json"),
             AutomationCompositionElement.class);
 
-        JpaAutomationCompositionElement noOrderedStateJpaAce = new JpaAutomationCompositionElement(noOrderedStateAce);
+        var noOrderedStateJpaAce = new JpaAutomationCompositionElement(noOrderedStateAce);
         assertNull(noOrderedStateJpaAce.getOrderedState());
         noOrderedStateAce.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
         noOrderedStateJpaAce = new JpaAutomationCompositionElement(noOrderedStateAce);
@@ -205,7 +205,7 @@ class JpaAutomationCompositionElementTest {
 
     @Test
     void testJpaAutomationCompositionElementValidation() {
-        JpaAutomationCompositionElement testJpaAutomationCompositionElement =
+        var testJpaAutomationCompositionElement =
             createJpaAutomationCompositionElementInstance();
 
         assertThatThrownBy(() -> testJpaAutomationCompositionElement.validate(null))
@@ -216,10 +216,10 @@ class JpaAutomationCompositionElementTest {
 
     @Test
     void testJpaAutomationCompositionElementCompareTo() {
-        JpaAutomationCompositionElement testJpaAutomationCompositionElement =
+        var testJpaAutomationCompositionElement =
             createJpaAutomationCompositionElementInstance();
 
-        JpaAutomationCompositionElement otherJpaAutomationCompositionElement =
+        var otherJpaAutomationCompositionElement =
             new JpaAutomationCompositionElement(testJpaAutomationCompositionElement);
         assertEquals(0, testJpaAutomationCompositionElement.compareTo(otherJpaAutomationCompositionElement));
         assertEquals(-1, testJpaAutomationCompositionElement.compareTo(null));
@@ -266,14 +266,14 @@ class JpaAutomationCompositionElementTest {
     @Test
     void testJpaAutomationCompositionElementLombok() {
         assertNotNull(new Participant());
-        JpaAutomationCompositionElement ace0 = new JpaAutomationCompositionElement();
+        var ace0 = new JpaAutomationCompositionElement();
 
         assertThat(ace0.toString()).contains("JpaAutomationCompositionElement(");
         assertThat(ace0.hashCode()).isNotZero();
         assertEquals(ace0, ace0);
         assertNotEquals(null, ace0);
 
-        JpaAutomationCompositionElement ace1 = new JpaAutomationCompositionElement();
+        var ace1 = new JpaAutomationCompositionElement();
 
         ace1.setDefinition(new PfConceptKey("defName", "0.0.1"));
         ace1.setDescription("Description");
@@ -288,13 +288,13 @@ class JpaAutomationCompositionElementTest {
 
         assertNotEquals(ace1, ace0);
 
-        JpaAutomationCompositionElement ace2 = new JpaAutomationCompositionElement();
+        var ace2 = new JpaAutomationCompositionElement();
         assertEquals(ace2, ace0);
     }
 
     private JpaAutomationCompositionElement createJpaAutomationCompositionElementInstance() {
-        AutomationCompositionElement testAce = createAutomationCompositionElementInstance();
-        JpaAutomationCompositionElement testJpaAutomationCompositionElement = new JpaAutomationCompositionElement();
+        var testAce = createAutomationCompositionElementInstance();
+        var testJpaAutomationCompositionElement = new JpaAutomationCompositionElement();
         testJpaAutomationCompositionElement.setKey(null);
         testJpaAutomationCompositionElement.fromAuthorative(testAce);
         testJpaAutomationCompositionElement.setKey(PfReferenceKey.getNullKey());
@@ -304,7 +304,7 @@ class JpaAutomationCompositionElementTest {
     }
 
     private AutomationCompositionElement createAutomationCompositionElementInstance() {
-        AutomationCompositionElement automationCompositionElement = new AutomationCompositionElement();
+        var automationCompositionElement = new AutomationCompositionElement();
         automationCompositionElement.setId(UUID.fromString("a95757ba-b34a-4049-a2a8-46773abcbe5e"));
         automationCompositionElement.setDefinition(new ToscaConceptIdentifier("aceDef", "0.0.1"));
         automationCompositionElement.setParticipantType(new ToscaConceptIdentifier("participantType", "0.0.1"));
index 4dea5bd..733ba38 100644 (file)
@@ -24,7 +24,6 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
@@ -32,6 +31,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.File;
 import java.util.LinkedHashMap;
+import java.util.UUID;
 import org.junit.jupiter.api.Test;
 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
@@ -40,7 +40,6 @@ import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.models.base.PfConceptKey;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 
 /**
  * Test the {@link JpaAutomationCompositionTest} class.
@@ -48,6 +47,7 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 class JpaAutomationCompositionTest {
 
     private static final String NULL_KEY_ERROR = "key is marked .*ull but is null";
+    private static final String COMPOSITION_ID = "709c62b3-8918-41b9-a747-e21eb79c6c41";
 
     @Test
     void testJpaAutomationCompositionConstructor() {
@@ -76,63 +76,61 @@ class JpaAutomationCompositionTest {
         }).hasMessageMatching(NULL_KEY_ERROR);
 
         assertThatThrownBy(() -> {
-            new JpaAutomationComposition(null, new PfConceptKey(), null, null);
+            new JpaAutomationComposition(null, "key", null, null);
         }).hasMessageMatching(NULL_KEY_ERROR);
 
         assertThatThrownBy(() -> {
-            new JpaAutomationComposition(null, new PfConceptKey(), null, new LinkedHashMap<>());
+            new JpaAutomationComposition(null, "key", null, new LinkedHashMap<>());
         }).hasMessageMatching(NULL_KEY_ERROR);
 
         assertThatThrownBy(() -> {
-            new JpaAutomationComposition(null, new PfConceptKey(), AutomationCompositionState.UNINITIALISED, null);
+            new JpaAutomationComposition(null, "key", AutomationCompositionState.UNINITIALISED, null);
         }).hasMessageMatching(NULL_KEY_ERROR);
 
         assertThatThrownBy(() -> {
-            new JpaAutomationComposition(null, new PfConceptKey(), AutomationCompositionState.UNINITIALISED,
-                new LinkedHashMap<>());
+            new JpaAutomationComposition(null, "key", AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>());
         }).hasMessageMatching(NULL_KEY_ERROR);
 
         assertThatThrownBy(() -> {
             new JpaAutomationComposition(new PfConceptKey(), null, null, null);
-        }).hasMessageMatching("definition is marked .*ull but is null");
+        }).hasMessageMatching("compositionId is marked .*ull but is null");
 
         assertThatThrownBy(() -> {
             new JpaAutomationComposition(new PfConceptKey(), null, null, new LinkedHashMap<>());
-        }).hasMessageMatching("definition is marked .*ull but is null");
+        }).hasMessageMatching("compositionId is marked .*ull but is null");
 
         assertThatThrownBy(() -> {
             new JpaAutomationComposition(new PfConceptKey(), null, AutomationCompositionState.UNINITIALISED, null);
-        }).hasMessageMatching("definition is marked .*ull but is null");
+        }).hasMessageMatching("compositionId is marked .*ull but is null");
 
         assertThatThrownBy(() -> {
             new JpaAutomationComposition(new PfConceptKey(), null, AutomationCompositionState.UNINITIALISED,
-                new LinkedHashMap<>());
-        }).hasMessageMatching("definition is marked .*ull but is null");
+                    new LinkedHashMap<>());
+        }).hasMessageMatching("compositionId is marked .*ull but is null");
 
         assertThatThrownBy(() -> {
-            new JpaAutomationComposition(new PfConceptKey(), new PfConceptKey(), null, null);
+            new JpaAutomationComposition(new PfConceptKey(), "key", null, null);
         }).hasMessageMatching("state is marked .*ull but is null");
 
         assertThatThrownBy(() -> {
-            new JpaAutomationComposition(new PfConceptKey(), new PfConceptKey(), null, new LinkedHashMap<>());
+            new JpaAutomationComposition(new PfConceptKey(), "key", null, new LinkedHashMap<>());
         }).hasMessageMatching("state is marked .*ull but is null");
 
         assertThatThrownBy(() -> {
-            new JpaAutomationComposition(new PfConceptKey(), new PfConceptKey(),
-                AutomationCompositionState.UNINITIALISED, null);
+            new JpaAutomationComposition(new PfConceptKey(), "key", AutomationCompositionState.UNINITIALISED, null);
         }).hasMessageMatching("elements is marked .*ull but is null");
 
         assertNotNull(new JpaAutomationComposition());
         assertNotNull(new JpaAutomationComposition((new PfConceptKey())));
-        assertNotNull(new JpaAutomationComposition(new PfConceptKey(), new PfConceptKey(),
-            AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>()));
+        assertNotNull(new JpaAutomationComposition(new PfConceptKey(), "key", AutomationCompositionState.UNINITIALISED,
+                new LinkedHashMap<>()));
     }
 
     @Test
     void testJpaAutomationComposition() {
-        JpaAutomationComposition testJpaAutomationComposition = createJpaAutomationCompositionInstance();
+        var testJpaAutomationComposition = createJpaAutomationCompositionInstance();
 
-        AutomationComposition participant = createAutomationCompositionInstance();
+        var participant = createAutomationCompositionInstance();
         assertEquals(participant, testJpaAutomationComposition.toAuthorative());
 
         assertThatThrownBy(() -> {
@@ -140,9 +138,9 @@ class JpaAutomationCompositionTest {
         }).hasMessageMatching("automationComposition is marked .*ull but is null");
 
         assertThatThrownBy(() -> new JpaAutomationComposition((JpaAutomationComposition) null))
-            .isInstanceOf(NullPointerException.class);
+                .isInstanceOf(NullPointerException.class);
 
-        JpaAutomationComposition testJpaAutomationCompositionFa = new JpaAutomationComposition();
+        var testJpaAutomationCompositionFa = new JpaAutomationComposition();
         testJpaAutomationCompositionFa.setKey(null);
         testJpaAutomationCompositionFa.fromAuthorative(participant);
         assertEquals(testJpaAutomationComposition, testJpaAutomationCompositionFa);
@@ -155,10 +153,10 @@ class JpaAutomationCompositionTest {
 
         assertEquals("automation-composition", testJpaAutomationComposition.getKey().getName());
         assertEquals("automation-composition",
-            new JpaAutomationComposition(createAutomationCompositionInstance()).getKey().getName());
+                new JpaAutomationComposition(createAutomationCompositionInstance()).getKey().getName());
         assertEquals("automation-composition",
-            ((PfConceptKey) new JpaAutomationComposition(createAutomationCompositionInstance()).getKeys().get(0))
-                .getName());
+                ((PfConceptKey) new JpaAutomationComposition(createAutomationCompositionInstance()).getKeys().get(0))
+                        .getName());
 
         testJpaAutomationComposition.clean();
         assertEquals("automation-composition", testJpaAutomationComposition.getKey().getName());
@@ -167,58 +165,57 @@ class JpaAutomationCompositionTest {
         testJpaAutomationComposition.clean();
         assertEquals("A Message", testJpaAutomationComposition.getDescription());
 
-        JpaAutomationComposition testJpaAutomationComposition2 =
-            new JpaAutomationComposition(testJpaAutomationComposition);
+        var testJpaAutomationComposition2 = new JpaAutomationComposition(testJpaAutomationComposition);
         assertEquals(testJpaAutomationComposition, testJpaAutomationComposition2);
     }
 
     @Test
     void testJpaAutomationCompositionElementOrderedState() throws CoderException {
-        AutomationComposition testAutomationComposition = createAutomationCompositionInstance();
-        JpaAutomationComposition testJpaAutomationComposition = createJpaAutomationCompositionInstance();
+        var testAutomationComposition = createAutomationCompositionInstance();
+        var testJpaAutomationComposition = createJpaAutomationCompositionInstance();
 
         testJpaAutomationComposition.setOrderedState(null);
         assertEquals(testAutomationComposition, testJpaAutomationComposition.toAuthorative());
         testJpaAutomationComposition.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
 
-        AutomationComposition noOrderedStateAc = new StandardCoder().decode(
-            new File("src/test/resources/json/AutomationCompositionNoOrderedState.json"), AutomationComposition.class);
+        var noOrderedStateAc =
+                new StandardCoder().decode(new File("src/test/resources/json/AutomationCompositionNoOrderedState.json"),
+                        AutomationComposition.class);
 
-        JpaAutomationComposition noOrderedStateJpaAc = new JpaAutomationComposition(noOrderedStateAc);
+        var noOrderedStateJpaAc = new JpaAutomationComposition(noOrderedStateAc);
         assertNull(noOrderedStateJpaAc.getOrderedState());
         noOrderedStateAc.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
         noOrderedStateJpaAc = new JpaAutomationComposition(noOrderedStateAc);
         assertEquals(testJpaAutomationComposition, noOrderedStateJpaAc);
 
-        AutomationCompositions automationCompositionsWithElements = new StandardCoder().decode(
-            new File("src/test/resources/providers/TestAutomationCompositions.json"), AutomationCompositions.class);
+        var automationCompositionsWithElements = new StandardCoder().decode(
+                new File("src/test/resources/providers/TestAutomationCompositions.json"), AutomationCompositions.class);
 
-        JpaAutomationComposition jpaAutomationCompositionWithElements =
-            new JpaAutomationComposition(automationCompositionsWithElements.getAutomationCompositionList().get(0));
+        var jpaAutomationCompositionWithElements =
+                new JpaAutomationComposition(automationCompositionsWithElements.getAutomationCompositionList().get(0));
         assertEquals(4, jpaAutomationCompositionWithElements.getElements().size());
-        assertEquals(18, jpaAutomationCompositionWithElements.getKeys().size());
+        assertEquals(17, jpaAutomationCompositionWithElements.getKeys().size());
         assertThatCode(jpaAutomationCompositionWithElements::clean).doesNotThrowAnyException();
 
         assertEquals(automationCompositionsWithElements.getAutomationCompositionList().get(0),
-            jpaAutomationCompositionWithElements.toAuthorative());
+                jpaAutomationCompositionWithElements.toAuthorative());
     }
 
     @Test
     void testJpaAutomationCompositionValidation() {
-        JpaAutomationComposition testJpaAutomationComposition = createJpaAutomationCompositionInstance();
+        var testJpaAutomationComposition = createJpaAutomationCompositionInstance();
 
         assertThatThrownBy(() -> testJpaAutomationComposition.validate(null))
-            .hasMessageMatching("fieldName is marked .*ull but is null");
+                .hasMessageMatching("fieldName is marked .*ull but is null");
 
         assertTrue(testJpaAutomationComposition.validate("").isValid());
     }
 
     @Test
     void testJpaAutomationCompositionCompareTo() {
-        JpaAutomationComposition testJpaAutomationComposition = createJpaAutomationCompositionInstance();
+        var testJpaAutomationComposition = createJpaAutomationCompositionInstance();
 
-        JpaAutomationComposition otherJpaAutomationComposition =
-            new JpaAutomationComposition(testJpaAutomationComposition);
+        var otherJpaAutomationComposition = new JpaAutomationComposition(testJpaAutomationComposition);
         assertEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
         assertEquals(-1, testJpaAutomationComposition.compareTo(null));
         assertEquals(0, testJpaAutomationComposition.compareTo(testJpaAutomationComposition));
@@ -229,9 +226,9 @@ class JpaAutomationCompositionTest {
         testJpaAutomationComposition.setKey(new PfConceptKey("automation-composition", "0.0.1"));
         assertEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
 
-        testJpaAutomationComposition.setDefinition(new PfConceptKey("BadValue", "0.0.1"));
+        testJpaAutomationComposition.setCompositionId(UUID.randomUUID().toString());
         assertNotEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
-        testJpaAutomationComposition.setDefinition(new PfConceptKey("automationCompositionDefinitionName", "0.0.1"));
+        testJpaAutomationComposition.setCompositionId(COMPOSITION_ID);
         assertEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
 
         testJpaAutomationComposition.setState(AutomationCompositionState.PASSIVE);
@@ -260,16 +257,17 @@ class JpaAutomationCompositionTest {
     @Test
     void testJpaAutomationCompositionLombok() {
         assertNotNull(new AutomationComposition());
-        JpaAutomationComposition ac0 = new JpaAutomationComposition();
+        var ac0 = new JpaAutomationComposition();
+        ac0.setCompositionId(COMPOSITION_ID);
 
         assertThat(ac0.toString()).contains("JpaAutomationComposition(");
         assertThat(ac0.hashCode()).isNotZero();
         assertEquals(ac0, ac0);
         assertNotEquals(null, ac0);
 
-        JpaAutomationComposition ac1 = new JpaAutomationComposition();
+        var ac1 = new JpaAutomationComposition();
 
-        ac1.setDefinition(new PfConceptKey("defName", "0.0.1"));
+        ac1.setCompositionId(UUID.randomUUID().toString());
         ac1.setDescription("Description");
         ac1.setElements(new LinkedHashMap<>());
         ac1.setKey(new PfConceptKey("participant", "0.0.1"));
@@ -282,13 +280,14 @@ class JpaAutomationCompositionTest {
 
         assertNotEquals(ac1, ac0);
 
-        JpaAutomationComposition ac2 = new JpaAutomationComposition();
+        var ac2 = new JpaAutomationComposition();
+        ac2.setCompositionId(COMPOSITION_ID);
         assertEquals(ac2, ac0);
     }
 
     private JpaAutomationComposition createJpaAutomationCompositionInstance() {
-        AutomationComposition testAutomationComposition = createAutomationCompositionInstance();
-        JpaAutomationComposition testJpaAutomationComposition = new JpaAutomationComposition();
+        var testAutomationComposition = createAutomationCompositionInstance();
+        var testJpaAutomationComposition = new JpaAutomationComposition();
         testJpaAutomationComposition.setKey(null);
         testJpaAutomationComposition.fromAuthorative(testAutomationComposition);
         testJpaAutomationComposition.setKey(PfConceptKey.getNullKey());
@@ -298,11 +297,10 @@ class JpaAutomationCompositionTest {
     }
 
     private AutomationComposition createAutomationCompositionInstance() {
-        AutomationComposition testAutomationComposition = new AutomationComposition();
+        var testAutomationComposition = new AutomationComposition();
         testAutomationComposition.setName("automation-composition");
         testAutomationComposition.setVersion("0.0.1");
-        testAutomationComposition
-            .setDefinition(new ToscaConceptIdentifier("automationCompositionDefinitionName", "0.0.1"));
+        testAutomationComposition.setCompositionId(UUID.fromString(COMPOSITION_ID));
         testAutomationComposition.setElements(new LinkedHashMap<>());
 
         return testAutomationComposition;
index e381693..5be603d 100644 (file)
@@ -23,7 +23,6 @@ package org.onap.policy.clamp.models.acm.persistence.provider;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
@@ -38,15 +37,11 @@ import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions;
 import org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationComposition;
 import org.onap.policy.clamp.models.acm.persistence.repository.AutomationCompositionRepository;
-import org.onap.policy.clamp.models.acm.persistence.repository.ToscaNodeTemplateRepository;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.common.utils.resources.ResourceUtils;
 import org.onap.policy.models.base.PfConceptKey;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaTypedEntityFilter;
-import org.onap.policy.models.tosca.simple.concepts.JpaToscaNodeTemplate;
 
 class AutomationCompositionProviderTest {
 
@@ -60,7 +55,7 @@ class AutomationCompositionProviderTest {
 
     private static final Coder CODER = new StandardCoder();
     private static final String AUTOMATION_COMPOSITION_JSON =
-        "src/test/resources/providers/TestAutomationCompositions.json";
+            "src/test/resources/providers/TestAutomationCompositions.json";
 
     private AutomationCompositions inputAutomationCompositions;
     private List<JpaAutomationComposition> inputAutomationCompositionsJpa;
@@ -70,71 +65,64 @@ class AutomationCompositionProviderTest {
     void beforeSetupDao() throws Exception {
         inputAutomationCompositions = CODER.decode(originalJson, AutomationCompositions.class);
         inputAutomationCompositionsJpa =
-            ProviderUtils.getJpaAndValidateList(inputAutomationCompositions.getAutomationCompositionList(),
-                JpaAutomationComposition::new, "automation compositions");
+                ProviderUtils.getJpaAndValidateList(inputAutomationCompositions.getAutomationCompositionList(),
+                        JpaAutomationComposition::new, "automation compositions");
     }
 
     @Test
     void testAutomationCompositionsSave() throws Exception {
         var automationCompositionRepository = mock(AutomationCompositionRepository.class);
-        var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository,
-            mock(ToscaNodeTemplateRepository.class));
+        var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository);
 
         assertThatThrownBy(() -> automationCompositionProvider.saveAutomationCompositions(null))
-            .hasMessageMatching(LIST_IS_NULL);
+                .hasMessageMatching(LIST_IS_NULL);
 
         when(automationCompositionRepository.saveAll(inputAutomationCompositionsJpa))
-            .thenReturn(inputAutomationCompositionsJpa);
+                .thenReturn(inputAutomationCompositionsJpa);
 
         var createdAutomationCompositions = new AutomationCompositions();
         createdAutomationCompositions.setAutomationCompositionList(automationCompositionProvider
-            .saveAutomationCompositions(inputAutomationCompositions.getAutomationCompositionList()));
+                .saveAutomationCompositions(inputAutomationCompositions.getAutomationCompositionList()));
 
         assertEquals(inputAutomationCompositions, createdAutomationCompositions);
 
         when(automationCompositionRepository.saveAll(any())).thenThrow(IllegalArgumentException.class);
 
         assertThatThrownBy(() -> automationCompositionProvider
-            .saveAutomationCompositions(inputAutomationCompositions.getAutomationCompositionList()))
-            .hasMessageMatching("Error in save AutomationCompositions");
+                .saveAutomationCompositions(inputAutomationCompositions.getAutomationCompositionList()))
+                        .hasMessageMatching("Error in save AutomationCompositions");
     }
 
     @Test
     void testAutomationCompositionSave() throws Exception {
         var automationCompositionRepository = mock(AutomationCompositionRepository.class);
-        var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository,
-            mock(ToscaNodeTemplateRepository.class));
+        var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository);
 
         assertThatThrownBy(() -> automationCompositionProvider.saveAutomationComposition(null))
-            .hasMessageMatching(OBJECT_IS_NULL);
+                .hasMessageMatching(OBJECT_IS_NULL);
 
         when(automationCompositionRepository.save(inputAutomationCompositionsJpa.get(0)))
-            .thenReturn(inputAutomationCompositionsJpa.get(0));
+                .thenReturn(inputAutomationCompositionsJpa.get(0));
 
         var createdAutomationComposition = automationCompositionProvider
-            .saveAutomationComposition(inputAutomationCompositions.getAutomationCompositionList().get(0));
+                .saveAutomationComposition(inputAutomationCompositions.getAutomationCompositionList().get(0));
 
         assertEquals(inputAutomationCompositions.getAutomationCompositionList().get(0), createdAutomationComposition);
 
         when(automationCompositionRepository.save(any())).thenThrow(IllegalArgumentException.class);
 
         assertThatThrownBy(() -> automationCompositionProvider
-            .saveAutomationComposition(inputAutomationCompositions.getAutomationCompositionList().get(0)))
-            .hasMessageMatching("Error in save automationComposition");
+                .saveAutomationComposition(inputAutomationCompositions.getAutomationCompositionList().get(0)))
+                        .hasMessageMatching("Error in save automationComposition");
     }
 
     @Test
     void testGetAutomationCompositions() throws Exception {
         var automationCompositionRepository = mock(AutomationCompositionRepository.class);
-        var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository,
-            mock(ToscaNodeTemplateRepository.class));
-
-        // Return empty list when no data present in db
-        List<AutomationComposition> getResponse = automationCompositionProvider.getAutomationCompositions();
-        assertThat(getResponse).isEmpty();
+        var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository);
 
         automationCompositionProvider
-            .saveAutomationCompositions(inputAutomationCompositions.getAutomationCompositionList());
+                .saveAutomationCompositions(inputAutomationCompositions.getAutomationCompositionList());
 
         var automationComposition0 = inputAutomationCompositions.getAutomationCompositionList().get(1);
         var name = automationComposition0.getName();
@@ -142,22 +130,22 @@ class AutomationCompositionProviderTest {
         var automationComposition1 = inputAutomationCompositions.getAutomationCompositionList().get(1);
 
         when(automationCompositionRepository.getFiltered(eq(JpaAutomationComposition.class), any(), any()))
-            .thenReturn(List.of(new JpaAutomationComposition(automationComposition0),
-                new JpaAutomationComposition(automationComposition1)));
+                .thenReturn(List.of(new JpaAutomationComposition(automationComposition0),
+                        new JpaAutomationComposition(automationComposition1)));
         when(automationCompositionRepository.findById(automationComposition0.getKey().asIdentifier().asConceptKey()))
-            .thenReturn(Optional.of(new JpaAutomationComposition(automationComposition0)));
+                .thenReturn(Optional.of(new JpaAutomationComposition(automationComposition0)));
         when(automationCompositionRepository.getById(automationComposition0.getKey().asIdentifier().asConceptKey()))
-            .thenReturn(new JpaAutomationComposition(automationComposition0));
+                .thenReturn(new JpaAutomationComposition(automationComposition0));
         when(automationCompositionRepository.getFiltered(JpaAutomationComposition.class, name, version))
-            .thenReturn(List.of(new JpaAutomationComposition(automationComposition0)));
+                .thenReturn(List.of(new JpaAutomationComposition(automationComposition0)));
         when(automationCompositionRepository.findById(automationComposition1.getKey().asIdentifier().asConceptKey()))
-            .thenReturn(Optional.of(new JpaAutomationComposition(automationComposition1)));
+                .thenReturn(Optional.of(new JpaAutomationComposition(automationComposition1)));
 
         assertEquals(1, automationCompositionProvider.getAutomationCompositions(name, version).size());
 
         var ac = automationCompositionProvider
-            .findAutomationComposition(new ToscaConceptIdentifier(ID_NAME, ID_VERSION))
-            .orElse(new AutomationComposition());
+                .findAutomationComposition(new ToscaConceptIdentifier(ID_NAME, ID_VERSION))
+                .orElse(new AutomationComposition());
         assertEquals(inputAutomationCompositions.getAutomationCompositionList().get(1), ac);
 
         ac = automationCompositionProvider.getAutomationComposition(new ToscaConceptIdentifier(ID_NAME, ID_VERSION));
@@ -166,79 +154,39 @@ class AutomationCompositionProviderTest {
         when(automationCompositionRepository.getById(any())).thenThrow(EntityNotFoundException.class);
 
         assertThatThrownBy(() -> automationCompositionProvider
-            .getAutomationComposition(new ToscaConceptIdentifier(ID_NAME_NOT_EXTST, ID_VERSION)))
-            .hasMessageMatching("AutomationComposition not found");
+                .getAutomationComposition(new ToscaConceptIdentifier(ID_NAME_NOT_EXTST, ID_VERSION)))
+                        .hasMessageMatching("AutomationComposition not found");
 
         ac = automationCompositionProvider.findAutomationComposition(ID_NAME, ID_VERSION)
-            .orElse(new AutomationComposition());
+                .orElse(new AutomationComposition());
         assertEquals(inputAutomationCompositions.getAutomationCompositionList().get(1), ac);
 
         assertThat(automationCompositionProvider
-            .findAutomationComposition(new ToscaConceptIdentifier(ID_NAME_NOT_EXTST, ID_VERSION))).isEmpty();
+                .findAutomationComposition(new ToscaConceptIdentifier(ID_NAME_NOT_EXTST, ID_VERSION))).isEmpty();
 
         when(automationCompositionRepository.findById(any())).thenThrow(IllegalArgumentException.class);
 
         assertThatThrownBy(() -> automationCompositionProvider.findAutomationComposition(ID_NAME_NOT_VALID, ID_VERSION))
-            .hasMessageMatching("Not valid parameter");
+                .hasMessageMatching("Not valid parameter");
     }
 
     @Test
     void testDeleteAutomationComposition() throws Exception {
         var automationCompositionRepository = mock(AutomationCompositionRepository.class);
-        var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository,
-            mock(ToscaNodeTemplateRepository.class));
+        var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository);
 
-        assertThatThrownBy(() -> automationCompositionProvider
-            .deleteAutomationComposition(ID_NAME_NOT_EXTST, ID_VERSION))
-            .hasMessageMatching(".*.failed, automation composition does not exist");
+        assertThatThrownBy(
+                () -> automationCompositionProvider.deleteAutomationComposition(ID_NAME_NOT_EXTST, ID_VERSION))
+                        .hasMessageMatching(".*.failed, automation composition does not exist");
 
         var automationComposition = inputAutomationCompositions.getAutomationCompositionList().get(0);
         var name = automationComposition.getName();
         var version = automationComposition.getVersion();
 
         when(automationCompositionRepository.findById(new PfConceptKey(name, version)))
-            .thenReturn(Optional.of(inputAutomationCompositionsJpa.get(0)));
+                .thenReturn(Optional.of(inputAutomationCompositionsJpa.get(0)));
 
         AutomationComposition deletedAc = automationCompositionProvider.deleteAutomationComposition(name, version);
         assertEquals(automationComposition, deletedAc);
     }
-
-    @Test
-    void testGetNodeTemplates() {
-        var toscaNodeTemplateRepository = mock(ToscaNodeTemplateRepository.class);
-        var automationCompositionProvider =
-            new AutomationCompositionProvider(mock(AutomationCompositionRepository.class), toscaNodeTemplateRepository);
-
-        var toscaNodeTemplate0 = new JpaToscaNodeTemplate(new PfConceptKey(ID_NAME, ID_VERSION));
-        var toscaNodeTemplate1 = new JpaToscaNodeTemplate(new PfConceptKey("PMSHInstance2", ID_VERSION));
-
-        when(toscaNodeTemplateRepository.getFiltered(JpaToscaNodeTemplate.class, null, null))
-            .thenReturn(List.of(toscaNodeTemplate0, toscaNodeTemplate1));
-        when(toscaNodeTemplateRepository.findAll()).thenReturn(List.of(toscaNodeTemplate0, toscaNodeTemplate1));
-        when(toscaNodeTemplateRepository.getFiltered(JpaToscaNodeTemplate.class, ID_NAME, ID_VERSION))
-            .thenReturn(List.of(toscaNodeTemplate0));
-
-        // Getting all nodes
-        var listNodes = automationCompositionProvider.getAllNodeTemplates();
-        assertNotNull(listNodes);
-        assertThat(listNodes).hasSize(2);
-
-        listNodes = automationCompositionProvider.getNodeTemplates(ID_NAME, ID_VERSION);
-        assertNotNull(listNodes);
-        assertThat(listNodes).hasSize(1);
-
-        listNodes = automationCompositionProvider.getAllNodeTemplates();
-        assertNotNull(listNodes);
-        assertThat(listNodes).hasSize(2);
-
-        var nodeTemplateFilter =
-            ToscaTypedEntityFilter.<ToscaNodeTemplate>builder().name(ID_NAME).version(ID_VERSION).build();
-
-        listNodes = automationCompositionProvider.getFilteredNodeTemplates(nodeTemplateFilter);
-        assertNotNull(listNodes);
-        assertThat(listNodes).hasSize(1);
-
-        assertThatThrownBy(() -> automationCompositionProvider.getFilteredNodeTemplates(null))
-            .hasMessageMatching("filter is marked non-null but is null");
-    }
 }
index d61a611..e19c86c 100644 (file)
@@ -1,8 +1,5 @@
 {
-    "definition": {
-        "name": "automationCompositionDefinitionName",
-        "version": "0.0.1"
-    },
+    "compositionId": "709c62b3-8918-41b9-a747-e21eb79c6c41",
     "state": "UNINITIALISED",
     "orderedState": null,
     "elements": [
index 9067852..171ce07 100644 (file)
@@ -1,10 +1,7 @@
 {
     "automationCompositionList": [
         {
-            "definition": {
-                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
-                "version": "1.0.0"
-            },
+            "compositionId": "709c62b3-8918-41b9-a747-e21eb79c6c40",
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
             "elements": {
             "description": "PMSH automation composition instance 0"
         },
         {
-            "definition": {
-                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
-                "version": "1.0.0"
-            },
+            "compositionId": "709c62b3-8918-41b9-a747-e21eb79c6c40",
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
             "elements": {
index e4d921a..cf7a93f 100644 (file)
@@ -60,14 +60,14 @@ public class ParticipantIntermediaryApiImpl implements ParticipantIntermediaryAp
      * @param automationCompositionHandler AutomationCompositionHandler
      */
     public ParticipantIntermediaryApiImpl(ParticipantHandler participantHandler,
-        AutomationCompositionHandler automationCompositionHandler) {
+            AutomationCompositionHandler automationCompositionHandler) {
         this.participantHandler = participantHandler;
         this.automationCompositionHandler = automationCompositionHandler;
     }
 
     @Override
     public void registerAutomationCompositionElementListener(
-        AutomationCompositionElementListener automationCompositionElementListener) {
+            AutomationCompositionElementListener automationCompositionElementListener) {
         automationCompositionHandler.registerAutomationCompositionElementListener(automationCompositionElementListener);
     }
 
@@ -93,11 +93,11 @@ public class ParticipantIntermediaryApiImpl implements ParticipantIntermediaryAp
 
     @Override
     public Map<UUID, AutomationCompositionElement> getAutomationCompositionElements(String name, String version) {
-        List<AutomationComposition> automationCompositions =
-            automationCompositionHandler.getAutomationCompositions().getAutomationCompositionList();
+        var automationCompositions =
+                automationCompositionHandler.getAutomationCompositions().getAutomationCompositionList();
 
-        for (AutomationComposition automationComposition : automationCompositions) {
-            if (name.equals(automationComposition.getDefinition().getName())) {
+        for (var automationComposition : automationCompositions) {
+            if (name.equals(automationComposition.getName())) {
                 return automationComposition.getElements();
             }
         }
@@ -107,7 +107,7 @@ public class ParticipantIntermediaryApiImpl implements ParticipantIntermediaryAp
     @Override
     public AutomationCompositionElement getAutomationCompositionElement(UUID id) {
         List<AutomationComposition> automationCompositions =
-            automationCompositionHandler.getAutomationCompositions().getAutomationCompositionList();
+                automationCompositionHandler.getAutomationCompositions().getAutomationCompositionList();
 
         for (AutomationComposition automationComposition : automationCompositions) {
             AutomationCompositionElement acElement = automationComposition.getElements().get(id);
@@ -120,9 +120,9 @@ public class ParticipantIntermediaryApiImpl implements ParticipantIntermediaryAp
 
     @Override
     public AutomationCompositionElement updateAutomationCompositionElementState(
-        ToscaConceptIdentifier automationCompositionId, UUID id, AutomationCompositionOrderedState currentState,
-        AutomationCompositionState newState, ParticipantMessageType messageType) {
+            ToscaConceptIdentifier automationCompositionId, UUID id, AutomationCompositionOrderedState currentState,
+            AutomationCompositionState newState, ParticipantMessageType messageType) {
         return automationCompositionHandler.updateAutomationCompositionElementState(automationCompositionId, id,
-            currentState, newState);
+                currentState, newState);
     }
 }
index 4c74e50..4512155 100644 (file)
@@ -202,7 +202,7 @@ public class AutomationCompositionHandler {
                 break;
             default:
                 LOGGER.debug("StateChange message has no state, state is null {}",
-                    automationComposition.getDefinition());
+                    automationComposition.getKey());
                 break;
         }
     }
@@ -255,11 +255,11 @@ public class AutomationCompositionHandler {
             return;
         }
 
+        automationComposition = new AutomationComposition();
+        automationComposition.setName(updateMsg.getAutomationCompositionId().getName());
+        automationComposition.setVersion(updateMsg.getAutomationCompositionId().getVersion());
         var acElements = storeElementsOnThisParticipant(updateMsg.getParticipantUpdatesList());
-
         var acElementMap = prepareAcElementMap(acElements);
-        automationComposition = new AutomationComposition();
-        automationComposition.setDefinition(updateMsg.getAutomationCompositionId());
         automationComposition.setElements(acElementMap);
         automationCompositionMap.put(updateMsg.getAutomationCompositionId(), automationComposition);
 
@@ -347,7 +347,7 @@ public class AutomationCompositionHandler {
             .filter(element -> !AutomationCompositionState.UNINITIALISED.equals(element.getState())).findAny()
             .isEmpty();
         if (isAllUninitialised) {
-            automationCompositionMap.remove(automationComposition.getDefinition());
+            automationCompositionMap.remove(automationComposition.getKey().asIdentifier());
             automationComposition.getElements().values()
                 .forEach(element -> elementsOnThisParticipant.remove(element.getId()));
         }
@@ -400,7 +400,7 @@ public class AutomationCompositionHandler {
             automationCompositionAck.setParticipantType(participantType);
             automationCompositionAck.setMessage("Automation composition is already in state " + orderedState);
             automationCompositionAck.setResult(false);
-            automationCompositionAck.setAutomationCompositionId(automationComposition.getDefinition());
+            automationCompositionAck.setAutomationCompositionId(automationComposition.getKey().asIdentifier());
             publisher.sendAutomationCompositionAck(automationCompositionAck);
             return;
         }
@@ -419,11 +419,12 @@ public class AutomationCompositionHandler {
             if (startPhaseMsg.equals(startPhase)) {
                 for (var acElementListener : listeners) {
                     try {
-                        acElementListener.automationCompositionElementStateChange(automationComposition.getDefinition(),
-                            acElement.getId(), acElement.getState(), orderedState);
+                        acElementListener.automationCompositionElementStateChange(
+                                automationComposition.getKey().asIdentifier(), acElement.getId(), acElement.getState(),
+                                orderedState);
                     } catch (PfModelException e) {
                         LOGGER.debug("Automation composition element update failed {}",
-                            automationComposition.getDefinition());
+                            automationComposition.getKey().asIdentifier());
                     }
                 }
             }
index 0d631ad..440958e 100644 (file)
@@ -43,8 +43,8 @@ class ParticipantIntermediaryApiImplTest {
     private static final String ID_NAME = "org.onap.PM_CDS_Blueprint";
     private static final String ID_VERSION = "1.0.1";
 
-    private static final String ID_NAME_E = "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition";
-    private static final String ID_VERSION_E = "1.0.0";
+    private static final String ID_NAME_E = "PMSHInstance1";
+    private static final String ID_VERSION_E = "1.0.1";
 
     private static final String ID_NAME_TYPE = "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant";
     private static final String ID_VERSION_TYPE = "2.3.4";
index 4e0f089..10ed6d1 100644 (file)
@@ -1,10 +1,7 @@
 {
     "automationCompositionList": [
         {
-            "definition": {
-                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
-                "version": "1.0.0"
-            },
+            "compositionId": "709c62b3-8918-41b9-a747-d21eb79c6c40",
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
             "elements": {
             "description": "PMSH automation composition instance 0"
         },
         {
-            "definition": {
-                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
-                "version": "1.0.0"
-            },
+            "compositionId": "709c62b3-8918-41b9-a747-d21eb79c6c40",
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
             "elements": {
index c256488..19d4afe 100644 (file)
 
 package org.onap.policy.clamp.acm.runtime.commissioning;
 
-import java.util.List;
 import java.util.UUID;
 import java.util.stream.Collectors;
 import javax.ws.rs.core.Response.Status;
 import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
-import org.onap.policy.clamp.models.acm.concepts.Participant;
 import org.onap.policy.clamp.models.acm.messages.rest.commissioning.CommissioningResponse;
 import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider;
 import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
@@ -118,7 +116,7 @@ public class CommissioningProvider {
      */
     public CommissioningResponse updateCompositionDefinition(UUID compositionId, ToscaServiceTemplate serviceTemplate) {
 
-        var automationCompositions = acProvider.getAutomationCompositions();
+        var automationCompositions = acProvider.getAcInstancesByCompositionId(compositionId);
         var result = new BeanValidationResult("AutomationCompositions", automationCompositions);
         for (var automationComposition : automationCompositions) {
             if (!AutomationCompositionState.UNINITIALISED.equals(automationComposition.getState())) {
@@ -145,11 +143,11 @@ public class CommissioningProvider {
      */
     public CommissioningResponse deleteAutomationCompositionDefinition(UUID compositionId) {
 
-        if (verifyIfInstanceExists()) {
+        if (verifyIfInstanceExists(compositionId)) {
             throw new PfModelRuntimeException(Status.BAD_REQUEST,
                     "Delete instances, to commission automation composition definitions");
         }
-        List<Participant> participantList = participantProvider.getParticipants();
+        var participantList = participantProvider.getParticipants();
         if (!participantList.isEmpty()) {
             supervisionHandler.handleSendDeCommissionMessage();
         }
@@ -190,8 +188,8 @@ public class CommissioningProvider {
      *
      * @return true if exists instance
      */
-    private boolean verifyIfInstanceExists() {
-        return !acProvider.getAutomationCompositions().isEmpty();
+    private boolean verifyIfInstanceExists(UUID compositionId) {
+        return !acProvider.getAcInstancesByCompositionId(compositionId).isEmpty();
     }
 
     /**
@@ -200,6 +198,6 @@ public class CommissioningProvider {
      * @return true if exists instance
      */
     private boolean verifyIfDefinitionExists() {
-        return !acDefinitionProvider.getAllServiceTemplates().isEmpty();
+        return !acDefinitionProvider.getAllAcDefinitions().isEmpty();
     }
 }
index df1f0ea..2601a23 100644 (file)
@@ -126,17 +126,14 @@ public class AutomationCompositionInstantiationProvider {
     private BeanValidationResult validateAutomationCompositions(AutomationCompositions automationCompositions) {
 
         var result = new BeanValidationResult("AutomationCompositions", automationCompositions);
-        var serviceTemplates = acDefinitionProvider.getAllServiceTemplates();
-        if (serviceTemplates.isEmpty()) {
-            result.addResult(new ObjectValidationResult("ServiceTemplate", "", ValidationStatus.INVALID,
-                    "Commissioned automation composition definition not found"));
-            return result;
-        }
-
-        var serviceTemplate = acDefinitionProvider.getAllServiceTemplates().get(0);
-
         for (var automationComposition : automationCompositions.getAutomationCompositionList()) {
-            result.addResult(AcmUtils.validateAutomationComposition(automationComposition, serviceTemplate));
+            var serviceTemplate = acDefinitionProvider.findAcDefinition(automationComposition.getCompositionId());
+            if (serviceTemplate.isEmpty()) {
+                result.addResult(new ObjectValidationResult("ServiceTemplate", "", ValidationStatus.INVALID,
+                        "Commissioned automation composition definition not found"));
+            } else {
+                result.addResult(AcmUtils.validateAutomationComposition(automationComposition, serviceTemplate.get()));
+            }
         }
         return result;
     }
index 479d6cf..b01aca5 100644 (file)
@@ -445,7 +445,7 @@ public class SupervisionHandler {
     }
 
     private int getFirstStartPhase(AutomationComposition automationComposition) {
-        var toscaServiceTemplate = acDefinitionProvider.getAllServiceTemplates().get(0);
+        var toscaServiceTemplate = acDefinitionProvider.getAcDefinition(automationComposition.getCompositionId());
         return ParticipantUtils.getFirstStartPhase(automationComposition, toscaServiceTemplate);
     }
 
index 5f3bfb2..e2f8b67 100644 (file)
@@ -57,7 +57,7 @@ public class SupervisionScanner {
     private final HandleCounter<ToscaConceptIdentifier> automationCompositionCounter = new HandleCounter<>();
     private final HandleCounter<ToscaConceptIdentifier> participantStatusCounter = new HandleCounter<>();
     private final HandleCounter<Pair<ToscaConceptIdentifier, ToscaConceptIdentifier>> participantUpdateCounter =
-        new HandleCounter<>();
+            new HandleCounter<>();
 
     private final Map<ToscaConceptIdentifier, Integer> phaseMap = new HashMap<>();
 
@@ -82,11 +82,12 @@ public class SupervisionScanner {
      * @param acRuntimeParameterGroup the parameters for the automation composition runtime
      */
     public SupervisionScanner(final AutomationCompositionProvider automationCompositionProvider,
-        AcDefinitionProvider acDefinitionProvider,
-        final AutomationCompositionStateChangePublisher automationCompositionStateChangePublisher,
-        AutomationCompositionUpdatePublisher automationCompositionUpdatePublisher,
-        ParticipantProvider participantProvider, ParticipantStatusReqPublisher participantStatusReqPublisher,
-        ParticipantUpdatePublisher participantUpdatePublisher, final AcRuntimeParameterGroup acRuntimeParameterGroup) {
+            AcDefinitionProvider acDefinitionProvider,
+            final AutomationCompositionStateChangePublisher automationCompositionStateChangePublisher,
+            AutomationCompositionUpdatePublisher automationCompositionUpdatePublisher,
+            ParticipantProvider participantProvider, ParticipantStatusReqPublisher participantStatusReqPublisher,
+            ParticipantUpdatePublisher participantUpdatePublisher,
+            final AcRuntimeParameterGroup acRuntimeParameterGroup) {
         this.automationCompositionProvider = automationCompositionProvider;
         this.acDefinitionProvider = acDefinitionProvider;
         this.automationCompositionStateChangePublisher = automationCompositionStateChangePublisher;
@@ -96,17 +97,17 @@ public class SupervisionScanner {
         this.participantUpdatePublisher = participantUpdatePublisher;
 
         automationCompositionCounter.setMaxRetryCount(
-            acRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().getMaxRetryCount());
+                acRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().getMaxRetryCount());
         automationCompositionCounter
-            .setMaxWaitMs(acRuntimeParameterGroup.getParticipantParameters().getMaxStatusWaitMs());
+                .setMaxWaitMs(acRuntimeParameterGroup.getParticipantParameters().getMaxStatusWaitMs());
 
         participantUpdateCounter.setMaxRetryCount(
-            acRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().getMaxRetryCount());
+                acRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().getMaxRetryCount());
         participantUpdateCounter
-            .setMaxWaitMs(acRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().getMaxWaitMs());
+                .setMaxWaitMs(acRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().getMaxWaitMs());
 
         participantStatusCounter.setMaxRetryCount(
-            acRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().getMaxRetryCount());
+                acRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().getMaxRetryCount());
         participantStatusCounter.setMaxWaitMs(acRuntimeParameterGroup.getParticipantParameters().getMaxStatusWaitMs());
     }
 
@@ -130,13 +131,12 @@ public class SupervisionScanner {
         }
 
         try {
-            var list = acDefinitionProvider.getAllServiceTemplates();
-            if (list != null && !list.isEmpty()) {
-                ToscaServiceTemplate toscaServiceTemplate = list.get(0);
-
-                for (AutomationComposition automationComposition : automationCompositionProvider
-                    .getAutomationCompositions()) {
-                    scanAutomationComposition(automationComposition, toscaServiceTemplate, counterCheck);
+            var list = acDefinitionProvider.getAllAcDefinitions();
+            for (var acDefinition : list) {
+                var acList =
+                        automationCompositionProvider.getAcInstancesByCompositionId(acDefinition.getCompositionId());
+                for (var automationComposition : acList) {
+                    scanAutomationComposition(automationComposition, acDefinition.getServiceTemplate(), counterCheck);
                 }
             }
         } catch (PfModelException pfme) {
@@ -208,7 +208,7 @@ public class SupervisionScanner {
     }
 
     private void scanAutomationComposition(final AutomationComposition automationComposition,
-        ToscaServiceTemplate toscaServiceTemplate, boolean counterCheck) throws PfModelException {
+            ToscaServiceTemplate toscaServiceTemplate, boolean counterCheck) throws PfModelException {
         LOGGER.debug("scanning automation composition {} . . .", automationComposition.getKey().asIdentifier());
 
         if (automationComposition.getState().equals(automationComposition.getOrderedState().asState())) {
@@ -226,7 +226,7 @@ public class SupervisionScanner {
         var defaultMax = 0; // max startPhase
         for (AutomationCompositionElement element : automationComposition.getElements().values()) {
             ToscaNodeTemplate toscaNodeTemplate = toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates()
-                .get(element.getDefinition().getName());
+                    .get(element.getDefinition().getName());
             int startPhase = ParticipantUtils.findStartPhase(toscaNodeTemplate.getProperties());
             defaultMin = Math.min(defaultMin, startPhase);
             defaultMax = Math.max(defaultMax, startPhase);
@@ -239,7 +239,7 @@ public class SupervisionScanner {
 
         if (completed) {
             LOGGER.debug("automation composition scan: transition from state {} to {} completed",
-                automationComposition.getState(), automationComposition.getOrderedState());
+                    automationComposition.getState(), automationComposition.getOrderedState());
 
             automationComposition.setState(automationComposition.getOrderedState().asState());
             automationCompositionProvider.saveAutomationComposition(automationComposition);
@@ -248,21 +248,22 @@ public class SupervisionScanner {
             clearFaultAndCounter(automationComposition);
         } else {
             LOGGER.debug("automation composition scan: transition from state {} to {} not completed",
-                automationComposition.getState(), automationComposition.getOrderedState());
+                    automationComposition.getState(), automationComposition.getOrderedState());
 
             var nextSpNotCompleted =
-                AutomationCompositionState.UNINITIALISED2PASSIVE.equals(automationComposition.getState())
-                    || AutomationCompositionState.PASSIVE2RUNNING.equals(automationComposition.getState())
-                        ? minSpNotCompleted
-                        : maxSpNotCompleted;
+                    AutomationCompositionState.UNINITIALISED2PASSIVE.equals(automationComposition.getState())
+                            || AutomationCompositionState.PASSIVE2RUNNING.equals(automationComposition.getState())
+                                    ? minSpNotCompleted
+                                    : maxSpNotCompleted;
 
             var firstStartPhase =
-                AutomationCompositionState.UNINITIALISED2PASSIVE.equals(automationComposition.getState())
-                    || AutomationCompositionState.PASSIVE2RUNNING.equals(automationComposition.getState()) ? defaultMin
-                        : defaultMax;
+                    AutomationCompositionState.UNINITIALISED2PASSIVE.equals(automationComposition.getState())
+                            || AutomationCompositionState.PASSIVE2RUNNING.equals(automationComposition.getState())
+                                    ? defaultMin
+                                    : defaultMax;
 
             if (nextSpNotCompleted != phaseMap.getOrDefault(automationComposition.getKey().asIdentifier(),
-                firstStartPhase)) {
+                    firstStartPhase)) {
                 phaseMap.put(automationComposition.getKey().asIdentifier(), nextSpNotCompleted);
                 sendAutomationCompositionMsg(automationComposition, nextSpNotCompleted);
             } else if (counterCheck) {
index 9beef51..61ab78f 100644 (file)
@@ -73,7 +73,7 @@ public class AutomationCompositionUpdatePublisher extends AbstractParticipantPub
         automationCompositionUpdateMsg.setAutomationCompositionId(automationComposition.getKey().asIdentifier());
         automationCompositionUpdateMsg.setMessageId(UUID.randomUUID());
         automationCompositionUpdateMsg.setTimestamp(Instant.now());
-        var toscaServiceTemplate = acDefinitionProvider.getAllServiceTemplates().get(0);
+        var toscaServiceTemplate = acDefinitionProvider.getAcDefinition(automationComposition.getCompositionId());
 
         List<ParticipantUpdates> participantUpdates = new ArrayList<>();
         for (AutomationCompositionElement element : automationComposition.getElements().values()) {
index dabb053..85f2193 100644 (file)
@@ -26,7 +26,6 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_SERVICE_TEMPLATE_YAML;
-import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_ST_TEMPLATE_YAML;
 
 import java.util.List;
 import java.util.UUID;
@@ -84,7 +83,7 @@ class CommissioningProviderTest {
         List<ToscaConceptIdentifier> affectedDefinitions = provider
                 .createAutomationCompositionDefinitions(serviceTemplate).getAffectedAutomationCompositionDefinitions();
         verify(acDefinitionProvider).createAutomationCompositionDefinition(serviceTemplate);
-        assertThat(affectedDefinitions).hasSize(13);
+        assertThat(affectedDefinitions).hasSize(7);
     }
 
     /**
@@ -100,7 +99,7 @@ class CommissioningProviderTest {
 
         var provider =
                 new CommissioningProvider(acDefinitionProvider, acProvider, null, participantProvider);
-        ToscaServiceTemplate serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_ST_TEMPLATE_YAML);
+        ToscaServiceTemplate serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
         when(acDefinitionProvider.getServiceTemplateList(null, null)).thenReturn(List.of(serviceTemplate));
 
         var returnedServiceTemplate = provider.getAutomationCompositionDefinitions(null, null);
index 0ded4ec..e11ceee 100644 (file)
@@ -29,7 +29,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_SERVICE_TEMPLATE_YAML;
 
 import java.util.HashMap;
-import java.util.List;
 import java.util.UUID;
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.client.Invocation;
@@ -130,7 +129,7 @@ class CommissioningControllerTest extends CommonRestController {
         assertNotNull(commissioningResponse);
         assertNull(commissioningResponse.getErrorDetails());
         // Response should return the number of node templates present in the service template
-        assertThat(commissioningResponse.getAffectedAutomationCompositionDefinitions()).hasSize(13);
+        assertThat(commissioningResponse.getAffectedAutomationCompositionDefinitions()).hasSize(7);
         for (String nodeTemplateName : serviceTemplate.getToscaTopologyTemplate().getNodeTemplates().keySet()) {
             assertTrue(commissioningResponse.getAffectedAutomationCompositionDefinitions().stream()
                     .anyMatch(ac -> ac.getName().equals(nodeTemplateName)));
@@ -162,7 +161,7 @@ class CommissioningControllerTest extends CommonRestController {
         assertNotNull(commissioningResponse);
         assertNull(commissioningResponse.getErrorDetails());
         // Response should return the number of node templates present in the service template
-        assertThat(commissioningResponse.getAffectedAutomationCompositionDefinitions()).hasSize(13);
+        assertThat(commissioningResponse.getAffectedAutomationCompositionDefinitions()).hasSize(7);
         for (String nodeTemplateName : serviceTemplate.getToscaTopologyTemplate().getNodeTemplates().keySet()) {
             assertTrue(commissioningResponse.getAffectedAutomationCompositionDefinitions().stream()
                     .anyMatch(ac -> ac.getName().equals(nodeTemplateName)));
@@ -216,7 +215,7 @@ class CommissioningControllerTest extends CommonRestController {
         Response resp = invocationBuilder.delete();
         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
 
-        List<ToscaServiceTemplate> templatesInDB = acDefinitionProvider.getAllServiceTemplates();
+        var templatesInDB = acDefinitionProvider.getAllAcDefinitions();
         assertThat(templatesInDB).isEmpty();
     }
 
@@ -228,7 +227,7 @@ class CommissioningControllerTest extends CommonRestController {
 
     // Delete entries from the DB after relevant tests
     private synchronized void deleteEntryInDB() throws Exception {
-        var list = acDefinitionProvider.getAllServiceTemplates();
+        var list = acDefinitionProvider.getAllAcDefinitions();
         if (!list.isEmpty()) {
             acDefinitionProvider.deleteAcDefintion(compositionId);
         }
index 040fabe..cebabdb 100644 (file)
@@ -30,6 +30,7 @@ import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_SERVIC
 
 import java.util.List;
 import java.util.Optional;
+import java.util.UUID;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
@@ -40,7 +41,6 @@ import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions;
 import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationCommand;
-import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationResponse;
 import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider;
 import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
 import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
@@ -67,15 +67,21 @@ class AutomationCompositionInstantiationProviderTest {
     private static final String ORDERED_STATE_INVALID = "ordered state invalid or not specified on command";
     private static final String AC_ELEMENT_NAME_NOT_FOUND =
             "\"AutomationCompositions\" INVALID, item has status INVALID\n"
-                    + " {2}\"entry org.onap.domain.pmsh.PMSHAutomationCompositionDefinition\" "
-                    + "INVALID, item has status INVALID\n"
-                    + " {4}\"entry org.onap.domain.pmsh.DCAEMicroservice\" INVALID, Not found\n"
-                    + " {2}\"entry org.onap.domain.pmsh.PMSHAutomationCompositionDefinition\" "
-                    + "INVALID, item has status INVALID\n"
-                    + " {4}\"entry org.onap.domain.pmsh.DCAEMicroservice\" INVALID, Not found\n";
+            + "  \"entry PMSHInstance0AcElementNotFound\" INVALID, item has status INVALID\n"
+            + "    \"entry org.onap.domain.pmsh.DCAEMicroservice\" INVALID, Not found\n"
+            + "    \"entry org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement\""
+            + " INVALID, Not found\n"
+            + "    \"entry org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement\" INVALID, Not found\n"
+            + "  \"entry PMSHInstance1AcElementNotFound\" INVALID, item has status INVALID\n"
+            + "    \"entry org.onap.domain.pmsh.DCAEMicroservice\" INVALID, Not found\n"
+            + "    \"entry org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement\""
+            + " INVALID, Not found\n"
+            + "    \"entry org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement\" INVALID, Not found\n";
 
     private static final String AC_DEFINITION_NOT_FOUND =
             "\"AutomationCompositions\" INVALID, item has status INVALID\n"
+                    + "  item \"ServiceTemplate\" value \"\" INVALID,"
+                    + " Commissioned automation composition definition not found\n"
                     + "  item \"ServiceTemplate\" value \"\" INVALID,"
                     + " Commissioned automation composition definition not found\n";
 
@@ -96,13 +102,17 @@ class AutomationCompositionInstantiationProviderTest {
         when(participantProvider.getParticipants()).thenReturn(participants);
 
         var acDefinitionProvider = mock(AcDefinitionProvider.class);
-        when(acDefinitionProvider.getAllServiceTemplates()).thenReturn(List.of(serviceTemplate));
+        var compositionId = UUID.randomUUID();
+        when(acDefinitionProvider.findAcDefinition(compositionId)).thenReturn(Optional.of(serviceTemplate));
         var supervisionHandler = mock(SupervisionHandler.class);
         var acProvider = mock(AutomationCompositionProvider.class);
         var instantiationProvider = new AutomationCompositionInstantiationProvider(acProvider, supervisionHandler,
                 participantProvider, acDefinitionProvider);
         var automationCompositionsCreate =
                 InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Crud");
+        for (var automationComposition : automationCompositionsCreate.getAutomationCompositionList()) {
+            automationComposition.setCompositionId(compositionId);
+        }
         var instantiationResponse = instantiationProvider.createAutomationCompositions(automationCompositionsCreate);
         InstantiationUtils.assertInstantiationResponse(instantiationResponse, automationCompositionsCreate);
 
@@ -121,6 +131,9 @@ class AutomationCompositionInstantiationProviderTest {
 
         var automationCompositionsUpdate =
                 InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_UPDATE_JSON, "Crud");
+        for (var automationComposition : automationCompositionsUpdate.getAutomationCompositionList()) {
+            automationComposition.setCompositionId(compositionId);
+        }
 
         instantiationResponse = instantiationProvider.updateAutomationCompositions(automationCompositionsUpdate);
         InstantiationUtils.assertInstantiationResponse(instantiationResponse, automationCompositionsUpdate);
@@ -217,10 +230,14 @@ class AutomationCompositionInstantiationProviderTest {
     @Test
     void testCreateAutomationCompositions_NoDuplicates() throws Exception {
         var acDefinitionProvider = mock(AcDefinitionProvider.class);
-        when(acDefinitionProvider.getAllServiceTemplates()).thenReturn(List.of(serviceTemplate));
+        var compositionId = UUID.randomUUID();
+        when(acDefinitionProvider.findAcDefinition(compositionId)).thenReturn(Optional.of(serviceTemplate));
 
-        AutomationCompositions automationCompositionsCreate =
+        var automationCompositionsCreate =
                 InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "NoDuplicates");
+        for (var automationComposition : automationCompositionsCreate.getAutomationCompositionList()) {
+            automationComposition.setCompositionId(compositionId);
+        }
 
         var acProvider = mock(AutomationCompositionProvider.class);
         var participantProvider = Mockito.mock(ParticipantProvider.class);
@@ -229,7 +246,7 @@ class AutomationCompositionInstantiationProviderTest {
         var instantiationProvider = new AutomationCompositionInstantiationProvider(acProvider, supervisionHandler,
                 participantProvider, acDefinitionProvider);
 
-        InstantiationResponse instantiationResponse =
+        var instantiationResponse =
                 instantiationProvider.createAutomationCompositions(automationCompositionsCreate);
         InstantiationUtils.assertInstantiationResponse(instantiationResponse, automationCompositionsCreate);
 
@@ -246,9 +263,13 @@ class AutomationCompositionInstantiationProviderTest {
     @Test
     void testCreateAutomationCompositions_CommissionedAcElementNotFound() throws Exception {
         var acDefinitionProvider = mock(AcDefinitionProvider.class);
-        when(acDefinitionProvider.getAllServiceTemplates()).thenReturn(List.of(serviceTemplate));
-        AutomationCompositions automationCompositions = InstantiationUtils.getAutomationCompositionsFromResource(
+        var compositionId = UUID.randomUUID();
+        when(acDefinitionProvider.findAcDefinition(compositionId)).thenReturn(Optional.of(serviceTemplate));
+        var automationCompositions = InstantiationUtils.getAutomationCompositionsFromResource(
                 AC_INSTANTIATION_DEFINITION_NAME_NOT_FOUND_JSON, "AcElementNotFound");
+        for (var automationComposition : automationCompositions.getAutomationCompositionList()) {
+            automationComposition.setCompositionId(compositionId);
+        }
 
         var acProvider = mock(AutomationCompositionProvider.class);
         var participantProvider = mock(ParticipantProvider.class);
index 2284121..732b76a 100644 (file)
@@ -41,14 +41,12 @@ import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
 import org.onap.policy.clamp.acm.runtime.main.rest.InstantiationController;
 import org.onap.policy.clamp.acm.runtime.util.CommonTestData;
 import org.onap.policy.clamp.acm.runtime.util.rest.CommonRestController;
-import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions;
 import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationCommand;
 import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationResponse;
 import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider;
 import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
 import org.onap.policy.clamp.models.acm.persistence.repository.AutomationCompositionRepository;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -67,10 +65,10 @@ import org.springframework.test.context.junit.jupiter.SpringExtension;
 class InstantiationControllerTest extends CommonRestController {
 
     private static final String AC_INSTANTIATION_CREATE_JSON =
-        "src/test/resources/rest/acm/AutomationCompositions.json";
+            "src/test/resources/rest/acm/AutomationCompositions.json";
 
     private static final String AC_INSTANTIATION_UPDATE_JSON =
-        "src/test/resources/rest/acm/AutomationCompositionsUpdate.json";
+            "src/test/resources/rest/acm/AutomationCompositionsUpdate.json";
 
     private static final String AC_INSTANTIATION_CHANGE_STATE_JSON = "src/test/resources/rest/acm/PassiveCommand.json";
 
@@ -123,7 +121,7 @@ class InstantiationControllerTest extends CommonRestController {
     @Test
     void testCreate_Unauthorized() throws Exception {
         AutomationCompositions automationCompositions =
-            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Unauthorized");
+                InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Unauthorized");
 
         assertUnauthorizedPost(INSTANTIATION_ENDPOINT, Entity.json(automationCompositions));
     }
@@ -136,7 +134,7 @@ class InstantiationControllerTest extends CommonRestController {
     @Test
     void testUpdate_Unauthorized() throws Exception {
         AutomationCompositions automationCompositions =
-            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_UPDATE_JSON, "Unauthorized");
+                InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_UPDATE_JSON, "Unauthorized");
 
         assertUnauthorizedPut(INSTANTIATION_ENDPOINT, Entity.json(automationCompositions));
     }
@@ -148,8 +146,8 @@ class InstantiationControllerTest extends CommonRestController {
 
     @Test
     void testCommand_Unauthorized() throws Exception {
-        InstantiationCommand instantiationCommand =
-            InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Unauthorized");
+        InstantiationCommand instantiationCommand = InstantiationUtils
+                .getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Unauthorized");
 
         assertUnauthorizedPut(INSTANTIATION_COMMAND_ENDPOINT, Entity.json(instantiationCommand));
     }
@@ -157,35 +155,40 @@ class InstantiationControllerTest extends CommonRestController {
     @Test
     void testCreate() throws Exception {
 
-        AutomationCompositions automationCompositionsFromRsc =
-            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Create");
+        var automationCompositionsFromRsc =
+                InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Create");
+        for (var automationComposition : automationCompositionsFromRsc.getAutomationCompositionList()) {
+            automationComposition.setCompositionId(compositionId);
+        }
 
-        Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
-        Response resp = invocationBuilder.post(Entity.json(automationCompositionsFromRsc));
+        var invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
+        var resp = invocationBuilder.post(Entity.json(automationCompositionsFromRsc));
         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
         InstantiationUtils.assertInstantiationResponse(instResponse, automationCompositionsFromRsc);
 
-        for (AutomationComposition automationCompositionFromRsc : automationCompositionsFromRsc
-            .getAutomationCompositionList()) {
-            AutomationCompositions automationCompositionsFromDb = instantiationProvider.getAutomationCompositions(
-                automationCompositionFromRsc.getKey().getName(), automationCompositionFromRsc.getKey().getVersion());
+        for (var automationCompositionFromRsc : automationCompositionsFromRsc.getAutomationCompositionList()) {
+            var automationCompositionsFromDb =
+                    instantiationProvider.getAutomationCompositions(automationCompositionFromRsc.getKey().getName(),
+                            automationCompositionFromRsc.getKey().getVersion());
 
             assertNotNull(automationCompositionsFromDb);
             assertThat(automationCompositionsFromDb.getAutomationCompositionList()).hasSize(1);
             assertEquals(automationCompositionFromRsc,
-                automationCompositionsFromDb.getAutomationCompositionList().get(0));
+                    automationCompositionsFromDb.getAutomationCompositionList().get(0));
         }
     }
 
     @Test
     void testCreateBadRequest() throws Exception {
+        var automationCompositionsFromRsc = InstantiationUtils
+                .getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "CreateBadRequest");
+        for (var automationComposition : automationCompositionsFromRsc.getAutomationCompositionList()) {
+            automationComposition.setCompositionId(compositionId);
+        }
 
-        AutomationCompositions automationCompositionsFromRsc =
-            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "CreateBadRequest");
-
-        Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
-        Response resp = invocationBuilder.post(Entity.json(automationCompositionsFromRsc));
+        var invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
+        var resp = invocationBuilder.post(Entity.json(automationCompositionsFromRsc));
         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
 
         // testing Bad Request: AC already defined
@@ -209,89 +212,100 @@ class InstantiationControllerTest extends CommonRestController {
     void testQuery() throws Exception {
 
         var automationCompositions =
-            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Query");
+                InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Query");
+        for (var acFromRsc : automationCompositions.getAutomationCompositionList()) {
+            acFromRsc.setCompositionId(compositionId);
+        }
         instantiationProvider.createAutomationCompositions(automationCompositions);
 
-        for (AutomationComposition automationCompositionFromRsc : automationCompositions
-            .getAutomationCompositionList()) {
-            Invocation.Builder invocationBuilder =
-                super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + automationCompositionFromRsc.getKey().getName());
+        for (var automationCompositionFromRsc : automationCompositions.getAutomationCompositionList()) {
+            var invocationBuilder = super.sendRequest(
+                    INSTANTIATION_ENDPOINT + "?name=" + automationCompositionFromRsc.getKey().getName());
             Response rawresp = invocationBuilder.buildGet().invoke();
             assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
             AutomationCompositions automationCompositionsQuery = rawresp.readEntity(AutomationCompositions.class);
             assertNotNull(automationCompositionsQuery);
             assertThat(automationCompositionsQuery.getAutomationCompositionList()).hasSize(1);
             assertEquals(automationCompositionFromRsc,
-                automationCompositionsQuery.getAutomationCompositionList().get(0));
+                    automationCompositionsQuery.getAutomationCompositionList().get(0));
         }
     }
 
     @Test
     void testUpdate() throws Exception {
 
-        AutomationCompositions automationCompositionsCreate =
-            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Update");
+        var automationCompositionsCreate =
+                InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Update");
+        for (var automationComposition : automationCompositionsCreate.getAutomationCompositionList()) {
+            automationComposition.setCompositionId(compositionId);
+        }
 
-        var automationCompositions =
-            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_UPDATE_JSON, "Update");
         instantiationProvider.createAutomationCompositions(automationCompositionsCreate);
 
-        Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
-        Response resp = invocationBuilder.put(Entity.json(automationCompositions));
+        var invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
+        var automationCompositions =
+                InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_UPDATE_JSON, "Update");
+        for (var automationComposition : automationCompositions.getAutomationCompositionList()) {
+            automationComposition.setCompositionId(compositionId);
+        }
+        var resp = invocationBuilder.put(Entity.json(automationCompositions));
         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
 
-        InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
+        var instResponse = resp.readEntity(InstantiationResponse.class);
         InstantiationUtils.assertInstantiationResponse(instResponse, automationCompositions);
 
-        for (AutomationComposition automationCompositionUpdate : automationCompositions
-            .getAutomationCompositionList()) {
-            AutomationCompositions automationCompositionsFromDb = instantiationProvider.getAutomationCompositions(
-                automationCompositionUpdate.getKey().getName(), automationCompositionUpdate.getKey().getVersion());
+        for (var automationCompositionUpdate : automationCompositions.getAutomationCompositionList()) {
+            var automationCompositionsFromDb = instantiationProvider.getAutomationCompositions(
+                    automationCompositionUpdate.getKey().getName(), automationCompositionUpdate.getKey().getVersion());
 
             assertNotNull(automationCompositionsFromDb);
             assertThat(automationCompositionsFromDb.getAutomationCompositionList()).hasSize(1);
             assertEquals(automationCompositionUpdate,
-                automationCompositionsFromDb.getAutomationCompositionList().get(0));
+                    automationCompositionsFromDb.getAutomationCompositionList().get(0));
         }
     }
 
     @Test
     void testDelete() throws Exception {
 
-        AutomationCompositions automationCompositionsFromRsc =
-            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Delete");
+        var automationCompositionsFromRsc =
+                InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Delete");
+        for (var automationComposition : automationCompositionsFromRsc.getAutomationCompositionList()) {
+            automationComposition.setCompositionId(compositionId);
+        }
 
         instantiationProvider.createAutomationCompositions(automationCompositionsFromRsc);
 
-        for (AutomationComposition automationCompositionFromRsc : automationCompositionsFromRsc
-            .getAutomationCompositionList()) {
-            Invocation.Builder invocationBuilder =
-                super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + automationCompositionFromRsc.getKey().getName()
-                    + "&version=" + automationCompositionFromRsc.getKey().getVersion());
-            Response resp = invocationBuilder.delete();
+        for (var automationCompositionFromRsc : automationCompositionsFromRsc.getAutomationCompositionList()) {
+            var invocationBuilder = super.sendRequest(
+                    INSTANTIATION_ENDPOINT + "?name=" + automationCompositionFromRsc.getKey().getName() + "&version="
+                            + automationCompositionFromRsc.getKey().getVersion());
+            var resp = invocationBuilder.delete();
             assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
-            InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
+            var instResponse = resp.readEntity(InstantiationResponse.class);
             InstantiationUtils.assertInstantiationResponse(instResponse, automationCompositionFromRsc);
 
-            AutomationCompositions automationCompositionsFromDb = instantiationProvider.getAutomationCompositions(
-                automationCompositionFromRsc.getKey().getName(), automationCompositionFromRsc.getKey().getVersion());
+            var automationCompositionsFromDb =
+                    instantiationProvider.getAutomationCompositions(automationCompositionFromRsc.getKey().getName(),
+                            automationCompositionFromRsc.getKey().getVersion());
             assertThat(automationCompositionsFromDb.getAutomationCompositionList()).isEmpty();
         }
     }
 
     @Test
     void testDeleteBadRequest() throws Exception {
-
-        AutomationCompositions automationCompositionsFromRsc =
-            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "DelBadRequest");
+        var automationCompositionsFromRsc =
+                InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "DelBadRequest");
+        for (var automationComposition : automationCompositionsFromRsc.getAutomationCompositionList()) {
+            automationComposition.setCompositionId(compositionId);
+        }
 
         instantiationProvider.createAutomationCompositions(automationCompositionsFromRsc);
 
-        for (AutomationComposition automationCompositionFromRsc : automationCompositionsFromRsc
-            .getAutomationCompositionList()) {
-            Invocation.Builder invocationBuilder =
-                super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + automationCompositionFromRsc.getKey().getName());
-            Response resp = invocationBuilder.delete();
+        for (var automationCompositionFromRsc : automationCompositionsFromRsc.getAutomationCompositionList()) {
+            var invocationBuilder = super.sendRequest(
+                    INSTANTIATION_ENDPOINT + "?name=" + automationCompositionFromRsc.getKey().getName());
+            var resp = invocationBuilder.delete();
             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
         }
     }
@@ -306,7 +320,7 @@ class InstantiationControllerTest extends CommonRestController {
     @Test
     void testCommand_NotFound2() throws Exception {
         InstantiationCommand command =
-            InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Command");
+                InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Command");
         command.setOrderedState(null);
 
         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
@@ -317,7 +331,10 @@ class InstantiationControllerTest extends CommonRestController {
     @Test
     void testCommand() throws Exception {
         var automationCompositions =
-            InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Command");
+                InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Command");
+        for (var automationComposition : automationCompositions.getAutomationCompositionList()) {
+            automationComposition.setCompositionId(compositionId);
+        }
         instantiationProvider.createAutomationCompositions(automationCompositions);
 
         var participants = CommonTestData.createParticipants();
@@ -325,28 +342,28 @@ class InstantiationControllerTest extends CommonRestController {
             participantProvider.saveParticipant(participant);
         }
 
-        InstantiationCommand command =
-            InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Command");
+        var command =
+                InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Command");
 
-        Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
-        Response resp = invocationBuilder.put(Entity.json(command));
+        var invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
+        var resp = invocationBuilder.put(Entity.json(command));
         assertEquals(Response.Status.ACCEPTED.getStatusCode(), resp.getStatus());
         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
         InstantiationUtils.assertInstantiationResponse(instResponse, command);
 
         // check passive state on DB
-        for (ToscaConceptIdentifier toscaConceptIdentifier : command.getAutomationCompositionIdentifierList()) {
-            AutomationCompositions automationCompositionsGet = instantiationProvider
-                .getAutomationCompositions(toscaConceptIdentifier.getName(), toscaConceptIdentifier.getVersion());
+        for (var toscaConceptIdentifier : command.getAutomationCompositionIdentifierList()) {
+            var automationCompositionsGet = instantiationProvider
+                    .getAutomationCompositions(toscaConceptIdentifier.getName(), toscaConceptIdentifier.getVersion());
             assertThat(automationCompositionsGet.getAutomationCompositionList()).hasSize(1);
             assertEquals(command.getOrderedState(),
-                automationCompositionsGet.getAutomationCompositionList().get(0).getOrderedState());
+                    automationCompositionsGet.getAutomationCompositionList().get(0).getOrderedState());
         }
     }
 
     private synchronized void deleteEntryInDB() throws Exception {
         automationCompositionRepository.deleteAll();
-        var list = acDefinitionProvider.getAllServiceTemplates();
+        var list = acDefinitionProvider.getAllAcDefinitions();
         if (!list.isEmpty()) {
             acDefinitionProvider.deleteAcDefintion(compositionId);
         }
index e4d3821..47e3d51 100644 (file)
@@ -113,6 +113,7 @@ class SupervisionHandlerTest {
         var automationComposition = automationCompositionsCreate.getAutomationCompositionList().get(0);
         automationComposition.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
         automationComposition.setState(AutomationCompositionState.PASSIVE);
+        automationComposition.setCompositionId(UUID.randomUUID());
 
         var automationCompositionProvider = mock(AutomationCompositionProvider.class);
         when(automationCompositionProvider.findAutomationComposition(identifier))
@@ -120,9 +121,9 @@ class SupervisionHandlerTest {
         when(automationCompositionProvider.getAutomationComposition(identifier)).thenReturn(automationComposition);
 
         var acDefinitionProvider = Mockito.mock(AcDefinitionProvider.class);
-        when(acDefinitionProvider.getAllServiceTemplates())
-            .thenReturn(List.of(Objects.requireNonNull(InstantiationUtils.getToscaServiceTemplate(
-                    TOSCA_SERVICE_TEMPLATE_YAML))));
+        when(acDefinitionProvider.getAcDefinition(automationComposition.getCompositionId()))
+            .thenReturn(Objects.requireNonNull(InstantiationUtils.getToscaServiceTemplate(
+                    TOSCA_SERVICE_TEMPLATE_YAML)));
 
         var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
 
@@ -133,7 +134,7 @@ class SupervisionHandlerTest {
 
         handler.triggerAutomationCompositionSupervision(List.of(identifier));
 
-        verify(automationCompositionStateChangePublisher).send(any(AutomationComposition.class), eq(0));
+        verify(automationCompositionStateChangePublisher).send(any(AutomationComposition.class), eq(1));
     }
 
     @Test
@@ -359,9 +360,6 @@ class SupervisionHandlerTest {
         when(acDefinitionProvider.getServiceTemplateList(any(), any()))
             .thenReturn(List.of(Objects.requireNonNull(InstantiationUtils.getToscaServiceTemplate(
                     TOSCA_SERVICE_TEMPLATE_YAML))));
-        when(acDefinitionProvider.getAllServiceTemplates())
-            .thenReturn(List.of(Objects.requireNonNull(InstantiationUtils.getToscaServiceTemplate(
-                    TOSCA_SERVICE_TEMPLATE_YAML))));
 
         var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
 
index 50d5246..6d3e5b5 100644 (file)
@@ -26,10 +26,11 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
-import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_ST_TEMPLATE_YAML;
+import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_SERVICE_TEMPLATE_YAML;
 
 import java.util.List;
 import java.util.Objects;
+import java.util.UUID;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
@@ -40,6 +41,7 @@ import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantStatusReqPu
 import org.onap.policy.clamp.acm.runtime.supervision.comm.ParticipantUpdatePublisher;
 import org.onap.policy.clamp.acm.runtime.util.CommonTestData;
 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionDefinition;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
 import org.onap.policy.clamp.models.acm.concepts.Participant;
@@ -51,7 +53,6 @@ import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 
 class SupervisionScannerTest {
 
@@ -62,14 +63,19 @@ class SupervisionScannerTest {
     private static final String PARTICIPANT_NAME = "Participant0";
     private static final String PARTICIPANT_VERSION = "1.0.0";
 
+    private static UUID compositionId;
+
     private static final ToscaConceptIdentifier PARTICIPANT_TYPE =
             new ToscaConceptIdentifier("org.onap.policy.clamp.acm.PolicyParticipant", PARTICIPANT_VERSION);
 
     @BeforeAll
     public static void setUpBeforeAll() throws Exception {
-        ToscaServiceTemplate serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_ST_TEMPLATE_YAML);
-        when(acDefinitionProvider.getAllServiceTemplates())
-            .thenReturn(List.of(Objects.requireNonNull(serviceTemplate)));
+        var serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
+        var acDefinition = new AutomationCompositionDefinition();
+        compositionId = UUID.randomUUID();
+        acDefinition.setCompositionId(compositionId);
+        acDefinition.setServiceTemplate(serviceTemplate);
+        when(acDefinitionProvider.getAllAcDefinitions()).thenReturn(List.of(Objects.requireNonNull(acDefinition)));
     }
 
     @Test
@@ -82,13 +88,14 @@ class SupervisionScannerTest {
         var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
         var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
 
-        var automationCompositions =
-            InstantiationUtils.getAutomationCompositionsFromResource(AC_JSON, "Crud").getAutomationCompositionList();
-        when(automationCompositionProvider.getAutomationCompositions()).thenReturn(automationCompositions);
+        var automationCompositions = InstantiationUtils.getAutomationCompositionsFromResource(AC_JSON, "Crud")
+                .getAutomationCompositionList();
+        when(automationCompositionProvider.getAcInstancesByCompositionId(compositionId))
+                .thenReturn(automationCompositions);
 
         var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
-            automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
-            participantStatusReqPublisher, participantUpdatePublisher, acRuntimeParameterGroup);
+                automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
+                participantStatusReqPublisher, participantUpdatePublisher, acRuntimeParameterGroup);
         supervisionScanner.run(false);
 
         verify(automationCompositionProvider, times(0)).saveAutomationComposition(any(AutomationComposition.class));
@@ -96,12 +103,13 @@ class SupervisionScannerTest {
 
     @Test
     void testScannerOrderedStateDifferentToState() throws PfModelException, CoderException {
-        var automationCompositions =
-            InstantiationUtils.getAutomationCompositionsFromResource(AC_JSON, "Crud").getAutomationCompositionList();
+        var automationCompositions = InstantiationUtils.getAutomationCompositionsFromResource(AC_JSON, "Crud")
+                .getAutomationCompositionList();
         automationCompositions.get(0).setState(AutomationCompositionState.UNINITIALISED2PASSIVE);
         automationCompositions.get(0).setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
         var automationCompositionProvider = mock(AutomationCompositionProvider.class);
-        when(automationCompositionProvider.getAutomationCompositions()).thenReturn(automationCompositions);
+        when(automationCompositionProvider.getAcInstancesByCompositionId(compositionId))
+                .thenReturn(automationCompositions);
 
         var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
         var automationCompositionStateChangePublisher = mock(AutomationCompositionStateChangePublisher.class);
@@ -111,8 +119,8 @@ class SupervisionScannerTest {
         var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
 
         var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
-            automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
-            participantStatusReqPublisher, participantUpdatePublisher, acRuntimeParameterGroup);
+                automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
+                participantStatusReqPublisher, participantUpdatePublisher, acRuntimeParameterGroup);
         supervisionScanner.run(false);
 
         verify(automationCompositionProvider, times(1)).saveAutomationComposition(any(AutomationComposition.class));
@@ -122,7 +130,8 @@ class SupervisionScannerTest {
     void testScanner() throws PfModelException {
         var automationCompositionProvider = mock(AutomationCompositionProvider.class);
         var automationComposition = new AutomationComposition();
-        when(automationCompositionProvider.getAutomationCompositions()).thenReturn(List.of(automationComposition));
+        when(automationCompositionProvider.getAcInstancesByCompositionId(compositionId))
+                .thenReturn(List.of(automationComposition));
 
         var participantProvider = mock(ParticipantProvider.class);
         var participant = new Participant();
@@ -137,8 +146,8 @@ class SupervisionScannerTest {
         var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
 
         var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
-            automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
-            participantStatusReqPublisher, participantUpdatePublisher, acRuntimeParameterGroup);
+                automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
+                participantStatusReqPublisher, participantUpdatePublisher, acRuntimeParameterGroup);
 
         supervisionScanner.handleParticipantStatus(participant.getKey().asIdentifier());
         supervisionScanner.run(true);
@@ -148,13 +157,13 @@ class SupervisionScannerTest {
 
     @Test
     void testSendAutomationCompositionMsgUpdate() throws PfModelException, CoderException {
-        var automationCompositions =
-            InstantiationUtils.getAutomationCompositionsFromResource(AC_JSON, "Crud").getAutomationCompositionList();
+        var automationCompositions = InstantiationUtils.getAutomationCompositionsFromResource(AC_JSON, "Crud")
+                .getAutomationCompositionList();
         automationCompositions.get(0).setState(AutomationCompositionState.UNINITIALISED2PASSIVE);
         automationCompositions.get(0).setOrderedState(AutomationCompositionOrderedState.PASSIVE);
         for (var element : automationCompositions.get(0).getElements().values()) {
             if ("org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement"
-                .equals(element.getDefinition().getName())) {
+                    .equals(element.getDefinition().getName())) {
                 element.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
                 element.setState(AutomationCompositionState.UNINITIALISED);
             } else {
@@ -164,7 +173,8 @@ class SupervisionScannerTest {
         }
 
         var automationCompositionProvider = mock(AutomationCompositionProvider.class);
-        when(automationCompositionProvider.getAutomationCompositions()).thenReturn(automationCompositions);
+        when(automationCompositionProvider.getAcInstancesByCompositionId(compositionId))
+                .thenReturn(automationCompositions);
 
         var participantProvider = mock(ParticipantProvider.class);
         var automationCompositionUpdatePublisher = mock(AutomationCompositionUpdatePublisher.class);
@@ -174,8 +184,8 @@ class SupervisionScannerTest {
         var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanner");
 
         var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
-            automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
-            participantStatusReqPublisher, participantUpdatePublisher, acRuntimeParameterGroup);
+                automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
+                participantStatusReqPublisher, participantUpdatePublisher, acRuntimeParameterGroup);
 
         supervisionScanner.run(false);
 
@@ -186,7 +196,8 @@ class SupervisionScannerTest {
     void testScanParticipant() throws PfModelException {
         var automationCompositionProvider = mock(AutomationCompositionProvider.class);
         var automationComposition = new AutomationComposition();
-        when(automationCompositionProvider.getAutomationCompositions()).thenReturn(List.of(automationComposition));
+        when(automationCompositionProvider.getAcInstancesByCompositionId(compositionId))
+                .thenReturn(List.of(automationComposition));
 
         var acRuntimeParameterGroup = CommonTestData.geParameterGroup("dbScanParticipant");
         acRuntimeParameterGroup.getParticipantParameters().getUpdateParameters().setMaxWaitMs(-1);
@@ -208,8 +219,8 @@ class SupervisionScannerTest {
         var participantUpdatePublisher = mock(ParticipantUpdatePublisher.class);
 
         var supervisionScanner = new SupervisionScanner(automationCompositionProvider, acDefinitionProvider,
-            automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
-            participantStatusReqPublisher, participantUpdatePublisher, acRuntimeParameterGroup);
+                automationCompositionStateChangePublisher, automationCompositionUpdatePublisher, participantProvider,
+                participantStatusReqPublisher, participantUpdatePublisher, acRuntimeParameterGroup);
 
         supervisionScanner
                 .handleParticipantRegister(new ImmutablePair<>(participant.getKey().asIdentifier(), PARTICIPANT_TYPE));
index 3d5370b..ad8243b 100644 (file)
@@ -38,8 +38,6 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
 public class CommonTestData {
     private static final Coder CODER = new StandardCoder();
     public static final String TOSCA_SERVICE_TEMPLATE_YAML =
-        "clamp/acm/test/pmsh_multiple_ac_tosca.yaml";
-    public static final String TOSCA_ST_TEMPLATE_YAML =
         "clamp/acm/pmsh/funtional-pmsh-usecase.yaml";
 
     /**
@@ -77,16 +75,14 @@ public class CommonTestData {
      */
     public static List<Participant> createParticipants() {
         var participant1 = createParticipant(
-            new ToscaConceptIdentifier("org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
-                "2.3.4"),
-            new ToscaConceptIdentifier("org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
-                "2.3.4"));
+            new ToscaConceptIdentifier("org.onap.policy.clamp.acm.KubernetesParticipant", "2.3.4"),
+            new ToscaConceptIdentifier("K8sParticipant0", "1.0.0"));
         var participant2 = createParticipant(
-            new ToscaConceptIdentifier("org.onap.policy.acm.PolicyAutomationCompositionParticipant", "2.3.1"),
-            new ToscaConceptIdentifier("org.onap.policy.acm.PolicyAutomationCompositionParticipant", "2.3.1"));
+            new ToscaConceptIdentifier("org.onap.policy.clamp.acm.HttpParticipant", "2.3.4"),
+            new ToscaConceptIdentifier("HttpParticipant0", "1.0.0"));
         var participant3 = createParticipant(
-            new ToscaConceptIdentifier("org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant", "2.2.1"),
-            new ToscaConceptIdentifier("org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant", "2.2.1"));
+            new ToscaConceptIdentifier("org.onap.policy.clamp.acm.PolicyParticipant", "2.3.1"),
+            new ToscaConceptIdentifier("org.onap.PM_Policy", "1.0.0"));
         return List.of(participant1, participant2, participant3);
     }
 
index f368cd6..33ebd17 100644 (file)
@@ -3,10 +3,7 @@
         {
             "name": "PMSHInstance0",
             "version": "1.0.1",
-            "definition": {
-                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
-                "version": "1.2.3"
-            },
+            "compositionId": "709c62b3-8918-41b9-a747-d21eb79c6c40",
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
             "description": "PMSH automation composition instance 0",
                 "709c62b3-8918-41b9-a747-d21eb79c6c20": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_DCAEMicroservice",
+                        "name": "org.onap.domain.database.PMSH_K8SMicroserviceAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
-                        "version": "2.3.4"
+                        "name": "K8sParticipant0",
+                        "version": "1.0.0"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
+                        "name": "org.onap.policy.clamp.acm.KubernetesParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "DCAE Automation Composition Element for the PMSH instance 0 automation composition"
+                    "description": "Automation composition element for the K8S microservice for PMSH"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c21": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
+                        "name": "org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
-                        "version": "2.3.1"
+                        "name": "HttpParticipant0",
+                        "version": "1.0.0"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
-                        "version": "2.3.1"
+                        "name": "org.onap.policy.clamp.acm.HttpParticipant",
+                        "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Monitoring Policy Automation Composition Element for the PMSH instance 0 automation composition"
+                    "description": "Automation composition element for the http requests of PMSH microservice"
                 },
                 "709c62b3-8918-41b9-a747-d21eb79c6c22": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c22",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
-                        "version": "2.3.1"
+                        "name": "org.onap.PM_Policy",
+                        "version": "1.0.0"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
+                        "name": "org.onap.policy.clamp.acm.PolicyParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
-                    "description": "Operational Policy Automation Composition Element for the PMSH instance 0 automation composition"
-                },
-                "709c62b3-8918-41b9-a747-d21eb79c6c23": {
-                    "id": "709c62b3-8918-41b9-a747-d21eb79c6c23",
-                    "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
-                        "version": "1.2.3"
-                    },
-                    "participantId": {
-                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
-                        "version": "2.2.1"
-                    },
-                    "participantType": {
-                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
-                        "version": "2.2.1"
-                    },
-                    "state": "UNINITIALISED",
-                    "orderedState": "UNINITIALISED",
-                    "description": "CDS Automation Composition Element for the PMSH instance 0 automation composition"
+                    "description": "Automation composition element for the operational policy for Performance Management Subscription Handling"
                 }
             }
         },
         {
             "name": "PMSHInstance1",
             "version": "1.0.1",
-            "definition": {
-                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
-                "version": "1.2.3"
-            },
+            "compositionId": "709c62b3-8918-41b9-a747-d21eb79c6c40",
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
             "description": "PMSH automation composition instance 1",
                 "709c62b3-8918-41b9-a747-d21eb79c6c24": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c24",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_DCAEMicroservice",
+                        "name": "org.onap.domain.database.PMSH_K8SMicroserviceAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
-                        "version": "2.3.4"
+                        "name": "K8sParticipant0",
+                        "version": "1.0.0"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
+                        "name": "org.onap.policy.clamp.acm.KubernetesParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                 "709c62b3-8918-41b9-a747-d21eb79c6c25": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c25",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
+                        "name": "org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
-                        "version": "2.3.1"
+                        "name": "HttpParticipant0",
+                        "version": "1.0.0"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
-                        "version": "2.3.1"
+                        "name": "org.onap.policy.clamp.acm.HttpParticipant",
+                        "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
-                        "version": "2.3.1"
+                        "name": "org.onap.PM_Policy",
+                        "version": "1.0.0"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
+                        "name": "org.onap.policy.clamp.acm.PolicyParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
                     "description": "Operational Policy Automation Composition Element for the PMSH instance 1 automation composition"
-                },
-                "709c62b3-8918-41b9-a747-d21eb79c6c27": {
-                    "id": "709c62b3-8918-41b9-a747-e21eb79c6c27",
-                    "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
-                        "version": "1.2.3"
-                    },
-                    "participantId": {
-                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
-                        "version": "2.2.1"
-                    },
-                    "participantType": {
-                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
-                        "version": "2.2.1"
-                    },
-                    "state": "UNINITIALISED",
-                    "orderedState": "UNINITIALISED",
-                    "description": "CDS Automation Composition Element for the PMSH instance 1 automation composition"
                 }
             }
         }
index f0c45b5..dc1f705 100644 (file)
@@ -3,10 +3,7 @@
         {
             "name": "PMSHInstance0",
             "version": "1.0.1",
-            "definition": {
-                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
-                "version": "1.2.3"
-            },
+            "compositionId": "709c62b3-8918-41b9-a747-d21eb79c6c40",
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
             "description": "PMSH automation composition instance 1",
                 "709c62b3-8918-41b9-a747-d21eb79c6c21": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c21",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_DCAEMicroservice",
+                        "name": "org.onap.domain.database.PMSH_K8SMicroserviceAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
-                        "version": "2.3.4"
+                        "name": "K8sParticipant0",
+                        "version": "1.0.0"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
+                        "name": "org.onap.policy.clamp.acm.KubernetesParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                 "709c62b3-8918-41b9-a747-d21eb79c6c22": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c22",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
+                        "name": "org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
-                        "version": "2.3.1"
+                        "name": "HttpParticipant0",
+                        "version": "1.0.0"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
-                        "version": "2.3.1"
+                        "name": "org.onap.policy.clamp.acm.HttpParticipant",
+                        "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
                 "709c62b3-8918-41b9-a747-d21eb79c6c23": {
                     "id": "709c62b3-8918-41b9-a747-d21eb79c6c23",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
+                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
-                        "version": "2.3.1"
+                        "name": "org.onap.PM_Policy",
+                        "version": "1.0.0"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
+                        "name": "org.onap.policy.clamp.acm.PolicyParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
                     "description": "Operational Policy Automation Composition Element for the PMSH instance 0 automation composition"
-                },
-                "709c62b3-8918-41b9-a747-d21eb79c6c24": {
-                    "id": "709c62b3-8918-41b9-a747-d21eb79c6c24",
-                    "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
-                        "version": "1.2.3"
-                    },
-                    "participantId": {
-                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
-                        "version": "2.2.1"
-                    },
-                    "participantType": {
-                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
-                        "version": "2.2.1"
-                    },
-                    "state": "UNINITIALISED",
-                    "orderedState": "UNINITIALISED",
-                    "description": "CDS Automation Composition Element for the PMSH instance 0 automation composition"
                 }
             }
         },
         {
             "name": "PMSHInstance1",
             "version": "1.0.1",
-            "definition": {
-                "name": "org.onap.domain.pmsh.PMSHAutomationCompositionDefinition",
-                "version": "1.2.3"
-            },
+            "compositionId": "709c62b3-8918-41b9-a747-d21eb79c6c40",
             "state": "UNINITIALISED",
             "orderedState": "UNINITIALISED",
             "description": "PMSH automation composition instance 1",
                 "709c62b3-8918-41b9-a747-d21eb79c6c25": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c25",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_DCAEMicroservice",
+                        "name": "org.onap.domain.database.PMSH_K8SMicroserviceAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
-                        "version": "2.3.4"
+                        "name": "K8sParticipant0",
+                        "version": "1.0.0"
                     },
                     "participantType": {
-                        "name": "org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant",
+                        "name": "org.onap.policy.clamp.acm.KubernetesParticipant",
                         "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                 "709c62b3-8918-41b9-a747-d21eb79c6c26": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c26",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
+                        "name": "org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
-                        "version": "2.3.1"
+                        "name": "HttpParticipant0",
+                        "version": "1.0.0"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
-                        "version": "2.3.1"
+                        "name": "org.onap.policy.clamp.acm.HttpParticipant",
+                        "version": "2.3.4"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
                 "709c62b3-8918-41b9-a747-d21eb79c6c27": {
                     "id": "709c62b3-8918-41b9-a747-e21eb79c6c27",
                     "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement",
+                        "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement",
                         "version": "1.2.3"
                     },
                     "participantId": {
-                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
-                        "version": "2.3.1"
+                        "name": "org.onap.PM_Policy",
+                        "version": "1.0.0"
                     },
                     "participantType": {
-                        "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant",
+                        "name": "org.onap.policy.clamp.acm.PolicyParticipant",
                         "version": "2.3.1"
                     },
                     "state": "UNINITIALISED",
                     "orderedState": "UNINITIALISED",
                     "description": "Operational Policy Automation Composition Element for the PMSH instance 1 automation composition"
-                },
-                "709c62b3-8918-41b9-a747-d21eb79c6c28": {
-                    "id": "709c62b3-8918-41b9-a747-e21eb79c6c28",
-                    "definition": {
-                        "name": "org.onap.domain.pmsh.PMSH_CDS_AutomationCompositionElement",
-                        "version": "1.2.3"
-                    },
-                    "participantId": {
-                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
-                        "version": "2.2.1"
-                    },
-                    "participantType": {
-                        "name": "org.onap.ccsdk.cds.acm.CdsAutomationCompositionParticipant",
-                        "version": "2.2.1"
-                    },
-                    "state": "UNINITIALISED",
-                    "orderedState": "UNINITIALISED",
-                    "description": "CDS Automation Composition Element for the PMSH instance 1 automation composition"
                 }
             }
         }