+ 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.save(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.save(policyModel);
+ }
+ }