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 {
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 policyModelType
- * The policyModeltype in Tosca yaml
- * @param policyModel
- * The Policymodel object
- * @return The Policy Model
+ * @param policyModelTosca The Policymodel object
+ * @return The Policy Model created
*/
- public PolicyModel saveOrUpdateByPolicyModelType(String policyModelType,
- String policyModelTosca) {
+ public PolicyModel createNewPolicyModelFromTosca(String policyModelTosca) {
JsonObject jsonObject = toscaYamlToJsonConvertor.validateAndConvertToJson(policyModelTosca);
-
- String policyModelTypeName = toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject,
+ String policyModelTypeFromTosca = toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject,
ToscaSchemaConstants.METADATA_POLICY_MODEL_TYPE);
- String acronym = toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject,
- ToscaSchemaConstants.METADATA_ACRONYM);
- PolicyModel model = getPolicyModelByType(
- policyModelTypeName != null ? policyModelTypeName : policyModelType);
-
- if (model == null) {
- model = new PolicyModel(policyModelTypeName, policyModelTosca,
- SemanticVersioning.incrementMajorVersion(null), acronym);
- } else {
- model.setVersion(SemanticVersioning
- .incrementMajorVersion(model.getVersion() != null ? model.getVersion() : null));
- model.setPolicyModelType(policyModelTypeName);
- model.setPolicyAcronym(acronym);
- }
- return saveOrUpdatePolicyModel(model);
+ 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() {
return policyModelsRepository.findByPolicyModelType(type);
}
- public PolicyModel getPolicyModelByType(String type) {
- List<PolicyModel> list = policyModelsRepository.findByPolicyModelType(type);
- return list.stream().sorted().findFirst().orElse(null);
- }
-
/**
* Retrieves the Tosca model Yaml string.
*
- * @param type The PolicyModelType
+ * @param type The Policy Model Type
+ * @param version The policy model version
* @return The Tosca model Yaml string
*/
- public String getPolicyModelTosca(String type) {
- PolicyModel policyModel = getPolicyModelByType(type);
- return policyModel != null ? policyModel.getPolicyModelTosca() : null;
+ 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);
+ }
+ }
}
}