b2fff26ef34792603eaf8c34600a671d0f581cd2
[ccsdk/apps.git] /
1 /*\r
2  * Copyright © 2017-2018 AT&T Intellectual Property.\r
3  * Modifications Copyright © 2018 IBM.\r
4  *\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
8  *\r
9  *     http://www.apache.org/licenses/LICENSE-2.0\r
10  *\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
16  */\r
17 \r
18 package org.onap.ccsdk.apps.controllerblueprints.service;\r
19 \r
20 import org.apache.commons.collections.CollectionUtils;\r
21 import org.apache.commons.lang3.StringUtils;\r
22 import org.jetbrains.annotations.NotNull;\r
23 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintConstants;\r
24 import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintException;\r
25 import org.onap.ccsdk.apps.controllerblueprints.core.ConfigModelConstant;\r
26 import org.onap.ccsdk.apps.controllerblueprints.core.data.ServiceTemplate;\r
27 import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils;\r
28 import org.onap.ccsdk.apps.controllerblueprints.service.common.ApplicationConstants;\r
29 import org.onap.ccsdk.apps.controllerblueprints.service.domain.ConfigModel;\r
30 import org.onap.ccsdk.apps.controllerblueprints.service.domain.ConfigModelContent;\r
31 import org.onap.ccsdk.apps.controllerblueprints.service.repository.ConfigModelContentRepository;\r
32 import org.onap.ccsdk.apps.controllerblueprints.service.repository.ConfigModelRepository;\r
33 import com.att.eelf.configuration.EELFLogger;\r
34 import com.att.eelf.configuration.EELFManager;\r
35 import org.springframework.stereotype.Service;\r
36 import org.springframework.transaction.annotation.Transactional;\r
37 \r
38 import java.util.ArrayList;\r
39 import java.util.Date;\r
40 import java.util.List;\r
41 import java.util.Optional;\r
42 \r
43 /**\r
44  * ConfigModelService.java Purpose: Provide Service Template Service processing ConfigModelService\r
45  *\r
46  * @author Brinda Santh\r
47  * @version 1.0\r
48  */\r
49 \r
50 @Service\r
51 public class ConfigModelService {\r
52 \r
53     private static EELFLogger log = EELFManager.getInstance().getLogger(ConfigModelService.class);\r
54 \r
55     private ConfigModelRepository configModelRepository;\r
56     private ConfigModelContentRepository configModelContentRepository;\r
57     private ConfigModelCreateService configModelCreateService;\r
58     private static final String CONFIG_MODEL_ID_FAILURE_MSG= "failed to get config model id(%d) from repo";\r
59 \r
60     /**\r
61      * This is a ConfigModelService constructor.\r
62      *\r
63      * @param configModelRepository        configModelRepository\r
64      * @param configModelContentRepository configModelContentRepository\r
65      * @param configModelCreateService     configModelCreateService\r
66      */\r
67     public ConfigModelService(ConfigModelRepository configModelRepository,\r
68                               ConfigModelContentRepository configModelContentRepository,\r
69                               ConfigModelCreateService configModelCreateService) {\r
70         this.configModelRepository = configModelRepository;\r
71         this.configModelContentRepository = configModelContentRepository;\r
72         this.configModelCreateService = configModelCreateService;\r
73         log.info("Config Model Service Initiated...");\r
74     }\r
75 \r
76     /**\r
77      * This is a getInitialConfigModel method\r
78      *\r
79      * @param templateName templateName\r
80      * @return ConfigModel\r
81      * @throws BluePrintException BluePrintException\r
82      */\r
83     public ConfigModel getInitialConfigModel(String templateName) throws BluePrintException {\r
84         ConfigModel configModel = null;\r
85         if (StringUtils.isNotBlank(templateName)) {\r
86             configModel = new ConfigModel();\r
87             configModel.setArtifactName(templateName);\r
88             configModel.setArtifactType(ApplicationConstants.ASDC_ARTIFACT_TYPE_SDNC_MODEL);\r
89             configModel.setUpdatedBy("xxxxx@xxx.com");\r
90             ConfigModelContent configModelContent = new ConfigModelContent();\r
91             configModelContent.setContentType(ConfigModelConstant.MODEL_CONTENT_TYPE_TOSCA_JSON);\r
92             configModelContent.setName(templateName);\r
93             String content = this.configModelCreateService.createInitialServiceTemplateContent(templateName);\r
94             configModelContent.setContent(content);\r
95 \r
96             List<ConfigModelContent> configModelContents = new ArrayList<>();\r
97             configModelContents.add(configModelContent);\r
98 \r
99             configModel.setConfigModelContents(configModelContents);\r
100         }\r
101         return configModel;\r
102     }\r
103 \r
104     /**\r
105      * This is a saveConfigModel method\r
106      *\r
107      * @param configModel configModel\r
108      * @return ConfigModel\r
109      * @throws BluePrintException BluePrintException\r
110      */\r
111     public ConfigModel saveConfigModel(ConfigModel configModel) throws BluePrintException {\r
112         return this.configModelCreateService.saveConfigModel(configModel);\r
113     }\r
114 \r
115     /**\r
116      * This is a publishConfigModel method\r
117      *\r
118      * @param id id\r
119      * @return ConfigModel\r
120      * @throws BluePrintException BluePrintException\r
121      */\r
122     public ConfigModel publishConfigModel(Long id) throws BluePrintException {\r
123         return this.configModelCreateService.publishConfigModel(id);\r
124     }\r
125 \r
126     /**\r
127      * This is a searchConfigModels method\r
128      *\r
129      * @param tags tags\r
130      * @return ConfigModel\r
131      */\r
132     public List<ConfigModel> searchConfigModels(String tags) {\r
133         List<ConfigModel> models = configModelRepository.findByTagsContainingIgnoreCase(tags);\r
134         if (models != null) {\r
135             for (ConfigModel configModel : models) {\r
136                 configModel.setConfigModelContents(null);\r
137             }\r
138         }\r
139         return models;\r
140     }\r
141 \r
142     /**\r
143      * This is a getConfigModelByNameAndVersion method\r
144      *\r
145      * @param name    name\r
146      * @param version version\r
147      * @return ConfigModel\r
148      */\r
149     public ConfigModel getConfigModelByNameAndVersion(@NotNull String name, String version) throws BluePrintException {\r
150         ConfigModel configModel;\r
151         Optional<ConfigModel> dbConfigModel;\r
152         if (StringUtils.isNotBlank(version)) {\r
153             dbConfigModel = configModelRepository.findByArtifactNameAndArtifactVersion(name, version);\r
154         } else {\r
155             dbConfigModel = configModelRepository.findTopByArtifactNameOrderByArtifactVersionDesc(name);\r
156         }\r
157         if (dbConfigModel.isPresent()) {\r
158             configModel = dbConfigModel.get();\r
159         } else {\r
160             throw new BluePrintException(String.format("failed to get config model name(%s), version(%s) from repo", name, version));\r
161         }\r
162         return configModel;\r
163     }\r
164 \r
165     /**\r
166      * This is a getConfigModel method\r
167      *\r
168      * @param id id\r
169      * @return ConfigModel\r
170      * @throws BluePrintException BluePrintException\r
171      */\r
172     public ConfigModel getConfigModel(@NotNull Long id) throws BluePrintException {\r
173         ConfigModel configModel;\r
174         Optional<ConfigModel> dbConfigModel = configModelRepository.findById(id);\r
175         if (dbConfigModel.isPresent()) {\r
176             configModel = dbConfigModel.get();\r
177         } else {\r
178             throw new BluePrintException(String.format(CONFIG_MODEL_ID_FAILURE_MSG, id));\r
179         }\r
180 \r
181         return configModel;\r
182     }\r
183 \r
184     /**\r
185      * This method returns clone of the given model id, by masking the other unrelated fields\r
186      *\r
187      * @param id id\r
188      * @return ConfigModel\r
189      * @throws BluePrintException BluePrintException\r
190      */\r
191 \r
192     public ConfigModel getCloneConfigModel(@NotNull Long id) throws BluePrintException {\r
193 \r
194         ConfigModel configModel;\r
195         ConfigModel cloneConfigModel;\r
196         Optional<ConfigModel> dbConfigModel = configModelRepository.findById(id);\r
197         if (dbConfigModel.isPresent()) {\r
198             configModel = dbConfigModel.get();\r
199             cloneConfigModel = configModel;\r
200             cloneConfigModel.setUpdatedBy("xxxxx@xxx.com");\r
201             cloneConfigModel.setArtifactName("XXXX");\r
202             cloneConfigModel.setPublished("XXXX");\r
203             cloneConfigModel.setPublished("XXXX");\r
204             cloneConfigModel.setUpdatedBy("XXXX");\r
205             cloneConfigModel.setId(null);\r
206             cloneConfigModel.setTags(null);\r
207             cloneConfigModel.setCreatedDate(new Date());\r
208             List<ConfigModelContent> configModelContents = cloneConfigModel.getConfigModelContents();\r
209 \r
210             if (CollectionUtils.isNotEmpty(configModelContents)) {\r
211                 for (ConfigModelContent configModelContent : configModelContents) {\r
212                     if (configModelContent != null && StringUtils.isNotBlank(configModelContent.getContentType())) {\r
213                         configModelContent.setId(null);\r
214                         configModelContent.setCreationDate(new Date());\r
215 \r
216                         if (ConfigModelConstant.MODEL_CONTENT_TYPE_TOSCA_JSON\r
217                                 .equalsIgnoreCase(configModelContent.getContentType())) {\r
218                             ServiceTemplate serviceTemplate = JacksonUtils\r
219                                     .readValue(configModelContent.getContent(), ServiceTemplate.class);\r
220                             if (serviceTemplate != null && serviceTemplate.getMetadata() != null) {\r
221                                 serviceTemplate.getMetadata()\r
222                                         .put(BluePrintConstants.METADATA_TEMPLATE_AUTHOR, "XXXX");\r
223                                 serviceTemplate.getMetadata()\r
224                                         .put(BluePrintConstants.METADATA_TEMPLATE_VERSION, "1.0.0");\r
225                                 serviceTemplate.getMetadata()\r
226                                         .put(BluePrintConstants.METADATA_TEMPLATE_NAME, "XXXXXX");\r
227 \r
228                                 configModelContent.setContent(JacksonUtils.getJson(serviceTemplate));\r
229                             }\r
230                         }\r
231                     }\r
232 \r
233                 }\r
234             }\r
235         } else {\r
236             throw new BluePrintException(String.format(CONFIG_MODEL_ID_FAILURE_MSG, id));\r
237         }\r
238 \r
239         return cloneConfigModel;\r
240     }\r
241 \r
242     /**\r
243      * This is a deleteConfigModel method\r
244      *\r
245      * @param id id\r
246      * @throws BluePrintException BluePrintException\r
247      */\r
248 \r
249     @Transactional\r
250     public void deleteConfigModel(@NotNull Long id) throws BluePrintException {\r
251         Optional<ConfigModel> dbConfigModel = configModelRepository.findById(id);\r
252         if (dbConfigModel.isPresent()) {\r
253             configModelContentRepository.deleteByConfigModel(dbConfigModel.get());\r
254             configModelRepository.delete(dbConfigModel.get());\r
255         } else {\r
256             throw new BluePrintException(String.format(CONFIG_MODEL_ID_FAILURE_MSG, id));\r
257         }\r
258     }\r
259 \r
260 }\r