Fix blueprint installation
[clamp.git] / src / main / java / org / onap / clamp / loop / template / PolicyModelsService.java
index 8e22852..17cf5c1 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP CLAMP
  * ================================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights
+ * Copyright (C) 2020 AT&T Intellectual Property. All rights
  *                             reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
 
 package org.onap.clamp.loop.template;
 
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
-
+import org.onap.clamp.clds.tosca.ToscaSchemaConstants;
+import org.onap.clamp.clds.tosca.ToscaYamlToJsonConvertor;
+import org.onap.clamp.policy.pdpgroup.PdpGroup;
+import org.onap.clamp.util.SemanticVersioning;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
 @Service
 public class PolicyModelsService {
     private final PolicyModelsRepository policyModelsRepository;
+    private ToscaYamlToJsonConvertor toscaYamlToJsonConvertor;
 
     @Autowired
-    public PolicyModelsService(PolicyModelsRepository policyModelrepo) {
+    public PolicyModelsService(PolicyModelsRepository policyModelrepo,
+        ToscaYamlToJsonConvertor convertor) {
         policyModelsRepository = policyModelrepo;
+        toscaYamlToJsonConvertor = convertor;
     }
 
+    /**
+     * Save or Update Policy Model.
+     *
+     * @param policyModel The policyModel
+     * @return The Policy Model
+     */
     public PolicyModel saveOrUpdatePolicyModel(PolicyModel policyModel) {
-        return policyModelsRepository.save(policyModel);
+        return policyModelsRepository.saveAndFlush(policyModel);
+    }
+
+    /**
+     * Verify whether Policy Model exist by ID.
+     *
+     * @param policyModelId The policyModel Id
+     * @return The flag indicates whether Policy Model exist
+     */
+    public boolean existsById(PolicyModelId policyModelId) {
+        return policyModelsRepository.existsById(policyModelId);
+    }
+
+    /**
+     * Creates or updates the Tosca Policy Model.
+     *
+     * @param policyModelTosca The Policymodel object
+     * @return The Policy Model created
+     */
+    public PolicyModel createNewPolicyModelFromTosca(String policyModelTosca) {
+        JsonObject jsonObject = toscaYamlToJsonConvertor.validateAndConvertToJson(policyModelTosca);
+        String policyModelTypeFromTosca = toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject,
+            ToscaSchemaConstants.METADATA_POLICY_MODEL_TYPE);
+        Iterable<PolicyModel> models = getAllPolicyModelsByType(policyModelTypeFromTosca);
+        Collections.sort((List<PolicyModel>) models);
+        PolicyModel newPolicyModel = new PolicyModel(policyModelTypeFromTosca, policyModelTosca,
+            SemanticVersioning.incrementMajorVersion(((ArrayList) models).isEmpty() ? null
+                : ((ArrayList<PolicyModel>) models).get(0).getVersion()),
+            toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject,
+                ToscaSchemaConstants.METADATA_ACRONYM));
+        return saveOrUpdatePolicyModel(newPolicyModel);
+    }
+
+    /**
+     * Update an existing Tosca Policy Model.
+     *
+     * @param policyModelType The policy Model type in Tosca yaml
+     * @param policyModelVersion The policy Version to update
+     * @param policyModelTosca The Policy Model tosca
+     * @return The Policy Model updated
+     */
+    public PolicyModel updatePolicyModelTosca(String policyModelType, String policyModelVersion,
+        String policyModelTosca) {
+        JsonObject jsonObject = toscaYamlToJsonConvertor.validateAndConvertToJson(policyModelTosca);
+        PolicyModel thePolicyModel = getPolicyModel(policyModelType, policyModelVersion);
+        thePolicyModel.setPolicyAcronym(toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject,
+            ToscaSchemaConstants.METADATA_ACRONYM));
+        thePolicyModel.setPolicyModelTosca(policyModelTosca);
+        return saveOrUpdatePolicyModel(thePolicyModel);
     }
 
     public List<String> getAllPolicyModelTypes() {
@@ -56,4 +122,52 @@ public class PolicyModelsService {
     public Iterable<PolicyModel> getAllPolicyModelsByType(String type) {
         return policyModelsRepository.findByPolicyModelType(type);
     }
+
+    /**
+     * Retrieves the Tosca model Yaml string.
+     *
+     * @param type The Policy Model Type
+     * @param version The policy model version
+     * @return The Tosca model Yaml string
+     */
+    public String getPolicyModelTosca(String type, String version) {
+        return policyModelsRepository.findById(new PolicyModelId(type, version))
+            .orElse(new PolicyModel()).getPolicyModelTosca();
+    }
+
+    /**
+     * This method creates an PolicyModel in Db if it does not exist.
+     *
+     * @param policyModel The policyModel to save
+     */
+    @Transactional(propagation = Propagation.REQUIRES_NEW)
+    public PolicyModel savePolicyModelInNewTransaction(PolicyModel policyModel) {
+            return policyModelsRepository.saveAndFlush(policyModel);
+    }
+
+    /**
+     * Update the Pdp Group info in Policy Model DB.
+     *
+     * @param pdpGroupList The list of Pdp Group info received from Policy Engine
+     */
+    public void updatePdpGroupInfo(List<PdpGroup> pdpGroupList) {
+        List<PolicyModel> policyModelList = policyModelsRepository.findAll();
+        for (PolicyModel policyModel : policyModelList) {
+            JsonArray supportedPdpGroups = new JsonArray();
+            for (PdpGroup pdpGroup : pdpGroupList) {
+                JsonObject supportedPdpGroup = pdpGroup.getSupportedSubgroups(
+                    policyModel.getPolicyModelType(), policyModel.getVersion());
+                if (supportedPdpGroup != null) {
+                    supportedPdpGroups.add(supportedPdpGroup);
+                }
+            }
+
+            if (supportedPdpGroups.size() > 0) {
+                JsonObject supportedPdpJson = new JsonObject();
+                supportedPdpJson.add("supportedPdpGroups", supportedPdpGroups);
+                policyModel.setPolicyPdpGroup(supportedPdpJson);
+                policyModelsRepository.saveAndFlush(policyModel);
+            }
+        }
+    }
 }