2 * Copyright © 2017-2018 AT&T Intellectual Property.
\r
3 * Modifications Copyright © 2018 IBM.
\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
9 * http://www.apache.org/licenses/LICENSE-2.0
\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
18 package org.onap.ccsdk.features.data.adaptor.dao;
\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
34 public class ConfigResourceDaoImpl implements ConfigResourceDao {
\r
36 private static EELFLogger logger = EELFManager.getInstance().getLogger(ConfigResourceDaoImpl.class);
\r
38 private JdbcTemplate jdbcTemplate;
\r
40 public ConfigResourceDaoImpl(JdbcTemplate jdbcTemplate) {
\r
41 this.jdbcTemplate = jdbcTemplate;
\r
45 public ConfigResource save(ConfigResource configResource) throws SvcLogicException {
\r
47 ConfigResource dbConfigResource = checkConfigResource(configResource);
\r
49 if (dbConfigResource != null && StringUtils.isNotBlank(dbConfigResource.getConfigResourceId())) {
\r
50 configResource.setConfigResourceId(dbConfigResource.getConfigResourceId());
\r
52 validateConfigResource(configResource);
\r
54 update(configResource);
\r
56 saveConfigResourceAssignmentData(configResource);
\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
63 configResource.setConfigResourceId(configResource.getUniqueId());
\r
65 validateConfigResource(configResource);
\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
75 saveConfigResourceAssignmentData(configResource);
\r
77 dbConfigResource = getConfigResource(configResource);
\r
78 return dbConfigResource;
\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
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
94 throw new SvcLogicException("missing config resource id to update.");
\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
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
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
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
133 return resourceAssignmentData;
\r
137 public void deleteByConfigResource(ConfigResource configResourceInput) throws SvcLogicException {
\r
138 StringBuilder selectArtifactBuffer = new StringBuilder();
\r
139 List<Object> listOfArguments = new ArrayList<>();
\r
141 selectArtifactBuffer.append("DELETE FROM CONFIG_RESOURCE WHERE config_resource_id = ? ");
\r
142 listOfArguments.add(configResourceInput.getConfigResourceId());
\r
144 String queryString = selectArtifactBuffer.toString();
\r
145 this.jdbcTemplate.update(queryString, listOfArguments.toArray());
\r
146 logger.info("config resource ({}) deleted successfully ", configResourceInput);
\r
149 @SuppressWarnings("squid:S3776")
\r
151 public List<ConfigResource> findByConfigResource(ConfigResource configResourceInput) throws SvcLogicException {
\r
152 StringBuilder selectArtifactBuffer = new StringBuilder();
\r
153 List<Object> listOfArguments = new ArrayList<>();
\r
155 selectArtifactBuffer.append("SELECT * FROM CONFIG_RESOURCE WHERE ");
\r
157 StringBuilder whereClauseRemaining = new StringBuilder();
\r
159 if (configResourceInput.getServiceTemplateName() != null) {
\r
160 if (whereClauseRemaining.length() != 0) {
\r
161 whereClauseRemaining.append("AND ");
\r
163 whereClauseRemaining.append("service_template_name = ? ");
\r
164 listOfArguments.add(configResourceInput.getServiceTemplateName());
\r
167 if (configResourceInput.getServiceTemplateVersion() != null) {
\r
168 if (whereClauseRemaining.length() != 0) {
\r
169 whereClauseRemaining.append("AND ");
\r
171 whereClauseRemaining.append("service_template_version = ? ");
\r
172 listOfArguments.add(configResourceInput.getServiceTemplateVersion());
\r
175 if (configResourceInput.getResourceId() != null) {
\r
176 if (whereClauseRemaining.length() != 0) {
\r
177 whereClauseRemaining.append("AND ");
\r
179 whereClauseRemaining.append("resource_id = ? ");
\r
180 listOfArguments.add(configResourceInput.getResourceId());
\r
183 if (configResourceInput.getResourceType() != null) {
\r
184 if (whereClauseRemaining.length() != 0) {
\r
185 whereClauseRemaining.append("AND ");
\r
187 whereClauseRemaining.append("resource_type = ? ");
\r
188 listOfArguments.add(configResourceInput.getResourceType());
\r
191 if (configResourceInput.getRequestId() != null) {
\r
192 if (whereClauseRemaining.length() != 0) {
\r
193 whereClauseRemaining.append("AND ");
\r
195 whereClauseRemaining.append("request_id = ? ");
\r
196 listOfArguments.add(configResourceInput.getRequestId());
\r
199 if (configResourceInput.getTemplateName() != null) {
\r
200 if (whereClauseRemaining.length() != 0) {
\r
201 whereClauseRemaining.append("AND ");
\r
203 whereClauseRemaining.append("template_name = ? ");
\r
204 listOfArguments.add(configResourceInput.getTemplateName());
\r
207 if (configResourceInput.getRecipeName() != null) {
\r
208 if (whereClauseRemaining.length() != 0) {
\r
209 whereClauseRemaining.append("AND ");
\r
211 whereClauseRemaining.append("recipe_name = ? ");
\r
212 listOfArguments.add(configResourceInput.getRecipeName());
\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
220 List<ConfigResource> returnConfigResources = new ArrayList<>();
\r
222 if (configResources != null) {
\r
223 for (ConfigResource configResource : configResources) {
\r
224 if (configResource != null) {
\r
225 returnConfigResources.add(getConfigResource(configResource));
\r
229 return returnConfigResources;
\r
232 public ConfigResource checkConfigResource(ConfigResource configResource) {
\r
233 StringBuilder selectBuffer = new StringBuilder();
\r
234 List<Object> listOfArguments = new ArrayList<>();
\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
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
252 return configResource;
\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
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
269 if (StringUtils.isBlank(configResource.getConfigResourceId())) {
\r
270 throw new SvcLogicException("config resource id is missing.");
\r
273 if (StringUtils.isBlank(configResource.getResourceType())) {
\r
274 throw new SvcLogicException("config resource type is missing.");
\r
276 if (StringUtils.isBlank(configResource.getResourceId())) {
\r
277 throw new SvcLogicException("config resource resource id is missing.");
\r
280 if (StringUtils.isBlank(configResource.getRecipeName())) {
\r
281 throw new SvcLogicException("config resource action name is missing.");
\r
284 if (StringUtils.isBlank(configResource.getTemplateName())) {
\r
285 throw new SvcLogicException("config resource template name is missing.");
\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
296 if (resourceAssignmentData.getVersion() == null || resourceAssignmentData.getVersion() == 0) {
\r
297 resourceAssignmentData.setVersion(1);
\r
299 if (StringUtils.isBlank(resourceAssignmentData.getUpdatedBy())) {
\r
300 resourceAssignmentData.setUpdatedBy("System");
\r
302 if (resourceAssignmentData.getStatus() == null) {
\r
303 logger.warn("{} status is missing and setting to undefined", resourceAssignmentData);
\r
304 resourceAssignmentData.setStatus("undefined");
\r
306 if (resourceAssignmentData.getMessage() == null) {
\r
307 resourceAssignmentData.setMessage("");
\r
309 if (resourceAssignmentData.getResourceValue() == null) {
\r
310 resourceAssignmentData.setResourceValue("");
\r
313 validateResourceAssignmentData(resourceAssignmentData);
\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
326 if (StringUtils.isBlank(resourceAssignmentData.getConfigResourceId())) {
\r
327 throw new SvcLogicException("resource assignment data config resource id is missing.");
\r
329 if (resourceAssignmentData.getVersion() == null) {
\r
330 throw new SvcLogicException(
\r
331 String.format("resource assignment data (%s) version is missing", resourceAssignmentData));
\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
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
341 if (resourceAssignmentData.getResourceValue() == null) {
\r
342 throw new SvcLogicException(
\r
343 String.format("resource assignment data (%s) resource value is missing", resourceAssignmentData));
\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
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
353 if (StringUtils.isBlank(resourceAssignmentData.getStatus())) {
\r
354 throw new SvcLogicException(
\r
355 String.format("resource assignment data (%s) status is missing", resourceAssignmentData));
\r
357 if (resourceAssignmentData.getMessage() == null) {
\r
358 throw new SvcLogicException(
\r
359 String.format("resource assignment data (%s) message is missing", resourceAssignmentData));
\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
373 class ConfigResourceMapper implements RowMapper<ConfigResource> {
\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
394 class ResourceAssignmentDataMapper implements RowMapper<ResourceAssignmentData> {
\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