Save ToscaServiceTemplate as Json in ACM 33/132533/1
authorFrancescoFioraEst <francesco.fiora@est.tech>
Mon, 28 Nov 2022 17:31:45 +0000 (17:31 +0000)
committerFrancesco Fiora <francesco.fiora@est.tech>
Wed, 30 Nov 2022 10:44:45 +0000 (10:44 +0000)
Save ToscaServiceTemplate as Json using DocToscaServiceTemplate
as model.

Issue-ID: POLICY-4468
Change-Id: I4c6f49012d091b87f0da4db2edcd5f16af2f4d5c
Signed-off-by: FrancescoFioraEst <francesco.fiora@est.tech>
14 files changed:
examples/src/main/resources/clamp/acm/pmsh/funtional-pmsh-usecase.yaml
models/src/main/java/org/onap/policy/clamp/models/acm/document/base/ToscaServiceTemplateValidation.java
models/src/main/java/org/onap/policy/clamp/models/acm/document/concepts/DocToscaProperty.java
models/src/main/java/org/onap/policy/clamp/models/acm/document/concepts/DocToscaSchemaDefinition.java
models/src/main/java/org/onap/policy/clamp/models/acm/document/concepts/DocToscaWithTypeAndStringProperties.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/repository/AutomationCompositionDefinitionRepository.java
models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/ToscaServiceTemplateRepository.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/persistence/provider/AcDefinitionProviderTest.java
models/src/test/resources/META-INF/persistence.xml
runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/Application.java
runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/CommissioningControllerTest.java

index f0e3c03..f0da6f3 100644 (file)
@@ -147,7 +147,6 @@ data_types:
     properties:
       restRequestId:
         type: onap.datatypes.ToscaConceptIdentifier
-        typeVersion: 1.0.0
         required: true
         description: The name and version of a REST request to be sent to a REST endpoint
       httpMethod:
@@ -179,7 +178,6 @@ data_types:
     properties:
       configurationEntityId:
         type: onap.datatypes.ToscaConceptIdentifier
-        typeVersion: 1.0.0
         required: true
         description: The name and version of a Configuration Entity to be handled
           by the HTTP Automation Composition Element
@@ -187,7 +185,7 @@ data_types:
         type: list
         entry_schema:
           type: org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.RestRequest
-          typeVersion: 1.0.0
+          type_version: 1.0.0
         description: A sequence of REST commands to send to the REST endpoint
 policy_types:
   onap.policies.Monitoring:
@@ -410,7 +408,7 @@ node_types:
         required: true
         entry_schema:
           type: org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity
-          typeVersion: 1.0.0
+          type_version: 1.0.0
         description: The connfiguration entities the Automation Composition Element is managing and their associated REST requests
 
 topology_template:
@@ -432,7 +430,7 @@ topology_template:
     org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement:
       version: 1.2.3
       type: org.onap.policy.clamp.acm.PolicyAutomationCompositionElement
-      type_version: 1.0.0
+      type_version: 1.0.1
       description: Automation composition element for the operational policy for Performance Management Subscription Handling
       properties:
         provider: Ericsson
@@ -460,7 +458,7 @@ topology_template:
       # Chart from new repository
       version: 1.2.3
       type: org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement
-      type_version: 1.0.0
+      type_version: 1.0.1
       description: Automation composition element for the K8S microservice for PMSH
       properties:
         provider: ONAP
@@ -579,7 +577,7 @@ topology_template:
     org.onap.domain.pmsh.PMSHAutomationCompositionDefinition:
       version: 1.2.3
       type: org.onap.policy.clamp.acm.AutomationComposition
-      type_version: 1.0.0
+      type_version: 1.0.1
       description: Automation composition for PMSH
       properties:
         provider: ONAP
index 7649678..c265e64 100644 (file)
@@ -29,6 +29,8 @@ import lombok.NoArgsConstructor;
 import lombok.NonNull;
 import org.onap.policy.clamp.models.acm.document.concepts.DocToscaEntity;
 import org.onap.policy.clamp.models.acm.document.concepts.DocToscaServiceTemplate;
+import org.onap.policy.clamp.models.acm.document.concepts.DocToscaTopologyTemplate;
+import org.onap.policy.clamp.models.acm.utils.AcmUtils;
 import org.onap.policy.common.parameters.BeanValidationResult;
 import org.onap.policy.common.parameters.ValidationStatus;
 import org.onap.policy.models.base.Validated;
