From c5abb16c82343925fe3ae7d350e9ef0fbfa7f89c Mon Sep 17 00:00:00 2001 From: "Singal, Kapil (ks220y)" Date: Tue, 4 Sep 2018 12:53:15 -0400 Subject: SDN Controller Blueprints Data Adaptor Creating SDN Controller Blueprints Data Adaptor Component Change-Id: I2f2db69a085eb696c5d1833d652a56e9f7b2e159 Issue-ID: CCSDK-495 Signed-off-by: Singal, Kapil (ks220y) --- .../data/adaptor/ConfigDataAdaptorException.java | 47 +++ .../config/data/adaptor/DataAdaptorConstants.java | 73 ++++ .../data/adaptor/dao/ConfigPropertyMapDao.java | 30 ++ .../data/adaptor/dao/ConfigPropertyMapDaoImpl.java | 68 ++++ .../config/data/adaptor/dao/ConfigResourceDao.java | 55 +++ .../data/adaptor/dao/ConfigResourceDaoImpl.java | 412 +++++++++++++++++++++ .../data/adaptor/dao/NamedQueryExecutorDao.java | 54 +++ .../adaptor/dao/NamedQueryExecutorDaoImpl.java | 53 +++ .../config/data/adaptor/dao/QueryExecutorDao.java | 51 +++ .../data/adaptor/dao/QueryExecutorDaoImpl.java | 50 +++ .../config/data/adaptor/dao/TransactionLogDao.java | 58 +++ .../data/adaptor/dao/TransactionLogDaoImpl.java | 87 +++++ .../config/data/adaptor/db/DataSourceWrap.java | 88 +++++ .../data/adaptor/domain/ConfigPropertyMapData.java | 46 +++ .../config/data/adaptor/domain/ConfigResource.java | 168 +++++++++ .../adaptor/domain/ResourceAssignmentData.java | 154 ++++++++ .../config/data/adaptor/domain/TransactionLog.java | 95 +++++ .../data/adaptor/service/ConfigResourceNode.java | 58 +++ .../adaptor/service/ConfigResourceService.java | 149 ++++++++ .../adaptor/service/ConfigResourceServiceImpl.java | 110 ++++++ .../org/opendaylight/blueprint/impl-blueprint.xml | 83 +++++ .../src/main/resources/sql/001_init_ddl.sql | 106 ++++++ 22 files changed, 2095 insertions(+) create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/ConfigDataAdaptorException.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/DataAdaptorConstants.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/ConfigPropertyMapDao.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/ConfigPropertyMapDaoImpl.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/ConfigResourceDao.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/ConfigResourceDaoImpl.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/NamedQueryExecutorDao.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/NamedQueryExecutorDaoImpl.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/QueryExecutorDao.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/QueryExecutorDaoImpl.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/TransactionLogDao.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/TransactionLogDaoImpl.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/db/DataSourceWrap.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/domain/ConfigPropertyMapData.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/domain/ConfigResource.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/domain/ResourceAssignmentData.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/domain/TransactionLog.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/service/ConfigResourceNode.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/service/ConfigResourceService.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/service/ConfigResourceServiceImpl.java create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml create mode 100644 blueprints-processor/adaptors/data-adaptor-provider/src/main/resources/sql/001_init_ddl.sql (limited to 'blueprints-processor') diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/ConfigDataAdaptorException.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/ConfigDataAdaptorException.java new file mode 100644 index 000000000..c794b5d8a --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/ConfigDataAdaptorException.java @@ -0,0 +1,47 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor; + +/** + * ConfigDataAdaptorException.java Purpose: Provide Configuration Data Adaptor Exception + * + * @version 1.0 + */ +public class ConfigDataAdaptorException extends Exception { + + /** + * + */ + private static final long serialVersionUID = 1L; + + /** + * This is a ConfigDataAdaptorException constructor + * + * @param message + */ + public ConfigDataAdaptorException(String message) { + super(message); + } + + /** + * This is a ConfigDataAdaptorException constructor + * + * @param message + */ + public ConfigDataAdaptorException(String message, Throwable cause) { + super(message, cause); + } + +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/DataAdaptorConstants.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/DataAdaptorConstants.java new file mode 100644 index 000000000..c942ed6d8 --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/DataAdaptorConstants.java @@ -0,0 +1,73 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor; + +@SuppressWarnings("squid:S1118") +public class DataAdaptorConstants { + + public static final String OUTPUT_STATUS_SUCCESS = "success"; + public static final String OUTPUT_STATUS_FAILURE = "failure"; + + public static final String PROPERTY_ENV_TYPE = "org.onap.ccsdk.config.rest.adaptors.envtype"; + public static final String PROPERTY_ENV_PROD = "field"; + public static final String PROPERTY_ENV_SOLO = "solo"; + + public static final String INPUT_PARAM_TAGS = "tags"; + public static final String INPUT_PARAM_CAPABILITY_NAME = "capabilityName"; + public static final String INPUT_PARAM_MESSAGE = "message"; + public static final String INPUT_PARAM_MESSAGE_TYPE = "messageType"; + public static final String OUTPUT_PARAM_STATUS = "status"; + public static final String OUTPUT_PARAM_ERROR_MESSAGE = "error-message"; + public static final String INPUT_PARAM_FILE_CATEGORY = "fileCategory"; + public static final String INPUT_PARAM_VM_INSTANCE = "vmInstance"; + public static final String INPUT_PARAM_ASDC_ARTIFACT_IND = "asdcArtifactInd"; + public static final Object INPUT_PARAM_VNF_ID = "vnfId"; + public static final Object INPUT_PARAM_VM_NAME = "vmName"; + + public static final Object INPUT_PARAM_CONFIG_CONTENT_TYPE = "configContentType"; + + public static final Object INPUT_PARAM_CONFIG_CONTENT = "configContent"; + public static final Object INPUT_PARAM_CONFIG_INDICATOR = "configIndicator"; + + public static final Object CONFIG_CONTENT_TYPE_CONFIGURATION = "Configuration"; + public static final Object CONFIG_CONTENT_TYPE_PARAMETERS = "Parameters"; + public static final Object CONFIG_INDICATOR_PREPARE = "Prepare"; + public static final Object CONFIG_INDICATOR_ACTIVE = "Active"; + + public static final String INPUT_PARAM_RESPONSE_PRIFIX = "response-prefix"; + public static final String INPUT_PARAM_VNF_TYPE = "vnfType"; + public static final String INPUT_PARAM_VNFC_TYPE = "vnfcType"; + public static final String INPUT_PARAM_ACTION = "action"; + public static final String INPUT_PARAM_API_VERSION = "apiVersion"; + + public static final String INPUT_PARAM_FILE_ID = "fileId"; + public static final String INPUT_PARAM_UPLOAD_CONFIG_ID = "uploadConfigId"; + public static final String FILE_CATEGORY_SERVICE_TEMPLATE = "service_template"; + + public static final String ARTIFACT_TYPE_SDNC_MODEL = "SDNC_MODEL"; + + public static final String LOG_MESSAGE_TYPE_LOG = "Log"; + public static final String LOG_MESSAGE_TYPE_COMPONENT = "Component"; + public static final String LOG_MESSAGE_TYPE_REQUEST = "Request"; + public static final String LOG_MESSAGE_TYPE_MODEL = "Model"; + public static final String LOG_MESSAGE_TYPE_DATA = "Data"; + public static final String LOG_MESSAGE_TYPE_CONFIG = "Config"; + + public static final String SELF_SERVICE_STATUS_RECEIVED = "Received"; + public static final String SELF_SERVICE_STATUS_ACKNOWLEDGED = "Acknowledged"; + public static final String SELF_SERVICE_STATUS_REPLIED = "Replied"; + public static final String SELF_SERVICE_STATUS_FAILED = "Failed"; + +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/ConfigPropertyMapDao.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/ConfigPropertyMapDao.java new file mode 100644 index 000000000..e1b25beda --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/ConfigPropertyMapDao.java @@ -0,0 +1,30 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor.dao; + +import org.onap.ccsdk.sli.core.sli.SvcLogicException; + +public interface ConfigPropertyMapDao { + + /** + * Query ConcurrentHashMap having CONFIG_PROPERTY_MAP table data for given key. + * + * @param key key mapped to a value + * @return the result string, containing mapped string value + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if fails + */ + public String getConfigPropertyByKey(String key) throws SvcLogicException; + +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/ConfigPropertyMapDaoImpl.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/ConfigPropertyMapDaoImpl.java new file mode 100644 index 000000000..84c96a84d --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/ConfigPropertyMapDaoImpl.java @@ -0,0 +1,68 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor.dao; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import org.apache.commons.lang3.StringUtils; +import org.onap.ccsdk.config.data.adaptor.DataAdaptorConstants; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.springframework.jdbc.core.JdbcTemplate; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.google.common.base.Preconditions; + +public class ConfigPropertyMapDaoImpl implements ConfigPropertyMapDao { + + private static EELFLogger logger = EELFManager.getInstance().getLogger(ConfigPropertyMapDaoImpl.class); + + private JdbcTemplate jdbcTemplate; + private Map configPropertyMap = new ConcurrentHashMap<>(); + + public ConfigPropertyMapDaoImpl(JdbcTemplate jdbcTemplate) { + this.jdbcTemplate = jdbcTemplate; + initializeMap(); + + String envType = configPropertyMap.get(DataAdaptorConstants.PROPERTY_ENV_TYPE); + if (!(DataAdaptorConstants.PROPERTY_ENV_PROD.equalsIgnoreCase(envType) + || DataAdaptorConstants.PROPERTY_ENV_SOLO.equalsIgnoreCase(envType))) { + ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); + Runnable task = () -> { + initializeMap(); + }; + executor.scheduleWithFixedDelay(task, 60, 15, TimeUnit.MINUTES); + } + } + + private void initializeMap() { + String getPropQuery = "SELECT * FROM CONFIG_PROPERTY_MAP"; + jdbcTemplate.queryForList(getPropQuery).forEach(rows -> { + String key = StringUtils.trimToEmpty((String) rows.get("reference_key")); + String value = StringUtils.trimToEmpty((String) rows.get("reference_value")); + configPropertyMap.put(key, value); + }); + logger.trace("loaded configPropertyMap : ({})", configPropertyMap); + } + + @Override + public String getConfigPropertyByKey(String key) throws SvcLogicException { + Preconditions.checkArgument(StringUtils.isNotBlank(key), "missing property key"); + return configPropertyMap.get(key); + } + +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/ConfigResourceDao.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/ConfigResourceDao.java new file mode 100644 index 000000000..98f26473e --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/ConfigResourceDao.java @@ -0,0 +1,55 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor.dao; + +import java.util.List; +import org.onap.ccsdk.config.data.adaptor.domain.ConfigResource; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; + +public interface ConfigResourceDao { + + /** + * Issue a single SQL Insert operation for CONFIG_RESOURCE table via a prepared statement, binding + * the given arguments. + * + * @param transactionLog arguments to bind to the query (mapping it to the PreparedStatement to the + * corresponding SQL type) + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if there is any problem issuing the insert + */ + public ConfigResource save(ConfigResource configResourceInput) throws SvcLogicException; + + /** + * Issue a single SQL Delete operation for CONFIG_RESOURCE table via a prepared statement, binding + * the given arguments. + * + * @param configResource arguments to bind to the query (mapping it to the PreparedStatement to the + * corresponding SQL type) + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if there is any problem issuing the insert + */ + public void deleteByConfigResource(ConfigResource configResourceInput) throws SvcLogicException; + + /** + * Query CONFIG_RESOURCE table for given input param to create a prepared statement to bind to the + * query, mapping each row to a Java object via a ConfigResource RowMapper. + * + * @param configResource argument to bind to the query (mapping it to the PreparedStatement to the + * corresponding SQL type) + * @return the result List, containing mapped objects + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if the query fails + */ + public List findByConfigResource(ConfigResource configResourceInput) throws SvcLogicException; + + public ConfigResource getConfigResource(ConfigResource configResource) throws SvcLogicException; +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/ConfigResourceDaoImpl.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/ConfigResourceDaoImpl.java new file mode 100644 index 000000000..88cb78cb3 --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/ConfigResourceDaoImpl.java @@ -0,0 +1,412 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.onap.ccsdk.config.data.adaptor.domain.ConfigResource; +import org.onap.ccsdk.config.data.adaptor.domain.ResourceAssignmentData; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.jdbc.core.RowMapperResultSetExtractor; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; + +public class ConfigResourceDaoImpl implements ConfigResourceDao { + + private static EELFLogger logger = EELFManager.getInstance().getLogger(ConfigResourceDaoImpl.class); + + private JdbcTemplate jdbcTemplate; + + public ConfigResourceDaoImpl(JdbcTemplate jdbcTemplate) { + this.jdbcTemplate = jdbcTemplate; + } + + @Override + public ConfigResource save(ConfigResource configResource) throws SvcLogicException { + + ConfigResource dbConfigResource = checkConfigResource(configResource); + + if (dbConfigResource != null && StringUtils.isNotBlank(dbConfigResource.getConfigResourceId())) { + configResource.setConfigResourceId(dbConfigResource.getConfigResourceId()); + + validateConfigResource(configResource); + + update(configResource); + + saveConfigResourceAssignmentData(configResource); + } else { + String addQuery = "INSERT INTO CONFIG_RESOURCE " + + "( config_resource_id, resource_id, resource_type, service_template_name, service_template_version," + + "template_name, recipe_name, request_id, resource_data, mask_data, status, created_date, updated_by ) " + + "VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"; + + configResource.setConfigResourceId(configResource.getUniqueId()); + + validateConfigResource(configResource); + + logger.info("saving config resource ({}) ...", configResource); + jdbcTemplate.update(addQuery, configResource.getConfigResourceId(), configResource.getResourceId(), + configResource.getResourceType(), configResource.getServiceTemplateName(), + configResource.getServiceTemplateVersion(), configResource.getTemplateName(), + configResource.getRecipeName(), configResource.getRequestId(), configResource.getResourceData(), + configResource.getMaskData(), configResource.getStatus(), configResource.getCreatedDate(), + configResource.getUpdatedBy()); + + saveConfigResourceAssignmentData(configResource); + } + dbConfigResource = getConfigResource(configResource); + return dbConfigResource; + } + + private void update(ConfigResource configResource) throws SvcLogicException { + if (StringUtils.isNotBlank(configResource.getConfigResourceId())) { + logger.info("updating config resource ({}) ...", configResource); + // Added service_template_name and version in update query to update with 1802 data. + String updateQuery = "UPDATE CONFIG_RESOURCE SET " + + "resource_data = ?, mask_data = ?, created_date = ?, updated_by = ? ,service_template_name = ?, service_template_version = ? " + + "where config_resource_id = ?"; + + jdbcTemplate.update(updateQuery, configResource.getResourceData(), configResource.getMaskData(), + configResource.getCreatedDate(), configResource.getUpdatedBy(), + configResource.getServiceTemplateName(), configResource.getServiceTemplateVersion(), + configResource.getConfigResourceId()); + } else { + throw new SvcLogicException("missing config resource id to update."); + } + } + + private void saveConfigResourceAssignmentData(ConfigResource configResource) { + if (configResource != null && StringUtils.isNotBlank(configResource.getConfigResourceId())) { + List listOfArguments = new ArrayList<>(); + String deleteQuery = "DELETE FROM CONFIG_RESOURCE_ASSIGNMENT_DATA WHERE config_resource_id = ? "; + listOfArguments.add(configResource.getConfigResourceId()); + this.jdbcTemplate.update(deleteQuery, listOfArguments.toArray()); + logger.info("config resource assignment data deleted successfully for the config_resource_id ({})", + configResource.getConfigResourceId()); + + if (configResource.getResourceAssignments() != null) { + List resourceAssignments = configResource.getResourceAssignments(); + for (ResourceAssignmentData resourceAssignmentData : resourceAssignments) { + if (resourceAssignmentData != null) { + resourceAssignmentData.setConfigResourceId(configResource.getConfigResourceId()); + saveResourceAssignmentData(resourceAssignmentData); + } + } + } + } + } + + private ResourceAssignmentData saveResourceAssignmentData(ResourceAssignmentData resourceAssignmentData) { + String addQuery = "INSERT INTO CONFIG_RESOURCE_ASSIGNMENT_DATA " + + "( config_resource_assignment_data_id, config_resource_id, version, updated_by, template_key_name, " + + "resource_name, data_type, entry_schema, resource_value, source, status, message ) " + + "VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"; + + logger.debug("saving config resource assignment data ({}) ... ", resourceAssignmentData); + jdbcTemplate.update(addQuery, resourceAssignmentData.getId(), resourceAssignmentData.getConfigResourceId(), + resourceAssignmentData.getVersion(), resourceAssignmentData.getUpdatedBy(), + resourceAssignmentData.getTemplateKeyName(), resourceAssignmentData.getResourceName(), + resourceAssignmentData.getDataType(), resourceAssignmentData.getEntrySchema(), + resourceAssignmentData.getResourceValue(), resourceAssignmentData.getSource(), + resourceAssignmentData.getStatus(), resourceAssignmentData.getMessage()); + + return resourceAssignmentData; + } + + @Override + public void deleteByConfigResource(ConfigResource configResourceInput) throws SvcLogicException { + StringBuilder selectArtifactBuffer = new StringBuilder(); + List listOfArguments = new ArrayList<>(); + + selectArtifactBuffer.append("DELETE FROM CONFIG_RESOURCE WHERE config_resource_id = ? "); + listOfArguments.add(configResourceInput.getConfigResourceId()); + + String queryString = selectArtifactBuffer.toString(); + this.jdbcTemplate.update(queryString, listOfArguments.toArray()); + logger.info("config resource ({}) deleted successfully ", configResourceInput); + } + + @SuppressWarnings("squid:S3776") + @Override + public List findByConfigResource(ConfigResource configResourceInput) throws SvcLogicException { + StringBuilder selectArtifactBuffer = new StringBuilder(); + List listOfArguments = new ArrayList<>(); + + selectArtifactBuffer.append("SELECT * FROM CONFIG_RESOURCE WHERE "); + + StringBuilder whereClauseRemaining = new StringBuilder(); + + if (configResourceInput.getServiceTemplateName() != null) { + if (whereClauseRemaining.length() != 0) { + whereClauseRemaining.append("AND "); + } + whereClauseRemaining.append("service_template_name = ? "); + listOfArguments.add(configResourceInput.getServiceTemplateName()); + } + + if (configResourceInput.getServiceTemplateVersion() != null) { + if (whereClauseRemaining.length() != 0) { + whereClauseRemaining.append("AND "); + } + whereClauseRemaining.append("service_template_version = ? "); + listOfArguments.add(configResourceInput.getServiceTemplateVersion()); + } + + if (configResourceInput.getResourceId() != null) { + if (whereClauseRemaining.length() != 0) { + whereClauseRemaining.append("AND "); + } + whereClauseRemaining.append("resource_id = ? "); + listOfArguments.add(configResourceInput.getResourceId()); + } + + if (configResourceInput.getResourceType() != null) { + if (whereClauseRemaining.length() != 0) { + whereClauseRemaining.append("AND "); + } + whereClauseRemaining.append("resource_type = ? "); + listOfArguments.add(configResourceInput.getResourceType()); + } + + if (configResourceInput.getRequestId() != null) { + if (whereClauseRemaining.length() != 0) { + whereClauseRemaining.append("AND "); + } + whereClauseRemaining.append("request_id = ? "); + listOfArguments.add(configResourceInput.getRequestId()); + } + + if (configResourceInput.getTemplateName() != null) { + if (whereClauseRemaining.length() != 0) { + whereClauseRemaining.append("AND "); + } + whereClauseRemaining.append("template_name = ? "); + listOfArguments.add(configResourceInput.getTemplateName()); + } + + if (configResourceInput.getRecipeName() != null) { + if (whereClauseRemaining.length() != 0) { + whereClauseRemaining.append("AND "); + } + whereClauseRemaining.append("recipe_name = ? "); + listOfArguments.add(configResourceInput.getRecipeName()); + } + + String queryString = selectArtifactBuffer.toString() + whereClauseRemaining.toString(); + logger.info("config resource queryString ({})", queryString); + List configResources = + this.jdbcTemplate.query(queryString, listOfArguments.toArray(), new ConfigResourceMapper()); + + List returnConfigResources = new ArrayList<>(); + + if (configResources != null) { + for (ConfigResource configResource : configResources) { + if (configResource != null) { + returnConfigResources.add(getConfigResource(configResource)); + } + } + } + return returnConfigResources; + } + + public ConfigResource checkConfigResource(ConfigResource configResource) { + StringBuilder selectBuffer = new StringBuilder(); + List listOfArguments = new ArrayList<>(); + + selectBuffer.append( + "SELECT * FROM CONFIG_RESOURCE WHERE resource_id = ? AND resource_type = ? AND template_name = ? "); + listOfArguments.add(configResource.getResourceId()); + listOfArguments.add(configResource.getResourceType()); + listOfArguments.add(configResource.getTemplateName()); + return queryOneForObject(selectBuffer.toString(), listOfArguments.toArray(), new ConfigResourceMapper()); + } + + @Override + public ConfigResource getConfigResource(ConfigResource configResource) throws SvcLogicException { + ConfigResource dbConfigResource = checkConfigResource(configResource); + if (dbConfigResource != null && StringUtils.isNotBlank(dbConfigResource.getConfigResourceId())) { + List resourceAssignments = + getResourceAssignmentdata(dbConfigResource.getConfigResourceId()); + configResource.setResourceAssignments(resourceAssignments); + } + return configResource; + } + + private List getResourceAssignmentdata(String configResourceId) { + List listOfArguments = new ArrayList<>(); + String queryString = "SELECT * FROM CONFIG_RESOURCE_ASSIGNMENT_DATA WHERE config_resource_id = ? "; + logger.info("getResourceAssignmentdata queryString ({}), query inputs ({})", queryString, configResourceId); + listOfArguments.add(configResourceId); + return this.jdbcTemplate.query(queryString, listOfArguments.toArray(), new ResourceAssignmentDataMapper()); + } + + @SuppressWarnings("squid:S3776") + private boolean validateConfigResource(ConfigResource configResource) throws SvcLogicException { + if (configResource == null) { + throw new SvcLogicException("config resource information is missing."); + } + + if (StringUtils.isBlank(configResource.getConfigResourceId())) { + throw new SvcLogicException("config resource id is missing."); + } + + if (StringUtils.isBlank(configResource.getResourceType())) { + throw new SvcLogicException("config resource type is missing."); + } + if (StringUtils.isBlank(configResource.getResourceId())) { + throw new SvcLogicException("config resource resource id is missing."); + } + + if (StringUtils.isBlank(configResource.getRecipeName())) { + throw new SvcLogicException("config resource action name is missing."); + } + + if (StringUtils.isBlank(configResource.getTemplateName())) { + throw new SvcLogicException("config resource template name is missing."); + } + + if (configResource.getResourceAssignments() != null) { + List resourceAssignments = configResource.getResourceAssignments(); + for (ResourceAssignmentData resourceAssignmentData : resourceAssignments) { + if (resourceAssignmentData != null) { + resourceAssignmentData.setConfigResourceId(configResource.getConfigResourceId()); + if (StringUtils.isBlank(resourceAssignmentData.getId())) { + resourceAssignmentData.setId(resourceAssignmentData.getUniqueId()); + } + if (resourceAssignmentData.getVersion() == null || resourceAssignmentData.getVersion() == 0) { + resourceAssignmentData.setVersion(1); + } + if (StringUtils.isBlank(resourceAssignmentData.getUpdatedBy())) { + resourceAssignmentData.setUpdatedBy("System"); + } + if (resourceAssignmentData.getStatus() == null) { + logger.warn("{} status is missing and setting to undefined", resourceAssignmentData); + resourceAssignmentData.setStatus("undefined"); + } + if (resourceAssignmentData.getMessage() == null) { + resourceAssignmentData.setMessage(""); + } + if (resourceAssignmentData.getResourceValue() == null) { + resourceAssignmentData.setResourceValue(""); + } + + validateResourceAssignmentData(resourceAssignmentData); + } + } + } + + return true; + } + + private boolean validateResourceAssignmentData(ResourceAssignmentData resourceAssignmentData) + throws SvcLogicException { + if (resourceAssignmentData == null) { + throw new SvcLogicException("resource assignment data information is missing."); + } + if (StringUtils.isBlank(resourceAssignmentData.getConfigResourceId())) { + throw new SvcLogicException("resource assignment data config resource id is missing."); + } + if (resourceAssignmentData.getVersion() == null) { + throw new SvcLogicException( + String.format("resource assignment data (%s) version is missing", resourceAssignmentData)); + } + if (StringUtils.isBlank(resourceAssignmentData.getTemplateKeyName())) { + throw new SvcLogicException(String.format("resource assignment data (%s) template key name is missing", + resourceAssignmentData)); + } + if (StringUtils.isBlank(resourceAssignmentData.getResourceName())) { + throw new SvcLogicException( + String.format("resource assignment data (%s) resource name is missing", resourceAssignmentData)); + } + if (resourceAssignmentData.getResourceValue() == null) { + throw new SvcLogicException( + String.format("resource assignment data (%s) resource value is missing", resourceAssignmentData)); + } + if (StringUtils.isBlank(resourceAssignmentData.getSource())) { + throw new SvcLogicException( + String.format("resource assignment data (%s) source is missing", resourceAssignmentData)); + } + if (StringUtils.isBlank(resourceAssignmentData.getDataType())) { + throw new SvcLogicException( + String.format("resource assignment data (%s) data type is missing", resourceAssignmentData)); + } + if (StringUtils.isBlank(resourceAssignmentData.getStatus())) { + throw new SvcLogicException( + String.format("resource assignment data (%s) status is missing", resourceAssignmentData)); + } + if (resourceAssignmentData.getMessage() == null) { + throw new SvcLogicException( + String.format("resource assignment data (%s) message is missing", resourceAssignmentData)); + } + return true; + } + + private T queryOneForObject(String sql, Object[] args, RowMapper rowMapper) { + List results = this.jdbcTemplate.query(sql, args, new RowMapperResultSetExtractor(rowMapper, 1)); + if (results != null && !results.isEmpty()) { + return results.get(0); + } else { + return null; + } + } + + class ConfigResourceMapper implements RowMapper { + @Override + public ConfigResource mapRow(ResultSet rs, int rowNum) throws SQLException { + ConfigResource configResource = new ConfigResource(); + configResource.setConfigResourceId(rs.getString("config_resource_id")); + configResource.setResourceId(rs.getString("resource_id")); + configResource.setResourceType(rs.getString("resource_type")); + configResource.setServiceTemplateName(rs.getString("service_template_name")); + configResource.setServiceTemplateVersion(rs.getString("service_template_version")); + configResource.setTemplateName(rs.getString("template_name")); + configResource.setRecipeName(rs.getString("recipe_name")); + configResource.setRequestId(rs.getString("request_id")); + configResource.setResourceData(rs.getString("resource_data")); + configResource.setMaskData(rs.getString("mask_data")); + configResource.setStatus(rs.getString("status")); + configResource.setCreatedDate(rs.getDate("created_date")); + configResource.setUpdatedBy(rs.getString("updated_by")); + return configResource; + } + } + + class ResourceAssignmentDataMapper implements RowMapper { + @Override + public ResourceAssignmentData mapRow(ResultSet rs, int rowNum) throws SQLException { + ResourceAssignmentData resourceAssignmentData = new ResourceAssignmentData(); + resourceAssignmentData.setConfigResourceId(rs.getString("config_resource_id")); + resourceAssignmentData.setDataType(rs.getString("data_type")); + resourceAssignmentData.setEntrySchema(rs.getString("entry_schema")); + resourceAssignmentData.setId(rs.getString("config_resource_assignment_data_id")); + resourceAssignmentData.setMessage(rs.getString("message")); + resourceAssignmentData.setResourceName(rs.getString("resource_name")); + resourceAssignmentData.setResourceValue(rs.getString("resource_value")); + resourceAssignmentData.setSource(rs.getString("source")); + resourceAssignmentData.setStatus(rs.getString("status")); + resourceAssignmentData.setTemplateKeyName(rs.getString("template_key_name")); + resourceAssignmentData.setUpdatedBy(rs.getString("updated_by")); + resourceAssignmentData.setUpdatedDate(rs.getTimestamp("updated_date")); + resourceAssignmentData.setVersion(rs.getInt("version")); + return resourceAssignmentData; + } + } + +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/NamedQueryExecutorDao.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/NamedQueryExecutorDao.java new file mode 100644 index 000000000..d8d509022 --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/NamedQueryExecutorDao.java @@ -0,0 +1,54 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor.dao; + +import java.util.List; +import java.util.Map; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; + +public interface NamedQueryExecutorDao { + /** + * Return NamedParameterJdbcTemplate object. + */ + public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() throws SvcLogicException; + + /** + * Query given SQL to create a prepared statement from SQL and a list of arguments to bind to the + * query, expecting a result list. + *

+ * The results will be mapped to a List (one entry for each row) of Maps (one entry for each column, + * using the column name as the key). + * + * @param sql SQL query to execute + * @param param map of parameters to bind to the query (leaving it to the PreparedStatement to guess + * the corresponding SQL type) + * @return a List that contains a Map per row + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if the query fails + */ + public List> query(String sql, Map parameters) throws SvcLogicException; + + /** + * Issue an update via a prepared statement, binding the given arguments. + * + * @param sql SQL containing named parameters + * @param param map of parameters to bind to the query (leaving it to the PreparedStatement to guess + * the corresponding SQL type) + * @return the number of rows affected + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if there is any problem issuing the update + */ + public int update(String sql, Map parameters) throws SvcLogicException; + +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/NamedQueryExecutorDaoImpl.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/NamedQueryExecutorDaoImpl.java new file mode 100644 index 000000000..bbb12cf82 --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/NamedQueryExecutorDaoImpl.java @@ -0,0 +1,53 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor.dao; + +import java.util.List; +import java.util.Map; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; + +public class NamedQueryExecutorDaoImpl implements NamedQueryExecutorDao { + private static EELFLogger logger = EELFManager.getInstance().getLogger(QueryExecutorDaoImpl.class); + private static final String CLASS_NAME = "NamedQueryExecutorDaoImpl"; + + @Autowired(required = true) + private NamedParameterJdbcTemplate namedParameterJdbcTemplate; + + public NamedQueryExecutorDaoImpl(NamedParameterJdbcTemplate namedParameterJdbcTemplate) { + this.namedParameterJdbcTemplate = namedParameterJdbcTemplate; + logger.info("{} Constructor initialised..", CLASS_NAME); + } + + @Override + public List> query(String sql, Map parameters) throws SvcLogicException { + logger.debug("Query ({}) with parameters ({})", sql, parameters); + return namedParameterJdbcTemplate.queryForList(sql, parameters); + } + + @Override + public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() { + return namedParameterJdbcTemplate; + } + + @Override + public int update(String sql, Map parameters) throws SvcLogicException { + logger.debug("update ({}) with parameters ({})", sql, parameters); + return namedParameterJdbcTemplate.update(sql, parameters); + } +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/QueryExecutorDao.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/QueryExecutorDao.java new file mode 100644 index 000000000..f66cd4a4d --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/QueryExecutorDao.java @@ -0,0 +1,51 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor.dao; + +import java.util.List; +import java.util.Map; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; + +public interface QueryExecutorDao { + + /** + * Query given SQL to create a prepared statement from SQL and a list of arguments to bind to the + * query, expecting a result list. + *

+ * The results will be mapped to a List (one entry for each row) of Maps (one entry for each column, + * using the column name as the key). Each element in the list will be of the form returned by this + * interface's queryForMap() methods. + * + * @param sql SQL query to execute + * @param data arguments to bind to the query (leaving it to the PreparedStatement to guess the + * corresponding SQL type) + * @return a List that contains a Map per row + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if the query fails + */ + public List> query(String sql, Object[] data) throws SvcLogicException; + + /** + * Issue a single SQL update operation (such as an insert, update or delete statement) via a + * prepared statement, binding the given arguments. + * + * @param sql SQL containing bind parameters + * @param data arguments to bind to the query (leaving it to the PreparedStatement to guess the + * corresponding SQL type) + * @return the number of rows affected + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if there is any problem issuing the update + */ + public int update(String sql, Object[] data) throws SvcLogicException; + +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/QueryExecutorDaoImpl.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/QueryExecutorDaoImpl.java new file mode 100644 index 000000000..bc3901a79 --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/QueryExecutorDaoImpl.java @@ -0,0 +1,50 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor.dao; + +import java.util.List; +import java.util.Map; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; + +public class QueryExecutorDaoImpl implements QueryExecutorDao { + + private static EELFLogger logger = EELFManager.getInstance().getLogger(QueryExecutorDaoImpl.class); + private static final String CLASS_NAME = "QueryExecutorDaoImpl"; + + @Autowired(required = true) + private JdbcTemplate jdbcTemplate; + + public QueryExecutorDaoImpl(JdbcTemplate jdbcTemplate) { + this.jdbcTemplate = jdbcTemplate; + logger.info("{} Constructor initialised..", CLASS_NAME); + } + + @Override + public List> query(String sql, Object[] data) throws SvcLogicException { + logger.debug("Query ({}) with data ({})", sql, data); + return jdbcTemplate.queryForList(sql, data); + } + + @Override + public int update(String sql, Object[] data) throws SvcLogicException { + logger.debug("Query ({}) with data ({})", sql, data); + return jdbcTemplate.update(sql, data); + } + +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/TransactionLogDao.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/TransactionLogDao.java new file mode 100644 index 000000000..f87dbb745 --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/TransactionLogDao.java @@ -0,0 +1,58 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor.dao; + +import java.util.List; +import org.onap.ccsdk.config.data.adaptor.domain.TransactionLog; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; + +public interface TransactionLogDao { + + /** + * Issue a single SQL Insert operation for CONFIG_TRANSACTION_LOG table via a prepared statement, + * binding the given arguments. + * + * @param transactionLog arguments to bind to the query (mapping it to the PreparedStatement to the + * corresponding SQL type) + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if there is any problem issuing the insert + */ + public void save(TransactionLog transactionLog) throws SvcLogicException; + + /** + * Query CONFIG_TRANSACTION_LOG table for given request_id, mapping each row to a Java object via a + * TransactionLog RowMapper. + * + * @param requestId argument to bind to the query (leaving it to the PreparedStatement to guess the + * corresponding SQL type) + * @return the result List, containing mapped objects + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if the query fails + */ + public List getTransactionsByRequestId(String requestId) throws SvcLogicException; + + /** + * Query CONFIG_TRANSACTION_LOG table for given request_id, mapping each row to a Java object via a + * TransactionLog RowMapper. + * + * @param requestId argument to bind to the query (leaving it to the PreparedStatement to guess the + * corresponding SQL type) + * @param messageType argument to bind to the query (leaving it to the PreparedStatement to guess + * the corresponding SQL type) + * @return the result List, containing mapped objects + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if the query fails + */ + public List getTransactionsByRequestId(String requestId, String messageType) + throws SvcLogicException; + +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/TransactionLogDaoImpl.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/TransactionLogDaoImpl.java new file mode 100644 index 000000000..88d9c846a --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/dao/TransactionLogDaoImpl.java @@ -0,0 +1,87 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.onap.ccsdk.config.data.adaptor.domain.TransactionLog; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; + +public class TransactionLogDaoImpl implements TransactionLogDao { + + private static EELFLogger logger = EELFManager.getInstance().getLogger(TransactionLogDaoImpl.class); + + private JdbcTemplate jdbcTemplate; + + public TransactionLogDaoImpl(JdbcTemplate jdbcTemplate) { + this.jdbcTemplate = jdbcTemplate; + } + + @Override + public void save(TransactionLog transactionLog) throws SvcLogicException { + if (transactionLog != null && StringUtils.isNotBlank(transactionLog.getRequestId())) { + String addSql = + "INSERT INTO CONFIG_TRANSACTION_LOG ( config_transaction_log_id, request_id, message_type, message ) VALUES (?, ?, ?, ?) "; + jdbcTemplate.update(addSql, transactionLog.getUniqueId(), transactionLog.getRequestId(), + transactionLog.getMessageType(), transactionLog.getMessage()); + logger.trace("TransactionLog Updated Successfully for message_type {}", transactionLog.getMessageType()); + } + + } + + @Override + public List getTransactionsByRequestId(String requestId) throws SvcLogicException { + if (StringUtils.isNotBlank(requestId)) { + String selectByRequestIdSql = + "SELECT * FROM CONFIG_TRANSACTION_LOG WHERE request_id = ? ORDER BY creation_date DESC"; + return this.jdbcTemplate.query(selectByRequestIdSql, new Object[] {requestId}, new TransactionLogMapper()); + } else { + throw new SvcLogicException("TransactionLog Request id (" + requestId + ")is missing "); + } + } + + @Override + public List getTransactionsByRequestId(String requestId, String messageType) + throws SvcLogicException { + if (StringUtils.isNotBlank(requestId)) { + String selectByRequestIdSql = + "SELECT * FROM CONFIG_TRANSACTION_LOG WHERE request_id = ? and message_type = ? ORDER BY creation_date DESC"; + return this.jdbcTemplate.query(selectByRequestIdSql, new Object[] {requestId, messageType}, + new TransactionLogMapper()); + } else { + throw new SvcLogicException("TransactionLog Request id (" + requestId + ")is missing "); + } + } + + private static final class TransactionLogMapper implements RowMapper { + @Override + public TransactionLog mapRow(ResultSet rs, int rowNum) throws SQLException { + TransactionLog transactionLog = new TransactionLog(); + transactionLog.setCreationDate(rs.getDate("creation_date")); + transactionLog.setMessage(rs.getString("message")); + transactionLog.setMessageType(rs.getString("message_type")); + transactionLog.setRequestId(rs.getString("request_id")); + transactionLog.setTransactionLogId(rs.getString("config_transaction_log_id")); + return transactionLog; + } + } + +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/db/DataSourceWrap.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/db/DataSourceWrap.java new file mode 100644 index 000000000..888bdcb42 --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/db/DataSourceWrap.java @@ -0,0 +1,88 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor.db; + +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.SQLFeatureNotSupportedException; +import javax.sql.DataSource; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; + +public class DataSourceWrap implements DataSource { + + private static EELFLogger logger = EELFManager.getInstance().getLogger(DataSourceWrap.class); + + private DataSource dataSource; + + public DataSourceWrap(DataSource dataSource) { + logger.info("Setting Data Source {} ", dataSource); + this.dataSource = dataSource; + } + + @Override + public PrintWriter getLogWriter() throws SQLException { + return dataSource.getLogWriter(); + } + + @Override + public void setLogWriter(PrintWriter out) throws SQLException { + dataSource.setLogWriter(out); + } + + @Override + public void setLoginTimeout(int seconds) throws SQLException { + dataSource.setLoginTimeout(seconds); + } + + @Override + public int getLoginTimeout() throws SQLException { + return dataSource.getLoginTimeout(); + } + + @Override + public java.util.logging.Logger getParentLogger() throws SQLFeatureNotSupportedException { + return dataSource.getParentLogger(); + } + + @Override + public T unwrap(Class iface) throws SQLException { + return dataSource.unwrap(iface); + } + + @Override + public boolean isWrapperFor(Class iface) throws SQLException { + return dataSource.isWrapperFor(iface); + } + + @SuppressWarnings("squid:S2095") + @Override + public Connection getConnection() throws SQLException { + Connection c = dataSource.getConnection(); + logger.trace("getConnection: ({})", c.getClass().getName()); + c.setAutoCommit(true); + return c; + } + + @SuppressWarnings("squid:S2095") + @Override + public Connection getConnection(String username, String pass) throws SQLException { + Connection c = dataSource.getConnection(username, pass); + c.setAutoCommit(true); + return c; + } + +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/domain/ConfigPropertyMapData.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/domain/ConfigPropertyMapData.java new file mode 100644 index 000000000..6cc796ec7 --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/domain/ConfigPropertyMapData.java @@ -0,0 +1,46 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor.domain; + +import java.io.Serializable; + +public class ConfigPropertyMapData implements Serializable { + private static final long serialVersionUID = 1L; + + private String referenceKey; + private String referenceValue; + + public String getReferenceKey() { + return referenceKey; + } + + public void setReferenceKey(String referenceKey) { + this.referenceKey = referenceKey; + } + + public String getReferenceValue() { + return referenceValue; + } + + public void setReferenceValue(String referenceValue) { + this.referenceValue = referenceValue; + } + + @Override + public String toString() { + return "ConfigPropertyMapData [referenceKey=" + referenceKey + ", referenceValue=" + referenceValue + "]"; + } + +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/domain/ConfigResource.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/domain/ConfigResource.java new file mode 100644 index 000000000..2e46198fb --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/domain/ConfigResource.java @@ -0,0 +1,168 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor.domain; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; +import java.util.UUID; + +public class ConfigResource implements Serializable { + /** + * + */ + private static final long serialVersionUID = 1L; + + private String configResourceId; + private String resourceId; + private String resourceType; + private String serviceTemplateName; + private String serviceTemplateVersion; + private String templateName; + private String recipeName; + private String requestId; + private String resourceData; + private String maskData; + private Date createdDate = new Date(); + private String status; + private String updatedBy; + private List resourceAssignments; + + public String getConfigResourceId() { + return configResourceId; + } + + public void setConfigResourceId(String configResourceId) { + this.configResourceId = configResourceId; + } + + public String getResourceId() { + return resourceId; + } + + public void setResourceId(String resourceId) { + this.resourceId = resourceId; + } + + public String getResourceType() { + return resourceType; + } + + public void setResourceType(String resourceType) { + this.resourceType = resourceType; + } + + public String getServiceTemplateName() { + return serviceTemplateName; + } + + public void setServiceTemplateName(String serviceTemplateName) { + this.serviceTemplateName = serviceTemplateName; + } + + public String getServiceTemplateVersion() { + return serviceTemplateVersion; + } + + public void setServiceTemplateVersion(String serviceTemplateVersion) { + this.serviceTemplateVersion = serviceTemplateVersion; + } + + public String getTemplateName() { + return templateName; + } + + public void setTemplateName(String templateName) { + this.templateName = templateName; + } + + public String getRecipeName() { + return recipeName; + } + + public void setRecipeName(String recipeName) { + this.recipeName = recipeName; + } + + public String getRequestId() { + return requestId; + } + + public void setRequestId(String requestId) { + this.requestId = requestId; + } + + public String getResourceData() { + return resourceData; + } + + public void setResourceData(String resourceData) { + this.resourceData = resourceData; + } + + public String getMaskData() { + return maskData; + } + + public void setMaskData(String maskData) { + this.maskData = maskData; + } + + public Date getCreatedDate() { + return createdDate; + } + + public void setCreatedDate(Date createdDate) { + this.createdDate = createdDate; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getUpdatedBy() { + return updatedBy; + } + + public void setUpdatedBy(String updatedBy) { + this.updatedBy = updatedBy; + } + + public List getResourceAssignments() { + return resourceAssignments; + } + + public void setResourceAssignments(List resourceAssignments) { + this.resourceAssignments = resourceAssignments; + } + + @Override + public String toString() { + return "ConfigResource [configResourceId=" + configResourceId + ", resourceId=" + resourceId + + ", serviceTemplateName=" + serviceTemplateName + ", serviceTemplateVersion=" + serviceTemplateVersion + + ", resourceType=" + resourceType + ", templateName=" + templateName + ", recipeName=" + recipeName + + ", requestId=" + requestId + ", resourceData= ******** , maskData=" + maskData + ", createdDate=" + + createdDate + ", updatedBy=" + updatedBy + "]"; + } + + public String getUniqueId() { + return UUID.randomUUID().toString(); + } + +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/domain/ResourceAssignmentData.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/domain/ResourceAssignmentData.java new file mode 100644 index 000000000..c213326c6 --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/domain/ResourceAssignmentData.java @@ -0,0 +1,154 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor.domain; + +import java.io.Serializable; +import java.util.Date; +import java.util.UUID; + +public class ResourceAssignmentData implements Serializable { + + private static final long serialVersionUID = 1L; + private String id; + private String configResourceId; + private Integer version; + private Date updatedDate = new Date(); + private String updatedBy; + private String templateKeyName; + private String resourceName; + private String dataType; + private String entrySchema; + private String resourceValue; + private String source; + private String status; + private String message; + + public String getUniqueId() { + return UUID.randomUUID().toString(); + } + + @Override + public String toString() { + return "ResourceAssignmentData [id=" + id + ", configResourceId=" + configResourceId + ", version=" + version + + ", updatedDate=" + updatedDate + ", updatedBy=" + updatedBy + ", templateKeyName=" + templateKeyName + + ", resourceName=" + resourceName + ", dataType=" + dataType + ", source=" + source + ", status=" + + status + "]"; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getConfigResourceId() { + return configResourceId; + } + + public void setConfigResourceId(String configResourceId) { + this.configResourceId = configResourceId; + } + + public Integer getVersion() { + return version; + } + + public void setVersion(Integer version) { + this.version = version; + } + + public Date getUpdatedDate() { + return updatedDate; + } + + public void setUpdatedDate(Date updatedDate) { + this.updatedDate = updatedDate; + } + + public String getUpdatedBy() { + return updatedBy; + } + + public void setUpdatedBy(String updatedBy) { + this.updatedBy = updatedBy; + } + + public String getTemplateKeyName() { + return templateKeyName; + } + + public void setTemplateKeyName(String templateKeyName) { + this.templateKeyName = templateKeyName; + } + + public String getResourceName() { + return resourceName; + } + + public void setResourceName(String resourceName) { + this.resourceName = resourceName; + } + + public String getDataType() { + return dataType; + } + + public void setDataType(String dataType) { + this.dataType = dataType; + } + + public String getEntrySchema() { + return entrySchema; + } + + public void setEntrySchema(String entrySchema) { + this.entrySchema = entrySchema; + } + + public String getResourceValue() { + return resourceValue; + } + + public void setResourceValue(String resourceValue) { + this.resourceValue = resourceValue; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/domain/TransactionLog.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/domain/TransactionLog.java new file mode 100644 index 000000000..3ae6ad3da --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/domain/TransactionLog.java @@ -0,0 +1,95 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor.domain; + +import java.io.Serializable; +import java.util.Date; +import java.util.UUID; + +public class TransactionLog implements Serializable { + private static final long serialVersionUID = 1L; + + private String transactionLogId; + private String requestId; + private String messageType; + private Date creationDate; + private String message; + + public TransactionLog() { + + } + + public TransactionLog(String requestId, String messageType, String message) { + this.requestId = requestId; + this.messageType = messageType; + this.message = message; + } + + @Override + public String toString() { + StringBuilder buffer = new StringBuilder("["); + buffer.append("transactionLogId =" + transactionLogId); + buffer.append(", requestId =" + requestId); + buffer.append(", messageType =" + messageType); + buffer.append(", creationDate =" + creationDate); + buffer.append("]"); + return buffer.toString(); + } + + public String getTransactionLogId() { + return transactionLogId; + } + + public void setTransactionLogId(String transactionLogId) { + this.transactionLogId = transactionLogId; + } + + public String getRequestId() { + return requestId; + } + + public void setRequestId(String requestId) { + this.requestId = requestId; + } + + public String getMessageType() { + return messageType; + } + + public void setMessageType(String messageType) { + this.messageType = messageType; + } + + public Date getCreationDate() { + return creationDate; + } + + public void setCreationDate(Date creationDate) { + this.creationDate = creationDate; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getUniqueId() { + return UUID.randomUUID().toString(); + } + +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/service/ConfigResourceNode.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/service/ConfigResourceNode.java new file mode 100644 index 000000000..e8f581799 --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/service/ConfigResourceNode.java @@ -0,0 +1,58 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor.service; + +import java.util.Map; +import org.apache.commons.lang3.StringUtils; +import org.onap.ccsdk.config.data.adaptor.DataAdaptorConstants; +import org.onap.ccsdk.config.data.adaptor.domain.TransactionLog; +import org.onap.ccsdk.sli.core.sli.SvcLogicContext; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin; + +public class ConfigResourceNode implements SvcLogicJavaPlugin { + + private ConfigResourceService configResourceService; + + public ConfigResourceNode(ConfigResourceService configResourceService) { + this.configResourceService = configResourceService; + } + + public void saveConfigTransactionLog(Map inParams, SvcLogicContext ctx) throws SvcLogicException { + String responsePrefix = inParams.get(DataAdaptorConstants.INPUT_PARAM_RESPONSE_PRIFIX); + try { + responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix + ".") : ""; + + String messageType = inParams.get(DataAdaptorConstants.INPUT_PARAM_MESSAGE_TYPE); + String message = inParams.get(DataAdaptorConstants.INPUT_PARAM_MESSAGE); + String requestId = ctx.getAttribute("request-id"); + + TransactionLog transactionLog = new TransactionLog(); + + transactionLog.setMessage(message); + transactionLog.setMessageType(messageType); + transactionLog.setRequestId(requestId); + + configResourceService.save(transactionLog); + + } catch (Exception e) { + ctx.setAttribute(responsePrefix + DataAdaptorConstants.OUTPUT_PARAM_STATUS, + DataAdaptorConstants.OUTPUT_STATUS_FAILURE); + ctx.setAttribute(responsePrefix + DataAdaptorConstants.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage()); + throw new SvcLogicException("Failed in saveConfigTransactionLog :" + e.getMessage()); + } + } + +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/service/ConfigResourceService.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/service/ConfigResourceService.java new file mode 100644 index 000000000..f2b3fa787 --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/service/ConfigResourceService.java @@ -0,0 +1,149 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor.service; + +import java.util.List; +import java.util.Map; +import org.onap.ccsdk.config.data.adaptor.domain.ConfigResource; +import org.onap.ccsdk.config.data.adaptor.domain.TransactionLog; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; + +public interface ConfigResourceService { + + /** + * Return NamedParameterJdbcTemplate object. + */ + public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() throws SvcLogicException; + + /** + * Query given SQL to create a prepared statement from SQL and a list of arguments to bind to the + * query, expecting a result list. + *

+ * The results will be mapped to a List (one entry for each row) of Maps (one entry for each column, + * using the column name as the key). + * + * @param sql SQL query to execute + * @param param map of parameters to bind to the query (leaving it to the PreparedStatement to guess + * the corresponding SQL type) + * @return a List that contains a Map per row + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if the query fails + */ + public List> query(String sql, Map param) throws SvcLogicException; + + /** + * Issue an update via a prepared statement, binding the given arguments. + * + * @param sql SQL containing named parameters + * @param param map of parameters to bind to the query (leaving it to the PreparedStatement to guess + * the corresponding SQL type) + * @return the number of rows affected + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if there is any problem issuing the update + */ + public int update(String sql, Map param) throws SvcLogicException; + + /** + * Query given SQL to create a prepared statement from SQL and a list of arguments to bind to the + * query, expecting a result list. + *

+ * The results will be mapped to a List (one entry for each row) of Maps (one entry for each column, + * using the column name as the key). + * + * @param sql SQL query to execute + * @param data arguments to bind to the query (leaving it to the PreparedStatement to guess the + * corresponding SQL type) + * @return a List that contains a Map per row + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if the query fails + */ + public List> query(String sql, Object[] data) throws SvcLogicException; + + /** + * Issue a single SQL update operation (such as an insert, update or delete statement) via a + * prepared statement, binding the given arguments. + * + * @param sql SQL containing bind parameters + * @param data arguments to bind to the query (leaving it to the PreparedStatement to guess the + * corresponding SQL type) + * @return the number of rows affected + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if there is any problem issuing the update + */ + public int update(String sql, Object[] data) throws SvcLogicException; + + /** + * Issue a single SQL Insert operation for CONFIG_TRANSACTION_LOG table via a prepared statement, + * binding the given arguments. + * + * @param transactionLog arguments to bind to the query (mapping it to the PreparedStatement to the + * corresponding SQL type) + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if there is any problem issuing the insert + */ + public void save(TransactionLog transactionLog) throws SvcLogicException; + + /** + * Query CONFIG_TRANSACTION_LOG table for given request_id, mapping each row to a Java object via a + * TransactionLog RowMapper. + * + * @param requestId argument to bind to the query (leaving it to the PreparedStatement to guess the + * corresponding SQL type) + * @return the result List, containing mapped objects + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if the query fails + */ + public List getTransactionsByRequestId(String requestId) throws SvcLogicException; + + /** + * Query CONFIG_RESOURCE table for given input param to create a prepared statement to bind to the + * query, mapping each row to a Java object via a ConfigResource RowMapper. + * + * @param configResource argument to bind to the query (mapping it to the PreparedStatement to the + * corresponding SQL type) + * @return the result List, containing mapped objects + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if the query fails + */ + public List getConfigResource(ConfigResource configResource) throws SvcLogicException; + + /** + * Issue a single SQL update operation (insert or update statement) for CONFIG_RESOURCE table via a + * prepared statement, binding the given arguments. + * + * @param configResource arguments to bind to the query (mapping it to the PreparedStatement to the + * corresponding SQL type) + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if there is any problem issuing the insert + */ + public ConfigResource saveConfigResource(ConfigResource configResource) throws SvcLogicException; + + /** + * Query ConcurrentHashMap having CONFIG_PROPERTY_MAP table data for given key. + * + * @param key key mapped to a value + * @return the result string, containing mapped string value + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if fails + */ + public String getConfigPropertyByKey(String key) throws SvcLogicException; + + /** + * Query CONFIG_TRANSACTION_LOG table for given request_id, mapping each row to a Java object via a + * TransactionLog RowMapper. + * + * @param requestId argument to bind to the query (leaving it to the PreparedStatement to guess the + * corresponding SQL type) + * @param messageType argument to bind to the query (leaving it to the PreparedStatement to guess + * the corresponding SQL type) + * @return the result List, containing mapped objects + * @throws org.onap.ccsdk.sli.core.sli.SvcLogicException if the query fails + */ + public List getTransactionsByRequestId(String requestId, String messageType) + throws SvcLogicException; + +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/service/ConfigResourceServiceImpl.java b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/service/ConfigResourceServiceImpl.java new file mode 100644 index 000000000..77fbbe1ab --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/java/org/onap/ccsdk/config/data/adaptor/service/ConfigResourceServiceImpl.java @@ -0,0 +1,110 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.onap.ccsdk.config.data.adaptor.service; + +import java.util.List; +import java.util.Map; +import org.onap.ccsdk.config.data.adaptor.dao.ConfigPropertyMapDao; +import org.onap.ccsdk.config.data.adaptor.dao.ConfigResourceDao; +import org.onap.ccsdk.config.data.adaptor.dao.NamedQueryExecutorDao; +import org.onap.ccsdk.config.data.adaptor.dao.QueryExecutorDao; +import org.onap.ccsdk.config.data.adaptor.dao.TransactionLogDao; +import org.onap.ccsdk.config.data.adaptor.domain.ConfigResource; +import org.onap.ccsdk.config.data.adaptor.domain.TransactionLog; +import org.onap.ccsdk.sli.core.sli.SvcLogicException; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; + +public class ConfigResourceServiceImpl implements ConfigResourceService { + private static EELFLogger logger = EELFManager.getInstance().getLogger(ConfigResourceServiceImpl.class); + private static final String CLASS_NAME = "ConfigResourceServiceImpl"; + + private TransactionLogDao transactionLogDao; + private ConfigResourceDao configResourceDao; + private QueryExecutorDao queryExecutorDao; + private NamedQueryExecutorDao namedQueryExecutorDao; + private ConfigPropertyMapDao configPropertyMapDao; + + @SuppressWarnings("squid:S00107") + public ConfigResourceServiceImpl(TransactionLogDao transactionLogDao, ConfigResourceDao configResourceDao, + QueryExecutorDao queryExecutorDao, NamedQueryExecutorDao namedQueryExecutorDao, + ConfigPropertyMapDao configPropertyMapDao) { + + logger.info("{} Constuctor Initated...", CLASS_NAME); + this.transactionLogDao = transactionLogDao; + this.configResourceDao = configResourceDao; + this.queryExecutorDao = queryExecutorDao; + this.namedQueryExecutorDao = namedQueryExecutorDao; + this.configPropertyMapDao = configPropertyMapDao; + } + + @Override + public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() throws SvcLogicException { + return namedQueryExecutorDao.getNamedParameterJdbcTemplate(); + } + + @Override + public List> query(String sql, Map parameters) throws SvcLogicException { + return namedQueryExecutorDao.query(sql, parameters); + } + + @Override + public int update(String sql, Map parameters) throws SvcLogicException { + return namedQueryExecutorDao.update(sql, parameters); + } + + @Override + public List> query(String sql, Object[] data) throws SvcLogicException { + return queryExecutorDao.query(sql, data); + } + + @Override + public int update(String sql, Object[] data) throws SvcLogicException { + return queryExecutorDao.update(sql, data); + } + + @Override + public void save(TransactionLog transactionLog) throws SvcLogicException { + transactionLogDao.save(transactionLog); + } + + @Override + public List getTransactionsByRequestId(String requestId) throws SvcLogicException { + return transactionLogDao.getTransactionsByRequestId(requestId); + } + + @Override + public List getTransactionsByRequestId(String requestId, String messageType) + throws SvcLogicException { + return transactionLogDao.getTransactionsByRequestId(requestId, messageType); + } + + @Override + public List getConfigResource(ConfigResource configResource) throws SvcLogicException { + return configResourceDao.findByConfigResource(configResource); + } + + @Override + public ConfigResource saveConfigResource(ConfigResource configResource) throws SvcLogicException { + return configResourceDao.save(configResource); + } + + @Override + public String getConfigPropertyByKey(String key) throws SvcLogicException { + return configPropertyMapDao.getConfigPropertyByKey(key); + } + +} diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml b/blueprints-processor/adaptors/data-adaptor-provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml new file mode 100644 index 000000000..445f623d8 --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blueprints-processor/adaptors/data-adaptor-provider/src/main/resources/sql/001_init_ddl.sql b/blueprints-processor/adaptors/data-adaptor-provider/src/main/resources/sql/001_init_ddl.sql new file mode 100644 index 000000000..593f347de --- /dev/null +++ b/blueprints-processor/adaptors/data-adaptor-provider/src/main/resources/sql/001_init_ddl.sql @@ -0,0 +1,106 @@ +-- ----------------------------------------------------- +-- Dropping tables ( One time ) +-- ----------------------------------------------------- + +DROP TABLE sdnctl.CONFIG_RESOURCE_ASSIGNMENT_DATA; +DROP TABLE sdnctl.CONFIG_RESOURCE; +DROP TABLE sdnctl.CONFIG_RESOURCE_RELATION; +DROP TABLE sdnctl.CONFIG_TRANSACTION_LOG +DROP TABLE sdnctl.CONFIG_PROPERTY_MAP + + +-- ----------------------------------------------------- +-- table sdnctl.CONFIG_TRANSACTION_LOG +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS sdnctl.CONFIG_TRANSACTION_LOG ( + config_transaction_log_id VARCHAR(50) NOT NULL, + request_id VARCHAR(50) NULL DEFAULT NULL, + message_type VARCHAR(100) NULL DEFAULT NULL, + creation_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + message LONGTEXT NULL DEFAULT NULL, + PRIMARY KEY PK_CONFIG_TRANSACTION_LOG (config_transaction_log_id) + ) ENGINE=InnoDB DEFAULT CHARSET=latin1; + + +-- ----------------------------------------------------- +-- table sdnctl.CONFIG_RESOURCE +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS sdnctl.CONFIG_RESOURCE ( + config_resource_id VARCHAR(50) NOT NULL, + resource_id VARCHAR(50) NOT NULL, + resource_type VARCHAR(50) NOT NULL, + service_template_name VARCHAR(50) NULL DEFAULT NULL, + service_template_version VARCHAR(50) NULL DEFAULT NULL, + template_name VARCHAR(50) NOT NULL, + recipe_name VARCHAR(50) NOT NULL, + request_id VARCHAR(50) NOT NULL, + resource_data LONGTEXT NULL DEFAULT NULL, + mask_data LONGTEXT NULL DEFAULT NULL, + created_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + status VARCHAR(20) NOT NULL, + updated_by VARCHAR(50) NOT NULL, + PRIMARY KEY PK_CONFIG_RESOURCE (config_resource_id), + INDEX IX_CONFIG_RESOURCE (created_date desc) + ) ENGINE=InnoDB DEFAULT CHARSET=latin1; + + +-- ----------------------------------------------------- +-- table sdnctl.CONFIG_RESOURCE_RELATION +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS sdnctl.CONFIG_RESOURCE_RELATION ( + config_resource_relation_id VARCHAR(50) NOT NULL, + resource_id VARCHAR(50) NOT NULL, + related_resource_id VARCHAR(50) NOT NULL, + relation_type VARCHAR(50) NOT NULL DEFAULT 'children', + created_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_by VARCHAR(50) NOT NULL, + PRIMARY KEY PK_CONFIG_RESOURCE_RELATION (config_resource_relation_id), + INDEX IX_CONFIG_RESOURCE_RELATION (created_date desc), + CONSTRAINT FK_CONFIG_RESOURCE_RELATION_TO_CONFIG_RESOURCE1 + FOREIGN KEY (resource_id) + REFERENCES sdnctl.CONFIG_RESOURCE (config_resource_id) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT FK_CONFIG_RESOURCE_RELATION_TO_CONFIG_RESOURCE2 + FOREIGN KEY (related_resource_id) + REFERENCES sdnctl.CONFIG_RESOURCE (config_resource_id) + ON DELETE NO ACTION + ON UPDATE NO ACTION + ) ENGINE=InnoDB DEFAULT CHARSET=latin1; + + +-- ----------------------------------------------------- +-- table sdnctl.CONFIG_RESOURCE_ASSIGNMENT_DATA +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS sdnctl.CONFIG_RESOURCE_ASSIGNMENT_DATA ( + config_resource_assignment_data_id VARCHAR(50) NOT NULL, + config_resource_id VARCHAR(50) NOT NULL, + version INT(11) NOT NULL, + updated_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_by VARCHAR(50) NOT NULL, + template_key_name VARCHAR(50) NOT NULL, + resource_name VARCHAR(50) NOT NULL, + data_type VARCHAR(100) NOT NULL, + entry_schema VARCHAR(100) NULL DEFAULT NULL, + resource_value LONGTEXT NOT NULL, + source VARCHAR(50) NOT NULL, + status VARCHAR(50) NOT NULL, + message LONGTEXT NOT NULL, + PRIMARY KEY PK_CONFIG_RESOURCE (config_resource_assignment_data_id), + INDEX IX_CONFIG_RESOURCE (updated_date desc), + CONSTRAINT FK_CONFIG_RESOURCE_ASSIGNMENT_DATA + FOREIGN KEY (config_resource_id) + REFERENCES sdnctl.CONFIG_RESOURCE (config_resource_id) + ON DELETE NO ACTION + ON UPDATE NO ACTION + ) ENGINE=InnoDB DEFAULT CHARSET=latin1; + + +-- ----------------------------------------------------- +-- table sdnctl.CONFIG_PROPERTY_MAP +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS sdnctl.CONFIG_PROPERTY_MAP ( + reference_key VARCHAR(100) NOT NULL, + reference_value VARCHAR(250) NOT NULL, + CONSTRAINT PK_CONFIG_PROPERTY_MAP PRIMARY KEY (reference_key) + ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- cgit 1.2.3-korg