2 * Copyright © 2017-2018 AT&T Intellectual Property.
\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
7 * http://www.apache.org/licenses/LICENSE-2.0
\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
15 package org.onap.ccsdk.config.data.adaptor.dao;
\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
31 public class ConfigResourceDaoImpl implements ConfigResourceDao {
\r
33 private static EELFLogger logger = EELFManager.getInstance().getLogger(ConfigResourceDaoImpl.class);
\r
35 private JdbcTemplate jdbcTemplate;
\r
37 public ConfigResourceDaoImpl(JdbcTemplate jdbcTemplate) {
\r
38 this.jdbcTemplate = jdbcTemplate;
\r
42 public ConfigResource save(ConfigResource configResource) throws SvcLogicException {
\r
44 ConfigResource dbConfigResource = checkConfigResource(configResource);
\r
46 if (dbConfigResource != null && StringUtils.isNotBlank(dbConfigResource.getConfigResourceId())) {
\r
47 configResource.setConfigResourceId(dbConfigResource.getConfigResourceId());
\r
49 validateConfigResource(configResource);
\r
51 update(configResource);
\r
53 saveConfigResourceAssignmentData(configResource);
\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
60 configResource.setConfigResourceId(configResource.getUniqueId());
\r
62 validateConfigResource(configResource);
\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
72 saveConfigResourceAssignmentData(configResource);
\r
74 dbConfigResource = getConfigResource(configResource);
\r
75 return dbConfigResource;
\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
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
91 throw new SvcLogicException("missing config resource id to update.");
\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
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
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
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
130 return resourceAssignmentData;
\r
134 public void deleteByConfigResource(ConfigResource configResourceInput) throws SvcLogicException {
\r
135 StringBuilder selectArtifactBuffer = new StringBuilder();
\r
136 List<Object> listOfArguments = new ArrayList<>();
\r
138 selectArtifactBuffer.append("DELETE FROM CONFIG_RESOURCE WHERE config_resource_id = ? ");
\r
139 listOfArguments.add(configResourceInput.getConfigResourceId());
\r
141 String queryString = selectArtifactBuffer.toString();
\r
142 this.jdbcTemplate.update(queryString, listOfArguments.toArray());
\r
143 logger.info("config resource ({}) deleted successfully ", configResourceInput);
\r
146 @SuppressWarnings("squid:S3776")
\r
148 public List<ConfigResource> findByConfigResource(ConfigResource configResourceInput) throws SvcLogicException {
\r
149 StringBuilder selectArtifactBuffer = new StringBuilder();
\r
150 List<Object> listOfArguments = new ArrayList<>();
\r
152 selectArtifactBuffer.append("SELECT * FROM CONFIG_RESOURCE WHERE ");
\r
154 StringBuilder whereClauseRemaining = new StringBuilder();
\r
156 if (configResourceInput.getServiceTemplateName() != null) {
\r
157 if (whereClauseRemaining.length() != 0) {
\r
158 whereClauseRemaining.append("AND ");
\r
160 whereClauseRemaining.append("service_template_name = ? ");
\r
161 listOfArguments.add(configResourceInput.getServiceTemplateName());
\r
164 if (configResourceInput.getServiceTemplateVersion() != null) {
\r
165 if (whereClauseRemaining.length() != 0) {
\r
166 whereClauseRemaining.append("AND ");
\r
168 whereClauseRemaining.append("service_template_version = ? ");
\r
169 listOfArguments.add(configResourceInput.getServiceTemplateVersion());
\r
172 if (configResourceInput.getResourceId() != null) {
\r
173 if (whereClauseRemaining.length() != 0) {
\r
174 whereClauseRemaining.append("AND ");
\r
176 whereClauseRemaining.append("resource_id = ? ");
\r
177 listOfArguments.add(configResourceInput.getResourceId());
\r
180 if (configResourceInput.getResourceType() != null) {
\r
181 if (whereClauseRemaining.length() != 0) {
\r
182 whereClauseRemaining.append("AND ");
\r
184 whereClauseRemaining.append("resource_type = ? ");
\r
185 listOfArguments.add(configResourceInput.getResourceType());
\r
188 if (configResourceInput.getRequestId() != null) {
\r
189 if (whereClauseRemaining.length() != 0) {
\r
190 whereClauseRemaining.append("AND ");
\r
192 whereClauseRemaining.append("request_id = ? ");
\r
193 listOfArguments.add(configResourceInput.getRequestId());
\r
196 if (configResourceInput.getTemplateName() != null) {
\r
197 if (whereClauseRemaining.length() != 0) {
\r
198 whereClauseRemaining.append("AND ");
\r
200 whereClauseRemaining.append("template_name = ? ");
\r
201 listOfArguments.add(configResourceInput.getTemplateName());
\r
204 if (configResourceInput.getRecipeName() != null) {
\r
205 if (whereClauseRemaining.length() != 0) {
\r
206 whereClauseRemaining.append("AND ");
\r
208 whereClauseRemaining.append("recipe_name = ? ");
\r
209 listOfArguments.add(configResourceInput.getRecipeName());
\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
217 List<ConfigResource> returnConfigResources = new ArrayList<>();
\r
219 if (configResources != null) {
\r
220 for (ConfigResource configResource : configResources) {
\r
221 if (configResource != null) {
\r
222 returnConfigResources.add(getConfigResource(configResource));
\r
226 return returnConfigResources;
\r
229 public ConfigResource checkConfigResource(ConfigResource configResource) {
\r
230 StringBuilder selectBuffer = new StringBuilder();
\r
231 List<Object> listOfArguments = new ArrayList<>();
\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
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
249 return configResource;
\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
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
266 if (StringUtils.isBlank(configResource.getConfigResourceId())) {
\r
267 throw new SvcLogicException("config resource id is missing.");
\r
270 if (StringUtils.isBlank(configResource.getResourceType())) {
\r
271 throw new SvcLogicException("config resource type is missing.");
\r
273 if (StringUtils.isBlank(configResource.getResourceId())) {
\r
274 throw new SvcLogicException("config resource resource id is missing.");
\r
277 if (StringUtils.isBlank(configResource.getRecipeName())) {
\r
278 throw new SvcLogicException("config resource action name is missing.");
\r
281 if (StringUtils.isBlank(configResource.getTemplateName())) {
\r
282 throw new SvcLogicException("config resource template name is missing.");
\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
293 if (resourceAssignmentData.getVersion() == null || resourceAssignmentData.getVersion() == 0) {
\r
294 resourceAssignmentData.setVersion(1);
\r
296 if (StringUtils.isBlank(resourceAssignmentData.getUpdatedBy())) {
\r
297 resourceAssignmentData.setUpdatedBy("System");
\r
299 if (resourceAssignmentData.getStatus() == null) {
\r
300 logger.warn("{} status is missing and setting to undefined", resourceAssignmentData);
\r
301 resourceAssignmentData.setStatus("undefined");
\r
303 if (resourceAssignmentData.getMessage() == null) {
\r
304 resourceAssignmentData.setMessage("");
\r
306 if (resourceAssignmentData.getResourceValue() == null) {
\r
307 resourceAssignmentData.setResourceValue("");
\r
310 validateResourceAssignmentData(resourceAssignmentData);
\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
323 if (StringUtils.isBlank(resourceAssignmentData.getConfigResourceId())) {
\r
324 throw new SvcLogicException("resource assignment data config resource id is missing.");
\r
326 if (resourceAssignmentData.getVersion() == null) {
\r
327 throw new SvcLogicException(
\r
328 String.format("resource assignment data (%s) version is missing", resourceAssignmentData));
\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
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
338 if (resourceAssignmentData.getResourceValue() == null) {
\r
339 throw new SvcLogicException(
\r
340 String.format("resource assignment data (%s) resource value is missing", resourceAssignmentData));
\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
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
350 if (StringUtils.isBlank(resourceAssignmentData.getStatus())) {
\r
351 throw new SvcLogicException(
\r
352 String.format("resource assignment data (%s) status is missing", resourceAssignmentData));
\r
354 if (resourceAssignmentData.getMessage() == null) {
\r
355 throw new SvcLogicException(
\r
356 String.format("resource assignment data (%s) message is missing", resourceAssignmentData));
\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
370 class ConfigResourceMapper implements RowMapper<ConfigResource> {
\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
391 class ResourceAssignmentDataMapper implements RowMapper<ResourceAssignmentData> {
\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