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