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