@@ -37,6 +39,8 @@ import org.onap.policy.models.base.Validated;
 public final class ToscaServiceTemplateValidation {
 
     private static final String ROOT_KEY_NAME_SUFFIX = ".Root";
+    private static final String AC_NODE_TYPE_NOT_PRESENT =
+            "NodeTemplate with type " + AcmUtils.AUTOMATION_COMPOSITION_NODE_TYPE + " must exist!";
 
     /**
      * validate a serviceTemplate.
@@ -62,6 +66,8 @@ public final class ToscaServiceTemplateValidation {
             }
         }
 
+        validateToscaTopologyTemplate(result, serviceTemplate.getToscaTopologyTemplate());
+
         if (serviceTemplate.getToscaTopologyTemplate() != null) {
             validEntityTypeAncestors(serviceTemplate.getToscaTopologyTemplate().getNodeTemplates(),
                     references.get(DocUtil.REF_NODE_TEMPLATES), result);
@@ -84,6 +90,32 @@ public final class ToscaServiceTemplateValidation {
 
     }
 
+    /**
+     * Validate ToscaTopologyTemplate.
+     *
+     * @param result
+     *
+     * @param topologyTemplate the ToscaServiceTemplate
+     */
+    public static void validateToscaTopologyTemplate(BeanValidationResult result,
+            DocToscaTopologyTemplate topologyTemplate) {
+        if (topologyTemplate != null && topologyTemplate.getNodeTemplates() != null) {
+            var nodeTemplates = topologyTemplate.getNodeTemplates();
+            var acNumber = nodeTemplates.values().stream().filter(
+                    nodeTemplate -> AcmUtils.AUTOMATION_COMPOSITION_NODE_TYPE.equals(nodeTemplate.getType()))
+                    .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 "
+                        + AcmUtils.AUTOMATION_COMPOSITION_NODE_TYPE + " not allowed to be more than one!");
+            }
+        } else {
+            result.addResult("TopologyTemplate", topologyTemplate, ValidationStatus.INVALID, AC_NODE_TYPE_NOT_PRESENT);
+        }
+    }
+
     /**
      * Validate that all data types referenced in policy types exist.
      *
@@ -199,8 +231,7 @@ public final class ToscaServiceTemplateValidation {
                     continue;
                 }
                 if (!isTypePresent(parentEntityTypeKey, reference)) {
-                    result.addResult("parent", parentEntityTypeKey, ValidationStatus.INVALID,
-                            Validated.NOT_FOUND);
+                    result.addResult("parent", parentEntityTypeKey, ValidationStatus.INVALID, Validated.NOT_FOUND);
                 }
             }
         }
@@ -222,8 +253,7 @@ public final class ToscaServiceTemplateValidation {
                         continue;
                     }
                     if (!isTypePresent(parentEntityTypeKey, reference)) {
-                        result.addResult("parent", parentEntityTypeKey, ValidationStatus.INVALID,
-                                Validated.NOT_FOUND);
+                        result.addResult("parent", parentEntityTypeKey, ValidationStatus.INVALID, Validated.NOT_FOUND);
                     }
                 }
             }
index 1bcbd6b..cdd1ab9 100644 (file)
@@ -106,7 +106,8 @@ public class DocToscaProperty implements PfAuthorative<ToscaProperty>, Serializa
         var toscaProperty = new ToscaProperty();
 
         toscaProperty.setName(name);
-        toscaProperty.setType(getTypeDocConceptKey().getId());
+        toscaProperty.setType(type);
+        toscaProperty.setTypeVersion(typeVersion);
         toscaProperty.setDescription(description);
         toscaProperty.setRequired(required);
         toscaProperty.setStatus(status);
index 89b3c42..f13ad6c 100644 (file)
@@ -70,7 +70,8 @@ public class DocToscaSchemaDefinition
         var toscaEntrySchema = new ToscaSchemaDefinition();
 
         toscaEntrySchema.setName(name);
-        toscaEntrySchema.setType(getTypeDocConceptKey().getId());
+        toscaEntrySchema.setType(type);
+        toscaEntrySchema.setTypeVersion(typeVersion);
         toscaEntrySchema.setDescription(description);
 
         if (constraints != null) {
index 377cecb..025aafb 100644 (file)
@@ -66,8 +66,8 @@ public class DocToscaWithTypeAndStringProperties<T extends ToscaWithTypeAndObjec
     public T toAuthorative() {
         var tosca = super.toAuthorative();
 
-        tosca.setType(getTypeDocConceptKey().getId());
-        tosca.setTypeVersion("");
+        tosca.setType(type);
+        tosca.setTypeVersion(typeVersion);
 
         tosca.setProperties(PfUtils.mapMap(properties, x -> x));
 
index 247d8f2..c46bdb9 100644 (file)
 
 package org.onap.policy.clamp.models.acm.persistence.concepts;
 
-import com.google.gson.annotations.SerializedName;
 import java.util.UUID;
-import javax.persistence.CascadeType;
+import javax.persistence.Convert;
 import javax.persistence.Entity;
-import javax.persistence.FetchType;
 import javax.persistence.Id;
 import javax.persistence.Inheritance;
 import javax.persistence.InheritanceType;
-import javax.persistence.OneToOne;
+import javax.persistence.Lob;
 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.utils.AcmUtils;
+import org.onap.policy.clamp.models.acm.document.base.ToscaServiceTemplateValidation;
+import org.onap.policy.clamp.models.acm.document.concepts.DocToscaServiceTemplate;
 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;
 
 /**
  * Class to represent a automation composition definition in the database.
@@ -57,10 +55,17 @@ public class JpaAutomationCompositionDefinition extends Validated
     @NotNull
     private String compositionId;
 
-    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
-    @SerializedName("serviceTemplate")
+    @NotNull
+    private String name;
+
+    @NotNull
+    private String version;
+
+    @Lob
+    @Convert(converter = StringToServiceTemplateConverter.class)
+    @NotNull
     @Valid
-    private JpaToscaServiceTemplate serviceTemplate;
+    private DocToscaServiceTemplate serviceTemplate;
 
     @Override
     public AutomationCompositionDefinition toAuthorative() {
@@ -73,7 +78,9 @@ public class JpaAutomationCompositionDefinition extends Validated
     @Override
     public void fromAuthorative(final AutomationCompositionDefinition copyConcept) {
         compositionId = copyConcept.getCompositionId().toString();
-        serviceTemplate = new JpaToscaServiceTemplate(copyConcept.getServiceTemplate());
+        serviceTemplate = new DocToscaServiceTemplate(copyConcept.getServiceTemplate());
+        setName(serviceTemplate.getName());
+        setVersion(serviceTemplate.getVersion());
     }
 
     public JpaAutomationCompositionDefinition(final AutomationCompositionDefinition acmDefinition) {
@@ -87,8 +94,7 @@ public class JpaAutomationCompositionDefinition extends Validated
     @Override
     public BeanValidationResult validate(@NonNull String fieldName) {
         var result = super.validate(fieldName);
-
-        AcmUtils.validateToscaTopologyTemplate(result, serviceTemplate);
+        ToscaServiceTemplateValidation.validate(result, serviceTemplate);
 
         if (!result.isValid()) {
             return result;
index dc1785e..12a0594 100644 (file)
@@ -23,15 +23,16 @@ package org.onap.policy.clamp.models.acm.persistence.provider;
 import java.util.List;
 import java.util.Optional;
 import java.util.UUID;
+import java.util.stream.Collectors;
 import javax.ws.rs.core.Response;
 import lombok.RequiredArgsConstructor;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionDefinition;
+import org.onap.policy.clamp.models.acm.document.concepts.DocToscaServiceTemplate;
 import org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationCompositionDefinition;
 import org.onap.policy.clamp.models.acm.persistence.repository.AutomationCompositionDefinitionRepository;
-import org.onap.policy.clamp.models.acm.persistence.repository.ToscaServiceTemplateRepository;
 import org.onap.policy.models.base.PfModelRuntimeException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
+import org.springframework.data.domain.Example;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -40,7 +41,6 @@ import org.springframework.transaction.annotation.Transactional;
 @RequiredArgsConstructor
 public class AcDefinitionProvider {
 
-    private final ToscaServiceTemplateRepository serviceTemplateRepository;
     private final AutomationCompositionDefinitionRepository acmDefinitionRepository;
 
     /**
@@ -68,9 +68,12 @@ public class AcDefinitionProvider {
      * @param serviceTemplate the service template to be created
      */
     public void updateServiceTemplate(UUID compositionId, ToscaServiceTemplate serviceTemplate) {
-        var jpaServiceTemplate =
-                ProviderUtils.getJpaAndValidate(serviceTemplate, JpaToscaServiceTemplate::new, "toscaServiceTemplate");
-        serviceTemplateRepository.save(jpaServiceTemplate);
+        var acmDefinition = new AutomationCompositionDefinition();
+        acmDefinition.setCompositionId(compositionId);
+        acmDefinition.setServiceTemplate(serviceTemplate);
+        var jpaAcmDefinition = ProviderUtils.getJpaAndValidate(acmDefinition, JpaAutomationCompositionDefinition::new,
+                "AutomationCompositionDefinition");
+        acmDefinitionRepository.save(jpaAcmDefinition);
     }
 
     /**
@@ -88,7 +91,6 @@ public class AcDefinitionProvider {
         }
 
         var item = jpaDelete.get().getServiceTemplate();
-        serviceTemplateRepository.deleteById(item.getKey());
         acmDefinitionRepository.deleteById(compositionId.toString());
         return item.toAuthorative();
     }
@@ -120,7 +122,7 @@ public class AcDefinitionProvider {
     public Optional<ToscaServiceTemplate> findAcDefinition(UUID compositionId) {
         var jpaGet = acmDefinitionRepository.findById(compositionId.toString());
         return jpaGet.stream().map(JpaAutomationCompositionDefinition::getServiceTemplate)
-                .map(JpaToscaServiceTemplate::toAuthorative).findFirst();
+                .map(DocToscaServiceTemplate::toAuthorative).findFirst();
     }
 
     /**
@@ -143,7 +145,18 @@ public class AcDefinitionProvider {
      */
     @Transactional(readOnly = true)
     public List<ToscaServiceTemplate> getServiceTemplateList(final String name, final String version) {
-        var jpaList = serviceTemplateRepository.getFiltered(JpaToscaServiceTemplate.class, name, version);
-        return ProviderUtils.asEntityList(jpaList);
+        List<JpaAutomationCompositionDefinition> jpaList = null;
+        if (name != null || version != null) {
+            var entity = new JpaAutomationCompositionDefinition();
+            entity.setName(name);
+            entity.setVersion(version);
+            var example = Example.of(entity);
+            jpaList = acmDefinitionRepository.findAll(example);
+        } else {
+            jpaList = acmDefinitionRepository.findAll();
+        }
+
+        return jpaList.stream().map(JpaAutomationCompositionDefinition::getServiceTemplate)
+                .map(DocToscaServiceTemplate::toAuthorative).collect(Collectors.toList());
     }
 }
