Initial commit for appc-data-services bundle

This bundle contains the generic execute nodes that
interact with the database.

Issue-ID: APPC-58
Change-Id: Ib1447443ed259f4133cd33d554a5ac43f2c3dd1b
Signed-off-by: Skip Wonnell <kw5258@att.com>
diff --git a/appc-config/appc-data-services/.gitignore b/appc-config/appc-data-services/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/appc-config/appc-data-services/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/appc-config/appc-data-services/features/.gitignore b/appc-config/appc-data-services/features/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/appc-config/appc-data-services/features/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/appc-config/appc-data-services/features/pom.xml b/appc-config/appc-data-services/features/pom.xml
new file mode 100644
index 0000000..ca74c67
--- /dev/null
+++ b/appc-config/appc-data-services/features/pom.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<artifactId>appc-config-data-services</artifactId>
+		<groupId>org.openecomp.appc</groupId>
+		<version>1.1.0-SNAPSHOT</version>
+	</parent>
+	<artifactId>appc-config-data-services-features</artifactId>
+	<name>APPC Data Services Plugin - Features</name>
+
+	<packaging>jar</packaging>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.openecomp.appc</groupId>
+			<artifactId>appc-config-data-services-provider</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-lang</groupId>
+			<artifactId>commons-lang</artifactId>
+			<version>2.6</version>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.opendaylight.mdsal</groupId>
+			<artifactId>features-mdsal</artifactId>
+			<version>${odl.mdsal.version}</version>
+			<classifier>features</classifier>
+			<type>xml</type>
+
+			<scope>runtime</scope>
+		</dependency>
+
+
+		<!-- dependency for opendaylight-karaf-empty for use by testing -->
+		<dependency>
+			<groupId>org.opendaylight.controller</groupId>
+			<artifactId>opendaylight-karaf-empty</artifactId>
+			<version>${odl.karaf.empty.distro.version}</version>
+			<type>zip</type>
+		</dependency>
+
+
+		<dependency>
+			<!-- Required for launching the feature tests -->
+			<groupId>org.opendaylight.odlparent</groupId>
+			<artifactId>features-test</artifactId>
+			<version>${odl.commons.opendaylight.version}</version>
+			<scope>test</scope>
+		</dependency>
+
+	</dependencies>
+
+	<build>
+		<resources>
+			<resource>
+				<filtering>true</filtering>
+				<directory>src/main/resources</directory>
+			</resource>
+		</resources>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-resources-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>filter</id>
+						<goals>
+							<goal>resources</goal>
+						</goals>
+						<phase>generate-resources</phase>
+					</execution>
+				</executions>
+			</plugin>
+			<!-- launches the feature test, which validates that your karaf feature 
+				can be installed inside of a karaf container. It doesn't validate that your 
+				functionality works correctly, just that you have all of the dependent bundles 
+				defined correctly. <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> 
+				<version>2.16</version> <configuration> <systemPropertyVariables> <karaf.distro.groupId>org.opendaylight.controller</karaf.distro.groupId> 
+				<karaf.distro.artifactId>opendaylight-karaf-empty</karaf.distro.artifactId> 
+				<karaf.distro.version>${odl.karaf.empty.distro.version}</karaf.distro.version> 
+				</systemPropertyVariables> <dependenciesToScan> <dependency>org.opendaylight.yangtools:features-test</dependency> 
+				</dependenciesToScan> </configuration> </plugin> -->
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>build-helper-maven-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>attach-artifacts</id>
+						<goals>
+							<goal>attach-artifact</goal>
+						</goals>
+						<phase>package</phase>
+						<configuration>
+							<artifacts>
+								<artifact>
+									<file>${project.build.directory}/classes/${features.file}</file>
+									<type>xml</type>
+									<classifier>features</classifier>
+								</artifact>
+							</artifacts>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+</project>
diff --git a/appc-config/appc-data-services/features/src/main/resources/features.xml b/appc-config/appc-data-services/features/src/main/resources/features.xml
new file mode 100644
index 0000000..296a509
--- /dev/null
+++ b/appc-config/appc-data-services/features/src/main/resources/features.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ============LICENSE_START=======================================================
+  ONAP : APP-C
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
+  ================================================================================
+  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.
+  ============LICENSE_END=========================================================
+  -->
+
+
+<features name="appc-config-data-services-${project.version}"
+	xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
+
+	<repository>mvn:org.opendaylight.mdsal/features-mdsal/${odl.mdsal.version}/xml/features</repository>
+
+	<feature name='appc-config-data-services' description="Application Controller Config Data Service"
+		version='${project.version}'>
+		<!-- Most applications will have a dependency on the ODL MD-SAL Broker -->
+		<feature version="${broker-mdsal.version}">odl-mdsal-broker</feature>
+		
+		<feature version="${sdnc.dblib.version}">sdnc-dblib</feature>
+		<feature version="${sdnc.sli.version}">sdnc-sli</feature>
+		<feature version="${openecomp.sdnc.sql-resource.version}">sdnc-sql-resource</feature>
+		
+		<bundle>mvn:commons-lang/commons-lang/2.6</bundle>
+		
+		<bundle>mvn:commons-collections/commons-collections/3.2.1</bundle>
+
+		<bundle>wrap:mvn:com.att.eelf/eelf-core/${eelf.version}</bundle>
+		<bundle>mvn:ch.qos.logback/logback-core/${logback.version}</bundle>
+		<bundle>mvn:ch.qos.logback/logback-classic/${logback.version}</bundle>
+		<bundle>mvn:org.openecomp.appc/appc-data-services-provider/${project.version}</bundle>
+	</feature>
+</features>
diff --git a/appc-config/appc-data-services/installer/pom.xml b/appc-config/appc-data-services/installer/pom.xml
new file mode 100644
index 0000000..eaed61a
--- /dev/null
+++ b/appc-config/appc-data-services/installer/pom.xml
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ============LICENSE_START=======================================================
+  APPC
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+  Copyright (C) 2017 Amdocs
+  ================================================================================
+  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.
+  ============LICENSE_END=========================================================
+  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.openecomp.appc</groupId>
+        <artifactId>appc-config-data-services</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>appc-config-data-services-installer</artifactId>
+    <name>Config Component Data Services - Installer</name>
+    <packaging>pom</packaging>
+    <properties>
+        <application.name>appc-config-data-services</application.name>
+        <features.boot>appc-config-data-services</features.boot>
+        <features.repositories>mvn:org.openecomp.appc/appc-config-data-services-features/${project.version}/xml/features</features.repositories>
+        <include.transitive.dependencies>false</include.transitive.dependencies>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.openecomp.appc</groupId>
+            <artifactId>appc-config-data-services-features</artifactId>
+            <classifier>features</classifier>
+            <type>xml</type>
+            <exclusions>
+                <exclusion>
+                    <groupId>*</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.appc</groupId>
+            <artifactId>appc-config-data-services-provider</artifactId>
+            <version>1.1.0-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>maven-repo-zip</id>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                        <phase>package</phase>
+                        <configuration>
+                        	<appendAssemblyId>false</appendAssemblyId>
+                            <attach>false</attach>
+                            <finalName>stage/${application.name}-${project.version}</finalName>
+                            <descriptors>
+                                <descriptor>src/assembly/assemble_mvnrepo_zip.xml</descriptor>
+                            </descriptors>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>installer-zip</id>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                        <phase>package</phase>
+                        <configuration>
+                        	<appendAssemblyId>false</appendAssemblyId>
+                            <attach>true</attach>
+                            <finalName>${application.name}-${project.version}</finalName>
+                            <descriptors>
+                                <descriptor>src/assembly/assemble_installer_zip.xml</descriptor>
+                            </descriptors>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-dependencies</id>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <phase>prepare-package</phase>
+                        <configuration>
+                            <transitive>false</transitive>
+                            <outputDirectory>${project.build.directory}/assembly/system</outputDirectory>
+                            <overWriteReleases>false</overWriteReleases>
+                            <overWriteSnapshots>true</overWriteSnapshots>
+                            <overWriteIfNewer>true</overWriteIfNewer>
+                            <useRepositoryLayout>true</useRepositoryLayout>
+                            <addParentPoms>false</addParentPoms>
+                            <copyPom>false</copyPom>
+                            <excludeGroupIds>org.opendaylight</excludeGroupIds>
+                            <scope>provided</scope>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-version</id>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <!-- here the phase you need -->
+                        <phase>validate</phase>
+                        <configuration>
+                            <outputDirectory>${basedir}/target/stage</outputDirectory>
+                            <resources>
+                                <resource>
+                                    <directory>src/main/resources/scripts</directory>
+                                    <includes>
+                                        <include>install-feature.sh</include>
+                                    </includes>
+                                    <filtering>true</filtering>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/appc-config/appc-data-services/installer/src/assembly/assemble_installer_zip.xml b/appc-config/appc-data-services/installer/src/assembly/assemble_installer_zip.xml
new file mode 100644
index 0000000..8769cdb
--- /dev/null
+++ b/appc-config/appc-data-services/installer/src/assembly/assemble_installer_zip.xml
@@ -0,0 +1,59 @@
+<!--
+  ============LICENSE_START=======================================================
+  ONAP : APP-C
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
+  ================================================================================
+  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.
+  ============LICENSE_END=========================================================
+  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+  -->
+
+<!-- Defines how we build the .zip file which is our distribution. -->
+
+<assembly
+	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+	<id>data-services</id>
+	<formats>
+		<format>zip</format>
+	</formats>
+
+	<!--  we want "system" and related files right at the root level
+		  as this file is suppose to be unzip on top of a karaf
+		  distro. -->
+	<includeBaseDirectory>false</includeBaseDirectory>
+
+	<fileSets>
+		<fileSet>
+			<directory>target/stage/</directory>
+			<outputDirectory>${application.name}</outputDirectory>
+			<fileMode>755</fileMode>
+			<includes>
+				<include>*.sh</include>
+			</includes>
+		</fileSet>
+		<fileSet>
+			<directory>target/stage/</directory>
+			<outputDirectory>${application.name}</outputDirectory>
+			<fileMode>644</fileMode>
+			<excludes>
+				<exclude>*.sh</exclude>
+			</excludes>
+		</fileSet>
+	</fileSets>
+
+
+
+</assembly>
diff --git a/appc-config/appc-data-services/installer/src/assembly/assemble_mvnrepo_zip.xml b/appc-config/appc-data-services/installer/src/assembly/assemble_mvnrepo_zip.xml
new file mode 100644
index 0000000..afc6ce3
--- /dev/null
+++ b/appc-config/appc-data-services/installer/src/assembly/assemble_mvnrepo_zip.xml
@@ -0,0 +1,47 @@
+<!--
+  ============LICENSE_START=======================================================
+  ONAP : APP-C
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
+  ================================================================================
+  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.
+  ============LICENSE_END=========================================================
+  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+  -->
+
+<!-- Defines how we build the .zip file which is our distribution. -->
+
+<assembly
+	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+	<id>data-services</id>
+	<formats>
+		<format>zip</format>
+	</formats>
+
+	<!--  we want "system" and related files right at the root level
+		  as this file is suppose to be unzip on top of a karaf
+		  distro. -->
+	<includeBaseDirectory>false</includeBaseDirectory>
+
+	<fileSets>
+		<fileSet>
+			<directory>target/assembly/</directory>
+			<outputDirectory>.</outputDirectory>
+			<excludes>
+			</excludes>
+		</fileSet>
+	</fileSets>
+
+</assembly>
diff --git a/appc-config/appc-data-services/installer/src/main/resources/scripts/install-feature.sh b/appc-config/appc-data-services/installer/src/main/resources/scripts/install-feature.sh
new file mode 100644
index 0000000..d3d2ea6
--- /dev/null
+++ b/appc-config/appc-data-services/installer/src/main/resources/scripts/install-feature.sh
@@ -0,0 +1,40 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : APP-C
+# ================================================================================
+# Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
+# ================================================================================
+# 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.
+# ============LICENSE_END=========================================================
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+###
+
+#!/bin/bash
+
+ODL_HOME=${ODL_HOME:-/opt/opendaylight/current}
+ODL_KARAF_CLIENT=${ODL_KARAF_CLIENT:-${ODL_HOME}/bin/client}
+ODL_KARAF_CLIENT_OPTS=${ODL_KARAF_CLIENT_OPTS:-"-u karaf"}
+INSTALLERDIR=$(dirname $0)
+
+REPOZIP=${INSTALLERDIR}/${features.boot}-${project.version}.zip
+
+if [ -f ${REPOZIP} ]
+then
+	unzip -n -d ${ODL_HOME} ${REPOZIP}
+else
+	echo "ERROR : repo zip ($REPOZIP) not found"
+	exit 1
+fi
+
+${ODL_KARAF_CLIENT} ${ODL_KARAF_CLIENT_OPTS} feature:repo-add ${features.repositories}
+${ODL_KARAF_CLIENT} ${ODL_KARAF_CLIENT_OPTS} feature:install ${features.boot}
diff --git a/appc-config/appc-data-services/pom.xml b/appc-config/appc-data-services/pom.xml
new file mode 100644
index 0000000..bca3ad0
--- /dev/null
+++ b/appc-config/appc-data-services/pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<parent>
+		<groupId>org.openecomp.appc</groupId>
+		<artifactId>appc-config</artifactId>
+		<version>1.1.0-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<packaging>pom</packaging>
+	<artifactId>appc-config-data-services</artifactId>
+
+	<name>APPC Data Services for Node</name>
+	<description>Common Utilities for DG</description>
+	
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>		
+	</properties>
+
+	<dependencyManagement>
+		<dependencies>
+			<dependency>
+				<groupId>org.openecomp.appc</groupId>
+				<artifactId>appc-config-data-services-features</artifactId>
+				<classifier>features</classifier>
+				<type>xml</type>
+				<version>${project.version}</version>
+			</dependency>
+
+			<dependency>
+				<groupId>org.openecomp.appc</groupId>
+				<artifactId>appc-config-data-services-provider</artifactId>
+				<version>${project.version}</version>
+			</dependency>
+		</dependencies>
+
+
+	</dependencyManagement>
+
+
+	<modules>
+		<module>provider</module>
+		<module>features</module>
+		<module>installer</module>
+	</modules>
+
+</project>
diff --git a/appc-config/appc-data-services/provider/.gitignore b/appc-config/appc-data-services/provider/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/appc-config/appc-data-services/provider/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/appc-config/appc-data-services/provider/pom.xml b/appc-config/appc-data-services/provider/pom.xml
new file mode 100644
index 0000000..9de2e7b
--- /dev/null
+++ b/appc-config/appc-data-services/provider/pom.xml
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.openecomp.appc</groupId>
+		<artifactId>appc-config-data-services</artifactId>
+		<version>1.1.0-SNAPSHOT</version>
+	</parent>
+	<artifactId>appc-config-data-services-provider</artifactId>
+	<packaging>bundle</packaging>
+	<name>APPC Data Services - Provider</name>
+	<url>http://maven.apache.org</url>
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+	<dependencies>
+		<dependency>
+			<groupId>equinoxSDK381</groupId>
+			<artifactId>org.eclipse.osgi</artifactId>
+			<version>${equinox.osgi.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.openecomp.sdnc.core</groupId>
+			<artifactId>sli-provider</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.openecomp.sdnc.adaptors</groupId>
+			<artifactId>sql-resource-provider</artifactId>
+			<version>${openecomp.sdnc.sql-resource.version}</version>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>com.att.eelf</groupId>
+			<artifactId>eelf-core</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-databind</artifactId>
+		</dependency>
+
+	</dependencies>
+	<build>
+		<plugins>
+			<plugin>
+				<artifactId>maven-resources-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>copy-xsl</id>
+						<goals>
+							<goal>copy-resources</goal>
+						</goals>
+						<phase>validate</phase>
+						<configuration>
+							<outputDirectory>${basedir}/target/templates/xslt/sbg</outputDirectory>
+							<resources>
+								<resource>
+									<directory>src/main/resources/xsl</directory>
+									<includes>
+										<include>*</include>
+									</includes>
+									<filtering>true</filtering>
+								</resource>
+							</resources>
+						</configuration>
+					</execution>
+					<execution>
+						<id>copy-properties</id>
+						<goals>
+							<goal>copy-resources</goal>
+						</goals>
+						<phase>validate</phase>
+						<configuration>
+							<outputDirectory>${basedir}/target/properties/</outputDirectory>
+							<resources>
+								<resource>
+									<directory>src/main/resources</directory>
+									<includes>
+										<include>*.properties</include>
+									</includes>
+									<filtering>true</filtering>
+								</resource>
+							</resources>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-bundle-plugin</artifactId>
+				<version>${bundle.plugin.version}</version>
+				<extensions>true</extensions>
+				<configuration>
+					<instructions>
+						<Bundle-SymbolicName>appc-config-data-services</Bundle-SymbolicName>
+						<Bundle-Activator>org.openecomp.appc.config.data.services.AppcDataServiceActivator</Bundle-Activator>
+						<Export-Package>org.openecomp.appc.data.services</Export-Package>
+						<Import-Package>*</Import-Package>
+						<DynamicImport-Package>*</DynamicImport-Package>
+					</instructions>
+					<manifestLocation>${project.basedir}/src/main/resources/META-INF</manifestLocation>
+				</configuration>
+			</plugin>
+		</plugins>
+		<pluginManagement>
+			<plugins>
+				<!--This plugin's configuration is used to store Eclipse m2e settings 
+					only. It has no influence on the Maven build itself. -->
+				<plugin>
+					<groupId>org.eclipse.m2e</groupId>
+					<artifactId>lifecycle-mapping</artifactId>
+					<version>1.0.0</version>
+					<configuration>
+						<lifecycleMappingMetadata>
+							<pluginExecutions>
+								<pluginExecution>
+									<pluginExecutionFilter>
+										<groupId>
+											com.brocade.developer
+										</groupId>
+										<artifactId>
+											providermodule-plugin
+										</artifactId>
+										<versionRange>
+											[1.2.0.100-SNAPSHOT,)
+										</versionRange>
+										<goals>
+											<goal>process</goal>
+										</goals>
+									</pluginExecutionFilter>
+									<action>
+										<ignore />
+									</action>
+								</pluginExecution>
+							</pluginExecutions>
+						</lifecycleMappingMetadata>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+	</build>
+</project>
diff --git a/appc-config/appc-data-services/provider/src/main/java/org/openecomp/appc/data/services/AppcDataServiceActivator.java b/appc-config/appc-data-services/provider/src/main/java/org/openecomp/appc/data/services/AppcDataServiceActivator.java
new file mode 100644
index 0000000..0ccc2b7
--- /dev/null
+++ b/appc-config/appc-data-services/provider/src/main/java/org/openecomp/appc/data/services/AppcDataServiceActivator.java
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.data.services;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Properties;
+
+import org.openecomp.appc.data.services.node.ConfigResourceNode;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+public class AppcDataServiceActivator implements BundleActivator {
+
+	private static final EELFLogger log = EELFManager.getInstance().getLogger(AppcDataServiceActivator.class);
+	private List<ServiceRegistration> registrations = new LinkedList<ServiceRegistration>();
+	
+	@Override
+	public void start(BundleContext ctx) throws Exception {
+		
+		ConfigResourceNode configResourceNode = new ConfigResourceNode();
+		log.info("Registering service-- " + configResourceNode.getClass().getName());
+		registrations.add(ctx.registerService(configResourceNode.getClass().getName(), configResourceNode, null));
+
+		
+		
+		
+	}
+
+	@Override
+	public void stop(BundleContext arg0) throws Exception {
+		for (ServiceRegistration registration : registrations) {
+			registration.unregister();
+			registration = null;
+		}
+	}
+}
diff --git a/appc-config/appc-data-services/provider/src/main/java/org/openecomp/appc/data/services/AppcDataServiceConstant.java b/appc-config/appc-data-services/provider/src/main/java/org/openecomp/appc/data/services/AppcDataServiceConstant.java
new file mode 100644
index 0000000..87e0f2c
--- /dev/null
+++ b/appc-config/appc-data-services/provider/src/main/java/org/openecomp/appc/data/services/AppcDataServiceConstant.java
@@ -0,0 +1,46 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.data.services;
+
+public class AppcDataServiceConstant {
+
+
+	
+
+	public static String INPUT_PARAM_RESPONSE_PREFIX = "responsePrefix";
+	public static String OUTPUT_STATUS_SUCCESS = "success";
+	public static String OUTPUT_STATUS_FAILURE = "failure";
+	public static final String INPUT_PARAM_MESSAGE = "message";
+	public static final String INPUT_PARAM_MESSAGE_TYPE = "messageType";
+	public static String OUTPUT_PARAM_STATUS = "status";
+	public static 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 String INPUT_PARAM_FILE_ID = "fileId";
+	
+	public static String INPUT_PARAM_UPLOAD_CONFIG_ID= "uploadConfigId";
+	
+	
+}
diff --git a/appc-config/appc-data-services/provider/src/main/java/org/openecomp/appc/data/services/db/DGGeneralDBService.java b/appc-config/appc-data-services/provider/src/main/java/org/openecomp/appc/data/services/db/DGGeneralDBService.java
new file mode 100644
index 0000000..3ec42f6
--- /dev/null
+++ b/appc-config/appc-data-services/provider/src/main/java/org/openecomp/appc/data/services/db/DGGeneralDBService.java
@@ -0,0 +1,443 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.data.services.db;
+
+import java.util.Set;
+
+import org.apache.commons.lang3.StringUtils;
+
+import org.openecomp.sdnc.sli.SvcLogicContext;
+import org.openecomp.sdnc.sli.SvcLogicException;
+import org.openecomp.sdnc.sli.SvcLogicResource;
+import org.openecomp.sdnc.sli.SvcLogicResource.QueryStatus;
+import org.openecomp.sdnc.sli.resource.sql.SqlResource;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+public class DGGeneralDBService {
+
+	private static final EELFLogger log = EELFManager.getInstance().getLogger(DGGeneralDBService.class);
+	private SvcLogicResource serviceLogic;
+	private static DGGeneralDBService dgGeneralDBService = null;
+
+	public static DGGeneralDBService initialise() {
+		if (dgGeneralDBService == null) {
+			dgGeneralDBService = new DGGeneralDBService();
+		}
+		return dgGeneralDBService;
+	}
+
+	private DGGeneralDBService() {
+		if (serviceLogic == null) {
+			serviceLogic = new SqlResource();
+		}
+	}
+
+	public QueryStatus getDeviceProtocolByVnfType(SvcLogicContext ctx, String prefix) throws SvcLogicException {
+		QueryStatus status = null;
+		if (serviceLogic != null && ctx != null) {
+			String key = "SELECT * FROM DEVICE_INTERFACE_PROTOCOL WHERE vnf_type = $vnf-type ;";
+			status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+		}
+		return status;
+	}
+
+	public QueryStatus getDeviceAuthenticationByVnfType(SvcLogicContext ctx, String prefix) throws SvcLogicException {
+		QueryStatus status = null;
+		if (serviceLogic != null && ctx != null) {
+			String key = "SELECT * FROM DEVICE_AUTHENTICATION WHERE vnf_type = $vnf-type ;";
+			status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+
+		}
+		return status;
+	}
+
+	public QueryStatus getConfigFileReferenceByVnfType(SvcLogicContext ctx, String prefix) throws SvcLogicException {
+		QueryStatus status = null;
+		if (serviceLogic != null && ctx != null) {
+			String key = "SELECT * FROM CONFIG_FILE_REFERENCE WHERE vnf_type = $vnf-type ;";
+			status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+		}
+		return status;
+	}
+
+	public QueryStatus getConfigFileReferenceByFileTypeNVnfType(SvcLogicContext ctx, String prefix, String fileType)
+			throws SvcLogicException {
+		QueryStatus status = null;
+		if (serviceLogic != null && ctx != null) {
+			String key = "SELECT * FROM CONFIG_FILE_REFERENCE  WHERE file_type = '" + fileType
+					+ "' and vnf_type = $vnf-type ;";
+			status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+		}
+		return status;
+	}
+
+	public QueryStatus getTemplate(SvcLogicContext ctx, String prefix, String fileCategory) throws SvcLogicException {
+		QueryStatus status = null;
+		if (serviceLogic != null && ctx != null) {
+			String key = "SELECT artifact_content file_content , asdc_artifacts_id config_file_id "
+					+ " FROM ASDC_ARTIFACTS "
+					+ " WHERE asdc_artifacts_id = ( SELECT MAX(a.asdc_artifacts_id) configfileid  "
+					+ " FROM ASDC_ARTIFACTS a, ASDC_REFERENCE b " + " WHERE a.artifact_name = b.artifact_name "
+					+ " AND file_category =  '" + fileCategory + "'" + " AND action =  $request-action "
+					+ " AND vnf_type =  $vnf-type  " + " AND vnfc_type =   $vnfc-type ) ; ";
+			status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+		}
+		return status;
+	}
+
+	public QueryStatus getTemplateByVnfTypeNAction(SvcLogicContext ctx, String prefix, String fileCategory)
+			throws SvcLogicException {
+		QueryStatus status = null;
+		if (serviceLogic != null && ctx != null) {
+			String key = "SELECT artifact_content file_content , asdc_artifacts_id config_file_id "
+					+ " FROM ASDC_ARTIFACTS "
+					+ " WHERE asdc_artifacts_id = (SELECT MAX(a.asdc_artifacts_id) configfileid  "
+					+ " FROM ASDC_ARTIFACTS a, ASDC_REFERENCE b " + " WHERE a.artifact_name = b.artifact_name "
+					+ " AND file_category =  '" + fileCategory + "'" + " AND action =  $request-action "
+					+ " AND vnf_type =  $vnf-type ) ; ";
+
+			status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+		}
+		return status;
+	}
+
+	public QueryStatus getTemplateByVnfType(SvcLogicContext ctx, String prefix, String fileCategory)
+			throws SvcLogicException {
+		QueryStatus status = null;
+		if (serviceLogic != null && ctx != null) {
+			String key = "SELECT artifact_content file_content , asdc_artifacts_id config_file_id "
+					+ " FROM ASDC_ARTIFACTS "
+					+ " WHERE asdc_artifacts_id = (SELECT MAX(a.asdc_artifacts_id) configfileid  "
+					+ " FROM ASDC_ARTIFACTS a, ASDC_REFERENCE b " + " WHERE a.artifact_name = b.artifact_name "
+					+ " AND file_category =  '" + fileCategory + "'" + " AND vnf_type =  $vnf-type ) ; ";
+
+			status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+		}
+		return status;
+	}
+
+	public QueryStatus getTemplateByTemplateName(SvcLogicContext ctx, String prefix, String templateName)
+			throws SvcLogicException {
+		QueryStatus status = null;
+		if (serviceLogic != null && ctx != null) {
+			String key = "SELECT artifact_content file_content , asdc_artifacts_id config_file_id "
+					+ " FROM ASDC_ARTIFACTS "
+					+ " WHERE asdc_artifacts_id = (SELECT MAX(asdc_artifacts_id) configfileid  "
+					+ " FROM ASDC_ARTIFACTS  " + " WHERE artifact_name = '" + templateName + "' ) ; ";
+
+			status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+		}
+		return status;
+	}
+
+	public QueryStatus getConfigureActionDGByVnfTypeNAction(SvcLogicContext ctx, String prefix)
+			throws SvcLogicException {
+		QueryStatus status = null;
+		if (serviceLogic != null && ctx != null) {
+			String key = "SELECT * " + " FROM CONFIGURE_ACTION_DG "
+					+ " where vnf_type = $vnf-type and action = $request-action ; ";
+
+			status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+		}
+		return status;
+	}
+
+	public QueryStatus getConfigureActionDGByVnfType(SvcLogicContext ctx, String prefix) throws SvcLogicException {
+		QueryStatus status = null;
+		if (serviceLogic != null && ctx != null) {
+			String key = "SELECT * " + " FROM CONFIGURE_ACTION_DG "
+					+ " where vnf_type = $vnf-type and action IS NULL ; ";
+
+			status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+		}
+		return status;
+	}
+
+	public QueryStatus getMaxConfigFileId(SvcLogicContext ctx, String prefix, String fileCategory)
+			throws SvcLogicException {
+		QueryStatus status = null;
+		if (serviceLogic != null && ctx != null) {
+			String key = "SELECT MAX(config_file_id) configfileid " + " FROM CONFIGFILES " + " WHERE file_category = '"
+					+ fileCategory + "'" + " AND vnf_id =  $vnf-id  AND vm_name = $vm-name ; ";
+
+			status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+		}
+		return status;
+	}
+
+	public QueryStatus saveConfigFiles(SvcLogicContext ctx, String prefix) throws SvcLogicException {
+
+		QueryStatus status = null;
+
+		if (serviceLogic != null && ctx != null) {
+			String key = "INSERT INTO CONFIGFILES " + " SET data_source        = $data-source , "
+					+ " service_instance_id =  $service-instance-id ," + " action              =   $request-action ,"
+					+ " vnf_type            = 	$vnf-type ," + " vnfc_type           = 	$vnfc-type ,"
+					+ " vnf_id              =   $vnf-id , " + " vnf_name            =   $vnf-name ,"
+					+ " vm_name            =   $vm-name ," + " file_category 		=  $file-category ,"
+					+ " file_content        =  $file-content ; ";
+
+			status = serviceLogic.save("SQL", false, false, key, null, prefix, ctx);
+
+		}
+		return status;
+
+	}
+
+	public QueryStatus savePrepareRelationship(SvcLogicContext ctx, String prefix, String fileId, String asdcInd)
+			throws SvcLogicException {
+
+		QueryStatus status = null;
+		String key = null;
+
+		if (serviceLogic != null && ctx != null) {
+
+			if ("Y".equals(asdcInd))
+
+				key = "INSERT INTO PREPARE_FILE_RELATIONSHIP " + " SET service_instance_id =  $service-instance-id , "
+						+ "   request_id         = $request-id , " + "  asdc_artifacts_id        =  " + fileId + " ;";
+			else
+				key = "INSERT INTO PREPARE_FILE_RELATIONSHIP " + " SET service_instance_id =  $service-instance-id , "
+						+ "   request_id         = $request-id , " + "  config_file_id        =  " + fileId + " ;";
+
+			status = serviceLogic.save("SQL", false, false, key, null, prefix, ctx);
+
+			log.info("DGGeneralDBService.savePrepareRelationship()" + ctx.getAttributeKeySet());
+		}
+		return status;
+
+	}
+
+	public void cleanContextPropertyByPrefix(SvcLogicContext ctx, String prefix) {
+		if (ctx != null && ctx.getAttributeKeySet() != null && StringUtils.isNotBlank(prefix)) {
+
+			Set<String> keySet = ctx.getAttributeKeySet();
+			for (String key : keySet) {
+				if (StringUtils.isNotBlank(key) && key.startsWith(prefix = ".")) {
+					ctx.getAttributeKeySet().remove(key);
+				}
+			}
+		}
+	}
+
+	public QueryStatus saveUploadConfig(SvcLogicContext ctx, String prefix) throws SvcLogicException {
+
+		QueryStatus status = null;
+
+		if (serviceLogic != null && ctx != null) {
+			String key = "INSERT INTO UPLOAD_CONFIG " + " SET request_id = $request-id , "
+					+ " action = $request-action , " + " originator_id = $originator-id , " + " vnf_id =  $vnf-id , "
+					+ " vnf_name = $vnf-name ,  " + " vm_name =  $vm-name ,  "
+					+ " host_ip_address = $vnf-host-ip-address , " + " vnf_type            = 	$vnf-type , "
+					+ " vnfc_type           = 	$vnfc-type , " + " config_indicator 		=  'Current' , "
+					+ " content        =  $tmp.escaped.devicerunningconfig ; ";
+
+			status = serviceLogic.save("SQL", false, false, key, null, prefix, ctx);
+
+			log.info("DGGeneralDBService.saveUploadConfig()" + ctx.getAttributeKeySet());
+
+		}
+		return status;
+
+	}
+
+	/*public QueryStatus getMaxUploadConfigFileId(SvcLogicContext ctx, String prefix) throws SvcLogicException {
+		QueryStatus status = null;
+		if (serviceLogic != null && ctx != null) {
+			String key = "SELECT MAX(upload_config_id) uploadconfigid " + " FROM UPLOAD_CONFIG "
+					+ " WHERE vnf_id =  $vnf-id  AND vm_name = $vm-name ; ";
+
+			status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+			log.info("DGGeneralDBService.getMaxUploadConfigFileId()" + ctx.getAttributeKeySet());
+		}
+		return status;
+	}*/
+
+	public QueryStatus updateUploadConfig(SvcLogicContext ctx, String prefix, int maxId) throws SvcLogicException {
+		QueryStatus status = null;
+		if (serviceLogic != null && ctx != null) {
+			String key = "UPDATE UPLOAD_CONFIG " + " SET  config_indicator 		=  null "
+					+ " WHERE upload_config_id != " + maxId + " AND config_indicator 		=  'Current' "
+					+ " AND vnf_id = $vnf-id " + " AND vm_name =  $vm-name ; ";
+
+			status = serviceLogic.save("SQL", false, false, key, null, prefix, ctx);
+
+			log.info("DGGeneralDBService.updateUploadConfig()" + ctx.getAttributeKeySet());
+
+		}
+		return status;
+
+	}
+
+	
+	public QueryStatus getTemplateByArtifactType(SvcLogicContext ctx, String prefix, String fileCategory, String artifactType)
+			throws SvcLogicException {
+		QueryStatus status = null;
+		if (serviceLogic != null && ctx != null) {
+			String key = "SELECT artifact_content file_content , asdc_artifacts_id config_file_id "
+					+ " FROM ASDC_ARTIFACTS "
+					+ " WHERE asdc_artifacts_id = (SELECT MAX(a.asdc_artifacts_id) configfileid  "
+					+ " FROM ASDC_ARTIFACTS a, ASDC_REFERENCE b " + " WHERE a.artifact_name = b.artifact_name "
+					+ " AND file_category =  '" + fileCategory + "'" + " AND action =  $request-action "
+					+ " AND artifactType =  '" + artifactType + "'"	+ " AND vnf_type =  $vnf-type ) ; ";
+
+			status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+		}
+		return status;
+	}
+	
+	
+	public QueryStatus getConfigFilesByVnfVmNCategory(SvcLogicContext ctx, String prefix, String fileCategory, String vnfId, String vmName)
+			throws SvcLogicException {
+		QueryStatus status = null;
+		if (serviceLogic != null && ctx != null) {
+			
+			String key = "SELECT  file_content ,  config_file_id "
+					+ " FROM CONFIGFILES "
+					+ " WHERE config_file_id = ( SELECT MAX(config_file_id) configfileid " + " FROM CONFIGFILES " 
+					+ " WHERE file_category = '"	+ fileCategory + "'" 
+					+ " AND vnf_id =  '" + vnfId + "'" 
+					+ " AND vm_name = '" + vmName + "' ) ; ";
+			
+			
+			status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+		}
+		return status;
+	}
+	
+	
+	public QueryStatus getDownloadConfigTemplateByVnf(SvcLogicContext ctx, String prefix)
+			throws SvcLogicException {
+		QueryStatus status = null;
+		if (serviceLogic != null && ctx != null) {
+			String key = "SELECT * FROM DOWNLOAD_CONFIG_TEMPLATE  WHERE vnf_type = $vnf-type ; ";
+			status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+		}
+		return status;
+	}
+	
+	
+	
+	public QueryStatus saveConfigTransactionLog(SvcLogicContext ctx, String prefix) throws SvcLogicException {
+
+		QueryStatus status = null;
+
+		if (serviceLogic != null && ctx != null) {
+				
+		
+				String key = "INSERT INTO CONFIG_TRANSACTION_LOG " + " SET request_id = $request-id , "
+				+ " message_type = $log-message-type , "
+				+ " message = $log-message ;";
+
+
+				status = serviceLogic.save("SQL", false, false, key, null, prefix, ctx);
+
+		
+
+		}
+		return status;
+
+	}
+
+	
+	public QueryStatus getVnfcReferenceByVnfcTypeNAction(SvcLogicContext ctx, String prefix)
+			throws SvcLogicException {
+		QueryStatus status = null;
+		if (serviceLogic != null && ctx != null) {
+			
+			String key = "SELECT  * "
+					+ " FROM VNFC_REFERENCE "
+					+ " WHERE vnf_type =  $vnf-type " 
+					+ " AND vnfc_type = $vnfc-type "
+					+ " AND action =  $request-action "
+					+ " ORDER BY vm_instance, vnfc_instance ; ";
+			
+			
+			status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+		}
+		return status;
+	}
+
+	
+	public QueryStatus getVnfcReferenceByVnfTypeNAction(SvcLogicContext ctx, String prefix)
+			throws SvcLogicException {
+		QueryStatus status = null;
+		if (serviceLogic != null && ctx != null) {
+			
+			String key = "SELECT  * "
+					+ " FROM VNFC_REFERENCE "
+					+ " WHERE vnf_type =  $vnf-type " 
+					+ " AND action =  $request-action   "
+					+ " ORDER BY vm_instance, vnfc_instance ; ";
+			
+			status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+		}
+		return status;
+	}
+	
+	
+	public QueryStatus getUploadConfigInfo(SvcLogicContext ctx, String prefix)
+			throws SvcLogicException {
+		QueryStatus status = null;
+		if (serviceLogic != null && ctx != null) {
+			
+			String key = "SELECT  * , UNIX_TIMESTAMP(UPLOAD_DATE) UPLOAD_TIMESTAMP "
+					+ " FROM UPLOAD_CONFIG "
+					+ " WHERE upload_config_id = " + 
+					"( SELECT MAX(upload_config_id) uploadconfigid " + " FROM UPLOAD_CONFIG "
+					+ " WHERE vnf_id =  $vnf-id  AND vm_name = $vm-name ) ; ";
+				
+			status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+		}
+		return status;
+	}
+	 public String getCapability(SvcLogicContext ctx, String vnf_type) throws SvcLogicException {
+
+         //{"capabilities":{"vnfc":[],"vm":[],"vf-module":[],"vnf":["ConfigureTest","ConfigModify","HealthCheck"]}}
+         String fn = "getCapability ";
+         QueryStatus status = null;
+         SvcLogicContext localContext = new SvcLogicContext();
+         localContext.setAttribute("vnf-type", vnf_type);
+         if (serviceLogic != null && localContext  != null) {
+                 String queryString = "select max(internal_version) as maxInternalVersion, artifact_name as artifactName from ASDC_ARTIFACTS " +
+                                  " where artifact_name in (select artifact_name from ASDC_REFERENCE  where vnf_type= $vnf-type "  +
+                             " and file_category = 'capability' )" ;
+
+                 log.info(fn + "Query String : " + queryString);
+                 status = serviceLogic.query("SQL", false, null, queryString, null, null, localContext);
+
+                 if(status.toString().equals("FAILURE"))
+                         throw new SvcLogicException("Error - while getting capabilitiesData ");
+
+                 String queryString1 = "select artifact_content from ASDC_ARTIFACTS  "  +
+                                 " where artifact_name = $artifactName  and internal_version = $maxInternalVersion ";
+
+                 log.debug(fn + "Query String : " + queryString1);
+                 status = serviceLogic.query("SQL", false, null, queryString1, null, null, localContext);
+                 if(status.toString().equals("FAILURE"))
+                         throw new SvcLogicException("Error - while getting capabilitiesData ");
+         }
+
+         return localContext.getAttribute("artifact-content");
+ }
+
+}
diff --git a/appc-config/appc-data-services/provider/src/main/java/org/openecomp/appc/data/services/db/GeneralDataService.java b/appc-config/appc-data-services/provider/src/main/java/org/openecomp/appc/data/services/db/GeneralDataService.java
new file mode 100644
index 0000000..1f920be
--- /dev/null
+++ b/appc-config/appc-data-services/provider/src/main/java/org/openecomp/appc/data/services/db/GeneralDataService.java
@@ -0,0 +1,80 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.data.services.db;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.lang3.StringUtils;
+
+import org.openecomp.sdnc.sli.SvcLogicContext;
+import org.openecomp.sdnc.sli.SvcLogicException;
+import org.openecomp.sdnc.sli.SvcLogicResource;
+import org.openecomp.sdnc.sli.SvcLogicResource.QueryStatus;
+import org.openecomp.sdnc.sli.resource.sql.SqlResource;
+
+import org.openecomp.appc.data.services.AppcDataServiceConstant;
+import org.openecomp.appc.data.services.utils.EscapeUtils;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+public class GeneralDataService {
+
+	private static final EELFLogger log = EELFManager.getInstance().getLogger(GeneralDataService.class);
+	
+	public void saveTransactionLog(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException 
+	{
+		SvcLogicContext logger = new SvcLogicContext();
+		String responsePrefix = inParams.get(AppcDataServiceConstant.INPUT_PARAM_RESPONSE_PREFIX);
+		String messageType = inParams.get(AppcDataServiceConstant.INPUT_PARAM_MESSAGE_TYPE);
+		String message = inParams.get(AppcDataServiceConstant.INPUT_PARAM_MESSAGE);
+		try 
+		{
+			
+			String escapedMessage = EscapeUtils.escapeSql(message);
+			logger.setAttribute("request-id", ctx.getAttribute("request-id"));
+			logger.setAttribute("log-message-type", messageType);
+			logger.setAttribute("log-message", escapedMessage);
+
+			responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+			DGGeneralDBService db = DGGeneralDBService.initialise();
+			QueryStatus status = db.saveConfigTransactionLog( logger, responsePrefix);
+
+			logger.setAttribute("log-message", null);
+			logger.setAttribute("log-message-type", null);
+			logger.setAttribute("request-id", null);
+
+			if (status == QueryStatus.FAILURE)
+				throw new Exception("Unable to insert into config_transaction_log");
+
+
+		} 
+		catch (Exception e) 
+		{
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+			AppcDataServiceConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage());
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+	
+}
diff --git a/appc-config/appc-data-services/provider/src/main/java/org/openecomp/appc/data/services/node/ConfigResourceNode.java b/appc-config/appc-data-services/provider/src/main/java/org/openecomp/appc/data/services/node/ConfigResourceNode.java
new file mode 100644
index 0000000..9424939
--- /dev/null
+++ b/appc-config/appc-data-services/provider/src/main/java/org/openecomp/appc/data/services/node/ConfigResourceNode.java
@@ -0,0 +1,757 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.data.services.node;
+
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import org.openecomp.sdnc.sli.SvcLogicContext;
+import org.openecomp.sdnc.sli.SvcLogicException;
+import org.openecomp.sdnc.sli.SvcLogicJavaPlugin;
+
+import org.openecomp.appc.data.services.AppcDataServiceConstant;
+import org.openecomp.appc.data.services.db.DGGeneralDBService;
+import org.openecomp.appc.data.services.utils.EscapeUtils;
+
+import org.openecomp.sdnc.sli.SvcLogicResource.QueryStatus;
+
+public class ConfigResourceNode implements SvcLogicJavaPlugin {
+
+	private static final EELFLogger log = EELFManager.getInstance().getLogger(ConfigResourceNode.class);
+
+	public void getConfigFileReference(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+
+		log.info("Received getConfigFiles call with params : " + inParams);
+
+		String responsePrefix = inParams.get(AppcDataServiceConstant.INPUT_PARAM_RESPONSE_PREFIX);
+
+		try {
+
+			responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+			DGGeneralDBService db = DGGeneralDBService.initialise();
+			QueryStatus status = db.getConfigFileReferenceByFileTypeNVnfType(ctx, "configfilereference-deviceconfig",
+					"device_configuration");
+
+			if (status == QueryStatus.NOT_FOUND || status == QueryStatus.FAILURE)
+				throw new Exception("Unable to Read ConfigFileReference:device-configuration");
+
+			status = db.getConfigFileReferenceByFileTypeNVnfType(ctx, "configfilereference-success",
+					"configuration_success");
+
+			if (status == QueryStatus.NOT_FOUND || status == QueryStatus.FAILURE)
+				throw new Exception("Unable to Read ConfigFileReference:configuration_success");
+
+			status = db.getConfigFileReferenceByFileTypeNVnfType(ctx, "configfilereference-failure",
+					"configuration_error");
+
+			if (status == QueryStatus.NOT_FOUND || status == QueryStatus.FAILURE)
+				throw new Exception("Unable to Read ConfigFileReference:configuration_error");
+
+			status = db.getConfigFileReferenceByFileTypeNVnfType(ctx, "configfilereference-log", "log");
+
+			if (status == QueryStatus.NOT_FOUND || status == QueryStatus.FAILURE)
+				throw new Exception("Unable to Read ConfigFileReference:configuration_log");
+
+
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_SUCCESS);
+			log.info("GetConfigFileReference Successful ");
+		} catch (Exception e) {
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage());
+			log.error("Failed in GetConfigFileReference " + e.getMessage());
+
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+
+	public void getCommonConfigInfo(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+
+		log.info("Received getDeviceInfo call with params : " + inParams);
+
+		String responsePrefix = inParams.get(AppcDataServiceConstant.INPUT_PARAM_RESPONSE_PREFIX);
+
+		try {
+
+			responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+			DGGeneralDBService db = DGGeneralDBService.initialise();
+			QueryStatus status = db.getDeviceAuthenticationByVnfType(ctx, "device-authentication");
+
+			if (status == QueryStatus.NOT_FOUND || status == QueryStatus.FAILURE)
+				throw new Exception("Unable to Read device_authentication");
+
+			status = db.getDeviceProtocolByVnfType(ctx, "tmp.deviceinterfaceprotocol");
+
+			if (status == QueryStatus.NOT_FOUND || status == QueryStatus.FAILURE)
+				throw new Exception("Unable to Read device_interface_protocol");
+
+			status = db.getConfigureActionDGByVnfTypeNAction(ctx, "tmp.configureactiondg");
+			if (status == QueryStatus.FAILURE)
+				throw new Exception("Unable to Read configure_action_dg");
+
+			if (status == QueryStatus.NOT_FOUND) {
+				status = db.getConfigureActionDGByVnfType(ctx, "tmp.configureactiondg");
+
+				if (status == QueryStatus.NOT_FOUND || status == QueryStatus.FAILURE)
+					throw new Exception("Unable to Read configure_action_dg");
+			}
+
+
+
+
+
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_SUCCESS);
+			log.info("getCommonConfigInfo Successful ");
+		} catch (Exception e) {
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage());
+			log.error("Failed in getCommonConfigInfo " + e.getMessage());
+
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+
+
+	// fileCategory Can be  config_template, parameter_definitions, parameter_yang
+	public void getTemplate(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+
+		log.info("Received getTemplate call with params : " + inParams);
+
+
+		String responsePrefix = inParams.get(AppcDataServiceConstant.INPUT_PARAM_RESPONSE_PREFIX);
+		String fileCategory = inParams.get(AppcDataServiceConstant.INPUT_PARAM_FILE_CATEGORY);
+		String templateName = ctx.getAttribute("template-name");
+		QueryStatus status = null;
+		String responsePrefix1 = "";
+
+		try {
+
+			responsePrefix1 = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+			log.info("RESPONSEPREFIX : " + responsePrefix);
+			log.info("RESPONSEPREFIX1 : " + responsePrefix1);
+
+			DGGeneralDBService db = DGGeneralDBService.initialise();
+
+			if (StringUtils.isBlank(templateName)) {
+
+				//if ( !StringUtils.isBlank(ctx.getAttribute("vnfc-type"))) {
+
+
+				status = db.getTemplate(ctx, responsePrefix, fileCategory);
+				if (status == QueryStatus.FAILURE)
+					throw new Exception("Unable to Read " + fileCategory );
+				//}
+
+				if (status == QueryStatus.NOT_FOUND) {
+
+
+					status = db.getTemplateByVnfTypeNAction(ctx, responsePrefix, fileCategory);
+
+					if (status == QueryStatus.FAILURE)
+						throw new Exception("Unable to Read " + fileCategory );
+
+					if (status == QueryStatus.NOT_FOUND) {
+
+						status = db.getTemplateByVnfType(ctx, responsePrefix, fileCategory);
+
+						if (status == QueryStatus.NOT_FOUND || status == QueryStatus.FAILURE)
+							throw new Exception("Unable to Read " + fileCategory );
+					}
+				}
+			} else {
+
+				status = db.getTemplateByTemplateName(ctx, responsePrefix, templateName);
+
+				if (status == QueryStatus.NOT_FOUND || status == QueryStatus.FAILURE)
+					throw new Exception("Unable to Read " + fileCategory + " template");
+			}
+
+
+			ctx.setAttribute(responsePrefix1 + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_SUCCESS);
+			log.info("GetTemplate Successful ");
+		} catch (Exception e) {
+			ctx.setAttribute(responsePrefix1 + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix1 + AppcDataServiceConstant.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage());
+			log.error("Failed in getTemplate " + e.getMessage());
+
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+
+	public void saveConfigFiles(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+
+		log.info("Received saveConfigFiles call with params : " + inParams);
+
+		String responsePrefix = inParams.get(AppcDataServiceConstant.INPUT_PARAM_RESPONSE_PREFIX);
+
+		try {
+
+			responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+			DGGeneralDBService db = DGGeneralDBService.initialise();
+			QueryStatus status = db.saveConfigFiles(ctx, "tmp.configFiles");
+
+			if (status == QueryStatus.FAILURE)
+				throw new Exception("Unable to Save " + ctx.getAttribute("file-category") + " in configfiles");
+
+			status = db.getMaxConfigFileId(ctx, "tmp.configfilesmax", ctx.getAttribute("file-category"));
+
+			if (status == QueryStatus.NOT_FOUND || status == QueryStatus.FAILURE)
+				throw new Exception("Unable to get " + ctx.getAttribute("file-category") + " from configfiles");
+
+			status = db.savePrepareRelationship(ctx, "tmp.preparerel",
+					ctx.getAttribute("tmp.configfilesmax.configfileid"), "N");
+			if (status == QueryStatus.FAILURE)
+				throw new Exception("Unable to save prepare_relationship");
+
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_SUCCESS);
+			log.info("saveConfigFiles Successful ");
+		} catch (Exception e) {
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage());
+			log.error("Failed in saveConfigFiles " + e.getMessage());
+
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+
+	public void updateUploadConfig(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+
+		log.info("Received updateUploadConfig call with params : " + inParams);
+
+		String responsePrefix = inParams.get(AppcDataServiceConstant.INPUT_PARAM_RESPONSE_PREFIX);
+
+		try {
+
+			responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+			DGGeneralDBService db = DGGeneralDBService.initialise();
+
+			ctx.setAttribute("tmp.escaped.devicerunningconfig",
+					EscapeUtils.escapeSql(ctx.getAttribute("device-running-config")));
+
+			QueryStatus status = db.saveUploadConfig(ctx, "tmp.uploadConfig");
+
+			if (status == QueryStatus.FAILURE)
+				throw new Exception("Unable to Save configuration in upload_config");
+
+			/*status = db.getMaxUploadConfigFileId(ctx, "tmp.uploadconfigmax");
+
+			if (status == QueryStatus.NOT_FOUND || status == QueryStatus.FAILURE)
+				throw new Exception("Unable to get record from upload_config");
+
+			status = db.updateUploadConfig(ctx, "tmp.uploadConfig",
+					Integer.parseInt(ctx.getAttribute("tmp.uploadconfigmax.uploadconfigid")));
+			if (status == QueryStatus.FAILURE)
+				throw new Exception("Unable to upload upload_config");*/
+
+			status = db.getUploadConfigInfo(ctx, "tmp.uploadConfigInfo");
+
+			if (status == QueryStatus.NOT_FOUND || status == QueryStatus.FAILURE)
+				throw new Exception("Unable to get record from upload_config");
+
+			status = db.updateUploadConfig(ctx, "tmp.uploadConfig",
+					Integer.parseInt(ctx.getAttribute("tmp.uploadConfigInfo.UPLOAD-CONFIG-ID")));
+			if (status == QueryStatus.FAILURE)
+				throw new Exception("Unable to upload upload_config");
+
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_SUCCESS);
+			log.info("updateUploadConfig Successful ");
+		} catch (Exception e) {
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage());
+			log.error("Failed in updateUploadConfig  " + e.getMessage());
+
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+
+	public void savePrepareRelationship(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+
+		log.info("Received savePrepareRelationship call with params : " + inParams);
+
+		String responsePrefix = inParams.get(AppcDataServiceConstant.INPUT_PARAM_RESPONSE_PREFIX);
+		String asdcArtifactInd = inParams.get(AppcDataServiceConstant.INPUT_PARAM_ASDC_ARTIFACT_IND);
+		String fileId = inParams.get(AppcDataServiceConstant.INPUT_PARAM_FILE_ID);
+		try {
+
+			responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+			DGGeneralDBService db = DGGeneralDBService.initialise();
+
+			QueryStatus status = db.savePrepareRelationship(ctx, "tmp.preparerel", fileId, asdcArtifactInd);
+			if (status == QueryStatus.FAILURE)
+				throw new Exception("Unable to save prepare_relationship");
+
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_SUCCESS);
+			log.info("savePrepareRelationship Successful ");
+		} catch (Exception e) {
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage());
+			log.error("Failed in saveConfigFiles " + e.getMessage());
+
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+
+	public void saveConfigBlock(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+
+		log.info("Received saveConfigBlock call with params : " + inParams);
+
+		String responsePrefix = inParams.get(AppcDataServiceConstant.INPUT_PARAM_RESPONSE_PREFIX);
+
+		try {
+
+			responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+			ctx.setAttribute("tmp.convertconfig.escapeData",
+					EscapeUtils.escapeSql(ctx.getAttribute("configuration")));
+			DGGeneralDBService db = DGGeneralDBService.initialise();
+
+			if (StringUtils.isBlank(ctx.getAttribute("configuration-params"))) {
+				saveDeviceConfiguration(inParams, ctx, "Request", ctx.getAttribute("tmp.convertconfig.escapeData"),
+						ctx.getAttribute("configuration"));
+			} else {
+
+				saveConfigurationBlock(inParams, ctx);
+
+				ctx.setAttribute("tmp.convertconfig.escapeData",
+						EscapeUtils.escapeSql(ctx.getAttribute("tmp.merge.mergedData")));
+				saveDeviceConfiguration(inParams, ctx, "Configurator", ctx.getAttribute("tmp.convertconfig.escapeData"),
+						ctx.getAttribute("tmp.merge.mergedData"));
+
+				saveConfigurationData(inParams, ctx);
+			}
+
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_SUCCESS);
+			log.info("saveConfigBlock Successful ");
+		} catch (Exception e) {
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage());
+			log.error("Failed in saveConfigBlock " + e.getMessage());
+
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+
+	public void saveTemplateConfig(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+
+		log.info("Received saveTemplateConfig call with params : " + inParams);
+
+		String responsePrefix = inParams.get(AppcDataServiceConstant.INPUT_PARAM_RESPONSE_PREFIX);
+
+		try {
+
+			responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+			DGGeneralDBService db = DGGeneralDBService.initialise();
+
+			if (StringUtils.isBlank(ctx.getAttribute("configuration-params"))) {
+
+				ctx.setAttribute("tmp.convertconfig.escapeData",
+						EscapeUtils.escapeSql(ctx.getAttribute("config-template.file-content")));
+				saveDeviceConfiguration(inParams, ctx, "Template", ctx.getAttribute("tmp.convertconfig.escapeData"),
+						ctx.getAttribute("config-template.file-content"));
+
+			} else {
+				saveConfigurationData(inParams, ctx);
+
+				ctx.setAttribute("tmp.convertconfig.escapeData",
+						EscapeUtils.escapeSql(ctx.getAttribute("tmp.merge.mergedData")));
+				saveDeviceConfiguration(inParams, ctx, "Configurator", ctx.getAttribute("tmp.convertconfig.escapeData"),
+						ctx.getAttribute("tmp.merge.mergedData"));
+
+			}
+
+			QueryStatus status = db.savePrepareRelationship(ctx, "tmp.preparerel",
+					ctx.getAttribute("config-template.config-file-id"), "Y");
+			if (status == QueryStatus.FAILURE)
+				throw new Exception("Unable to save prepare_relationship");
+
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_SUCCESS);
+			log.info("saveTemplateConfig Successful ");
+		} catch (Exception e) {
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage());
+			log.error("Failed in saveTemplateConfig " + e.getMessage());
+
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+
+
+
+
+	public void saveStyleSheetConfig(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+
+
+		log.info("Received saveStyleSheet call with params : " + inParams);
+
+		String responsePrefix = inParams.get(AppcDataServiceConstant.INPUT_PARAM_RESPONSE_PREFIX);
+
+		try {
+
+			responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+			ctx.setAttribute("tmp.convertconfig.escapeData",
+					EscapeUtils.escapeSql(ctx.getAttribute("tmp.merge.mergedData")));
+			saveDeviceConfiguration(inParams, ctx, "StyleSheet", ctx.getAttribute("tmp.convertconfig.escapeData"),
+					ctx.getAttribute("tmp.merge.mergedData"));
+
+
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS, AppcDataServiceConstant.OUTPUT_STATUS_SUCCESS);
+			log.info("saveStyleSheet Successful ");
+		} catch (Exception e) {
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS, AppcDataServiceConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_ERROR_MESSAGE,e.getMessage());
+			log.error("Failed in saveStyleSheet " + e.getMessage());
+
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+
+
+	public void getSmmChainKeyFiles(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+
+
+		log.info("Received saveStyleSheet call with params : " + inParams);
+
+		String responsePrefix = inParams.get(AppcDataServiceConstant.INPUT_PARAM_RESPONSE_PREFIX);
+		String siteLocation = ctx.getAttribute("site-location");
+
+		QueryStatus status = null;
+
+		try{
+
+
+			responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+			DGGeneralDBService db = DGGeneralDBService.initialise();
+
+
+
+			status = db.getTemplateByArtifactType(ctx,  "smm", "smm", siteLocation);
+
+			if ( status == QueryStatus.FAILURE )
+				throw new Exception("Unable to Read smm file");
+
+
+			status = db.getTemplateByArtifactType(ctx,  "intermediate-ca-chain", "intermediate_ca_chain", siteLocation);
+
+			if ( status == QueryStatus.FAILURE )
+				throw new Exception("Unable to Read intermediate_ca_chain file");
+
+
+
+
+			status = db.getTemplateByArtifactType(ctx,  "server-certificate-and-key", "server_certificate_and_key", siteLocation);
+
+			if ( status == QueryStatus.FAILURE )
+				throw new Exception("Unable to Read server_certificate_and_key file");
+
+
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS, AppcDataServiceConstant.OUTPUT_STATUS_SUCCESS);
+			log.info("saveStyleSheet Successful ");
+		} catch (Exception e) {
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS, AppcDataServiceConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_ERROR_MESSAGE,e.getMessage());
+			log.error("Failed in saveStyleSheet " + e.getMessage());
+
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+
+
+	public void saveDeviceConfiguration(Map<String, String> inParams, SvcLogicContext ctx, String dataSource,
+			String fileContent, String deviceConfig) throws SvcLogicException {
+		ctx.setAttribute("data-source", dataSource);
+		ctx.setAttribute("file-content", fileContent);
+		ctx.setAttribute("file-category", "device_configuration");
+		ctx.setAttribute("deviceconfig-file-content", deviceConfig);
+
+		saveConfigFiles(inParams, ctx);
+	}
+
+	public void saveConfigurationBlock(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+		ctx.setAttribute("data-source", "Request");
+		ctx.setAttribute("file-content", ctx.getAttribute("tmp.convertconfig.escapeData"));
+		ctx.setAttribute("file-category", "configuration_block");
+		saveConfigFiles(inParams, ctx);
+	}
+
+	public void saveConfigurationData(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+		ctx.setAttribute("data-source", ctx.getAttribute("originator-id"));
+		ctx.setAttribute("file-content", ctx.getAttribute("configuration-params"));
+		ctx.setAttribute("file-category", "config_data");
+		saveConfigFiles(inParams, ctx);
+	}
+
+
+	public void getConfigFilesByVnfVmNCategory(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+
+		log.info("Received getConfigFilesByVnfVmNCategory call with params : " + inParams);
+
+		String responsePrefix = inParams.get(AppcDataServiceConstant.INPUT_PARAM_RESPONSE_PREFIX);
+		String fileCategory = inParams.get(AppcDataServiceConstant.INPUT_PARAM_FILE_CATEGORY);
+		String vnfId = inParams.get(AppcDataServiceConstant.INPUT_PARAM_VNF_ID);
+		String vmName = inParams.get(AppcDataServiceConstant.INPUT_PARAM_VM_NAME);
+		try {
+
+
+			DGGeneralDBService db = DGGeneralDBService.initialise();
+
+			QueryStatus status = db.getConfigFilesByVnfVmNCategory(ctx, responsePrefix, fileCategory, vnfId, vmName);
+
+			if (status == QueryStatus.NOT_FOUND || status == QueryStatus.FAILURE)
+				throw new Exception("Unable to get " + ctx.getAttribute("fileCategory") + " from configfiles");
+
+
+			responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_SUCCESS);
+			log.info("getConfigFilesByVnfVmNCategory Successful " + ctx.getAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS));
+		} catch (Exception e) {
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage());
+			log.error("Failed in getConfigFilesByVnfVmNCategory " + e.getMessage());
+
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+
+
+	public void getDownloadConfigTemplateByVnf(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+
+		log.info("Received getDownloadConfigTemplateByVnfNProtocol call with params : " + inParams);
+
+		String responsePrefix = inParams.get(AppcDataServiceConstant.INPUT_PARAM_RESPONSE_PREFIX);
+		try {
+			DGGeneralDBService db = DGGeneralDBService.initialise();
+
+			QueryStatus status = db.getDownloadConfigTemplateByVnf(ctx, responsePrefix);
+
+			if (status == QueryStatus.NOT_FOUND || status == QueryStatus.FAILURE)
+				throw new Exception("Unable to get download config template.");
+
+
+			responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,	AppcDataServiceConstant.OUTPUT_STATUS_SUCCESS);
+			log.info("getDownloadConfigTemplateByVnf Successful " + ctx.getAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS));
+		} catch (Exception e) {
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage());
+			log.error("Failed in getDownloadConfigTemplateByVnf " + e.getMessage());
+
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+
+
+	public void saveConfigTransactionLog(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+
+
+
+		String responsePrefix = inParams.get(AppcDataServiceConstant.INPUT_PARAM_RESPONSE_PREFIX);
+
+		String messageType = inParams.get(AppcDataServiceConstant.INPUT_PARAM_MESSAGE_TYPE);
+		String message = inParams.get(AppcDataServiceConstant.INPUT_PARAM_MESSAGE);
+
+		try {
+
+			SvcLogicContext logctx = new SvcLogicContext();
+
+			String escapedMessage = EscapeUtils.escapeSql(message);
+
+
+			logctx.setAttribute("request-id", ctx.getAttribute("request-id"));
+			logctx.setAttribute("log-message-type", messageType);
+			logctx.setAttribute("log-message", escapedMessage);
+
+
+			responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+			DGGeneralDBService db = DGGeneralDBService.initialise();
+			QueryStatus status = db.saveConfigTransactionLog( logctx, responsePrefix);
+
+			logctx.setAttribute("log-message", null);
+
+			if (status == QueryStatus.FAILURE)
+				throw new Exception("Unable to insert into config_transaction_log");
+
+
+		} catch (Exception e) {
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage());
+
+
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+
+
+
+	public void getVnfcReference(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+
+		log.info("Received getVnfcReference call with params : " + inParams);
+
+		String responsePrefix = inParams.get(AppcDataServiceConstant.INPUT_PARAM_RESPONSE_PREFIX);
+
+
+		QueryStatus status = null;
+
+		try {
+
+
+			DGGeneralDBService db = DGGeneralDBService.initialise();
+
+			if ( !StringUtils.isBlank(ctx.getAttribute("vnfc-type"))) {
+				status = db.getVnfcReferenceByVnfcTypeNAction(ctx, responsePrefix);
+
+				if ( status == QueryStatus.FAILURE)
+					throw new Exception("Unable to Read vnfc-reference");
+			}
+			//else if (status == QueryStatus.NOT_FOUND ) {
+			status = db.getVnfcReferenceByVnfTypeNAction(ctx, responsePrefix);
+
+			if (status == QueryStatus.NOT_FOUND || status == QueryStatus.FAILURE)
+				throw new Exception("Unable to Read vnfc reference");
+
+			//}
+
+			responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_SUCCESS);
+			log.info("getVnfcReference Successful ");
+		} catch (Exception e) {
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage());
+			log.error("Failed in getVnfcReference " + e.getMessage());
+
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+
+	public void getCapability(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+		log.info("Received getCapability call with params : " + inParams);
+		String responsePrefix = inParams.get(AppcDataServiceConstant.INPUT_PARAM_RESPONSE_PREFIX);
+		responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+		String caplevel = inParams.get("caplevel");
+		String findCapability = inParams.get("checkCapability");
+
+		try {			
+			DGGeneralDBService db = DGGeneralDBService.initialise();			
+			String cap = db.getCapability(ctx, inParams.get("vnf-type"));
+			ObjectMapper mapper = new ObjectMapper();
+			JsonNode caps = mapper.readTree(cap);
+			log.info("From DB =   " + caps);
+			JsonNode capabilities = caps.get("capabilities");
+			log.info("capabilities =   " + capabilities);
+			if(caplevel !=null && !caplevel.isEmpty()){
+				JsonNode subCapabilities = capabilities.get(caplevel);
+				log.info("subCapabilities =  " +  caplevel + " : " + subCapabilities);
+				if(findCapability !=null && !findCapability.isEmpty()){
+					if(subCapabilities != null && subCapabilities.toString().contains(findCapability))
+						ctx.setAttribute(responsePrefix + "capabilities." + caplevel + "." +  findCapability,
+								"Supported");
+					else
+						ctx.setAttribute(responsePrefix + "capabilities." + caplevel + "." +  findCapability,
+								"Not-Supported");
+				}
+				else
+				{
+					ctx.setAttribute(responsePrefix + "capabilities." + caplevel,
+							subCapabilities.toString());
+				}
+			
+			}
+			else
+				ctx.setAttribute(responsePrefix + "capabilities",
+						capabilities.toString());
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_SUCCESS);
+			log.info("getCapability Successful ");
+		} catch (Exception e) {
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage());
+			log.error("Failed in getCapability " + e.getMessage());
+
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+
+
+	/*public void getUploadConfigInfo(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+
+		log.info("Received getUploadConfigInfo call with params : " + inParams);
+
+		String responsePrefix = inParams.get(AppcDataServiceConstant.INPUT_PARAM_RESPONSE_PREFIX);
+
+		String uploadConfigId = inParams.get(AppcDataServiceConstant.INPUT_PARAM_UPLOAD_CONFIG_ID);
+		QueryStatus status = null;
+
+		int id = 0;
+		try {
+
+
+			DGGeneralDBService db = DGGeneralDBService.initialise();
+
+			if ( uploadConfigId != null )
+				id = Integer.parseInt(uploadConfigId);
+
+			status = db.getUploadConfigInfo(ctx, responsePrefix,id);
+
+			if ( status == QueryStatus.FAILURE || status == QueryStatus.NOT_FOUND)
+				throw new Exception("Unable to Read upload-config");
+
+
+			responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_SUCCESS);
+			log.info("getUploadConfigInfo Successful ");
+		} catch (Exception e) {
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_STATUS,
+					AppcDataServiceConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix + AppcDataServiceConstant.OUTPUT_PARAM_ERROR_MESSAGE, e.getMessage());
+			log.error("Failed in getUploadConfigInfo " + e.getMessage());
+
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+	 */
+
+}
diff --git a/appc-config/appc-data-services/provider/src/main/java/org/openecomp/appc/data/services/utils/EscapeUtils.java b/appc-config/appc-data-services/provider/src/main/java/org/openecomp/appc/data/services/utils/EscapeUtils.java
new file mode 100644
index 0000000..b8daeeb
--- /dev/null
+++ b/appc-config/appc-data-services/provider/src/main/java/org/openecomp/appc/data/services/utils/EscapeUtils.java
@@ -0,0 +1,39 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.data.services.utils;
+
+import org.apache.commons.lang3.StringUtils;
+
+public class EscapeUtils {
+
+	public EscapeUtils() {
+		// TODO Auto-generated constructor stub
+	}
+
+	public static String escapeSql(String str) {
+		if (str == null) {
+			return null;
+		}
+		String searchList[] = new String[]{"'","\\"};
+		String replacementList[] = new String[]{ "''","\\\\"};
+		return StringUtils.replaceEach(str,searchList, replacementList);
+	}
+}
diff --git a/appc-config/appc-data-services/provider/src/test/java/org/openecomp/appc/data/services/db/TestDGGeneralDBService.java b/appc-config/appc-data-services/provider/src/test/java/org/openecomp/appc/data/services/db/TestDGGeneralDBService.java
new file mode 100644
index 0000000..386b9f9
--- /dev/null
+++ b/appc-config/appc-data-services/provider/src/test/java/org/openecomp/appc/data/services/db/TestDGGeneralDBService.java
@@ -0,0 +1,29 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+
+import org.junit.Test;
+//Model JUNIT Class
+public class TestDGGeneralDBService {
+
+
+
+
+}
diff --git a/appc-config/appc-data-services/provider/src/test/java/org/openecomp/appc/data/services/db/TestSQLSaveQuery.java b/appc-config/appc-data-services/provider/src/test/java/org/openecomp/appc/data/services/db/TestSQLSaveQuery.java
new file mode 100644
index 0000000..9959349
--- /dev/null
+++ b/appc-config/appc-data-services/provider/src/test/java/org/openecomp/appc/data/services/db/TestSQLSaveQuery.java
@@ -0,0 +1,178 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APP-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.data.services.db;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.openecomp.sdnc.sli.SvcLogicContext;
+
+public class TestSQLSaveQuery {
+
+
+	private static final Logger LOG = LoggerFactory.getLogger(TestSQLSaveQuery.class);
+
+	private static String CRYPT_KEY = "";
+
+	//@Test
+	public void testSQLSaveQuery() {
+
+		try {
+			String message = FileUtils.readFileToString(new File("src/test/resources/query/sampledata.txt"));
+			System.out.println("TestSQLSaveQuery.testSQLSaveQuery()" + message);
+
+			SvcLogicContext ctx = new SvcLogicContext();
+			ctx.setAttribute("request-id", "1234");
+
+			String escapedMessage = StringEscapeUtils.escapeSql(message);
+			ctx.setAttribute("log_message", escapedMessage);
+
+			//String key = "INSERT INTO CONFIG_TRANSACTION_LOG " + " SET request_id = $request-id , message_type        =  'request' ,  message        =  '" + escapedMessage + "' ;";
+			String key = "INSERT INTO CONFIG_TRANSACTION_LOG " + " SET request_id = $request-id , message_type  =  'request' ,  message        =  $log_message ;";
+			System.out.println("Query : " + key);
+			String resolvedContext = resolveCtxVars(key, ctx);
+
+			System.out.println("Resolved : " + resolvedContext);
+
+			ctx.setAttribute("log_message", null);
+
+
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+
+	}
+
+
+	private String resolveCtxVars(String key,
+			SvcLogicContext ctx) {
+		if (key == null) {
+			return (null);
+		}
+
+		if (key.startsWith("'") && key.endsWith("'")) {
+			key = key.substring(1, key.length() - 1);
+
+			LOG.debug("Stripped outer single quotes - key is now [" + key + "]");
+		}
+
+		String[] keyTerms = key.split("\\s+");
+
+		StringBuffer sqlBuffer = new StringBuffer();
+
+
+		for (int i = 0; i < keyTerms.length; i++) {
+			sqlBuffer.append(resolveTerm(keyTerms[i], ctx));
+			sqlBuffer.append(" ");
+		}
+
+
+		return (sqlBuffer.toString());
+	}
+
+
+	private String resolveTerm(String term, SvcLogicContext ctx) {
+		if (term == null) {
+			return (null);
+		}
+
+		LOG.debug("resolveTerm: term is " + term);
+
+		if (term.startsWith("$") && (ctx != null)) {
+			// Resolve any index variables.
+			/*
+			String value = term;
+			String resolved = resolveCtxVariable(term.substring(1), ctx);
+			if(resolved != null){
+				value = "'" +resolved+ "'";
+			}
+			System.out.println("Dollar Term : " + term + " Value :"+ value);
+			return value;
+*/
+			return ("'" + resolveCtxVariable(term.substring(1), ctx) + "'");
+
+		} else  {
+			return (term);
+		}
+
+	}
+
+	private String resolveCtxVariable(String ctxVarName, SvcLogicContext ctx) {
+
+		if (ctxVarName.indexOf('[') == -1) {
+			// Ctx variable contains no arrays
+			if ("CRYPT_KEY".equals(ctxVarName)) {
+
+				// Handle crypt key as special case. If it's set as a context variable, use it.  Otherwise, use
+				// configured crypt key.
+				String cryptKey = ctx.getAttribute(ctxVarName);
+				if ((cryptKey != null) && (cryptKey.length() > 0)) {
+					return(cryptKey);
+				} else {
+					return(CRYPT_KEY);
+				}
+
+			}
+			return (ctx.getAttribute(ctxVarName));
+		}
+
+		// Resolve any array references
+		StringBuffer sbuff = new StringBuffer();
+		String[] ctxVarParts = ctxVarName.split("\\[");
+		sbuff.append(ctxVarParts[0]);
+		for (int i = 1; i < ctxVarParts.length; i++) {
+			if (ctxVarParts[i].startsWith("$")) {
+				int endBracketLoc = ctxVarParts[i].indexOf("]");
+				if (endBracketLoc == -1) {
+					// Missing end bracket ... give up parsing
+					LOG.warn("Variable reference " + ctxVarName
+							+ " seems to be missing a ']'");
+					return (ctx.getAttribute(ctxVarName));
+				}
+
+				String idxVarName = ctxVarParts[i].substring(1, endBracketLoc);
+				String remainder = ctxVarParts[i].substring(endBracketLoc);
+
+				sbuff.append("[");
+				sbuff.append(ctx.getAttribute(idxVarName));
+				sbuff.append(remainder);
+
+			} else {
+				// Index is not a variable reference
+				sbuff.append("[");
+				sbuff.append(ctxVarParts[i]);
+			}
+		}
+
+		return (ctx.getAttribute(sbuff.toString()));
+	}
+
+
+}
diff --git a/appc-config/appc-data-services/provider/src/test/resources/query/message3.txt b/appc-config/appc-data-services/provider/src/test/resources/query/message3.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appc-config/appc-data-services/provider/src/test/resources/query/message3.txt
diff --git a/appc-config/appc-data-services/provider/src/test/resources/query/sampledata.txt b/appc-config/appc-data-services/provider/src/test/resources/query/sampledata.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appc-config/appc-data-services/provider/src/test/resources/query/sampledata.txt
diff --git a/appc-config/appc-data-services/provider/src/test/resources/svclogic.properties b/appc-config/appc-data-services/provider/src/test/resources/svclogic.properties
new file mode 100644
index 0000000..0286730
--- /dev/null
+++ b/appc-config/appc-data-services/provider/src/test/resources/svclogic.properties
@@ -0,0 +1,33 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : APP-C
+# ================================================================================
+# Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
+# ================================================================================
+# 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.
+# ============LICENSE_END=========================================================
+###
+=
+org.openecomp.sdnc.sli.dbtype=
+org.openecomp.sdnc.sli.jdbc.hosts=
+org.openecomp.sdnc.sli.jdbc.url=
+org.openecomp.sdnc.sli.jdbc.database=
+org.openecomp.sdnc.sli.jdbc.user=
+org.openecomp.sdnc.sli.jdbc.password=
+org.openecomp.sdnc.sli.jdbc.connection.name=
+
+org.openecomp.sdnc.sli.jdbc.connection.timeout=
+org.openecomp.sdnc.sli.jdbc.request.timeout=
+org.openecomp.sdnc.sli.jdbc.limit.init=
+org.openecomp.sdnc.sli.jdbc.limit.min=
+org.openecomp.sdnc.sli.jdbc.limit.max=
diff --git a/appc-config/pom.xml b/appc-config/pom.xml
index 14c844d..3aa0513 100644
--- a/appc-config/pom.xml
+++ b/appc-config/pom.xml
@@ -90,6 +90,7 @@
 	<modules>
 		<module>appc-config-params</module>
                 <module>appc-encryption-tool</module>
+                <module>appc-data-services</module>
 	</modules>
 
 </project>
diff --git a/pom.xml b/pom.xml
index c1209f4..38f37c1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -519,7 +519,7 @@
                     </dependency>
                 </dependencies>
             </plugin>
-            <!-- license plugin -->
+                      <!-- license plugin -->
             <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>license-maven-plugin</artifactId>