Changes for Checkstyle 8.32
[policy/models.git] / models-tosca / src / main / java / org / onap / policy / models / tosca / simple / provider / SimpleToscaProvider.java
index a3e18ca..8ac9e80 100644 (file)
@@ -23,11 +23,8 @@ package org.onap.policy.models.tosca.simple.provider;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-
 import javax.ws.rs.core.Response;
-
 import lombok.NonNull;
-
 import org.apache.commons.collections4.CollectionUtils;
 import org.onap.policy.models.base.PfConcept;
 import org.onap.policy.models.base.PfConceptFilter;
@@ -46,6 +43,7 @@ import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy;
 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyType;
 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyTypes;
 import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
+import org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate;
 import org.onap.policy.models.tosca.utils.ToscaServiceTemplateUtils;
 import org.onap.policy.models.tosca.utils.ToscaUtils;
 import org.slf4j.Logger;
@@ -95,9 +93,9 @@ public class SimpleToscaProvider {
      * @throws PfModelException on errors appending a service template to the template in the database
      */
     public JpaToscaServiceTemplate appendToServiceTemplate(@NonNull final PfDao dao,
-            @NonNull final JpaToscaServiceTemplate incomingServiceTemplateFragment) throws PfModelException {
+        @NonNull final JpaToscaServiceTemplate incomingServiceTemplateFragment) throws PfModelException {
         LOGGER.debug("->appendServiceTemplateFragment: incomingServiceTemplateFragment={}",
-                incomingServiceTemplateFragment);
+            incomingServiceTemplateFragment);
 
         JpaToscaServiceTemplate dbServiceTemplate = new SimpleToscaServiceTemplateProvider().read(dao);
 
@@ -106,7 +104,7 @@ public class SimpleToscaProvider {
             serviceTemplateToWrite = incomingServiceTemplateFragment;
         } else {
             serviceTemplateToWrite =
-                    ToscaServiceTemplateUtils.addFragment(dbServiceTemplate, incomingServiceTemplateFragment);
+                ToscaServiceTemplateUtils.addFragment(dbServiceTemplate, incomingServiceTemplateFragment);
         }
 
         PfValidationResult result = serviceTemplateToWrite.validate(new PfValidationResult());
@@ -130,16 +128,35 @@ public class SimpleToscaProvider {
      * @throws PfModelException on errors getting data types
      */
     public JpaToscaServiceTemplate getDataTypes(@NonNull final PfDao dao, final String name, final String version)
-            throws PfModelException {
+        throws PfModelException {
         LOGGER.debug("->getDataTypes: name={}, version={}", name, version);
 
-        JpaToscaServiceTemplate serviceTemplate = getServiceTemplate(dao);
+        final JpaToscaServiceTemplate dbServiceTemplate = getServiceTemplate(dao);
 
-        if (!ToscaUtils.doDataTypesExist(serviceTemplate)) {
+        if (!ToscaUtils.doDataTypesExist(dbServiceTemplate)) {
             throw new PfModelRuntimeException(Response.Status.NOT_FOUND,
-                    "data types for " + name + ":" + version + DO_NOT_EXIST);
+                "data types for " + name + ":" + version + DO_NOT_EXIST);
         }
 
+        JpaToscaServiceTemplate serviceTemplate = getCascadedDataTypes(dbServiceTemplate, name, version);
+
+        LOGGER.debug("<-getDataTypes: name={}, version={}, serviceTemplate={}", name, version, serviceTemplate);
+        return serviceTemplate;
+    }
+
+    /**
+     * Get the cascaded data types for a data type name and version.
+     *
+     * @param dbServiceTemplate the service template to search for the cascaded data types
+     * @param name the data type name we are searching for
+     * @param version the data type version we are searching for
+     * @return a service template containing the cascaded data types
+     * @throws PfModelException on errors getting the data types
+     */
+    public JpaToscaServiceTemplate getCascadedDataTypes(@NonNull final JpaToscaServiceTemplate dbServiceTemplate,
+        final String name, final String version) throws PfModelException {
+
+        JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate(dbServiceTemplate);
         serviceTemplate.setPolicyTypes(null);
         serviceTemplate.setTopologyTemplate(null);
 
@@ -147,22 +164,20 @@ public class SimpleToscaProvider {
 
         if (!ToscaUtils.doDataTypesExist(serviceTemplate)) {
             throw new PfModelRuntimeException(Response.Status.NOT_FOUND,
-                    "data types for " + name + ":" + version + DO_NOT_EXIST);
+                "data types for " + name + ":" + version + DO_NOT_EXIST);
         }
 
         for (JpaToscaDataType dataType : serviceTemplate.getDataTypes().getConceptMap().values()) {
             Collection<PfConceptKey> referencedDataTypeKeys = dataType.getReferencedDataTypes();
 
             for (PfConceptKey referencedDataTypeKey : referencedDataTypeKeys) {
-                JpaToscaServiceTemplate dataTypeEntityTreeServiceTemplate =
-                        getDataTypes(dao, referencedDataTypeKey.getName(), referencedDataTypeKey.getVersion());
+                JpaToscaServiceTemplate dataTypeEntityTreeServiceTemplate = getCascadedDataTypes(dbServiceTemplate,
+                    referencedDataTypeKey.getName(), referencedDataTypeKey.getVersion());
 
                 serviceTemplate =
-                        ToscaServiceTemplateUtils.addFragment(serviceTemplate, dataTypeEntityTreeServiceTemplate);
+                    ToscaServiceTemplateUtils.addFragment(serviceTemplate, dataTypeEntityTreeServiceTemplate);
             }
         }
-
-        LOGGER.debug("<-getDataTypes: name={}, version={}, serviceTemplate={}", name, version, serviceTemplate);
         return serviceTemplate;
     }
 
@@ -175,15 +190,15 @@ public class SimpleToscaProvider {
      * @throws PfModelException on errors creating data types
      */
     public JpaToscaServiceTemplate createDataTypes(@NonNull final PfDao dao,
-            @NonNull final JpaToscaServiceTemplate incomingServiceTemplate) throws PfModelException {
+        @NonNull final JpaToscaServiceTemplate incomingServiceTemplate) throws PfModelException {
         LOGGER.debug("->createDataTypes: incomingServiceTemplate={}", incomingServiceTemplate);
 
         ToscaUtils.assertDataTypesExist(incomingServiceTemplate);
 
         JpaToscaServiceTemplate writtenServiceTemplate = appendToServiceTemplate(dao, incomingServiceTemplate);
 
-        LOGGER.debug("<-createDataTypes: returnServiceTempalate={}", writtenServiceTemplate);
-        return writtenServiceTemplate;
+        LOGGER.debug("<-createDataTypes: writtenServiceTemplate={}", writtenServiceTemplate);
+        return incomingServiceTemplate;
     }
 
     /**
@@ -195,7 +210,7 @@ public class SimpleToscaProvider {
      * @throws PfModelException on errors updating Data types
      */
     public JpaToscaServiceTemplate updateDataTypes(@NonNull final PfDao dao,
-            @NonNull final JpaToscaServiceTemplate serviceTemplate) throws PfModelException {
+        @NonNull final JpaToscaServiceTemplate serviceTemplate) throws PfModelException {
         LOGGER.debug("->updateDataTypes: serviceTempalate={}", serviceTemplate);
 
         ToscaUtils.assertDataTypesExist(serviceTemplate);
@@ -228,7 +243,7 @@ public class SimpleToscaProvider {
      * @throws PfModelException on errors deleting data types
      */
     public JpaToscaServiceTemplate deleteDataType(@NonNull final PfDao dao, @NonNull final PfConceptKey dataTypeKey)
-            throws PfModelException {
+        throws PfModelException {
         LOGGER.debug("->deleteDataType: key={}", dataTypeKey);
 
         JpaToscaServiceTemplate serviceTemplate = getServiceTemplate(dao);
@@ -244,8 +259,8 @@ public class SimpleToscaProvider {
 
         for (JpaToscaDataType dataType : serviceTemplate.getDataTypes().getAll(null)) {
             if (dataType.getReferencedDataTypes().contains(dataTypeKey)) {
-                throw new PfModelRuntimeException(Response.Status.NOT_ACCEPTABLE, DATA_TYPE + dataTypeKey.getId()
-                        + " is in use, it is referenced in data type " + dataType.getId());
+                throw new PfModelRuntimeException(Response.Status.NOT_ACCEPTABLE,
+                    DATA_TYPE + dataTypeKey.getId() + " is in use, it is referenced in data type " + dataType.getId());
             }
         }
 
@@ -253,15 +268,21 @@ public class SimpleToscaProvider {
             for (JpaToscaPolicyType policyType : serviceTemplate.getPolicyTypes().getAll(null)) {
                 if (policyType.getReferencedDataTypes().contains(dataTypeKey)) {
                     throw new PfModelRuntimeException(Response.Status.NOT_ACCEPTABLE, DATA_TYPE + dataTypeKey.getId()
-                            + " is in use, it is referenced in policy type " + policyType.getId());
+                        + " is in use, it is referenced in policy type " + policyType.getId());
                 }
             }
         }
 
-        dao.delete(JpaToscaDataType.class, dataTypeKey);
+        serviceTemplate.getDataTypes().getConceptMap().remove(dataTypeKey);
+        new SimpleToscaServiceTemplateProvider().write(dao, serviceTemplate);
+        dao.delete(dataType4Deletion);
 
-        LOGGER.debug("<-deleteDataType: key={}, serviceTempalate={}", dataTypeKey, serviceTemplate);
-        return serviceTemplate;
+        JpaToscaServiceTemplate deletedServiceTemplate = new JpaToscaServiceTemplate();
+        deletedServiceTemplate.setDataTypes(new JpaToscaDataTypes());
+        deletedServiceTemplate.getDataTypes().getConceptMap().put(dataTypeKey, dataType4Deletion);
+
+        LOGGER.debug("<-deleteDataType: key={}, serviceTempalate={}", dataTypeKey, deletedServiceTemplate);
+        return deletedServiceTemplate;
     }
 
     /**
@@ -274,24 +295,44 @@ public class SimpleToscaProvider {
      * @throws PfModelException on errors getting policy types
      */
     public JpaToscaServiceTemplate getPolicyTypes(@NonNull final PfDao dao, final String name, final String version)
-            throws PfModelException {
+        throws PfModelException {
         LOGGER.debug("->getPolicyTypes: name={}, version={}", name, version);
 
-        JpaToscaServiceTemplate serviceTemplate = getServiceTemplate(dao);
-
-        serviceTemplate.setDataTypes(null);
-        serviceTemplate.setTopologyTemplate(null);
+        final JpaToscaServiceTemplate dbServiceTemplate = getServiceTemplate(dao);
 
-        if (!ToscaUtils.doPolicyTypesExist(serviceTemplate)) {
+        if (!ToscaUtils.doPolicyTypesExist(dbServiceTemplate)) {
             throw new PfModelRuntimeException(Response.Status.NOT_FOUND,
-                    "policy types for " + name + ":" + version + DO_NOT_EXIST);
+                "policy types for " + name + ":" + version + DO_NOT_EXIST);
         }
 
+        JpaToscaServiceTemplate serviceTemplate = getCascadedPolicyTypes(dbServiceTemplate, name, version);
+
+        LOGGER.debug("<-getPolicyTypes: name={}, version={}, serviceTemplate={}", name, version, serviceTemplate);
+        return serviceTemplate;
+    }
+
+    /**
+     * Get the cascaded policy types for a policy type name and version.
+     *
+     * @param dbServiceTemplate the service template to search for the cascaded policy types
+     * @param name the policy type name we are searching for
+     * @param version the policy type version we are searching for
+     * @return a service template containing the cascaded policy types
+     * @throws PfModelException on errors getting the policy types
+     */
+    public JpaToscaServiceTemplate getCascadedPolicyTypes(final JpaToscaServiceTemplate dbServiceTemplate,
+        final String name, final String version) throws PfModelException {
+
+        JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate(dbServiceTemplate);
+
+        serviceTemplate.setDataTypes(null);
+        serviceTemplate.setTopologyTemplate(null);
+
         ToscaUtils.getEntityTree(serviceTemplate.getPolicyTypes(), name, version);
 
         if (!ToscaUtils.doPolicyTypesExist(serviceTemplate)) {
             throw new PfModelRuntimeException(Response.Status.NOT_FOUND,
-                    "policy types for " + name + ":" + version + DO_NOT_EXIST);
+                "policy types for " + name + ":" + version + DO_NOT_EXIST);
         }
 
         JpaToscaServiceTemplate dataTypeServiceTemplate = new JpaToscaServiceTemplate(serviceTemplate);
@@ -301,17 +342,15 @@ public class SimpleToscaProvider {
             Collection<PfConceptKey> referencedDataTypeKeys = policyType.getReferencedDataTypes();
 
             for (PfConceptKey referencedDataTypeKey : referencedDataTypeKeys) {
-                JpaToscaServiceTemplate dataTypeEntityTreeServiceTemplate =
-                        getDataTypes(dao, referencedDataTypeKey.getName(), referencedDataTypeKey.getVersion());
+                JpaToscaServiceTemplate dataTypeEntityTreeServiceTemplate = getCascadedDataTypes(dbServiceTemplate,
+                    referencedDataTypeKey.getName(), referencedDataTypeKey.getVersion());
 
-                dataTypeServiceTemplate = ToscaServiceTemplateUtils.addFragment(dataTypeServiceTemplate,
-                        dataTypeEntityTreeServiceTemplate);
+                dataTypeServiceTemplate =
+                    ToscaServiceTemplateUtils.addFragment(dataTypeServiceTemplate, dataTypeEntityTreeServiceTemplate);
             }
         }
 
         serviceTemplate = ToscaServiceTemplateUtils.addFragment(serviceTemplate, dataTypeServiceTemplate);
-
-        LOGGER.debug("<-getPolicyTypes: name={}, version={}, serviceTemplate={}", name, version, serviceTemplate);
         return serviceTemplate;
     }
 
@@ -324,15 +363,15 @@ public class SimpleToscaProvider {
      * @throws PfModelException on errors creating policy types
      */
     public JpaToscaServiceTemplate createPolicyTypes(@NonNull final PfDao dao,
-            @NonNull final JpaToscaServiceTemplate incomingServiceTemplate) throws PfModelException {
+        @NonNull final JpaToscaServiceTemplate incomingServiceTemplate) throws PfModelException {
         LOGGER.debug("->createPolicyTypes: serviceTempalate={}", incomingServiceTemplate);
 
         ToscaUtils.assertPolicyTypesExist(incomingServiceTemplate);
 
         JpaToscaServiceTemplate writtenServiceTemplate = appendToServiceTemplate(dao, incomingServiceTemplate);
 
-        LOGGER.debug("<-createPolicyTypes: returnServiceTempalate={}", writtenServiceTemplate);
-        return writtenServiceTemplate;
+        LOGGER.debug("<-createPolicyTypes: writtenServiceTemplate={}", writtenServiceTemplate);
+        return incomingServiceTemplate;
     }
 
     /**
@@ -344,7 +383,7 @@ public class SimpleToscaProvider {
      * @throws PfModelException on errors updating policy types
      */
     public JpaToscaServiceTemplate updatePolicyTypes(@NonNull final PfDao dao,
-            @NonNull final JpaToscaServiceTemplate serviceTemplate) throws PfModelException {
+        @NonNull final JpaToscaServiceTemplate serviceTemplate) throws PfModelException {
         LOGGER.debug("->updatePolicyTypes: serviceTempalate={}", serviceTemplate);
 
         ToscaUtils.assertPolicyTypesExist(serviceTemplate);
@@ -382,7 +421,7 @@ public class SimpleToscaProvider {
      * @throws PfModelException on errors deleting policy types
      */
     public JpaToscaServiceTemplate deletePolicyType(@NonNull final PfDao dao, @NonNull final PfConceptKey policyTypeKey)
-            throws PfModelException {
+        throws PfModelException {
         LOGGER.debug("->deletePolicyType: key={}", policyTypeKey);
 
         JpaToscaServiceTemplate serviceTemplate = getServiceTemplate(dao);
@@ -391,20 +430,19 @@ public class SimpleToscaProvider {
             throw new PfModelRuntimeException(Response.Status.NOT_FOUND, "no policy types found");
         }
 
-        JpaToscaEntityType<? extends ToscaEntity> policyType4Deletion =
-                serviceTemplate.getPolicyTypes().get(policyTypeKey);
+        JpaToscaPolicyType policyType4Deletion = serviceTemplate.getPolicyTypes().get(policyTypeKey);
         if (policyType4Deletion == null) {
             throw new PfModelRuntimeException(Response.Status.NOT_FOUND,
-                    POLICY_TYPE + policyTypeKey.getId() + NOT_FOUND);
+                POLICY_TYPE + policyTypeKey.getId() + NOT_FOUND);
         }
 
         for (JpaToscaPolicyType policyType : serviceTemplate.getPolicyTypes().getAll(null)) {
             Collection<JpaToscaEntityType<ToscaEntity>> ancestorList = ToscaUtils
-                    .getEntityTypeAncestors(serviceTemplate.getPolicyTypes(), policyType, new PfValidationResult());
+                .getEntityTypeAncestors(serviceTemplate.getPolicyTypes(), policyType, new PfValidationResult());
 
             if (ancestorList.contains(policyType4Deletion)) {
                 throw new PfModelRuntimeException(Response.Status.NOT_ACCEPTABLE, POLICY_TYPE + policyTypeKey.getId()
-                        + " is in use, it is referenced in policy type " + policyType.getId());
+                    + " is in use, it is referenced in policy type " + policyType.getId());
             }
         }
 
@@ -412,15 +450,21 @@ public class SimpleToscaProvider {
             for (JpaToscaPolicy policy : serviceTemplate.getTopologyTemplate().getPolicies().getAll(null)) {
                 if (policyTypeKey.equals(policy.getType())) {
                     throw new PfModelRuntimeException(Response.Status.NOT_ACCEPTABLE, POLICY_TYPE
-                            + policyTypeKey.getId() + " is in use, it is referenced in policy " + policy.getId());
+                        + policyTypeKey.getId() + " is in use, it is referenced in policy " + policy.getId());
                 }
             }
         }
 
-        dao.delete(JpaToscaPolicyType.class, policyTypeKey);
+        serviceTemplate.getPolicyTypes().getConceptMap().remove(policyTypeKey);
+        new SimpleToscaServiceTemplateProvider().write(dao, serviceTemplate);
+        dao.delete(policyType4Deletion);
 
-        LOGGER.debug("<-deletePolicyType: key={}, serviceTempalate={}", policyTypeKey, serviceTemplate);
-        return serviceTemplate;
+        JpaToscaServiceTemplate deletedServiceTemplate = new JpaToscaServiceTemplate();
+        deletedServiceTemplate.setPolicyTypes(new JpaToscaPolicyTypes());
+        deletedServiceTemplate.getPolicyTypes().getConceptMap().put(policyTypeKey, policyType4Deletion);
+
+        LOGGER.debug("<-deletePolicyType: key={}, serviceTempalate={}", policyTypeKey, deletedServiceTemplate);
+        return deletedServiceTemplate;
     }
 
     /**
@@ -433,25 +477,43 @@ public class SimpleToscaProvider {
      * @throws PfModelException on errors getting policies
      */
     public JpaToscaServiceTemplate getPolicies(@NonNull final PfDao dao, final String name, final String version)
-            throws PfModelException {
+        throws PfModelException {
         LOGGER.debug("->getPolicies: name={}, version={}", name, version);
 
         JpaToscaServiceTemplate dbServiceTemplate = getServiceTemplate(dao);
 
+        if (!ToscaUtils.doPoliciesExist(dbServiceTemplate)) {
+            throw new PfModelRuntimeException(Response.Status.NOT_FOUND,
+                "policies for " + name + ":" + version + DO_NOT_EXIST);
+        }
+
+        JpaToscaServiceTemplate returnServiceTemplate = getCascadedPolicies(dbServiceTemplate, name, version);
+
+        LOGGER.debug("<-getPolicies: name={}, version={}, serviceTemplate={}", name, version, returnServiceTemplate);
+        return returnServiceTemplate;
+    }
+
+    /**
+     * Get the cascaded policies for a policy name and version.
+     *
+     * @param dbServiceTemplate the service template to search for the cascaded policy
+     * @param name the policy name we are searching for
+     * @param version the policy version we are searching for
+     * @return a service template containing the cascaded policy
+     * @throws PfModelException on errors getting the policy
+     */
+    public JpaToscaServiceTemplate getCascadedPolicies(final JpaToscaServiceTemplate dbServiceTemplate,
+        final String name, final String version) throws PfModelException {
+
         JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate(dbServiceTemplate);
         serviceTemplate.setDataTypes(new JpaToscaDataTypes());
         serviceTemplate.setPolicyTypes(new JpaToscaPolicyTypes());
 
-        if (!ToscaUtils.doPoliciesExist(serviceTemplate)) {
-            throw new PfModelRuntimeException(Response.Status.NOT_FOUND,
-                    "policies for " + name + ":" + version + DO_NOT_EXIST);
-        }
-
         ToscaUtils.getEntityTree(serviceTemplate.getTopologyTemplate().getPolicies(), name, version);
 
         if (!ToscaUtils.doPoliciesExist(serviceTemplate)) {
             throw new PfModelRuntimeException(Response.Status.NOT_FOUND,
-                    "policies for " + name + ":" + version + DO_NOT_EXIST);
+                "policies for " + name + ":" + version + DO_NOT_EXIST);
         }
 
         JpaToscaServiceTemplate returnServiceTemplate = new JpaToscaServiceTemplate(serviceTemplate);
@@ -459,14 +521,13 @@ public class SimpleToscaProvider {
 
         for (JpaToscaPolicy policy : serviceTemplate.getTopologyTemplate().getPolicies().getConceptMap().values()) {
             JpaToscaServiceTemplate referencedEntitiesServiceTemplate =
-                    getPolicyTypes(dao, policy.getType().getName(), policy.getType().getVersion());
+                getCascadedPolicyTypes(dbServiceTemplate, policy.getType().getName(), policy.getType().getVersion());
 
             returnServiceTemplate.getTopologyTemplate().getPolicies().getConceptMap().put(policy.getKey(), policy);
             returnServiceTemplate =
-                    ToscaServiceTemplateUtils.addFragment(returnServiceTemplate, referencedEntitiesServiceTemplate);
+                ToscaServiceTemplateUtils.addFragment(returnServiceTemplate, referencedEntitiesServiceTemplate);
         }
 
-        LOGGER.debug("<-getPolicies: name={}, version={}, serviceTemplate={}", name, version, returnServiceTemplate);
         return returnServiceTemplate;
     }
 
@@ -479,15 +540,15 @@ public class SimpleToscaProvider {
      * @throws PfModelException on errors creating policies
      */
     public JpaToscaServiceTemplate createPolicies(@NonNull final PfDao dao,
-            @NonNull final JpaToscaServiceTemplate incomingServiceTemplate) throws PfModelException {
+        @NonNull final JpaToscaServiceTemplate incomingServiceTemplate) throws PfModelException {
         LOGGER.debug("->createPolicies: incomingServiceTemplate={}", incomingServiceTemplate);
 
         ToscaUtils.assertPoliciesExist(incomingServiceTemplate);
 
         JpaToscaServiceTemplate writtenServiceTemplate = appendToServiceTemplate(dao, incomingServiceTemplate);
 
-        LOGGER.debug("<-createPolicies: serviceTemplate={}", writtenServiceTemplate);
-        return writtenServiceTemplate;
+        LOGGER.debug("<-createPolicies: writtenServiceTemplate={}", writtenServiceTemplate);
+        return incomingServiceTemplate;
     }
 
     /**
@@ -499,7 +560,7 @@ public class SimpleToscaProvider {
      * @throws PfModelException on errors updating policies
      */
     public JpaToscaServiceTemplate updatePolicies(@NonNull final PfDao dao,
-            @NonNull final JpaToscaServiceTemplate serviceTemplate) throws PfModelException {
+        @NonNull final JpaToscaServiceTemplate serviceTemplate) throws PfModelException {
         LOGGER.debug("->updatePolicies: serviceTempalate={}", serviceTemplate);
 
         ToscaUtils.assertPoliciesExist(serviceTemplate);
@@ -532,7 +593,7 @@ public class SimpleToscaProvider {
      * @throws PfModelException on errors deleting policies
      */
     public JpaToscaServiceTemplate deletePolicy(@NonNull final PfDao dao, @NonNull final PfConceptKey policyKey)
-            throws PfModelException {
+        throws PfModelException {
         LOGGER.debug("->deletePolicy: key={}", policyKey);
 
         JpaToscaServiceTemplate serviceTemplate = getServiceTemplate(dao);
@@ -546,10 +607,17 @@ public class SimpleToscaProvider {
             throw new PfModelRuntimeException(Response.Status.NOT_FOUND, "policy " + policyKey.getId() + NOT_FOUND);
         }
 
-        dao.delete(JpaToscaPolicy.class, policyKey);
+        serviceTemplate.getTopologyTemplate().getPolicies().getConceptMap().remove(policyKey);
+        new SimpleToscaServiceTemplateProvider().write(dao, serviceTemplate);
+        dao.delete(policy4Deletion);
 
-        LOGGER.debug("<-deletePolicy: key={}, serviceTempalate={}", policyKey, serviceTemplate);
-        return serviceTemplate;
+        JpaToscaServiceTemplate deletedServiceTemplate = new JpaToscaServiceTemplate();
+        deletedServiceTemplate.setTopologyTemplate(new JpaToscaTopologyTemplate());
+        deletedServiceTemplate.getTopologyTemplate().setPolicies(new JpaToscaPolicies());
+        deletedServiceTemplate.getTopologyTemplate().getPolicies().getConceptMap().put(policyKey, policy4Deletion);
+
+        LOGGER.debug("<-deletePolicy: key={}, serviceTempalate={}", policyKey, deletedServiceTemplate);
+        return deletedServiceTemplate;
     }
 
     /**
@@ -575,7 +643,7 @@ public class SimpleToscaProvider {
 
         if (policyType == null) {
             String errorMessage =
-                    POLICY_TYPE + policyTypeKey.getId() + " for policy " + policy.getId() + " does not exist";
+                POLICY_TYPE + policyTypeKey.getId() + " for policy " + policy.getId() + " does not exist";
             throw new PfModelRuntimeException(Response.Status.NOT_ACCEPTABLE, errorMessage);
         }
     }