2 * Copyright © 2017-2018 AT&T Intellectual Property.
\r
3 * Modifications Copyright © 2018 IBM.
\r
5 * Licensed under the Apache License, Version 2.0 (the "License");
\r
6 * you may not use this file except in compliance with the License.
\r
7 * You may obtain a copy of the License at
\r
9 * http://www.apache.org/licenses/LICENSE-2.0
\r
11 * Unless required by applicable law or agreed to in writing, software
\r
12 * distributed under the License is distributed on an "AS IS" BASIS,
\r
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
14 * See the License for the specific language governing permissions and
\r
15 * limitations under the License.
\r
18 package org.onap.ccsdk.apps.controllerblueprints.service;
\r
20 import com.att.eelf.configuration.EELFLogger;
\r
21 import com.att.eelf.configuration.EELFManager;
\r
22 import com.google.common.base.Preconditions;
\r
23 import org.apache.commons.collections.CollectionUtils;
\r
24 import org.apache.commons.io.IOUtils;
\r
25 import org.apache.commons.lang3.StringUtils;
\r
26 import org.jetbrains.annotations.NotNull;
\r
27 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants;
\r
28 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException;
\r
29 import org.onap.ccsdk.apps.controllerblueprints.core.ConfigModelConstant;
\r
30 import org.onap.ccsdk.apps.controllerblueprints.core.data.ServiceTemplate;
\r
31 import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils;
\r
32 import org.onap.ccsdk.apps.controllerblueprints.service.common.ApplicationConstants;
\r
33 import org.onap.ccsdk.apps.controllerblueprints.service.domain.CbaContent;
\r
34 import org.onap.ccsdk.apps.controllerblueprints.service.domain.ConfigModel;
\r
35 import org.onap.ccsdk.apps.controllerblueprints.service.domain.ConfigModelContent;
\r
36 import org.onap.ccsdk.apps.controllerblueprints.service.repository.ConfigModelRepository;
\r
37 import org.springframework.stereotype.Service;
\r
39 import java.io.IOException;
\r
40 import java.nio.charset.Charset;
\r
41 import java.util.ArrayList;
\r
42 import java.util.List;
\r
43 import java.util.Optional;
\r
46 * ServiceTemplateCreateService.java Purpose: Provide Service Template Create Service processing
\r
47 * ServiceTemplateCreateService
\r
49 * @author Brinda Santh
\r
54 public class ConfigModelCreateService {
\r
56 private static EELFLogger log = EELFManager.getInstance().getLogger(ConfigModelCreateService.class);
\r
58 private ConfigModelRepository configModelRepository;
\r
61 * This is a ConfigModelCreateService
\r
63 * @param configModelRepository ConfigModelRepository
\r
65 public ConfigModelCreateService(ConfigModelRepository configModelRepository) {
\r
66 this.configModelRepository = configModelRepository;
\r
70 * This is a createInitialServiceTemplateContent method
\r
72 * @param templateName templateName
\r
74 * @throws BluePrintException BluePrintException
\r
76 public String createInitialServiceTemplateContent(String templateName) throws BluePrintException {
\r
77 String serviceTemplateContent = null;
\r
78 if (StringUtils.isNotBlank(templateName)) {
\r
80 serviceTemplateContent = IOUtils.toString(ConfigModelCreateService.class.getClassLoader()
\r
81 .getResourceAsStream("service_template/" + templateName + ".json"), Charset.defaultCharset());
\r
82 } catch (IOException e) {
\r
83 throw new BluePrintException(e.getMessage(), e);
\r
87 return serviceTemplateContent;
\r
91 * This is a createInitialServiceTemplate method
\r
93 * @param templateName templateName
\r
94 * @return ServiceTemplate
\r
95 * @throws BluePrintException BluePrintException
\r
97 public ServiceTemplate createInitialServiceTemplate(String templateName) throws BluePrintException {
\r
98 ServiceTemplate serviceTemplate = null;
\r
99 if (StringUtils.isNotBlank(templateName)) {
\r
101 String serviceTemplateContent = IOUtils.toString(ConfigModelCreateService.class.getClassLoader()
\r
102 .getResourceAsStream("service_template/" + templateName + ".json"), Charset.defaultCharset());
\r
103 if (StringUtils.isNotBlank(serviceTemplateContent)) {
\r
104 serviceTemplate = JacksonUtils.readValue(serviceTemplateContent, ServiceTemplate.class);
\r
106 } catch (IOException e) {
\r
107 throw new BluePrintException(e.getMessage(), e);
\r
111 return serviceTemplate;
\r
115 * This is a saveConfigModel method
\r
117 * @param configModel configModel
\r
118 * @return ConfigModel
\r
119 * @throws BluePrintException BluePrintException
\r
121 public ConfigModel saveConfigModel(ConfigModel configModel) throws BluePrintException {
\r
123 if (configModel != null) {
\r
124 String artifactName = configModel.getArtifactName();
\r
125 String artifactVersion = configModel.getArtifactVersion();
\r
126 String author = configModel.getUpdatedBy();
\r
127 CbaContent configModelCBA = configModel.getConfigModelCBA();
\r
129 if (StringUtils.isBlank(author)) {
\r
130 throw new BluePrintException("Artifact Author is missing in the Service Template");
\r
133 if (StringUtils.isBlank(artifactName)) {
\r
134 throw new BluePrintException("Artifact Name is missing in the Service Template");
\r
137 if (StringUtils.isBlank(artifactVersion)) {
\r
138 throw new BluePrintException("Artifact Version is missing in the Service Template");
\r
140 ConfigModel updateConfigModel;
\r
142 Optional<ConfigModel> dbConfigModelOptional = Optional.empty();
\r
144 if (configModel.getId() != null) {
\r
145 log.info("Searching for config model id : {}", configModel.getId());
\r
146 dbConfigModelOptional = configModelRepository.findById(configModel.getId());
\r
149 if (!dbConfigModelOptional.isPresent()) {
\r
150 log.info("Searching for config model name :"
\r
151 + configModel.getArtifactName() + ", version " + configModel.getArtifactVersion());
\r
152 dbConfigModelOptional = configModelRepository.findByArtifactNameAndArtifactVersion(
\r
153 configModel.getArtifactName(), configModel.getArtifactVersion());
\r
156 if (dbConfigModelOptional.isPresent()) {
\r
157 updateConfigModel = dbConfigModelOptional.get();
\r
158 log.info("Processing for config model id : {} with config model content count : {}"
\r
159 , updateConfigModel.getId(), updateConfigModel.getConfigModelContents().size());
\r
161 ConfigModel tempConfigModel = new ConfigModel();
\r
162 tempConfigModel.setArtifactType(ApplicationConstants.ASDC_ARTIFACT_TYPE_SDNC_MODEL);
\r
163 tempConfigModel.setArtifactName(artifactName);
\r
164 tempConfigModel.setArtifactVersion(artifactVersion);
\r
165 tempConfigModel.setUpdatedBy(author);
\r
166 tempConfigModel.setPublished(ApplicationConstants.ACTIVE_N);
\r
167 tempConfigModel.setTags(artifactName);
\r
168 configModelRepository.saveAndFlush(tempConfigModel);
\r
169 updateConfigModel = tempConfigModel;
\r
172 Long dbConfigModelId = updateConfigModel.getId();
\r
174 if (dbConfigModelId == null) {
\r
175 throw new BluePrintException("failed to get the initial saved config model id.");
\r
178 log.info("Processing for config model id : {}", dbConfigModelId);
\r
180 deleteConfigModelContent(dbConfigModelId);
\r
182 addConfigModelContent(dbConfigModelId, configModel);
\r
184 // Populate Content model types
\r
185 updateConfigModel = updateConfigModel(dbConfigModelId, artifactName, artifactVersion, author, configModelCBA);
\r
188 return updateConfigModel;
\r
190 throw new BluePrintException("Config model information is missing");
\r
195 private void deleteConfigModelContent(Long dbConfigModelId) {
\r
196 if (dbConfigModelId != null) {
\r
197 ConfigModel dbConfigModel = configModelRepository.getOne(dbConfigModelId);
\r
198 if (CollectionUtils.isNotEmpty(dbConfigModel.getConfigModelContents())) {
\r
199 dbConfigModel.getConfigModelContents().clear();
\r
200 log.debug("Configuration Model content deleting : {}", dbConfigModel.getConfigModelContents());
\r
201 configModelRepository.saveAndFlush(dbConfigModel);
\r
207 private void addConfigModelContent(Long dbConfigModelId, ConfigModel configModel) {
\r
208 if (dbConfigModelId != null && configModel != null
\r
209 && CollectionUtils.isNotEmpty(configModel.getConfigModelContents())) {
\r
210 ConfigModel dbConfigModel = configModelRepository.getOne(dbConfigModelId);
\r
211 for (ConfigModelContent configModelContent : configModel.getConfigModelContents()) {
\r
212 if (configModelContent != null) {
\r
213 configModelContent.setId(null);
\r
214 configModelContent.setConfigModel(dbConfigModel);
\r
215 dbConfigModel.getConfigModelContents().add(configModelContent);
\r
216 log.debug("Configuration Model content adding : {}", configModelContent);
\r
219 configModelRepository.saveAndFlush(dbConfigModel);
\r
223 private ConfigModel updateConfigModel(Long dbConfigModelId, String artifactName, String artifactVersion,
\r
224 String author, CbaContent configModelCBA) throws BluePrintException {
\r
226 ConfigModel dbConfigModel = configModelRepository.getOne(dbConfigModelId);
\r
227 // Populate tags from metadata
\r
228 String tags = getConfigModelTags(dbConfigModel);
\r
229 if (StringUtils.isBlank(tags)) {
\r
230 throw new BluePrintException("Failed to populate tags for the config model name " + artifactName);
\r
232 dbConfigModel.setArtifactType(ApplicationConstants.ASDC_ARTIFACT_TYPE_SDNC_MODEL);
\r
233 dbConfigModel.setArtifactName(artifactName);
\r
234 dbConfigModel.setArtifactVersion(artifactVersion);
\r
235 dbConfigModel.setUpdatedBy(author);
\r
236 dbConfigModel.setPublished(ApplicationConstants.ACTIVE_N);
\r
237 dbConfigModel.setTags(tags);
\r
238 dbConfigModel.setConfigModelCBA(configModelCBA);
\r
239 configModelRepository.saveAndFlush(dbConfigModel);
\r
240 log.info("Config model ({}) saved successfully.", dbConfigModel.getId());
\r
241 return dbConfigModel;
\r
244 private List<String> getValidContentTypes() {
\r
245 List<String> valids = new ArrayList<>();
\r
246 valids.add(ConfigModelConstant.MODEL_CONTENT_TYPE_TOSCA_JSON);
\r
247 valids.add(ConfigModelConstant.MODEL_CONTENT_TYPE_TEMPLATE);
\r
252 private String getConfigModelTags(ConfigModel configModel) throws BluePrintException {
\r
253 String tags = null;
\r
254 if (CollectionUtils.isNotEmpty(configModel.getConfigModelContents())) {
\r
256 for (ConfigModelContent configModelContent : configModel.getConfigModelContents()) {
\r
257 if (configModelContent != null && StringUtils.isNotBlank(configModelContent.getContentType())) {
\r
259 if (!getValidContentTypes().contains(configModelContent.getContentType())) {
\r
260 throw new BluePrintException(configModelContent.getContentType()
\r
261 + " is not a valid content type, It should be any one of this "
\r
262 + getValidContentTypes());
\r
265 if (configModelContent.getContentType().equals(ConfigModelConstant.MODEL_CONTENT_TYPE_TOSCA_JSON)) {
\r
266 ServiceTemplate serviceTemplate =
\r
267 JacksonUtils.readValue(configModelContent.getContent(), ServiceTemplate.class);
\r
268 Preconditions.checkNotNull(serviceTemplate, "failed to transform service template content");
\r
269 if (serviceTemplate.getMetadata() != null) {
\r
270 serviceTemplate.getMetadata().put(BluePrintConstants.METADATA_TEMPLATE_AUTHOR,
\r
271 configModel.getUpdatedBy());
\r
272 serviceTemplate.getMetadata().put(BluePrintConstants.METADATA_TEMPLATE_VERSION,
\r
273 configModel.getArtifactVersion());
\r
274 serviceTemplate.getMetadata().put(BluePrintConstants.METADATA_TEMPLATE_NAME,
\r
275 configModel.getArtifactName());
\r
277 tags = String.valueOf(serviceTemplate.getMetadata());
\r
286 * This is a publishConfigModel method
\r
289 * @return ConfigModel
\r
290 * @throws BluePrintException BluePrintException
\r
292 public ConfigModel publishConfigModel(@NotNull Long id) throws BluePrintException {
\r
293 ConfigModel dbConfigModel = null;
\r
294 Optional<ConfigModel> dbConfigModelOptional = configModelRepository.findById(id);
\r
295 if (dbConfigModelOptional.isPresent()) {
\r
296 dbConfigModel = dbConfigModelOptional.get();
\r
297 List<ConfigModelContent> configModelContents = dbConfigModel.getConfigModelContents();
\r
298 if (configModelContents != null && !configModelContents.isEmpty()) {
\r
299 for (ConfigModelContent configModelContent : configModelContents) {
\r
300 if (configModelContent.getContentType()
\r
301 .equals(ConfigModelConstant.MODEL_CONTENT_TYPE_TOSCA_JSON)) {
\r
302 ServiceTemplate serviceTemplate = JacksonUtils
\r
303 .readValue(configModelContent.getContent(), ServiceTemplate.class);
\r
304 if (serviceTemplate != null) {
\r
305 validateServiceTemplate(serviceTemplate);
\r
310 dbConfigModel.setPublished(ApplicationConstants.ACTIVE_Y);
\r
311 configModelRepository.save(dbConfigModel);
\r
312 log.info("Config model ({}) published successfully.", id);
\r
314 throw new BluePrintException(String.format("Couldn't get Config model for id :(%s)", id));
\r
316 return dbConfigModel;
\r
320 * This is a validateServiceTemplate method
\r
322 * @param serviceTemplate Service Template
\r
323 * @return ServiceTemplate
\r
324 * @throws BluePrintException BluePrintException
\r
326 public ServiceTemplate validateServiceTemplate(ServiceTemplate serviceTemplate) throws BluePrintException {
\r
327 // FIXME("Plug right Validator")
\r
328 return serviceTemplate;
\r