X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Fclamp%2Floop%2Ftemplate%2FPolicyModelsService.java;h=98b9289169714aa1da68f0c2d9544bfb818a4f93;hb=afac3121bfacc4d81903b1d8492613b0b77d3298;hp=0a09dd8d79d4a2de0c6083051dd3f6e99c074cb5;hpb=3a83e2a2ff88ef49535973df8dc77dc8015170da;p=clamp.git diff --git a/src/main/java/org/onap/clamp/loop/template/PolicyModelsService.java b/src/main/java/org/onap/clamp/loop/template/PolicyModelsService.java index 0a09dd8d..98b92891 100644 --- a/src/main/java/org/onap/clamp/loop/template/PolicyModelsService.java +++ b/src/main/java/org/onap/clamp/loop/template/PolicyModelsService.java @@ -23,13 +23,19 @@ 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 { @@ -43,40 +49,62 @@ 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 models = getAllPolicyModelsByType(policyModelTypeFromTosca); + Collections.sort((List) models); + PolicyModel newPolicyModel = new PolicyModel(policyModelTypeFromTosca, policyModelTosca, + SemanticVersioning.incrementMajorVersion(((ArrayList) models).isEmpty() ? null + : ((ArrayList) 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 = getPolicyModelByType(policyModelType, policyModelVersion); + thePolicyModel.setPolicyAcronym(toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject, + ToscaSchemaConstants.METADATA_ACRONYM)); + thePolicyModel.setPolicyModelTosca(policyModelTosca); + return saveOrUpdatePolicyModel(thePolicyModel); } public List getAllPolicyModelTypes() { @@ -95,19 +123,58 @@ public class PolicyModelsService { return policyModelsRepository.findByPolicyModelType(type); } - public PolicyModel getPolicyModelByType(String type) { - List list = policyModelsRepository.findByPolicyModelType(type); - return list.stream().sorted().findFirst().orElse(null); + public PolicyModel getPolicyModelByType(String type, String version) { + return policyModelsRepository.findById(new PolicyModelId(type, version)).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 void createPolicyInDbIfNeeded(PolicyModel policyModel) { + if (!policyModelsRepository.existsById( + new PolicyModelId(policyModel.getPolicyModelType(), policyModel.getVersion()))) { + 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 pdpGroupList) { + List 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); + } + } } }