index 64a0a0f..df4d7df 100644 (file)
@@ -22,10 +22,11 @@ package org.onap.policy.clamp.models.acm.persistence.repository;
 
 import org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationCompositionDefinition;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.repository.query.QueryByExampleExecutor;
 import org.springframework.stereotype.Repository;
 
 @Repository
 public interface AutomationCompositionDefinitionRepository
-        extends JpaRepository<JpaAutomationCompositionDefinition, String> {
-
+        extends JpaRepository<JpaAutomationCompositionDefinition, String>,
+        QueryByExampleExecutor<JpaAutomationCompositionDefinition> {
 }
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/ToscaServiceTemplateRepository.java b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/ToscaServiceTemplateRepository.java
deleted file mode 100644 (file)
index b9190d0..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.JpaToscaServiceTemplate;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-public interface ToscaServiceTemplateRepository
-        extends JpaRepository<JpaToscaServiceTemplate, PfConceptKey>, FilterRepository {
-
-}
index a820348..cdd3e1e 100644 (file)
@@ -48,7 +48,6 @@ 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,9 +56,7 @@ import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 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 AUTOMATION_COMPOSITION_NODE_TYPE = "org.onap.policy.clamp.acm.AutomationComposition";
     public static final String ENTRY = "entry ";
 
     /**
@@ -356,32 +353,4 @@ 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 2c01e98..a2d6d69 100644 (file)
@@ -32,16 +32,16 @@ import java.util.Optional;
 import java.util.UUID;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionDefinition;
+import org.onap.policy.clamp.models.acm.document.concepts.DocToscaServiceTemplate;
 import org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationCompositionDefinition;
 import org.onap.policy.clamp.models.acm.persistence.repository.AutomationCompositionDefinitionRepository;
-import org.onap.policy.clamp.models.acm.persistence.repository.ToscaServiceTemplateRepository;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardYamlCoder;
 import org.onap.policy.common.utils.resources.ResourceUtils;
-import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
+import org.springframework.data.domain.Example;
 
 class AcDefinitionProviderTest {
 
@@ -57,72 +57,66 @@ class AcDefinitionProviderTest {
     }
 
     @Test
-    void testCreateServiceTemplate() throws PfModelException {
-        var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class);
-
-        var jpaServiceTemplate = ProviderUtils.getJpaAndValidate(inputServiceTemplate, JpaToscaServiceTemplate::new,
-                "toscaServiceTemplate");
-        var acmDefinition = new AutomationCompositionDefinition();
-        acmDefinition.setCompositionId(UUID.randomUUID());
-        acmDefinition.setServiceTemplate(jpaServiceTemplate.toAuthorative());
+    void testCreateServiceTemplate() {
+        var docServiceTemplate = new DocToscaServiceTemplate(inputServiceTemplate);
+        var acmDefinition = getAcDefinition(docServiceTemplate);
 
+        var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class);
         when(acmDefinitionRepository.save(any(JpaAutomationCompositionDefinition.class)))
                 .thenReturn(new JpaAutomationCompositionDefinition(acmDefinition));
 
-        var serviceTemplateRepository = mock(ToscaServiceTemplateRepository.class);
-        var acDefinitionProvider = new AcDefinitionProvider(serviceTemplateRepository, acmDefinitionRepository);
+        var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository);
         var result = acDefinitionProvider.createAutomationCompositionDefinition(inputServiceTemplate);
 
-        assertThat(result.getServiceTemplate()).isEqualTo(jpaServiceTemplate.toAuthorative());
+        assertThat(result.getServiceTemplate()).isEqualTo(docServiceTemplate.toAuthorative());
     }
 
     @Test
-    void testDeleteAcDefintion() throws PfModelException {
-        var jpaServiceTemplate = ProviderUtils.getJpaAndValidate(inputServiceTemplate, JpaToscaServiceTemplate::new,
-                "toscaServiceTemplate");
-        var acmDefinition = new AutomationCompositionDefinition();
-        acmDefinition.setCompositionId(UUID.randomUUID());
-        acmDefinition.setServiceTemplate(jpaServiceTemplate.toAuthorative());
+    void testDeleteAcDefintion() {
+        var docServiceTemplate = new DocToscaServiceTemplate(inputServiceTemplate);
+        var acmDefinition = getAcDefinition(docServiceTemplate);
 
-        var serviceTemplateRepository = mock(ToscaServiceTemplateRepository.class);
         var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class);
         when(acmDefinitionRepository.findById(acmDefinition.getCompositionId().toString()))
                 .thenReturn(Optional.of(new JpaAutomationCompositionDefinition(acmDefinition)));
 
-        var acDefinitionProvider = new AcDefinitionProvider(serviceTemplateRepository, acmDefinitionRepository);
+        var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository);
         var result = acDefinitionProvider.deleteAcDefintion(acmDefinition.getCompositionId());
 
-        assertThat(result).isEqualTo(jpaServiceTemplate.toAuthorative());
+        assertThat(result).isEqualTo(docServiceTemplate.toAuthorative());
     }
 
     @Test
-    void testDeleteServiceTemplateEmpty() throws PfModelException {
-        var serviceTemplateRepository = mock(ToscaServiceTemplateRepository.class);
-        when(serviceTemplateRepository.findAll()).thenReturn(List.of());
-
+    void testDeleteServiceTemplateEmpty() {
         var compositionId = UUID.randomUUID();
         var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class);
-        var acDefinitionProvider = new AcDefinitionProvider(serviceTemplateRepository, acmDefinitionRepository);
+        var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository);
         assertThatThrownBy(() -> acDefinitionProvider.deleteAcDefintion(compositionId))
                 .hasMessage("delete of Automation Composition Definition \"" + compositionId
                         + "\" failed, Automation Composition Definition does not exist");
     }
 
     @Test
-    void testGetServiceTemplate() throws PfModelException {
-        var jpaServiceTemplate = ProviderUtils.getJpaAndValidate(inputServiceTemplate, JpaToscaServiceTemplate::new,
-                "toscaServiceTemplate");
-        var serviceTemplateRepository = mock(ToscaServiceTemplateRepository.class);
-        when(serviceTemplateRepository.getFiltered(JpaToscaServiceTemplate.class, inputServiceTemplate.getName(),
-                inputServiceTemplate.getVersion())).thenReturn(List.of(jpaServiceTemplate));
-
+    void testGetServiceTemplate() {
+        var docServiceTemplate = new DocToscaServiceTemplate(inputServiceTemplate);
+        var acmDefinition = getAcDefinition(docServiceTemplate);
         var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class);
-        var acDefinitionProvider = new AcDefinitionProvider(serviceTemplateRepository, acmDefinitionRepository);
+        when(acmDefinitionRepository.findAll(Mockito.<Example<JpaAutomationCompositionDefinition>>any()))
+                .thenReturn(List.of(new JpaAutomationCompositionDefinition(acmDefinition)));
+
+        var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository);
         var result = acDefinitionProvider.getServiceTemplateList(inputServiceTemplate.getName(),
                 inputServiceTemplate.getVersion());
 
         assertThat(result).hasSize(1);
-        assertThat(result.get(0)).isEqualTo(jpaServiceTemplate.toAuthorative());
+        assertThat(result.get(0)).isEqualTo(acmDefinition.getServiceTemplate());
+    }
+
+    private AutomationCompositionDefinition getAcDefinition(DocToscaServiceTemplate docServiceTemplate) {
+        var acmDefinition = new AutomationCompositionDefinition();
+        acmDefinition.setCompositionId(UUID.randomUUID());
+        acmDefinition.setServiceTemplate(docServiceTemplate.toAuthorative());
+        return acmDefinition;
     }
 
     /**
index 6020f24..1e1d893 100644 (file)
         <class>org.onap.policy.models.base.PfConceptKey</class>
         <class>org.onap.policy.models.dao.converters.CDataConditioner</class>
         <class>org.onap.policy.models.dao.converters.Uuid2String</class>
-        <class>org.onap.policy.models.pdp.persistence.concepts.JpaPdp</class>
-        <class>org.onap.policy.models.pdp.persistence.concepts.JpaPdpGroup</class>
-        <class>org.onap.policy.models.pdp.persistence.concepts.JpaPdpSubGroup</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaCapabilityAssignment</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaCapabilityAssignments</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaCapabilityType</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaCapabilityTypes</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaDataType</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaDataTypes</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaNodeTemplate</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaNodeTemplates</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaNodeType</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaNodeTypes</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaParameter</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicies</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyType</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyTypes</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaProperty</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaRelationshipType</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaRelationshipTypes</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaRequirement</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaRequirements</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate</class>
-        <class>org.onap.policy.models.tosca.simple.concepts.JpaToscaTrigger</class>
         <class>org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationComposition</class>
         <class>org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationCompositionDefinition</class>
+        <class>org.onap.policy.clamp.models.acm.persistence.concepts.StringToServiceTemplateConverter</class>
         <class>org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationCompositionElement</class>
         <class>org.onap.policy.clamp.models.acm.persistence.concepts.JpaParticipant</class>
 
index d9298b1..64e3e6c 100644 (file)
@@ -41,7 +41,6 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 })
 @ConfigurationPropertiesScan("org.onap.policy.clamp.acm.runtime.main.parameters")
 @EntityScan({
-    "org.onap.policy.models.tosca.simple.concepts",
     "org.onap.policy.clamp.models.acm.persistence.concepts"
 })
 //@formatter:on
index e11ceee..8066df4 100644 (file)
@@ -153,9 +153,10 @@ class CommissioningControllerTest extends CommonRestController {
         toscaProperty.setType("onap.datatypes.ToscaConceptIdentifier");
         toscaDataType.getProperties().put(toscaProperty.getName(), toscaProperty);
 
-        serviceTemplate.getDataTypes().put(toscaDataType.getName(), toscaDataType);
+        var serviceTemplateUpdate = new ToscaServiceTemplate(serviceTemplate);
+        serviceTemplateUpdate.getDataTypes().put(toscaDataType.getName(), toscaDataType);
         invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + "/" + compositionId);
-        resp = invocationBuilder.put(Entity.json(serviceTemplate));
+        resp = invocationBuilder.put(Entity.json(serviceTemplateUpdate));
         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
         commissioningResponse = resp.readEntity(CommissioningResponse.class);
         assertNotNull(commissioningResponse);