88cb78cb3911aa102bf277c63ad4203a56af220a
[ccsdk/features.git] /
1 /*\r
2  * Copyright © 2017-2018 AT&T Intellectual Property.\r
3  * \r
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except\r
5  * in compliance with the License. You may obtain a copy of the License at\r
6  * \r
7  * http://www.apache.org/licenses/LICENSE-2.0\r
8  * \r
9  * Unless required by applicable law or agreed to in writing, software distributed under the License\r
10  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\r
11  * or implied. See the License for the specific language governing permissions and limitations under\r
12  * the License.\r
13  */\r
14 \r
15 package org.onap.ccsdk.config.data.adaptor.dao;\r
16 \r
17 import java.sql.ResultSet;\r
18 import java.sql.SQLException;\r
19 import java.util.ArrayList;\r
20 import java.util.List;\r
21 import org.apache.commons.lang3.StringUtils;\r
22 import org.onap.ccsdk.config.data.adaptor.domain.ConfigResource;\r
23 import org.onap.ccsdk.config.data.adaptor.domain.ResourceAssignmentData;\r
24 import org.onap.ccsdk.sli.core.sli.SvcLogicException;\r
25 import org.springframework.jdbc.core.JdbcTemplate;\r
26 import org.springframework.jdbc.core.RowMapper;\r
27 import org.springframework.jdbc.core.RowMapperResultSetExtractor;\r
28 import com.att.eelf.configuration.EELFLogger;\r
29 import com.att.eelf.configuration.EELFManager;\r
30 \r
31 public class ConfigResourceDaoImpl implements ConfigResourceDao {\r
32     \r
33     private static EELFLogger logger = EELFManager.getInstance().getLogger(ConfigResourceDaoImpl.class);\r
34     \r
35     private JdbcTemplate jdbcTemplate;\r
36     \r
37     public ConfigResourceDaoImpl(JdbcTemplate jdbcTemplate) {\r
38         this.jdbcTemplate = jdbcTemplate;\r
39     }\r
40     \r
41     @Override\r
42     public ConfigResource save(ConfigResource configResource) throws SvcLogicException {\r
43         \r
44         ConfigResource dbConfigResource = checkConfigResource(configResource);\r
45         \r
46         if (dbConfigResource != null && StringUtils.isNotBlank(dbConfigResource.getConfigResourceId())) {\r
47             configResource.setConfigResourceId(dbConfigResource.getConfigResourceId());\r
48             \r
49             validateConfigResource(configResource);\r
50             \r
51             update(configResource);\r
52             \r
53             saveConfigResourceAssignmentData(configResource);\r
54         } else {\r
55             String addQuery = "INSERT INTO CONFIG_RESOURCE "\r
56                     + "( config_resource_id, resource_id, resource_type, service_template_name, service_template_version,"\r
57                     + "template_name, recipe_name, request_id, resource_data, mask_data, status, created_date, updated_by ) "\r
58                     + "VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )";\r
59             \r
60             configResource.setConfigResourceId(configResource.getUniqueId());\r
61             \r
62             validateConfigResource(configResource);\r
63             \r
64             logger.info("saving config resource ({}) ...", configResource);\r
65             jdbcTemplate.update(addQuery, configResource.getConfigResourceId(), configResource.getResourceId(),\r
66                     configResource.getResourceType(), configResource.getServiceTemplateName(),\r
67                     configResource.getServiceTemplateVersion(), configResource.getTemplateName(),\r
68                     configResource.getRecipeName(), configResource.getRequestId(), configResource.getResourceData(),\r
69                     configResource.getMaskData(), configResource.getStatus(), configResource.getCreatedDate(),\r
70                     configResource.getUpdatedBy());\r
71             \r
72             saveConfigResourceAssignmentData(configResource);\r
73         }\r
74         dbConfigResource = getConfigResource(configResource);\r
75         return dbConfigResource;\r
76     }\r
77     \r
78     private void update(ConfigResource configResource) throws SvcLogicException {\r
79         if (StringUtils.isNotBlank(configResource.getConfigResourceId())) {\r
80             logger.info("updating config resource ({}) ...", configResource);\r
81             // Added service_template_name and version in update query to update with 1802 data.\r
82             String updateQuery = "UPDATE CONFIG_RESOURCE SET "\r
83                     + "resource_data = ?, mask_data = ?, created_date = ?, updated_by = ? ,service_template_name = ?, service_template_version = ? "\r
84                     + "where config_resource_id = ?";\r
85             \r
86             jdbcTemplate.update(updateQuery, configResource.getResourceData(), configResource.getMaskData(),\r
87                     configResource.getCreatedDate(), configResource.getUpdatedBy(),\r
88                     configResource.getServiceTemplateName(), configResource.getServiceTemplateVersion(),\r
89                     configResource.getConfigResourceId());\r
90         } else {\r
91             throw new SvcLogicException("missing config resource id to update.");\r
92         }\r
93     }\r
94     \r
95     private void saveConfigResourceAssignmentData(ConfigResource configResource) {\r
96         if (configResource != null && StringUtils.isNotBlank(configResource.getConfigResourceId())) {\r
97             List<Object> listOfArguments = new ArrayList<>();\r
98             String deleteQuery = "DELETE FROM CONFIG_RESOURCE_ASSIGNMENT_DATA WHERE config_resource_id = ? ";\r
99             listOfArguments.add(configResource.getConfigResourceId());\r
100             this.jdbcTemplate.update(deleteQuery, listOfArguments.toArray());\r
101             logger.info("config resource assignment data deleted successfully for the  config_resource_id ({})",\r
102                     configResource.getConfigResourceId());\r
103             \r
104             if (configResource.getResourceAssignments() != null) {\r
105                 List<ResourceAssignmentData> resourceAssignments = configResource.getResourceAssignments();\r
106                 for (ResourceAssignmentData resourceAssignmentData : resourceAssignments) {\r
107                     if (resourceAssignmentData != null) {\r
108                         resourceAssignmentData.setConfigResourceId(configResource.getConfigResourceId());\r
109                         saveResourceAssignmentData(resourceAssignmentData);\r
110                     }\r
111                 }\r
112             }\r
113         }\r
114     }\r
115     \r
116     private ResourceAssignmentData saveResourceAssignmentData(ResourceAssignmentData resourceAssignmentData) {\r
117         String addQuery = "INSERT INTO CONFIG_RESOURCE_ASSIGNMENT_DATA "\r
118                 + "( config_resource_assignment_data_id, config_resource_id, version, updated_by, template_key_name, "\r
119                 + "resource_name, data_type, entry_schema, resource_value, source, status, message ) "\r
120                 + "VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )";\r
121         \r
122         logger.debug("saving config resource assignment data ({}) ... ", resourceAssignmentData);\r
123         jdbcTemplate.update(addQuery, resourceAssignmentData.getId(), resourceAssignmentData.getConfigResourceId(),\r
124                 resourceAssignmentData.getVersion(), resourceAssignmentData.getUpdatedBy(),\r
125                 resourceAssignmentData.getTemplateKeyName(), resourceAssignmentData.getResourceName(),\r
126                 resourceAssignmentData.getDataType(), resourceAssignmentData.getEntrySchema(),\r
127                 resourceAssignmentData.getResourceValue(), resourceAssignmentData.getSource(),\r
128                 resourceAssignmentData.getStatus(), resourceAssignmentData.getMessage());\r
129         \r
130         return resourceAssignmentData;\r
131     }\r
132     \r
133     @Override\r
134     public void deleteByConfigResource(ConfigResource configResourceInput) throws SvcLogicException {\r
135         StringBuilder selectArtifactBuffer = new StringBuilder();\r
136         List<Object> listOfArguments = new ArrayList<>();\r
137         \r
138         selectArtifactBuffer.append("DELETE FROM CONFIG_RESOURCE WHERE config_resource_id = ? ");\r
139         listOfArguments.add(configResourceInput.getConfigResourceId());\r
140         \r
141         String queryString = selectArtifactBuffer.toString();\r
142         this.jdbcTemplate.update(queryString, listOfArguments.toArray());\r
143         logger.info("config resource ({}) deleted successfully ", configResourceInput);\r
144     }\r
145     \r
146     @SuppressWarnings("squid:S3776")\r
147     @Override\r
148     public List<ConfigResource> findByConfigResource(ConfigResource configResourceInput) throws SvcLogicException {\r
149         StringBuilder selectArtifactBuffer = new StringBuilder();\r
150         List<Object> listOfArguments = new ArrayList<>();\r
151         \r
152         selectArtifactBuffer.append("SELECT * FROM CONFIG_RESOURCE WHERE ");\r
153         \r
154         StringBuilder whereClauseRemaining = new StringBuilder();\r
155         \r
156         if (configResourceInput.getServiceTemplateName() != null) {\r
157             if (whereClauseRemaining.length() != 0) {\r
158                 whereClauseRemaining.append("AND ");\r
159             }\r
160             whereClauseRemaining.append("service_template_name = ? ");\r
161             listOfArguments.add(configResourceInput.getServiceTemplateName());\r
162         }\r
163         \r
164         if (configResourceInput.getServiceTemplateVersion() != null) {\r
165             if (whereClauseRemaining.length() != 0) {\r
166                 whereClauseRemaining.append("AND ");\r
167             }\r
168             whereClauseRemaining.append("service_template_version = ? ");\r
169             listOfArguments.add(configResourceInput.getServiceTemplateVersion());\r
170         }\r
171         \r
172         if (configResourceInput.getResourceId() != null) {\r
173             if (whereClauseRemaining.length() != 0) {\r
174                 whereClauseRemaining.append("AND ");\r
175             }\r
176             whereClauseRemaining.append("resource_id = ? ");\r
177             listOfArguments.add(configResourceInput.getResourceId());\r
178         }\r
179         \r
180         if (configResourceInput.getResourceType() != null) {\r
181             if (whereClauseRemaining.length() != 0) {\r
182                 whereClauseRemaining.append("AND ");\r
183             }\r
184             whereClauseRemaining.append("resource_type = ? ");\r
185             listOfArguments.add(configResourceInput.getResourceType());\r
186         }\r
187         \r
188         if (configResourceInput.getRequestId() != null) {\r
189             if (whereClauseRemaining.length() != 0) {\r
190                 whereClauseRemaining.append("AND ");\r
191             }\r
192             whereClauseRemaining.append("request_id = ? ");\r
193             listOfArguments.add(configResourceInput.getRequestId());\r
194         }\r
195         \r
196         if (configResourceInput.getTemplateName() != null) {\r
197             if (whereClauseRemaining.length() != 0) {\r
198                 whereClauseRemaining.append("AND ");\r
199             }\r
200             whereClauseRemaining.append("template_name = ? ");\r
201             listOfArguments.add(configResourceInput.getTemplateName());\r
202         }\r
203         \r
204         if (configResourceInput.getRecipeName() != null) {\r
205             if (whereClauseRemaining.length() != 0) {\r
206                 whereClauseRemaining.append("AND ");\r
207             }\r
208             whereClauseRemaining.append("recipe_name = ? ");\r
209             listOfArguments.add(configResourceInput.getRecipeName());\r
210         }\r
211         \r
212         String queryString = selectArtifactBuffer.toString() + whereClauseRemaining.toString();\r
213         logger.info("config resource queryString ({})", queryString);\r
214         List<ConfigResource> configResources =\r
215                 this.jdbcTemplate.query(queryString, listOfArguments.toArray(), new ConfigResourceMapper());\r
216         \r
217         List<ConfigResource> returnConfigResources = new ArrayList<>();\r
218         \r
219         if (configResources != null) {\r
220             for (ConfigResource configResource : configResources) {\r
221                 if (configResource != null) {\r
222                     returnConfigResources.add(getConfigResource(configResource));\r
223                 }\r
224             }\r
225         }\r
226         return returnConfigResources;\r
227     }\r
228     \r
229     public ConfigResource checkConfigResource(ConfigResource configResource) {\r
230         StringBuilder selectBuffer = new StringBuilder();\r
231         List<Object> listOfArguments = new ArrayList<>();\r
232         \r
233         selectBuffer.append(\r
234                 "SELECT * FROM CONFIG_RESOURCE WHERE resource_id = ? AND resource_type = ? AND template_name = ? ");\r
235         listOfArguments.add(configResource.getResourceId());\r
236         listOfArguments.add(configResource.getResourceType());\r
237         listOfArguments.add(configResource.getTemplateName());\r
238         return queryOneForObject(selectBuffer.toString(), listOfArguments.toArray(), new ConfigResourceMapper());\r
239     }\r
240     \r
241     @Override\r
242     public ConfigResource getConfigResource(ConfigResource configResource) throws SvcLogicException {\r
243         ConfigResource dbConfigResource = checkConfigResource(configResource);\r
244         if (dbConfigResource != null && StringUtils.isNotBlank(dbConfigResource.getConfigResourceId())) {\r
245             List<ResourceAssignmentData> resourceAssignments =\r
246                     getResourceAssignmentdata(dbConfigResource.getConfigResourceId());\r
247             configResource.setResourceAssignments(resourceAssignments);\r
248         }\r
249         return configResource;\r
250     }\r
251     \r
252     private List<ResourceAssignmentData> getResourceAssignmentdata(String configResourceId) {\r
253         List<Object> listOfArguments = new ArrayList<>();\r
254         String queryString = "SELECT * FROM CONFIG_RESOURCE_ASSIGNMENT_DATA WHERE config_resource_id = ? ";\r
255         logger.info("getResourceAssignmentdata queryString ({}), query inputs ({})", queryString, configResourceId);\r
256         listOfArguments.add(configResourceId);\r
257         return this.jdbcTemplate.query(queryString, listOfArguments.toArray(), new ResourceAssignmentDataMapper());\r
258     }\r
259     \r
260     @SuppressWarnings("squid:S3776")\r
261     private boolean validateConfigResource(ConfigResource configResource) throws SvcLogicException {\r
262         if (configResource == null) {\r
263             throw new SvcLogicException("config resource information is missing.");\r
264         }\r
265         \r
266         if (StringUtils.isBlank(configResource.getConfigResourceId())) {\r
267             throw new SvcLogicException("config resource id is missing.");\r
268         }\r
269         \r
270         if (StringUtils.isBlank(configResource.getResourceType())) {\r
271             throw new SvcLogicException("config resource type is missing.");\r
272         }\r
273         if (StringUtils.isBlank(configResource.getResourceId())) {\r
274             throw new SvcLogicException("config resource  resource id is missing.");\r
275         }\r
276         \r
277         if (StringUtils.isBlank(configResource.getRecipeName())) {\r
278             throw new SvcLogicException("config resource action name is missing.");\r
279         }\r
280         \r
281         if (StringUtils.isBlank(configResource.getTemplateName())) {\r
282             throw new SvcLogicException("config resource template name is missing.");\r
283         }\r
284         \r
285         if (configResource.getResourceAssignments() != null) {\r
286             List<ResourceAssignmentData> resourceAssignments = configResource.getResourceAssignments();\r
287             for (ResourceAssignmentData resourceAssignmentData : resourceAssignments) {\r
288                 if (resourceAssignmentData != null) {\r
289                     resourceAssignmentData.setConfigResourceId(configResource.getConfigResourceId());\r
290                     if (StringUtils.isBlank(resourceAssignmentData.getId())) {\r
291                         resourceAssignmentData.setId(resourceAssignmentData.getUniqueId());\r
292                     }\r
293                     if (resourceAssignmentData.getVersion() == null || resourceAssignmentData.getVersion() == 0) {\r
294                         resourceAssignmentData.setVersion(1);\r
295                     }\r
296                     if (StringUtils.isBlank(resourceAssignmentData.getUpdatedBy())) {\r
297                         resourceAssignmentData.setUpdatedBy("System");\r
298                     }\r
299                     if (resourceAssignmentData.getStatus() == null) {\r
300                         logger.warn("{} status is missing and setting to undefined", resourceAssignmentData);\r
301                         resourceAssignmentData.setStatus("undefined");\r
302                     }\r
303                     if (resourceAssignmentData.getMessage() == null) {\r
304                         resourceAssignmentData.setMessage("");\r
305                     }\r
306                     if (resourceAssignmentData.getResourceValue() == null) {\r
307                         resourceAssignmentData.setResourceValue("");\r
308                     }\r
309                     \r
310                     validateResourceAssignmentData(resourceAssignmentData);\r
311                 }\r
312             }\r
313         }\r
314         \r
315         return true;\r
316     }\r
317     \r
318     private boolean validateResourceAssignmentData(ResourceAssignmentData resourceAssignmentData)\r
319             throws SvcLogicException {\r
320         if (resourceAssignmentData == null) {\r
321             throw new SvcLogicException("resource assignment data information is missing.");\r
322         }\r
323         if (StringUtils.isBlank(resourceAssignmentData.getConfigResourceId())) {\r
324             throw new SvcLogicException("resource assignment data config resource id is missing.");\r
325         }\r
326         if (resourceAssignmentData.getVersion() == null) {\r
327             throw new SvcLogicException(\r
328                     String.format("resource assignment data (%s) version is missing", resourceAssignmentData));\r
329         }\r
330         if (StringUtils.isBlank(resourceAssignmentData.getTemplateKeyName())) {\r
331             throw new SvcLogicException(String.format("resource assignment data (%s) template key name is missing",\r
332                     resourceAssignmentData));\r
333         }\r
334         if (StringUtils.isBlank(resourceAssignmentData.getResourceName())) {\r
335             throw new SvcLogicException(\r
336                     String.format("resource assignment data (%s) resource name is missing", resourceAssignmentData));\r
337         }\r
338         if (resourceAssignmentData.getResourceValue() == null) {\r
339             throw new SvcLogicException(\r
340                     String.format("resource assignment data (%s) resource value is missing", resourceAssignmentData));\r
341         }\r
342         if (StringUtils.isBlank(resourceAssignmentData.getSource())) {\r
343             throw new SvcLogicException(\r
344                     String.format("resource assignment data (%s) source is missing", resourceAssignmentData));\r
345         }\r
346         if (StringUtils.isBlank(resourceAssignmentData.getDataType())) {\r
347             throw new SvcLogicException(\r
348                     String.format("resource assignment data (%s) data type is missing", resourceAssignmentData));\r
349         }\r
350         if (StringUtils.isBlank(resourceAssignmentData.getStatus())) {\r
351             throw new SvcLogicException(\r
352                     String.format("resource assignment data (%s) status is missing", resourceAssignmentData));\r
353         }\r
354         if (resourceAssignmentData.getMessage() == null) {\r
355             throw new SvcLogicException(\r
356                     String.format("resource assignment data (%s) message is missing", resourceAssignmentData));\r
357         }\r
358         return true;\r
359     }\r
360     \r
361     private <T> T queryOneForObject(String sql, Object[] args, RowMapper<T> rowMapper) {\r
362         List<T> results = this.jdbcTemplate.query(sql, args, new RowMapperResultSetExtractor<T>(rowMapper, 1));\r
363         if (results != null && !results.isEmpty()) {\r
364             return results.get(0);\r
365         } else {\r
366             return null;\r
367         }\r
368     }\r
369     \r
370     class ConfigResourceMapper implements RowMapper<ConfigResource> {\r
371         @Override\r
372         public ConfigResource mapRow(ResultSet rs, int rowNum) throws SQLException {\r
373             ConfigResource configResource = new ConfigResource();\r
374             configResource.setConfigResourceId(rs.getString("config_resource_id"));\r
375             configResource.setResourceId(rs.getString("resource_id"));\r
376             configResource.setResourceType(rs.getString("resource_type"));\r
377             configResource.setServiceTemplateName(rs.getString("service_template_name"));\r
378             configResource.setServiceTemplateVersion(rs.getString("service_template_version"));\r
379             configResource.setTemplateName(rs.getString("template_name"));\r
380             configResource.setRecipeName(rs.getString("recipe_name"));\r
381             configResource.setRequestId(rs.getString("request_id"));\r
382             configResource.setResourceData(rs.getString("resource_data"));\r
383             configResource.setMaskData(rs.getString("mask_data"));\r
384             configResource.setStatus(rs.getString("status"));\r
385             configResource.setCreatedDate(rs.getDate("created_date"));\r
386             configResource.setUpdatedBy(rs.getString("updated_by"));\r
387             return configResource;\r
388         }\r
389     }\r
390     \r
391     class ResourceAssignmentDataMapper implements RowMapper<ResourceAssignmentData> {\r
392         @Override\r
393         public ResourceAssignmentData mapRow(ResultSet rs, int rowNum) throws SQLException {\r
394             ResourceAssignmentData resourceAssignmentData = new ResourceAssignmentData();\r
395             resourceAssignmentData.setConfigResourceId(rs.getString("config_resource_id"));\r
396             resourceAssignmentData.setDataType(rs.getString("data_type"));\r
397             resourceAssignmentData.setEntrySchema(rs.getString("entry_schema"));\r
398             resourceAssignmentData.setId(rs.getString("config_resource_assignment_data_id"));\r
399             resourceAssignmentData.setMessage(rs.getString("message"));\r
400             resourceAssignmentData.setResourceName(rs.getString("resource_name"));\r
401             resourceAssignmentData.setResourceValue(rs.getString("resource_value"));\r
402             resourceAssignmentData.setSource(rs.getString("source"));\r
403             resourceAssignmentData.setStatus(rs.getString("status"));\r
404             resourceAssignmentData.setTemplateKeyName(rs.getString("template_key_name"));\r
405             resourceAssignmentData.setUpdatedBy(rs.getString("updated_by"));\r
406             resourceAssignmentData.setUpdatedDate(rs.getTimestamp("updated_date"));\r
407             resourceAssignmentData.setVersion(rs.getInt("version"));\r
408             return resourceAssignmentData;\r
409         }\r
410     }\r
411     \r
412 }\r