Add provider for Tosca Policies
[policy/models.git] / models-tosca / src / main / java / org / onap / policy / models / tosca / simple / provider / SimpleToscaProvider.java
index 3d563a1..2240ef0 100644 (file)
 
 package org.onap.policy.models.tosca.simple.provider;
 
+import javax.ws.rs.core.Response;
+
 import lombok.NonNull;
 
 import org.onap.policy.models.base.PfConceptKey;
 import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.base.PfModelRuntimeException;
 import org.onap.policy.models.dao.PfDao;
+import org.onap.policy.models.tosca.simple.concepts.ToscaPolicies;
+import org.onap.policy.models.tosca.simple.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.simple.concepts.ToscaPolicyType;
+import org.onap.policy.models.tosca.simple.concepts.ToscaPolicyTypes;
 import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate;
+import org.onap.policy.models.tosca.simple.concepts.ToscaTopologyTemplate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * This class provides the provision of information on TOSCA concepts in the database to callers.
@@ -33,6 +43,8 @@ import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate;
  * @author Liam Fallon (liam.fallon@est.tech)
  */
 public class SimpleToscaProvider {
+    private static final Logger LOGGER = LoggerFactory.getLogger(SimpleToscaProvider.class);
+
     /**
      * Get policy types.
      *
@@ -44,7 +56,21 @@ public class SimpleToscaProvider {
      */
     public ToscaServiceTemplate getPolicyTypes(@NonNull final PfDao dao, @NonNull final PfConceptKey policyTypeKey)
             throws PfModelException {
-        return null;
+
+        // Create the structure of the TOSCA service template to contain the policy type
+        ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate();
+        serviceTemplate.setPolicyTypes(new ToscaPolicyTypes());
+
+        // Add the policy type to the TOSCA service template
+        ToscaPolicyType policyType = dao.get(ToscaPolicyType.class, policyTypeKey);
+        if (policyType != null) {
+            serviceTemplate.getPolicyTypes().getConceptMap().put(policyTypeKey, policyType);
+            return serviceTemplate;
+        } else {
+            String errorMessage = "policy type not found: " + policyTypeKey.getId();
+            LOGGER.warn(errorMessage);
+            throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
+        }
     }
 
     /**
@@ -57,7 +83,24 @@ public class SimpleToscaProvider {
      */
     public ToscaServiceTemplate createPolicyTypes(@NonNull final PfDao dao,
             @NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException {
-        return null;
+
+        assertPolicyTypesExist(serviceTemplate);
+
+        for (ToscaPolicyType policyType : serviceTemplate.getPolicyTypes().getAll(null)) {
+            dao.create(policyType);
+        }
+
+        // Return the created policy types
+        ToscaPolicyTypes returnPolicyTypes = new ToscaPolicyTypes();
+
+        for (PfConceptKey policyTypeKey : serviceTemplate.getPolicyTypes().getConceptMap().keySet()) {
+            returnPolicyTypes.getConceptMap().put(policyTypeKey, dao.get(ToscaPolicyType.class, policyTypeKey));
+        }
+
+        ToscaServiceTemplate returnServiceTemplate = new ToscaServiceTemplate();
+        returnServiceTemplate.setPolicyTypes(returnPolicyTypes);
+
+        return returnServiceTemplate;
     }
 
     /**
@@ -70,7 +113,24 @@ public class SimpleToscaProvider {
      */
     public ToscaServiceTemplate updatePolicyTypes(@NonNull final PfDao dao,
             @NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException {
-        return null;
+
+        assertPolicyTypesExist(serviceTemplate);
+
+        for (ToscaPolicyType policyType : serviceTemplate.getPolicyTypes().getAll(null)) {
+            dao.update(policyType);
+        }
+
+        // Return the created policy types
+        ToscaPolicyTypes returnPolicyTypes = new ToscaPolicyTypes();
+
+        for (PfConceptKey policyTypeKey : serviceTemplate.getPolicyTypes().getConceptMap().keySet()) {
+            returnPolicyTypes.getConceptMap().put(policyTypeKey, dao.get(ToscaPolicyType.class, policyTypeKey));
+        }
+
+        ToscaServiceTemplate returnServiceTemplate = new ToscaServiceTemplate();
+        returnServiceTemplate.setPolicyTypes(returnPolicyTypes);
+
+        return returnServiceTemplate;
     }
 
     /**
@@ -84,7 +144,12 @@ public class SimpleToscaProvider {
      */
     public ToscaServiceTemplate deletePolicyTypes(@NonNull final PfDao dao, @NonNull final PfConceptKey policyTypeKey)
             throws PfModelException {
-        return null;
+
+        ToscaServiceTemplate serviceTemplate = getPolicyTypes(dao, policyTypeKey);
+
+        dao.delete(ToscaPolicyType.class, policyTypeKey);
+
+        return serviceTemplate;
     }
 
     /**
@@ -98,7 +163,22 @@ public class SimpleToscaProvider {
      */
     public ToscaServiceTemplate getPolicies(@NonNull final PfDao dao, @NonNull final PfConceptKey policyKey)
             throws PfModelException {
-        return null;
+
+        // Create the structure of the TOSCA service template to contain the policy type
+        ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate();
+        serviceTemplate.setTopologyTemplate(new ToscaTopologyTemplate());
+        serviceTemplate.getTopologyTemplate().setPolicies(new ToscaPolicies());
+
+        // Add the policy to the TOSCA service template
+        ToscaPolicy policy = dao.get(ToscaPolicy.class, policyKey);
+        if (policy != null) {
+            serviceTemplate.getTopologyTemplate().getPolicies().getConceptMap().put(policyKey, policy);
+            return serviceTemplate;
+        } else {
+            String errorMessage = "policy not found: " + policyKey.getId();
+            LOGGER.warn(errorMessage);
+            throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
+        }
     }
 
     /**
@@ -111,7 +191,24 @@ public class SimpleToscaProvider {
      */
     public ToscaServiceTemplate createPolicies(@NonNull final PfDao dao,
             @NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException {
-        return null;
+
+        assertPoliciesExist(serviceTemplate);
+
+        for (ToscaPolicy policy : serviceTemplate.getTopologyTemplate().getPolicies().getAll(null)) {
+            dao.create(policy);
+        }
+
+        // Return the created policy types
+        ToscaPolicies returnPolicies = new ToscaPolicies();
+        returnPolicies.setKey(serviceTemplate.getTopologyTemplate().getPolicies().getKey());
+
+        for (PfConceptKey policyKey : serviceTemplate.getTopologyTemplate().getPolicies().getConceptMap().keySet()) {
+            returnPolicies.getConceptMap().put(policyKey, dao.get(ToscaPolicy.class, policyKey));
+        }
+
+        serviceTemplate.getTopologyTemplate().setPolicies(returnPolicies);
+
+        return serviceTemplate;
     }
 
     /**
@@ -124,7 +221,24 @@ public class SimpleToscaProvider {
      */
     public ToscaServiceTemplate updatePolicies(@NonNull final PfDao dao,
             @NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException {
-        return null;
+
+        assertPoliciesExist(serviceTemplate);
+
+        for (ToscaPolicy policy : serviceTemplate.getTopologyTemplate().getPolicies().getAll(null)) {
+            dao.update(policy);
+        }
+
+        // Return the created policy types
+        ToscaPolicies returnPolicies = new ToscaPolicies();
+        returnPolicies.setKey(serviceTemplate.getTopologyTemplate().getPolicies().getKey());
+
+        for (PfConceptKey policyKey : serviceTemplate.getTopologyTemplate().getPolicies().getConceptMap().keySet()) {
+            returnPolicies.getConceptMap().put(policyKey, dao.get(ToscaPolicy.class, policyKey));
+        }
+
+        serviceTemplate.getTopologyTemplate().setPolicies(returnPolicies);
+
+        return serviceTemplate;
     }
 
     /**
@@ -132,11 +246,56 @@ public class SimpleToscaProvider {
      *
      * @param dao the DAO to use to access the database
      * @param policyKey the policy key
-     * @return the TOSCA service template containing the policy types that were deleted
+     * @return the TOSCA service template containing the policies that were deleted
      * @throws PfModelException on errors deleting policies
      */
     public ToscaServiceTemplate deletePolicies(@NonNull final PfDao dao, @NonNull final PfConceptKey policyKey)
             throws PfModelException {
-        return null;
+
+        ToscaServiceTemplate serviceTemplate = getPolicies(dao, policyKey);
+
+        dao.delete(ToscaPolicy.class, policyKey);
+
+        return serviceTemplate;
+    }
+
+    /**
+     * Check if policy types have been specified is initialized.
+     */
+    private void assertPolicyTypesExist(final ToscaServiceTemplate serviceTemplate) {
+        if (serviceTemplate.getPolicyTypes() == null) {
+            String errorMessage = "no policy types specified on service template";
+            LOGGER.warn(errorMessage);
+            throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
+        }
+
+        if (serviceTemplate.getPolicyTypes().getConceptMap().isEmpty()) {
+            String errorMessage = "list of policy types specified on service template is empty";
+            LOGGER.warn(errorMessage);
+            throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
+        }
+    }
+
+    /**
+     * Check if policy types have been specified is initialized.
+     */
+    private void assertPoliciesExist(final ToscaServiceTemplate serviceTemplate) {
+        if (serviceTemplate.getTopologyTemplate() == null) {
+            String errorMessage = "topology template not specified on service template";
+            LOGGER.warn(errorMessage);
+            throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
+        }
+
+        if (serviceTemplate.getTopologyTemplate().getPolicies() == null) {
+            String errorMessage = "no policies specified on topology template of service template";
+            LOGGER.warn(errorMessage);
+            throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
+        }
+
+        if (serviceTemplate.getTopologyTemplate().getPolicies().getConceptMap().isEmpty()) {
+            String errorMessage = "list of policies specified on topology template of service template is empty";
+            LOGGER.warn(errorMessage);
+            throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
+        }
     }
 }