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