diff options
Diffstat (limited to 'runtime/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsService.java')
-rw-r--r-- | runtime/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsService.java | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/runtime/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsService.java b/runtime/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsService.java new file mode 100644 index 000000000..2d31b3b10 --- /dev/null +++ b/runtime/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsService.java @@ -0,0 +1,138 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.loop.template; + +import com.google.gson.JsonObject; +import java.util.List; +import org.onap.policy.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport; +import org.onap.policy.clamp.policy.pdpgroup.PdpGroupsAnalyzer; +import org.onap.policy.models.pdp.concepts.PdpGroups; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +/** + * This class contains the methods to access the policyModel object in db. + */ +@Service +public class PolicyModelsService { + private final PolicyModelsRepository policyModelsRepository; + + /** + * This is the new tosca converter that must be used in clamp. + */ + @Autowired + private ToscaConverterWithDictionarySupport toscaConverterWithDictionarySupport; + + @Autowired + public PolicyModelsService(PolicyModelsRepository policyModelrepo) { + policyModelsRepository = policyModelrepo; + } + + /** + * Save or Update Policy Model. + * + * @param policyModel The policyModel + * @return The Policy Model + */ + public PolicyModel saveOrUpdatePolicyModel(PolicyModel 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); + } + + /** + * This method retrieves the tosca model and convert it to a Json schema. + * That json schema is normally used by the UI. + * + * @param policyType The policy model type id + * @param policyTypeVersion The policy model type version + * @return A JsonObject with the json schema describing the tosca + */ + public JsonObject getPolicyModelJson(String policyType, String policyTypeVersion) { + PolicyModel thePolicyModel = getPolicyModel(policyType, policyTypeVersion); + // In the following use case we are not in the context of a closed loop, so the enrichment + // of the json cannot be done, that's why the serviceModel provided is NULL. + return toscaConverterWithDictionarySupport + .convertToscaToJsonSchemaObject(thePolicyModel.getPolicyModelTosca(), policyType, null); + } + + public List<String> getAllPolicyModelTypes() { + return policyModelsRepository.getAllPolicyModelType(); + } + + public Iterable<PolicyModel> getAllPolicyModels() { + return policyModelsRepository.findAll(); + } + + public PolicyModel getPolicyModel(String type, String version) { + return policyModelsRepository.findById(new PolicyModelId(type, version)).orElse(null); + } + + 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 pdpGroups The list of Pdp Group info received from Policy Engine + */ + public void updatePdpGroupInfo(PdpGroups pdpGroups) { + List<PolicyModel> policyModelsList = policyModelsRepository.findAll(); + PdpGroupsAnalyzer.updatePdpGroupOfPolicyModels(policyModelsList, pdpGroups); + this.policyModelsRepository.saveAll(policyModelsList); + } +} |