2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2020 AT&T Intellectual Property. All rights
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END============================================
20 * ===================================================================
24 package org.onap.clamp.loop.template;
26 import com.google.gson.JsonArray;
27 import com.google.gson.JsonObject;
28 import java.util.ArrayList;
29 import java.util.Collections;
30 import java.util.List;
31 import org.onap.clamp.clds.tosca.ToscaSchemaConstants;
32 import org.onap.clamp.clds.tosca.ToscaYamlToJsonConvertor;
33 import org.onap.clamp.policy.pdpgroup.PdpGroup;
34 import org.onap.clamp.util.SemanticVersioning;
35 import org.springframework.beans.factory.annotation.Autowired;
36 import org.springframework.stereotype.Service;
37 import org.springframework.transaction.annotation.Propagation;
38 import org.springframework.transaction.annotation.Transactional;
41 public class PolicyModelsService {
42 private final PolicyModelsRepository policyModelsRepository;
43 private ToscaYamlToJsonConvertor toscaYamlToJsonConvertor;
46 public PolicyModelsService(PolicyModelsRepository policyModelrepo,
47 ToscaYamlToJsonConvertor convertor) {
48 policyModelsRepository = policyModelrepo;
49 toscaYamlToJsonConvertor = convertor;
53 * Save or Update Policy Model.
55 * @param policyModel The policyModel
56 * @return The Policy Model
58 public PolicyModel saveOrUpdatePolicyModel(PolicyModel policyModel) {
59 return policyModelsRepository.save(policyModel);
63 * Verify whether Policy Model exist by ID.
65 * @param policyModelId The policyModel Id
66 * @return The flag indicates whether Policy Model exist
68 public boolean existsById(PolicyModelId policyModelId) {
69 return policyModelsRepository.existsById(policyModelId);
73 * Creates or updates the Tosca Policy Model.
75 * @param policyModelType The policyModeltype in Tosca yaml
76 * @param policyModelTosca The Policymodel object
77 * @return The Policy Model created
79 public PolicyModel createNewPolicyModelFromTosca(String policyModelType,
80 String policyModelTosca) {
81 JsonObject jsonObject = toscaYamlToJsonConvertor.validateAndConvertToJson(policyModelTosca);
82 String policyModelTypeFromTosca = toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject,
83 ToscaSchemaConstants.METADATA_POLICY_MODEL_TYPE);
84 String policyModelTypeToUse = policyModelTypeFromTosca != null ? policyModelTypeFromTosca : policyModelType;
85 Iterable<PolicyModel> models = getAllPolicyModelsByType(policyModelTypeToUse);
86 Collections.sort((List<PolicyModel>) models);
87 PolicyModel newPolicyModel = new PolicyModel(policyModelTypeToUse, policyModelTosca,
88 SemanticVersioning.incrementMajorVersion(
89 ((ArrayList) models).isEmpty() ? null : ((ArrayList<PolicyModel>) models).get(0).getVersion()),
90 toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject,
91 ToscaSchemaConstants.METADATA_ACRONYM));
92 return saveOrUpdatePolicyModel(newPolicyModel);
96 * Update an existing Tosca Policy Model.
98 * @param policyModelType The policy Model type in Tosca yaml
99 * @param policyModelVersion The policy Version to update
100 * @param policyModelTosca The Policy Model tosca
101 * @return The Policy Model updated
103 public PolicyModel updatePolicyModelTosca(String policyModelType, String policyModelVersion,
104 String policyModelTosca) {
105 JsonObject jsonObject = toscaYamlToJsonConvertor.validateAndConvertToJson(policyModelTosca);
106 PolicyModel thePolicyModel = getPolicyModelByType(policyModelType, policyModelVersion);
107 thePolicyModel.setPolicyAcronym(toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject,
108 ToscaSchemaConstants.METADATA_ACRONYM));
109 thePolicyModel.setPolicyModelTosca(policyModelTosca);
110 return saveOrUpdatePolicyModel(thePolicyModel);
113 public List<String> getAllPolicyModelTypes() {
114 return policyModelsRepository.getAllPolicyModelType();
117 public Iterable<PolicyModel> getAllPolicyModels() {
118 return policyModelsRepository.findAll();
121 public PolicyModel getPolicyModel(String type, String version) {
122 return policyModelsRepository.findById(new PolicyModelId(type, version)).orElse(null);
125 public Iterable<PolicyModel> getAllPolicyModelsByType(String type) {
126 return policyModelsRepository.findByPolicyModelType(type);
129 public PolicyModel getPolicyModelByType(String type, String version) {
130 return policyModelsRepository.findById(new PolicyModelId(type, version)).orElse(null);
134 * Retrieves the Tosca model Yaml string.
136 * @param type The Policy Model Type
137 * @param version The policy model version
138 * @return The Tosca model Yaml string
140 public String getPolicyModelTosca(String type, String version) {
141 return policyModelsRepository.findById(new PolicyModelId(type, version)).orElse(new PolicyModel())
142 .getPolicyModelTosca();
146 * This method creates an PolicyModel in Db if it does not exist.
148 * @param policyModel The policyModel to save
150 @Transactional(propagation = Propagation.REQUIRES_NEW)
151 public void createPolicyInDbIfNeeded(PolicyModel policyModel) {
152 if (!policyModelsRepository
153 .existsById(new PolicyModelId(policyModel.getPolicyModelType(), policyModel.getVersion()))) {
154 policyModelsRepository.save(policyModel);
159 * Update the Pdp Group info in Policy Model DB.
161 * @param pdpGroupList The list of Pdp Group info received from Policy Engine
163 public void updatePdpGroupInfo(List<PdpGroup> pdpGroupList) {
164 List<PolicyModel> policyModelList = policyModelsRepository.findAll();
165 for (PolicyModel policyModel : policyModelList) {
166 JsonArray supportedPdpGroups = new JsonArray();
167 for (PdpGroup pdpGroup : pdpGroupList) {
168 JsonObject supportedPdpGroup = pdpGroup.getSupportedSubgroups(policyModel.getPolicyModelType(),
169 policyModel.getVersion());
170 if (supportedPdpGroup != null) {
171 supportedPdpGroups.add(supportedPdpGroup);
175 if (supportedPdpGroups.size() > 0) {
176 JsonObject supportedPdpJson = new JsonObject();
177 supportedPdpJson.add("supportedPdpGroups", supportedPdpGroups);
178 policyModel.setPolicyPdpGroup(supportedPdpJson);
179 policyModelsRepository.save(policyModel);