Initial adds artifact handler and design services

asdc-artifact-handler: an interface to receive artifacts distributed
by SDC and persist them into the local database.

appc-design-services: an interface to manage VNF configuration
artifacts, primarily those generated by the configuration design tool.

Includes these user stories: APPC-28/85

Change-Id: Ib207070d4593554fa424fc69d9c77a6cd5349fec
Signed-off-by: Skip Wonnell <kw5258@att.com>
Issue-Id: APPC-9
diff --git a/appc-inbound/appc-artifact-handler/.gitignore b/appc-inbound/appc-artifact-handler/.gitignore
new file mode 100755
index 0000000..ab7c300
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/.gitignore
@@ -0,0 +1,32 @@
+# Target dirs in all projects
+**/target/*
+
+# Added for Intellij IDEA IDE
+**/.idea/*
+*.iml
+
+# Generated models and features
+**/bin/*
+
+# MANIFEST.MF is updated on every clean install
+**/src/main/resources/META-INF/
+**/pom.xml.versionsBackup
+pom.xml.versionsBackup
+
+.project
+
+*.prefs
+.classpath
+**/.classpath
+/target/
+logs/
+debug-logs/
+/.settings/
+**/*.iml
+/.idea/
+
+
+# MANIFEST.MF is updated on every clean install
+**/src/main/resources/META-INF/
+**/src/main/yang-gen-sal
+**/src/main/yang-gen-config
diff --git a/appc-inbound/appc-artifact-handler/features/.gitignore b/appc-inbound/appc-artifact-handler/features/.gitignore
new file mode 100755
index 0000000..b83d222
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/features/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/appc-inbound/appc-artifact-handler/features/pom.xml b/appc-inbound/appc-artifact-handler/features/pom.xml
new file mode 100755
index 0000000..ab4f624
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/features/pom.xml
@@ -0,0 +1,99 @@
+<?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-artifact-handler</artifactId>
+		<groupId>org.openecomp.appc</groupId>
+		<version>1.1.0-SNAPSHOT</version>
+	</parent>
+	<artifactId>appc-artifact-handler-features</artifactId>
+	<packaging>jar</packaging>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.openecomp.appc</groupId>
+			<artifactId>appc-artifact-handler-model</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.openecomp.appc</groupId>
+			<artifactId>appc-artifact-handler-provider</artifactId>
+			<classifier>config</classifier>
+			<type>xml</type>
+		</dependency>
+		<dependency>
+			<groupId>org.opendaylight.mdsal</groupId>
+			<artifactId>features-mdsal</artifactId>
+			<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>
+			<type>zip</type>
+		</dependency>
+
+		<dependency>
+			<!-- Required for launching the feature tests -->
+			<groupId>org.opendaylight.odlparent</groupId>
+			<artifactId>features-test</artifactId>
+			<scope>test</scope>
+			<version>${odl.commons.opendaylight.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.opendaylight.yangtools</groupId>
+			<artifactId>features-yangtools</artifactId>
+			<classifier>features</classifier>
+			<type>xml</type>
+			<scope>runtime</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>
+			<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-inbound/appc-artifact-handler/features/src/main/resources/features.xml b/appc-inbound/appc-artifact-handler/features/src/main/resources/features.xml
new file mode 100644
index 0000000..f742dfc
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/features/src/main/resources/features.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ============LICENSE_START=======================================================
+  ONAP : 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.
+  
+  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+  ============LICENSE_END=========================================================
+  -->
+
+
+<features name="app-cntrl-artifact-handler-${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='app-cntrl-artifact-handler' description="Application Controller Artifact Handler"
+		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='${sdnctl.sli.version}'>sdnc-sli</feature>
+		<bundle>wrap:mvn:com.att.eelf/eelf-core/${eelf.version}</bundle>
+		<bundle>wrap:mvn:com.fasterxml.jackson.core/jackson-databind/${jackson.version}</bundle>
+		<bundle>wrap:mvn:com.fasterxml.jackson.core/jackson-annotations/${jackson.version}</bundle>
+		<bundle>wrap:mvn:com.fasterxml.jackson.core/jackson-core/${jackson.version}</bundle>
+		<bundle>wrap:mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/${jackson.version}</bundle>
+		<bundle>wrap:mvn:org.yaml/snakeyaml/${snakeyaml.version}</bundle>
+		<bundle>wrap:mvn:org.openecomp.appc/appc-yang-generator/${project.version}</bundle>
+		<bundle>wrap:mvn:org.openecomp.sdc.common/openecomp-tosca-datatype/${tosca.datatype.version}</bundle>
+		<bundle>mvn:org.openecomp.appc/appc-config-params-provider/${project.version}</bundle>
+		<bundle>mvn:org.openecomp.appc/appc-artifact-handler-model/${project.version}</bundle>
+		<bundle>mvn:org.openecomp.appc/appc-artifact-handler-provider/${project.version}</bundle>
+		<configfile finalname="etc/opendaylight/karaf/200-artifact-handler-provider.xml">mvn:org.openecomp.appc/appc-artifact-handler-provider/${project.version}/xml/config</configfile>
+	</feature>
+
+</features>
diff --git a/appc-inbound/appc-artifact-handler/installer/.gitignore b/appc-inbound/appc-artifact-handler/installer/.gitignore
new file mode 100755
index 0000000..b83d222
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/installer/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/appc-inbound/appc-artifact-handler/installer/pom.xml b/appc-inbound/appc-artifact-handler/installer/pom.xml
new file mode 100755
index 0000000..9af28bf
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/installer/pom.xml
@@ -0,0 +1,132 @@
+<?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-artifact-handler</artifactId>
+		<groupId>org.openecomp.appc</groupId>
+		<version>1.1.0-SNAPSHOT</version>
+	</parent>
+	<artifactId>appc-artifact-handler-installer</artifactId>
+	<name>appc-artifact-handler-installer</name>
+	<packaging>pom</packaging>
+
+	<properties>
+		<application.name>appc-artifact-handler</application.name>
+		<features.boot>appc-artifact-handler</features.boot>
+		<features.repositories>mvn:org.openecomp.appc/appc-artifact-handler-features/${project.version}/xml/features</features.repositories>
+		<include.transitive.dependencies>false</include.transitive.dependencies>
+	</properties>
+
+	<dependencies>
+
+		<dependency>
+			<groupId>org.openecomp.appc</groupId>
+			<artifactId>appc-artifact-handler-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-artifact-handler-provider</artifactId>
+		</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-inbound/appc-artifact-handler/installer/resources/scripts/install-feature.sh b/appc-inbound/appc-artifact-handler/installer/resources/scripts/install-feature.sh
new file mode 100755
index 0000000..c5a39bf
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/installer/resources/scripts/install-feature.sh
@@ -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=========================================================
+###
+
+#!/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-inbound/appc-artifact-handler/installer/src/assembly/assemble_installer_zip.xml b/appc-inbound/appc-artifact-handler/installer/src/assembly/assemble_installer_zip.xml
new file mode 100644
index 0000000..e54eede
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/installer/src/assembly/assemble_installer_zip.xml
@@ -0,0 +1,62 @@
+<!--
+  ============LICENSE_START=======================================================
+  ONAP : 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.
+  
+  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+  ============LICENSE_END=========================================================
+  -->
+
+<!-- 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>controller</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-inbound/appc-artifact-handler/installer/src/assembly/assemble_mvnrepo_zip.xml b/appc-inbound/appc-artifact-handler/installer/src/assembly/assemble_mvnrepo_zip.xml
new file mode 100644
index 0000000..fc99e91
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/installer/src/assembly/assemble_mvnrepo_zip.xml
@@ -0,0 +1,50 @@
+<!--
+  ============LICENSE_START=======================================================
+  ONAP : 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.
+  
+  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+  ============LICENSE_END=========================================================
+  -->
+
+<!-- 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>controller</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-inbound/appc-artifact-handler/installer/src/main/resources/scripts/install-feature.sh b/appc-inbound/appc-artifact-handler/installer/src/main/resources/scripts/install-feature.sh
new file mode 100644
index 0000000..05b4ae3
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/installer/src/main/resources/scripts/install-feature.sh
@@ -0,0 +1,43 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : 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.
+# 
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+# ============LICENSE_END=========================================================
+###
+
+#!/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-inbound/appc-artifact-handler/model/.gitignore b/appc-inbound/appc-artifact-handler/model/.gitignore
new file mode 100755
index 0000000..0f44a0f
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/model/.gitignore
@@ -0,0 +1,2 @@
+/target/
+/.classpath
diff --git a/appc-inbound/appc-artifact-handler/model/pom.xml b/appc-inbound/appc-artifact-handler/model/pom.xml
new file mode 100755
index 0000000..7b9402d
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/model/pom.xml
@@ -0,0 +1,158 @@
+<?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-artifact-handler</artifactId>
+		<groupId>org.openecomp.appc</groupId>
+		<version>1.1.0-SNAPSHOT</version>
+	</parent>
+	<artifactId>appc-artifact-handler-model</artifactId>
+	<packaging>bundle</packaging>
+
+	<build>
+
+		<plugins>
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-bundle-plugin</artifactId>
+				<extensions>true</extensions>
+				<configuration>
+					<instructions>
+						<Import-Package>*</Import-Package>
+					</instructions>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.opendaylight.yangtools</groupId>
+				<artifactId>yang-maven-plugin</artifactId>
+				<dependencies>
+					<dependency>
+						<groupId>org.opendaylight.mdsal</groupId>
+						<artifactId>maven-sal-api-gen-plugin</artifactId>
+						<!-- <version>${odl.yangtools.version}</version> -->
+						<version>${odl.sal.api.gen.plugin.version}</version>
+						<type>jar</type>
+					</dependency>
+				</dependencies>
+				<executions>
+					<execution>
+						<goals>
+							<goal>generate-sources</goal>
+						</goals>
+						<configuration>
+							<yangFilesRootDir>${yang.file.directory}</yangFilesRootDir>
+							<codeGenerators>
+								<generator>
+									<codeGeneratorClass>org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl</codeGeneratorClass>
+									<outputBaseDir>${salGeneratorPath}</outputBaseDir>
+								</generator>
+							</codeGenerators>
+							<inspectDependencies>true</inspectDependencies>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>exec-maven-plugin</artifactId>
+				<version>1.2.1</version>
+				<executions>
+					<execution>
+						<configuration>
+							<executable>python</executable>
+							<arguments>
+								<argument>scripts/python/yang2props.py</argument>
+								<argument>src/main/yang/artifact-handler.yang</argument>
+								<argument>target/artifact-handler.properties</argument>
+							</arguments>
+						</configuration>
+						<id>generation</id>
+						<phase>generate-resources</phase>
+						<goals>
+							<goal>exec</goal>
+						</goals>
+					</execution>
+				</executions>
+			</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}/artifact-handler.properties</file>
+									<type>properties</type>
+									<classifier>artifact-handler</classifier>
+								</artifact>
+							</artifacts>
+						</configuration>
+					</execution>
+				</executions>
+			</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>
+											org.codehaus.mojo
+										</groupId>
+										<artifactId>
+											exec-maven-plugin
+										</artifactId>
+										<versionRange>
+											[1.2.1,)
+										</versionRange>
+										<goals>
+											<goal>exec</goal>
+										</goals>
+									</pluginExecutionFilter>
+									<action>
+										<ignore />
+									</action>
+								</pluginExecution>
+							</pluginExecutions>
+						</lifecycleMappingMetadata>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+	</build>
+	<dependencies>
+		<dependency>
+			<groupId>org.opendaylight.mdsal</groupId>
+			<artifactId>yang-binding</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.opendaylight.yangtools</groupId>
+			<artifactId>yang-common</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.opendaylight.mdsal.model</groupId>
+			<artifactId>ietf-inet-types</artifactId>
+			<version>${odl.ietf-inet-types.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.opendaylight.mdsal.model</groupId>
+			<artifactId>ietf-yang-types</artifactId>
+			<version>${odl.ietf-yang-types.version}</version>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/appc-inbound/appc-artifact-handler/model/scripts/python/yang2props.py b/appc-inbound/appc-artifact-handler/model/scripts/python/yang2props.py
new file mode 100755
index 0000000..559d31b
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/model/scripts/python/yang2props.py
@@ -0,0 +1,57 @@
+#!/usr/bin/python
+
+import re
+import sys
+
+
+# Convert word from foo-bar to FooBar
+# words begining with a digit will be converted to _digit
+def to_enum(s):
+    if s[0].isdigit():
+        s = "_" + s
+    else:
+        s = s[0].upper() + s[1:]
+    return re.sub(r'(?!^)-([a-zA-Z])', lambda m: m.group(1).upper(), s)
+
+leaf = ""
+val = ""
+li = []
+
+if len(sys.argv) < 3:
+     print 'yang2props.py <input yang> <output properties>'
+     sys.exit(2)
+
+with open(sys.argv[1], "r") as ins:
+    for line in ins:
+        # if we see a leaf save the name for later
+        if "leaf " in line:
+	    match = re.search(r'leaf (\S+)', line)
+	    if match:
+                 leaf = match.group(1)
+      
+        # if we see enum convert the value to enum format and see if it changed
+        # if the value is different write a property entry
+        if "enum " in line:
+	    match = re.search(r'enum "(\S+)";', line)
+	    if match:
+                val = match.group(1)
+            	enum = to_enum(val)
+
+                # see if converting to enum changed the string
+		if val != enum:
+                    property = "yang."+leaf+"."+enum+"="+val
+		    if property not in li:
+		        li.append( property)
+
+
+# Open output file
+fo = open(sys.argv[2], "wb")
+fo.write("# yang conversion properties \n")
+fo.write("# used to convert Enum back to the original yang value \n")
+fo.write("\n".join(li))
+fo.write("\n")
+
+# Close opend file
+fo.close()
+
+   
diff --git a/appc-inbound/appc-artifact-handler/model/src/main/.gitignore b/appc-inbound/appc-artifact-handler/model/src/main/.gitignore
new file mode 100755
index 0000000..380e77f
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/model/src/main/.gitignore
@@ -0,0 +1 @@
+/yang-gen-sal/
diff --git a/appc-inbound/appc-artifact-handler/model/src/main/yang/artifact-handler.yang b/appc-inbound/appc-artifact-handler/model/src/main/yang/artifact-handler.yang
new file mode 100644
index 0000000..1839fbd
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/model/src/main/yang/artifact-handler.yang
@@ -0,0 +1,139 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+module artifact-handler {
+    yang-version 1;
+
+    namespace "org.openecomp.appc:artifacthandler";
+    prefix artifacthandler;
+
+    import ietf-inet-types { prefix "ietf"; revision-date "2010-09-24"; }
+    organization "AT&T, Inc.";
+
+    description
+        "Defines APPC interface to push reference data and templates.";
+
+    revision "2017-03-21" {
+        description
+                "Initial draft";
+    }
+
+    grouping configuration-document-information { 
+        uses request-information; 
+        uses document-parameters; 
+     }
+    
+     grouping request-information { 
+        container request-information { 
+           leaf request-id { 
+              type string; 
+           } 
+           leaf request-action { 
+              type enumeration { 
+                 enum "StoreAsdcDocumentRequest";
+              } 
+           } 
+           leaf request-sub-action { 
+              type enumeration { 
+                 enum "STOREDOCUMENT";
+              } 
+           } 
+           leaf source { 
+              type string; 
+           } 
+        } 
+     }
+     grouping document-parameters { 
+        container document-parameters { 
+           leaf service-uuid { 
+              type string; 
+              mandatory true; 
+           } 
+           leaf distribution-id { 
+              type string; 
+           } 
+           leaf service-name { 
+              type string; 
+           } 
+           leaf service-description { 
+              type string; 
+           } 
+           leaf service-artifacts { 
+              type string; 
+           } 
+           leaf resource-uuid { 
+              type string; 
+           } 
+           leaf resource-instance-name { 
+              type string; 
+           } 
+           leaf resource-name { 
+              type string; 
+           } 
+           leaf resource-version { 
+              type string; 
+           } 
+           leaf resource-type { 
+              type string; 
+           } 
+           leaf artifact-uuid { 
+              type string; 
+           } 
+           leaf artifact-name { 
+              type string; 
+           } 
+           leaf artifact-type { 
+              type string; 
+           } 
+           leaf artifact-version { 
+              type string; 
+           } 
+           leaf artifact-description { 
+              type string; 
+           } 
+           leaf artifact-contents { 
+              type string; 
+           } 
+        } 
+     }
+     rpc uploadartifact {
+         description "upload the artifact into APPC";
+         input {
+         	uses configuration-document-information;
+         }
+         output { 
+             container config-document-response { 
+                leaf request-id { 
+                   type string; 
+                } 
+                leaf status { 
+                   type string; 
+                } 
+                leaf error-reason { 
+                   type string; 
+                } 
+             } 
+          }
+     }     
+}
diff --git a/appc-inbound/appc-artifact-handler/pom.xml b/appc-inbound/appc-artifact-handler/pom.xml
new file mode 100755
index 0000000..ffa7352
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/pom.xml
@@ -0,0 +1,49 @@
+<?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-inbound</artifactId>

+		<version>1.1.0-SNAPSHOT</version>

+	</parent>

+	<modelVersion>4.0.0</modelVersion>

+	<packaging>pom</packaging>

+	<artifactId>appc-artifact-handler</artifactId>

+

+	<dependencyManagement>

+		<dependencies>

+			<dependency>

+				<groupId>org.openecomp.appc</groupId>

+				<artifactId>appc-artifact-handler-features</artifactId>

+				<classifier>features</classifier>

+				<type>xml</type>

+				<version>${project.version}</version>

+			</dependency>

+			<dependency>

+				<groupId>org.openecomp.appc</groupId>

+				<artifactId>appc-artifact-handler-model</artifactId>

+				<version>${project.version}</version>

+			</dependency>

+			<dependency>

+				<groupId>org.openecomp.appc</groupId>

+				<artifactId>appc-artifact-handler-provider</artifactId>

+				<version>${project.version}</version>

+				<classifier>config</classifier>

+				<type>xml</type>

+			</dependency>

+			<dependency>

+				<groupId>org.openecomp.appc</groupId>

+				<artifactId>appc-artifact-handler-provider</artifactId>

+				<version>${project.version}</version>

+			</dependency>

+		</dependencies>

+	</dependencyManagement>

+

+	<modules>

+		<module>model</module>

+		<module>provider</module>

+		<module>features</module>

+		<module>installer</module>

+	</modules>

+</project>

diff --git a/appc-inbound/appc-artifact-handler/provider/.gitignore b/appc-inbound/appc-artifact-handler/provider/.gitignore
new file mode 100755
index 0000000..0f44a0f
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/.gitignore
@@ -0,0 +1,2 @@
+/target/
+/.classpath
diff --git a/appc-inbound/appc-artifact-handler/provider/pom.xml b/appc-inbound/appc-artifact-handler/provider/pom.xml
new file mode 100755
index 0000000..90d34a3
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/pom.xml
@@ -0,0 +1,184 @@
+<?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-artifact-handler</artifactId>
+		<groupId>org.openecomp.appc</groupId>
+		<version>1.1.0-SNAPSHOT</version>
+	</parent>
+	<artifactId>appc-artifact-handler-provider</artifactId>
+	<packaging>bundle</packaging>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-bundle-plugin</artifactId>
+				<extensions>true</extensions>
+				<configuration>
+					<instructions>
+						<Bundle-SymbolicName>org.openecomp.appc.artifact.handler</Bundle-SymbolicName>
+						<Bundle-Activator>org.openecomp.appc.artifact.handler.AsdcArtifactHandlerActivator</Bundle-Activator>
+						<Export-Package>org.openecomp.appc.artifact.handler,org.opendaylight.controller.config.yang.config.artifact-handler_provider.impl</Export-Package>
+						<Import-Package>*</Import-Package>
+						<DynamicImport-Package>*</DynamicImport-Package>
+					</instructions>
+					<manifestLocation>${project.basedir}/src/main/resources/META-INF</manifestLocation>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.opendaylight.yangtools</groupId>
+				<artifactId>yang-maven-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>config</id>
+						<goals>
+							<goal>generate-sources</goal>
+						</goals>
+						<configuration>
+							<codeGenerators>
+								<generator>
+									<codeGeneratorClass>org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator</codeGeneratorClass>
+									<outputBaseDir>${jmxGeneratorPath}</outputBaseDir>
+									<additionalConfiguration>
+										<namespaceToPackage1>urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang</namespaceToPackage1>
+									</additionalConfiguration>
+								</generator>
+								<generator>
+									<codeGeneratorClass>org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl</codeGeneratorClass>
+									<outputBaseDir>${salGeneratorPath}</outputBaseDir>
+								</generator>
+							</codeGenerators>
+							<inspectDependencies>true</inspectDependencies>
+						</configuration>
+					</execution>
+				</executions>
+				<dependencies>
+					<dependency>
+						<groupId>org.opendaylight.mdsal</groupId>
+						<artifactId>maven-sal-api-gen-plugin</artifactId>
+						<version>${odl.sal.api.gen.plugin.version}</version>
+						<type>jar</type>
+					</dependency>
+					<dependency>
+						<groupId>org.opendaylight.controller</groupId>
+						<artifactId>yang-jmx-generator-plugin</artifactId>
+						<version>${odl.yang.jmx.generator.version}</version>
+					</dependency>
+				</dependencies>
+			</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/initial/artifact-handler-provider.xml</file>
+									<type>xml</type>
+									<classifier>config</classifier>
+								</artifact>
+							</artifacts>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.openecomp.appc</groupId>
+			<artifactId>appc-artifact-handler-model</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.opendaylight.controller</groupId>
+			<artifactId>config-api</artifactId>
+		</dependency>
+ 		<dependency>
+ 			<groupId>org.openecomp.appc</groupId>
+ 			<artifactId>appc-yang-generator</artifactId>
+ 			<version>${project.version}</version>
+ 		</dependency>
+
+		<dependency>
+			<groupId>org.opendaylight.controller</groupId>
+			<artifactId>sal-binding-config</artifactId>
+			</dependency>
+		<dependency>
+			<groupId>org.opendaylight.controller</groupId>
+			<artifactId>sal-binding-api</artifactId>
+			</dependency>
+		<dependency>
+			<groupId>org.opendaylight.controller</groupId>
+			<artifactId>sal-common-util</artifactId>
+			</dependency>
+
+		<dependency>
+			<groupId>org.openecomp.sdnc.core</groupId>
+			<artifactId>sli-common</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.openecomp.sdnc.core</groupId>
+			<artifactId>sli-provider</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.openecomp.appc</groupId>
+			<artifactId>appc-config-params-provider</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+		<dependency>
+			<artifactId>sal-test-model</artifactId>
+			<groupId>org.opendaylight.controller</groupId>
+			<scope>test</scope>
+			</dependency>
+		<dependency>
+			<artifactId>sal-rest-connector</artifactId>
+			<groupId>org.opendaylight.netconf</groupId>
+			<scope>test</scope>
+			</dependency>
+		<dependency>
+			<groupId>org.opendaylight.controller</groupId>
+			<artifactId>sal-binding-broker-impl</artifactId>
+			<scope>test</scope>
+			</dependency>
+		<dependency>
+			<groupId>org.opendaylight.controller</groupId>
+			<artifactId>sal-binding-broker-impl</artifactId>
+			<version>${odl.mdsal.version}</version>
+			<classifier>tests</classifier>
+			<type>test-jar</type>
+			<scope>test</scope>
+		</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>org.apache.commons</groupId>
+			<artifactId>commons-lang3</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.json</groupId>
+			<artifactId>json</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.openecomp.sdnc.adaptors</groupId>
+			<artifactId>sql-resource-provider</artifactId>
+			<version>${openecomp.sdnc.sql-resource.version}</version>
+			<scope>compile</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/.gitignore b/appc-inbound/appc-artifact-handler/provider/src/main/.gitignore
new file mode 100755
index 0000000..f49bcf5
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/.gitignore
@@ -0,0 +1,2 @@
+/yang-gen-config/
+/yang-gen-sal/
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/opendaylight/yang/gen/v1/org/openecomp/appc/artifact/handler/provider/impl/rev170321/ArtifactHandlerProviderModule.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/opendaylight/yang/gen/v1/org/openecomp/appc/artifact/handler/provider/impl/rev170321/ArtifactHandlerProviderModule.java
new file mode 100644
index 0000000..a35ba68
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/opendaylight/yang/gen/v1/org/openecomp/appc/artifact/handler/provider/impl/rev170321/ArtifactHandlerProviderModule.java
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.opendaylight.yang.gen.v1.org.openecomp.appc.artifact.handler.provider.impl.rev170321;
+
+import org.openecomp.appc.artifact.handler.ArtifactHandlerProvider;
+
+public class ArtifactHandlerProviderModule extends org.opendaylight.yang.gen.v1.org.openecomp.appc.artifact.handler.provider.impl.rev170321.AbstractArtifactHandlerProviderModule {
+    public ArtifactHandlerProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+        super(identifier, dependencyResolver);
+    }
+
+    public ArtifactHandlerProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.yang.gen.v1.org.openecomp.appc.artifact.handler.provider.impl.rev170321.ArtifactHandlerProviderModule oldModule, java.lang.AutoCloseable oldInstance) {
+        super(identifier, dependencyResolver, oldModule, oldInstance);
+    }
+
+    @Override
+    public void customValidation() {
+        // add custom validation form module attributes here.
+    }
+
+    @Override
+    public java.lang.AutoCloseable createInstance() {
+        final ArtifactHandlerProvider provider = new ArtifactHandlerProvider(getDataBrokerDependency()
+                , getNotificationServiceDependency()
+                , getRpcRegistryDependency());
+
+        return new AutoCloseable() {
+
+           @Override
+           public void close() throws Exception {
+               provider.close();
+           }
+       };
+    }
+
+
+}
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/opendaylight/yang/gen/v1/org/openecomp/appc/artifact/handler/provider/impl/rev170321/ArtifactHandlerProviderModuleFactory.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/opendaylight/yang/gen/v1/org/openecomp/appc/artifact/handler/provider/impl/rev170321/ArtifactHandlerProviderModuleFactory.java
new file mode 100644
index 0000000..171eada
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/opendaylight/yang/gen/v1/org/openecomp/appc/artifact/handler/provider/impl/rev170321/ArtifactHandlerProviderModuleFactory.java
@@ -0,0 +1,37 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+/*
+* Generated file
+*
+* Generated from: yang module name: artifact-handler-provider-impl yang module local name: artifact-handler-provider-impl
+* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
+* Generated at: Wed Aug 09 09:36:59 EDT 2017
+*
+* Do not modify this file unless it is present under src/main directory
+*/
+package org.opendaylight.yang.gen.v1.org.openecomp.appc.artifact.handler.provider.impl.rev170321;
+public class ArtifactHandlerProviderModuleFactory extends org.opendaylight.yang.gen.v1.org.openecomp.appc.artifact.handler.provider.impl.rev170321.AbstractArtifactHandlerProviderModuleFactory {
+
+}
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/ArtifactHandlerProvider.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/ArtifactHandlerProvider.java
new file mode 100644
index 0000000..233984f
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/ArtifactHandlerProvider.java
@@ -0,0 +1,213 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.artifact.handler;
+
+import java.util.HashMap;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.artifacthandler.rev170321.ArtifactHandlerService;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.artifacthandler.rev170321.UploadartifactInput;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.artifacthandler.rev170321.UploadartifactInputBuilder;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.artifacthandler.rev170321.UploadartifactOutput;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.artifacthandler.rev170321.UploadartifactOutputBuilder;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.artifacthandler.rev170321.uploadartifact.output.ConfigDocumentResponseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.Services;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.ServicesBuilder;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.openecomp.appc.artifact.handler.node.ArtifactHandlerNode;
+import org.openecomp.appc.artifact.handler.utils.ArtifactHandlerProviderUtil;
+import org.openecomp.appc.artifact.handler.utils.AsdcArtifactHandlerConstants;
+import org.openecomp.sdnc.sli.SvcLogicContext;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.Futures;
+
+
+
+public class ArtifactHandlerProvider implements AutoCloseable, ArtifactHandlerService, DataChangeListener {
+
+    private static final EELFLogger log = EELFManager.getInstance().getLogger(ArtifactHandlerProvider.class);
+    private final String appName = "ArtifactsHandler";
+    private final ExecutorService executor;
+    protected DataBroker dataBroker;
+    protected NotificationProviderService notificationService;
+    protected RpcProviderRegistry rpcRegistry;
+    private ListenerRegistration<DataChangeListener> dclServices;
+
+    protected BindingAwareBroker.RpcRegistration<ArtifactHandlerService> rpcRegistration;
+
+    public ArtifactHandlerProvider(DataBroker dataBroker2,
+            NotificationProviderService notificationProviderService,
+            RpcProviderRegistry rpcProviderRegistry) {
+        this.log.info("Creating provider for " + appName);
+        executor = Executors.newFixedThreadPool(10);
+        dataBroker = dataBroker2;
+        notificationService = notificationProviderService;
+        rpcRegistry = rpcProviderRegistry;
+        initialize();
+
+    }
+
+    public void initialize() {
+        log.info("Initializing provider for " + appName);
+        // Create the top level containers
+        createContainers();
+        try {
+            ArtifactHandlerProviderUtil.loadProperties();
+        } catch (Exception e) {
+            log.error("Caught Exception while trying to load properties file");
+        }
+        // Listener for changes to Services tree
+
+        rpcRegistration = rpcRegistry.addRpcImplementation(
+                ArtifactHandlerService.class, this);
+
+        log.info("Initialization complete for " + appName);
+    }
+    private void createContainers() {
+        final WriteTransaction t = dataBroker.newReadWriteTransaction();
+        // Create the Services container
+        t.merge(LogicalDatastoreType.CONFIGURATION,InstanceIdentifier.create(Services.class),new ServicesBuilder().build());
+        t.merge(LogicalDatastoreType.OPERATIONAL,InstanceIdentifier.create(Services.class),new ServicesBuilder().build());
+
+        try {
+            CheckedFuture<Void, TransactionCommitFailedException> checkedFuture = t.submit();
+            checkedFuture.get();
+            log.info("Create Containers succeeded!: ");
+
+        } catch (InterruptedException | ExecutionException e) {
+            log.error("Create Containers Failed: " + e);
+            e.printStackTrace();
+        }
+    }
+
+
+    @Override
+    public void onDataChanged(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> arg0) {
+        // TODO Auto-generated method stub
+
+    }
+
+
+
+    @Override
+    public void close() throws Exception {
+
+        log.info("Closing provider for " + appName);
+        if(this.executor != null){
+            executor.shutdown();
+        }
+        if(this.rpcRegistration != null){
+            rpcRegistration.close();
+        }
+        log.info("Successfully closed provider for " + appName);
+
+    }
+
+    private RpcResult<UploadartifactOutput> buildResponse1(
+            String svcRequestId,
+            String topic,
+            String code,
+            String message,
+            String finalInd) {
+
+        UploadartifactOutputBuilder responseBuilder = new UploadartifactOutputBuilder();
+        ConfigDocumentResponseBuilder configResponseBuilder=new ConfigDocumentResponseBuilder();            
+        configResponseBuilder.setRequestId(svcRequestId);            
+        configResponseBuilder.setStatus(code);            
+        configResponseBuilder.setErrorReason(message);            
+        RpcResult<UploadartifactOutput> rpcResult = RpcResultBuilder.<UploadartifactOutput> status(true)
+                .withResult(responseBuilder.build()).build();
+        return rpcResult;            
+    }
+
+    @Override
+    public Future<RpcResult<UploadartifactOutput>> uploadartifact(UploadartifactInput input) {
+
+        if (input == null || input.getDocumentParameters() == null || input.getDocumentParameters().getArtifactContents() == null ) {        
+            RpcResult<UploadartifactOutput> rpcResult =
+                    buildResponse1("N/A", "N/A", "INVALID_INPUT", "Invalid input, null or empty document information" , "Y");
+            return Futures.immediateFuture(rpcResult);
+        }
+        UploadartifactInputBuilder inputBuilder = new UploadartifactInputBuilder(input);
+        ConfigDocumentResponseBuilder configResponseBuilder = new ConfigDocumentResponseBuilder();
+        UploadartifactOutputBuilder responseBuilder = new UploadartifactOutputBuilder();
+        log.info("Received input = " + input );
+        ArtifactHandlerProviderUtil designUtil = new ArtifactHandlerProviderUtil(input);
+        configResponseBuilder.setRequestId(input.getRequestInformation().getRequestId());
+        try{
+            
+            if(input.getRequestInformation().getSource() !=null){
+                if(input.getRequestInformation().getSource().equalsIgnoreCase(AsdcArtifactHandlerConstants.DESIGN_TOOL)){
+                        designUtil.processTemplate(designUtil.createDummyRequestData());
+                        configResponseBuilder.setStatus(ArtifactHandlerProviderUtil.DistributionStatusEnum.DEPLOY_OK.toString());
+                }
+                else
+                {
+                    designUtil.processTemplate(designUtil.createRequestData());
+                    configResponseBuilder.setStatus(ArtifactHandlerProviderUtil.DistributionStatusEnum.DEPLOY_OK.toString());        
+                }
+            }
+            else
+            {
+                throw new Exception("No Tempalte data found");                
+            }
+            
+            
+        }
+        catch (Exception e) {
+
+            configResponseBuilder.setErrorReason(e.getMessage());            
+            configResponseBuilder.setStatus(ArtifactHandlerProviderUtil.DistributionStatusEnum.DEPLOY_ERROR.toString());
+            log.error("Caught exception looking for Artifact Handler", e);
+            log.info("Caught exception looking for Artifact Handler: ");
+        }
+        
+        responseBuilder.setConfigDocumentResponse(configResponseBuilder.build());
+        RpcResult<UploadartifactOutput> rpcResult = RpcResultBuilder.<UploadartifactOutput> status(true).withResult(responseBuilder.build()).build();
+        return Futures.immediateFuture(rpcResult);
+
+    }
+}
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/AsdcArtifactHandlerActivator.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/AsdcArtifactHandlerActivator.java
new file mode 100644
index 0000000..4c8e135
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/AsdcArtifactHandlerActivator.java
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.artifact.handler;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Properties;
+
+import org.openecomp.appc.artifact.handler.node.ArtifactHandlerNode;
+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 AsdcArtifactHandlerActivator implements BundleActivator {
+
+    private static final EELFLogger log = EELFManager.getInstance().getLogger(AsdcArtifactHandlerActivator.class);
+    private List<ServiceRegistration> registrations = new LinkedList<ServiceRegistration>();
+    
+    @Override
+    public void start(BundleContext ctx) throws Exception {
+        ArtifactHandlerNode artifactHandlerNode = new ArtifactHandlerNode();
+        log.info("Registering service-- " + artifactHandlerNode.getClass().getName());
+        registrations.add(ctx.registerService(artifactHandlerNode.getClass().getName(), artifactHandlerNode, null));
+
+    }
+
+    @Override
+    public void stop(BundleContext arg0) throws Exception {
+        for (ServiceRegistration registration : registrations) {
+            registration.unregister();
+            registration = null;
+        }
+    }
+}
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/dbservices/DBService.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/dbservices/DBService.java
new file mode 100644
index 0000000..4984ebf
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/dbservices/DBService.java
@@ -0,0 +1,462 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.artifact.handler.dbservices;
+
+import java.sql.SQLException;
+import java.util.HashMap;
+
+import org.openecomp.appc.artifact.handler.utils.AsdcArtifactHandlerConstants;
+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 DBService {
+
+    private static final EELFLogger log = EELFManager.getInstance().getLogger(DBService.class);
+    private SvcLogicResource serviceLogic;
+    private static DBService dgGeneralDBService = null;
+    public static DBService initialise() {
+        if (dgGeneralDBService == null) {
+            dgGeneralDBService = new DBService();
+        }
+        return dgGeneralDBService;
+    }
+    private DBService() {
+        if (serviceLogic == null) {
+            serviceLogic = new SqlResource();
+        }
+    }
+
+    public String getInternalVersionNumber(SvcLogicContext ctx, String artifactName, String prefix) throws SvcLogicException {
+        String fn = "DBService.getInternalVersionNumber";
+        QueryStatus status = null;    
+        String  artifactInternalVersion = null;
+        if (serviceLogic != null && ctx != null) {    
+            String key = "select max(internal_version) as maximum from ASDC_ARTIFACTS  WHERE ARTIFACT_NAME = '" + artifactName + "'";    
+            log.info("Getting internal Versoin :" + key);
+            status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+            if(status.toString().equals("FAILURE"))
+                throw new SvcLogicException("Error - getting internal Artifact Number");
+            artifactInternalVersion = ctx.getAttribute("maximum");
+            log.info("Internal Version received as : " + artifactInternalVersion);
+            log.info("Internal Version received as1 : " + ctx.getAttribute("max(internal_version)"));
+            log.info("Internal Version received as1 : " + ctx.getAttribute("max"));
+            log.info("Internal Version received as1 : " + ctx.getAttribute("internal_version"));
+            log.info("Internal Version received as1 : " + ctx.getAttributeKeySet().toString());
+        }
+        return artifactInternalVersion;
+    }
+    public String getArtifactID(SvcLogicContext ctx, String artifactName) throws SvcLogicException {
+        String fn = "DBService.getArtifactID";
+        QueryStatus status = null;    
+        String  artifactID = null;
+        if (serviceLogic != null && ctx != null) {    
+            String key = "select max(ASDC_ARTIFACTS_ID) as id from ASDC_ARTIFACTS  WHERE ARTIFACT_NAME = '" + artifactName + "'";    
+            log.info("Getting Artifact ID String :" + key);
+            status = serviceLogic.query("SQL", false, null, key, null, null, ctx);
+            if(status.toString().equals("FAILURE"))
+                throw new SvcLogicException("Error - getting  Artifact ID from database");
+            artifactID = ctx.getAttribute("id");
+            log.info("ASDC_ARTIFACTS_ID received as : " + ctx.getAttribute("id"));
+        }
+        return artifactID;
+    }
+    public QueryStatus saveArtifacts(SvcLogicContext ctx, int intversion) throws SvcLogicException {
+        String fn = "DBService.saveArtifacts";
+        QueryStatus status = null;
+        if (serviceLogic != null && ctx != null) {
+            String key = "INSERT INTO ASDC_ARTIFACTS " +
+                    "SET SERVICE_UUID    =  $service-uuid , " + 
+                    " DISTRIBUTION_ID    =  $distribution-id ," + 
+                    " SERVICE_NAME    =  $service-name ," + 
+                    " SERVICE_DESCRIPTION    =  $service-description ," + 
+                    " RESOURCE_UUID    = $resource-uuid ," + 
+                    " RESOURCE_INSTANCE_NAME    = $resource-instance-name ," + 
+                    " RESOURCE_NAME    = $resource-name ," + 
+                    " RESOURCE_VERSION    = $resource-version ," + 
+                    " RESOURCE_TYPE    = $resource-type ," + 
+                    " ARTIFACT_UUID    = $artifact-uuid ," + 
+                    " ARTIFACT_TYPE    = $artifact-type ," + 
+                    " ARTIFACT_VERSION    = $artifact-version ," + 
+                    " ARTIFACT_DESCRIPTION    = $artifact-description ," + 
+                    " INTERNAL_VERSION    = " + intversion + "," + 
+                    " ARTIFACT_NAME       =  $artifact-name ," + 
+                    " ARTIFACT_CONTENT    =  $artifact-contents "  ;
+
+            status = serviceLogic.save("SQL", false, false, key, null, null, ctx);
+            if(status.toString().equals("FAILURE"))
+                throw new SvcLogicException("Error While processing storing Artifact: " +ctx.getAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME));
+        }
+        return status;
+
+    }
+    public QueryStatus logData(SvcLogicContext ctx, String prefix) throws SvcLogicException {
+        String fn = "DBService.saveReferenceData";
+        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);
+            if(status.toString().equals("FAILURE"))
+                throw new SvcLogicException("Error while loging data");
+
+        }
+        return status;
+    }
+
+    public void processConfigureActionDg(SvcLogicContext context, boolean isUpdate) {
+        String fn = "DBService.processConfigureActionDg";
+        log.info("Update Parameter for ASDC Reference " + isUpdate );
+        String key = "";
+        QueryStatus status = null;
+        if(isUpdate);
+
+    }
+
+    public void processAsdcReferences(SvcLogicContext context, boolean isUpdate) throws SvcLogicException {
+        String fn = "DBService.processAsdcReferences";
+        String key = "";
+        QueryStatus status = null;
+        
+        if (isUpdate && AsdcArtifactHandlerConstants.FILE_CATEGORY.equals(AsdcArtifactHandlerConstants.CAPABILITY)) {
+            key = "update " + AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE + "  set ARTIFACT_NAME = $" + AsdcArtifactHandlerConstants.ARTIFACT_NAME + 
+            " where VNFC_TYPE = $" + AsdcArtifactHandlerConstants.VNFC_TYPE + 
+            " and FILE_CATEGORY = $" + AsdcArtifactHandlerConstants.FILE_CATEGORY +
+            " and ACTION = null";
+        }
+        else if(isUpdate)
+            key = "update " + AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE + "  set ARTIFACT_NAME = $" + AsdcArtifactHandlerConstants.ARTIFACT_NAME + 
+            " where VNFC_TYPE = $" + AsdcArtifactHandlerConstants.VNFC_TYPE + 
+            " and FILE_CATEGORY = $" + AsdcArtifactHandlerConstants.FILE_CATEGORY + 
+            " and ACTION = $" + AsdcArtifactHandlerConstants.ACTION ;
+
+        else { 
+            if (AsdcArtifactHandlerConstants.FILE_CATEGORY.equals(AsdcArtifactHandlerConstants.CAPABILITY)) {
+                key = "insert into " + AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE +  
+                " set VNFC_TYPE = null "  +
+                " , FILE_CATEGORY = $" + AsdcArtifactHandlerConstants.FILE_CATEGORY +
+                " , VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE +
+                " , ACTION = null "  +
+                " , ARTIFACT_TYPE = null " +
+                " , ARTIFACT_NAME = $" + AsdcArtifactHandlerConstants.ARTIFACT_NAME ;
+            }
+            else {
+                key = "insert into " + AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE +  
+                " set VNFC_TYPE = $" + AsdcArtifactHandlerConstants.VNFC_TYPE +
+                " , FILE_CATEGORY = $" + AsdcArtifactHandlerConstants.FILE_CATEGORY +
+                " , VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE +
+                " , ACTION = $" + AsdcArtifactHandlerConstants.ACTION +
+                " , ARTIFACT_TYPE = $" + AsdcArtifactHandlerConstants.ARTIFACT_TYPE +
+                " , ARTIFACT_NAME = $" + AsdcArtifactHandlerConstants.ARTIFACT_NAME ;
+            }
+        }
+        if (serviceLogic != null && context != null) {    
+            log.info("Insert Key: " + key);
+            status = serviceLogic.save("SQL", false, false, key, null, null, context);
+            if(status.toString().equals("FAILURE"))
+                throw new SvcLogicException("Error While processing asdc_reference table ");
+        }
+    }
+
+    public boolean isArtifactUpdateRequired(SvcLogicContext context, String db) throws SvcLogicException, SQLException  {
+        String fn = "DBService.isArtifactUpdateRequired";
+        log.info("Checking if Update required for this data" );
+
+        log.info("db" + db);
+        log.info("ACTION=" + context.getAttribute(AsdcArtifactHandlerConstants.ACTION));
+        log.info("VNFC_TYPE=" + context.getAttribute(AsdcArtifactHandlerConstants.VNFC_TYPE));
+        log.info("VNFC_INSTANCE=" + context.getAttribute(AsdcArtifactHandlerConstants.VNFC_INSTANCE));
+        log.info("VM_INSTANCE=" + context.getAttribute(AsdcArtifactHandlerConstants.VM_INSTANCE));
+        log.info("VNF_TYPE=" + context.getAttribute(AsdcArtifactHandlerConstants.VNF_TYPE));
+        String whereClause =  "";
+
+        QueryStatus status = null;    
+    /*    if(context.getAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME) !=null &&
+                context.getAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME).toLowerCase().startsWith(AsdcArtifactHandlerConstants.PD))
+            whereClause = " where artifact_name = $" + AsdcArtifactHandlerConstants.ARTIFACT_NAME 
+            + " and vnf_type = 'DummyVnf' ";
+        else*/
+            whereClause = " where VNF_TYPE = $" +  AsdcArtifactHandlerConstants.VNF_TYPE;
+        
+        if (db !=null && db.equals(AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE) && 
+            context.getAttribute(AsdcArtifactHandlerConstants.FILE_CATEGORY).equals(AsdcArtifactHandlerConstants.CAPABILITY) &&
+            context.getAttribute(AsdcArtifactHandlerConstants.ACTION) ==null) {
+                whereClause = whereClause + " and FILE_CATEGORY = $" + AsdcArtifactHandlerConstants.FILE_CATEGORY ;
+        }
+            
+        else if(db !=null && db.equals(AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE)) {            
+            whereClause = whereClause + " and VNFC_TYPE = $" + AsdcArtifactHandlerConstants.VNFC_TYPE
+                    + " and FILE_CATEGORY = $" + AsdcArtifactHandlerConstants.FILE_CATEGORY  
+                    + " and ACTION = $" + AsdcArtifactHandlerConstants.ACTION;
+        }
+
+        else if(db.equals(AsdcArtifactHandlerConstants.DB_DOWNLOAD_DG_REFERENCE)) {
+            whereClause = " where PROTOCOL = $" + AsdcArtifactHandlerConstants.DEVICE_PROTOCOL;
+        }
+        else if(db.equals(AsdcArtifactHandlerConstants.DB_CONFIG_ACTION_DG)) {
+            whereClause = whereClause + " and ACTION = $" + AsdcArtifactHandlerConstants.ACTION;
+        }
+        else if(db.equals(AsdcArtifactHandlerConstants.DB_VNFC_REFERENCE)){
+            int vm_instance = -1  ;
+            if(context.getAttribute(AsdcArtifactHandlerConstants.VM_INSTANCE) !=null)
+                vm_instance = Integer.parseInt(context.getAttribute(AsdcArtifactHandlerConstants.VM_INSTANCE));
+            int vnfc_instance = -1  ;
+            if(context.getAttribute(AsdcArtifactHandlerConstants.VNFC_INSTANCE) !=null)
+                vnfc_instance = Integer.parseInt(context.getAttribute(AsdcArtifactHandlerConstants.VNFC_INSTANCE));
+            whereClause = whereClause + " and ACTION = $" + AsdcArtifactHandlerConstants.ACTION 
+                    + " and VNFC_TYPE = $" + AsdcArtifactHandlerConstants.VNFC_TYPE 
+                    + " and VNFC_INSTANCE = $" + AsdcArtifactHandlerConstants.VNFC_INSTANCE 
+                    + " and VM_INSTANCE = $" + AsdcArtifactHandlerConstants.VM_INSTANCE ;
+
+        }
+        if (serviceLogic != null && context != null) {    
+            String key = "select COUNT(*) from " + db + whereClause ;        
+            log.info("SELECT String : " + key);
+            status = serviceLogic.query("SQL", false, null, key, null, null, context);
+            if(status.toString().equals("FAILURE")){
+                throw new SvcLogicException("Error while reading data from " + db );
+            }
+            String count = context.getAttribute("COUNT(*)");
+            log.info("Number of row Returned : " + count + ": " +  status + ":");
+            if(count !=null && Integer.parseInt(count) > 0){                
+                context.setAttribute(count, null);
+                return true;
+            }
+            else
+                return false;
+        }
+        return false;
+    }
+
+    public void processDeviceInterfaceProtocol(SvcLogicContext context, boolean isUpdate) throws SvcLogicException {
+        String fn = "DBService.processDeviceInterfaceProtocol";
+        log.info("Starting DB operation for Device Interface Protocol " + isUpdate );
+        String key = "";
+        QueryStatus status = null;
+        if(isUpdate)
+            key = "update " + AsdcArtifactHandlerConstants.DB_DEVICE_INTERFACE_PROTOCOL + 
+            " set PROTOCOL = $" + AsdcArtifactHandlerConstants.DEVICE_PROTOCOL + 
+            " , DG_RPC = 'getDeviceRunningConfig' " +  
+            " , MODULE = 'APPC' " + 
+            " where VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE ;
+        else
+            key = "insert into " + AsdcArtifactHandlerConstants.DB_DEVICE_INTERFACE_PROTOCOL+ 
+            " set  VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE + 
+            " , PROTOCOL = $" + AsdcArtifactHandlerConstants.DEVICE_PROTOCOL + 
+            " , DG_RPC = 'getDeviceRunningConfig' " +  
+            " , MODULE = 'APPC' " ; 
+
+        if (serviceLogic != null && context != null) {    
+
+            status = serviceLogic.save("SQL", false, false, key, null, null, context);
+            if(status.toString().equals("FAILURE"))
+                throw new SvcLogicException("Error While processing DEVICE_INTERFACE_PROTOCOL table ");
+        }
+
+    }
+
+    public void processDeviceAuthentication(SvcLogicContext context, boolean isUpdate) throws SvcLogicException {
+        String fn = "DBService.processDeviceAuthentication";
+        log.info(fn + "Starting DB operation for Device Authentication " + isUpdate );
+        String key = "";
+        QueryStatus status = null;
+        if(isUpdate)
+            key = "update " + AsdcArtifactHandlerConstants.DB_DEVICE_AUTHENTICATION + 
+            " set USER_NAME = $" + AsdcArtifactHandlerConstants.USER_NAME + 
+            " , PASSWORD = 'dummy' " +
+            " , PORT_NUMBER = $" + AsdcArtifactHandlerConstants.PORT_NUMBER +
+            " where VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE ;
+        else
+            key = "insert into " + AsdcArtifactHandlerConstants.DB_DEVICE_AUTHENTICATION+ 
+            " set  VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE + 
+            " , USER_NAME = $" + AsdcArtifactHandlerConstants.USER_NAME + 
+            " , PASSWORD = 'dummy' " +
+            " , PORT_NUMBER = $" + AsdcArtifactHandlerConstants.PORT_NUMBER;
+
+        if (serviceLogic != null && context != null) {    
+            status = serviceLogic.save("SQL", false, false, key, null, null, context);
+            if(status.toString().equals("FAILURE"))
+                throw new SvcLogicException("Error While processing DEVICE_AUTHENTICATION table ");
+        }    
+    }
+
+    public void processVnfcReference(SvcLogicContext context, boolean isUpdate) throws SvcLogicException {
+        String fn = "DBService.processVnfcReference";
+        log.info(fn + "Starting DB operation for Vnfc Reference " + isUpdate );
+        String key = "";
+        int vm_instance = -1  ;
+        if(context.getAttribute(AsdcArtifactHandlerConstants.VM_INSTANCE) !=null)
+            vm_instance = Integer.parseInt(context.getAttribute(AsdcArtifactHandlerConstants.VM_INSTANCE));
+        int vnfc_instance = -1  ;
+        if(context.getAttribute(AsdcArtifactHandlerConstants.VNFC_INSTANCE) !=null)
+            vnfc_instance = Integer.parseInt(context.getAttribute(AsdcArtifactHandlerConstants.VNFC_INSTANCE));
+        QueryStatus status = null;
+        if(isUpdate)
+            key = "update " + AsdcArtifactHandlerConstants.DB_VNFC_REFERENCE + 
+            " set VM_INSTANCE = " + vm_instance   + 
+            " , VNFC_INSTANCE = " + vnfc_instance + 
+            " , VNFC_TYPE = $" + AsdcArtifactHandlerConstants.VNFC_TYPE +
+            " , VNFC_FUNCTION_CODE = $" + AsdcArtifactHandlerConstants.VNFC_FUNCTION_CODE +
+            " , GROUP_NOTATION_TYPE = $" + AsdcArtifactHandlerConstants.GROUP_NOTATION_TYPE +
+            " , GROUP_NOTATION_VALUE = $" + AsdcArtifactHandlerConstants.GROUP_NOTATION_VALUE  +     
+            " , IPADDRESS_V4_OAM_VIP = $" + AsdcArtifactHandlerConstants.IPADDRESS_V4_OAM_VIP  + 
+            " where VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE +
+            " and ACTION = $" + AsdcArtifactHandlerConstants.ACTION +
+            " and VNFC_TYPE = $" + AsdcArtifactHandlerConstants.VNFC_TYPE  + 
+            " and VNFC_INSTANCE = $" + AsdcArtifactHandlerConstants.VNFC_INSTANCE 
+            + " and VM_INSTANCE = $" + AsdcArtifactHandlerConstants.VM_INSTANCE ;
+        else
+            key = "insert into " + AsdcArtifactHandlerConstants.DB_VNFC_REFERENCE+ 
+            " set  VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE + 
+            " , ACTION = $" + AsdcArtifactHandlerConstants.ACTION + 
+            " , VM_INSTANCE = $" + AsdcArtifactHandlerConstants.VM_INSTANCE + 
+            " , VNFC_INSTANCE = $" + AsdcArtifactHandlerConstants.VNFC_INSTANCE + 
+            " , VNFC_TYPE = $" + AsdcArtifactHandlerConstants.VNFC_TYPE +
+            " , VNFC_FUNCTION_CODE = $" + AsdcArtifactHandlerConstants.VNFC_FUNCTION_CODE +
+            " , GROUP_NOTATION_TYPE = $" + AsdcArtifactHandlerConstants.GROUP_NOTATION_TYPE +
+            " , IPADDRESS_V4_OAM_VIP = $" + AsdcArtifactHandlerConstants.IPADDRESS_V4_OAM_VIP  + 
+            " , GROUP_NOTATION_VALUE = $" + AsdcArtifactHandlerConstants.GROUP_NOTATION_VALUE ;    
+
+        if (serviceLogic != null && context != null) {    
+            status = serviceLogic.save("SQL", false, false, key, null, null, context);
+            if(status.toString().equals("FAILURE"))
+                throw new SvcLogicException("Error While processing VNFC_REFERENCE table ");
+        }
+    }
+
+    public void processDownloadDgReference(SvcLogicContext context, boolean isUpdate) throws SvcLogicException, SQLException {
+        String fn = "DBService.processDownloadDgReference";
+        log.info(fn + "Starting DB operation for Download DG Reference " + isUpdate );
+        String key = "";
+        QueryStatus status = null;
+
+        if(isUpdate)
+            key = "update " + AsdcArtifactHandlerConstants.DB_DOWNLOAD_DG_REFERENCE + 
+            " set DOWNLOAD_CONFIG_DG = $" + AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE + 
+            " where PROTOCOL = $" + AsdcArtifactHandlerConstants.DEVICE_PROTOCOL ;
+        else 
+            key = "insert into " + AsdcArtifactHandlerConstants.DB_DOWNLOAD_DG_REFERENCE+ 
+            " set DOWNLOAD_CONFIG_DG = $" + AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE + 
+            " , PROTOCOL = $" + AsdcArtifactHandlerConstants.DEVICE_PROTOCOL ;
+
+        if (serviceLogic != null && context != null)
+            status = serviceLogic.save("SQL", false, false, key, null, null, context);
+        if(status.toString().equals("FAILURE"))
+            throw new SvcLogicException("Error While processing DOWNLOAD_DG_REFERENCE table ");
+    }
+    public void processConfigActionDg(SvcLogicContext context, boolean isUpdate) throws SvcLogicException
+    {
+        String fn = "DBService.processConfigActionDg";
+        log.info(fn + "Starting DB operation for Config DG Action " + isUpdate );
+        String key = "";
+        QueryStatus status = null;
+
+        if(context.getAttribute(AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE) != null && 
+                context.getAttribute(AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE).length() > 0){
+            if(isUpdate)
+                key = "update " + AsdcArtifactHandlerConstants.DB_CONFIG_ACTION_DG + 
+                " set DOWNLOAD_CONFIG_DG = $" + AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE + 
+                " where ACTION = $" + AsdcArtifactHandlerConstants.ACTION  + 
+                " and VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE ;
+            else 
+                key = "insert into " + AsdcArtifactHandlerConstants.DB_CONFIG_ACTION_DG+ 
+                " set DOWNLOAD_CONFIG_DG = $" + AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE + 
+                " , ACTION = $" + AsdcArtifactHandlerConstants.ACTION  + 
+                " , VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE ;
+
+            if (serviceLogic != null && context != null)
+                status = serviceLogic.save("SQL", false, false, key, null, null, context);
+            if(status.toString().equals("FAILURE"))
+                throw new SvcLogicException("Error While processing Configure DG Action table ");
+        }
+        else
+            log.info("No Update required for Config DG Action");
+
+    }
+
+    public String  getModelDataInformationbyArtifactName(String artifact_name) throws SvcLogicException 
+    {
+        String fn = "DBService.getVnfData";
+        String key = "";
+        SvcLogicContext con = new SvcLogicContext();
+        HashMap<String, String> modelData = new HashMap<String, String>();
+        QueryStatus status = null;
+        key = "select VNF_TYPE, VNFC_TYPE, ACTION, FILE_CATEGORY, ARTIFACT_TYPE from ASDC_REFERENCE where  ARTIFACT_NAME = " + artifact_name ;
+
+        if (serviceLogic != null && con != null) {    
+            log.info(fn + "select Key: " + key);
+            status = serviceLogic.query("SQL", false, null, key, null, null, con);
+            if(status.toString().equals("FAILURE"))
+                throw new SvcLogicException("Error While processing is ArtifactUpdateRequiredforPD table ");        
+
+        }
+
+        log.info(fn + "Vnf_received :" + con.getAttribute("VNF_TYPE"));            
+
+        return con.getAttribute("VNF_TYPE");
+
+    }
+    public void updateYangContents(SvcLogicContext context, String artifactId, String yangContents) throws SvcLogicException {
+        String fn = "DBService.updateYangContents";
+        log.info(fn + "Starting DB operation for  updateYangContents");
+        String key = "";
+        QueryStatus status = null;
+
+            key = "update ASDC_ARTIFACTS " + 
+                " set ARTIFACT_CONTENT = '" + yangContents  +  "'" + 
+                " where ASDC_ARTIFACTS_ID = " + artifactId ;
+                
+            if (serviceLogic != null && context != null)
+                status = serviceLogic.save("SQL", false, false, key, null, null, context);
+            if(status.toString().equals("FAILURE"))
+                throw new SvcLogicException("Error While processing Configure DG Action table ");        
+
+    }
+    
+    
+    public void insertProtocolReference(SvcLogicContext context, String vnfType, String protocol, String action, String action_level,
+            String template) throws SvcLogicException {
+        String fn = "DBService.insertProtocolReference";
+        log.info(fn + "Starting DB operation for  insertProtocolReference");
+        String key = "";
+        QueryStatus status = null;
+
+            key = "insert into PROTOCOL_REFERENCE (ACTION, VNF_TYPE, PROTOCOL, UPDATED_DATE, TEMPLATE, ACTION_LEVEL)" + 
+                " values  (" +  
+                 "'"+action +"', '"+ vnfType+"', '"+protocol+"', now(),'"+template+"', '"+action_level+"')";
+                
+            if (serviceLogic != null && context != null)
+                status = serviceLogic.save("SQL", false, false, key, null, null, context);
+            if(status.toString().equals("FAILURE"))
+                throw new SvcLogicException("Error While processing insertProtocolReference ");    
+        
+    }
+}
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/node/ArtifactHandlerNode.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/node/ArtifactHandlerNode.java
new file mode 100644
index 0000000..e4cefad
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/node/ArtifactHandlerNode.java
@@ -0,0 +1,450 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.artifact.handler.node;
+
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+import java.util.Map;
+
+import org.apache.commons.lang.StringUtils;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.openecomp.appc.artifact.handler.dbservices.DBService;
+import org.openecomp.appc.artifact.handler.utils.ArtifactHandlerProviderUtil;
+import org.openecomp.appc.artifact.handler.utils.AsdcArtifactHandlerConstants;
+import org.openecomp.appc.yang.YANGGenerator;
+import org.openecomp.appc.yang.impl.YANGGeneratorFactory;
+import org.openecomp.sdnc.config.params.transformer.tosca.ArtifactProcessorImpl;
+import org.openecomp.sdnc.sli.SvcLogicContext;
+import org.openecomp.sdnc.sli.SvcLogicException;
+import org.openecomp.sdnc.sli.SvcLogicJavaPlugin;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+
+
+public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
+
+    private static final EELFLogger log = EELFManager.getInstance().getLogger(ArtifactHandlerNode.class);
+    public void processArtifact(Map<String, String> inParams, SvcLogicContext ctx) throws Exception 
+    {
+        String responsePrefix = inParams.get("response_prefix");        
+        try{
+            if(inParams != null && !inParams.isEmpty() && inParams.get("postData") !=null ){
+                log.info("Received request for process Artifact with params: " + inParams.toString());                        
+                String postData = inParams.get("postData");
+                JSONObject input = new JSONObject(postData).getJSONObject("input");
+                responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+                storeUpdateAsdcArtifacts(input);
+            }
+        }
+        catch(Exception e){
+            e.printStackTrace();
+            throw e;
+        }
+    }
+
+    private boolean storeUpdateAsdcArtifacts(JSONObject postDataJson) throws Exception {
+        log.info("Starting processing of ASDC Artifacs into Handler with Data : " + postDataJson.toString());        
+        try{
+            JSONObject request_information = (JSONObject)postDataJson.get(AsdcArtifactHandlerConstants.REQUEST_INFORMATION);
+            JSONObject document_information =(JSONObject)postDataJson.get(AsdcArtifactHandlerConstants.DOCUMENT_PARAMETERS);
+            String artifact_name = document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME);
+            if(artifact_name !=null){
+                updateStoreArtifacts(request_information, document_information );
+                if(artifact_name.toLowerCase().startsWith(AsdcArtifactHandlerConstants.REFERENCE))    
+                    return storeReferenceData(request_information, document_information );
+                else if (artifact_name.toLowerCase().startsWith(AsdcArtifactHandlerConstants.PD))
+                    return createDataForPD(request_information, document_information );
+
+            }
+            else
+                throw new Exception("Missing Artifact Name for Request : "  + request_information.getString(AsdcArtifactHandlerConstants.REQUETS_ID));                    
+        }
+        catch(Exception e){
+            e.printStackTrace();
+            throw new Exception("Error while processing Request ID : " + ((JSONObject)postDataJson.get(AsdcArtifactHandlerConstants.REQUEST_INFORMATION)).getString(AsdcArtifactHandlerConstants.REQUETS_ID) + e.getMessage());
+        }
+        return false;        
+
+    }
+    private boolean createDataForPD(JSONObject request_information, JSONObject document_information) throws Exception {
+
+        String fn = "ArtifactHandlerNode.createReferenceDataForPD";
+        String artifact_name = document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME);
+        log.info(fn + "Received PD File Name: " + artifact_name + " and suffix lenght " + AsdcArtifactHandlerConstants.PD.length());
+        try {
+
+            String suffix = artifact_name.substring(AsdcArtifactHandlerConstants.PD.length());
+            createArtifactRecords(request_information, document_information, suffix);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new Exception("Error while createing PD data records " + e.getMessage());
+        }        
+        return true;
+    }
+
+    private void createArtifactRecords(JSONObject request_information, JSONObject document_information, String suffix) throws Exception {
+
+        log.info("Creating Tosca Records and storing into ASDC Artifacs");
+        String [] docs = {"Tosca", "Yang"};    
+        ArtifactHandlerProviderUtil ahpUtil = new ArtifactHandlerProviderUtil();
+        String PDFileContents = document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_CONTENTS);
+
+        //Tosca generation
+        OutputStream toscaStream = new ByteArrayOutputStream();
+        String toscaContents = null;
+        ArtifactProcessorImpl toscaGenerator = new ArtifactProcessorImpl();
+        toscaGenerator.generateArtifact(PDFileContents,toscaStream);
+        if(toscaStream != null)
+            toscaContents = toscaStream.toString();
+        log.info("Generated Tosca File : " + toscaContents);
+
+        //Yang generation
+        //String yangContents = "Dummay Yang, Yang contents will be available after IST Integration";
+
+        String yangContents = "YANG generation is in Progress";
+        String yangName = null;
+
+        for(String doc : docs){
+            document_information.put(AsdcArtifactHandlerConstants.ARTIFACT_TYPE, doc.concat("Type"));
+            document_information.put(AsdcArtifactHandlerConstants.ARTIFACT_DESRIPTION, doc.concat("Model"));
+            if(doc.equals("Tosca"))
+                document_information.put(AsdcArtifactHandlerConstants.ARTIFACT_CONTENTS, ahpUtil.escapeSql(toscaContents));
+            else if (doc.equals("Yang"))
+                document_information.put(AsdcArtifactHandlerConstants.ARTIFACT_CONTENTS, ahpUtil.escapeSql(yangContents));        
+            document_information.put(AsdcArtifactHandlerConstants.ARTIFACT_NAME, doc.concat(suffix));    
+            yangName = doc.concat(suffix);
+            updateStoreArtifacts(request_information, document_information);
+        }    
+
+        String artifactId = getArtifactID(yangName);
+        OutputStream yangStream = new ByteArrayOutputStream();
+        YANGGenerator yangGenerator = YANGGeneratorFactory.getYANGGenerator();
+        yangGenerator.generateYANG(artifactId , toscaContents, yangStream);
+        if(yangStream != null)
+            yangContents = yangStream.toString();
+
+        if(yangContents !=null ){
+            updateYangContents(artifactId, ahpUtil.escapeSql(yangContents));
+        }
+
+    }
+
+    private void updateYangContents(String artifactId, String yangContents) throws SvcLogicException {
+        SvcLogicContext context = new SvcLogicContext();
+        DBService dbservice = DBService.initialise();
+        dbservice.updateYangContents(context, artifactId, yangContents);    
+    }
+
+    private String getArtifactID(String yangName) throws SvcLogicException {        
+        SvcLogicContext context = new SvcLogicContext();
+        DBService dbservice = DBService.initialise();
+        return dbservice.getArtifactID(context, yangName);    
+    }
+
+    private boolean updateStoreArtifacts(JSONObject request_information, JSONObject document_information ) throws Exception {
+        log.info("UpdateStoreArtifactsStarted storing of ASDC Artifacs ");
+
+        SvcLogicContext context = new SvcLogicContext();
+        DBService dbservice = DBService.initialise();
+        ArtifactHandlerProviderUtil ahpUtil = new ArtifactHandlerProviderUtil();
+        int intversion = 0;
+        context.setAttribute("artifact_name",document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME)); 
+        String internal_version = dbservice.getInternalVersionNumber(context, document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME), null);
+        log.info("Internal Version number received from Database : " + internal_version);
+        if(internal_version != null){
+            intversion = Integer.parseInt(internal_version);
+            intversion++ ;
+        }        
+        context.setAttribute(AsdcArtifactHandlerConstants.SERVICE_UUID, document_information.getString(AsdcArtifactHandlerConstants.SERVICE_UUID));
+        context.setAttribute(AsdcArtifactHandlerConstants.DISTRIBUTION_ID, document_information.getString(AsdcArtifactHandlerConstants.DISTRIBUTION_ID));
+        context.setAttribute(AsdcArtifactHandlerConstants.SERVICE_NAME, document_information.getString(AsdcArtifactHandlerConstants.SERVICE_NAME));
+        context.setAttribute(AsdcArtifactHandlerConstants.SERVICE_DESCRIPTION, document_information.getString(AsdcArtifactHandlerConstants.SERVICE_DESCRIPTION)); 
+        context.setAttribute(AsdcArtifactHandlerConstants.RESOURCE_UUID, document_information.getString(AsdcArtifactHandlerConstants.RESOURCE_UUID));
+        context.setAttribute(AsdcArtifactHandlerConstants.RESOURCE_INSTANCE_NAME,document_information.getString(AsdcArtifactHandlerConstants.RESOURCE_INSTANCE_NAME));
+        context.setAttribute(AsdcArtifactHandlerConstants.RESOURCE_VERSOIN, document_information.getString(AsdcArtifactHandlerConstants.RESOURCE_VERSOIN));
+        context.setAttribute(AsdcArtifactHandlerConstants.RESOURCE_TYPE, document_information.getString(AsdcArtifactHandlerConstants.RESOURCE_TYPE));
+        context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_UUID, document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_UUID)); 
+        context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_TYPE,document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_TYPE)); 
+        context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_VERSOIN,document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_VERSOIN)); 
+        context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_DESRIPTION,document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_DESRIPTION));
+        context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_CONTENTS,ahpUtil.escapeSql(document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_CONTENTS)));
+        context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME,document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME));
+        dbservice.saveArtifacts(context, intversion);
+        return true;            
+
+    }
+
+    public boolean storeReferenceData(JSONObject request_information, JSONObject document_information) throws Exception {    
+        log.info("Started storing of ASDC Artifacs into Handler" );
+        try{
+            boolean updateRequired = false;
+            boolean pdFile = false;
+            String suffix = null;
+            String categorySuffix = null;
+            DBService dbservice = DBService.initialise();
+            ArtifactHandlerProviderUtil ahpUtil = new ArtifactHandlerProviderUtil();
+            String contentString =  ahpUtil.escapeSql(document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_CONTENTS))    ;
+            String artifactName=ahpUtil.escapeSql(document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME));
+            String capabilityArtifactName=StringUtils.replace(artifactName,AsdcArtifactHandlerConstants.ARTIFACT_NAME_REFERENCE,AsdcArtifactHandlerConstants.ARTIFACT_NAME_CAPABILITY);
+            JSONObject capabilities = new JSONObject();
+            JSONArray vnfActionList = new JSONArray();
+            JSONArray vfModuleActionList = new JSONArray();
+            JSONArray vnfcActionList = new JSONArray();
+            JSONArray vmActionList = new JSONArray();
+            String vnfType=null;
+            JSONObject contentObject = new JSONObject(contentString);
+            JSONArray contentArray= contentObject.getJSONArray("reference_data");
+            for(int a=0; a<contentArray.length() ; a++){
+                
+                JSONObject content = (JSONObject) contentArray.get(a);
+                log.info("contentString =" + content.toString());
+                JSONObject scope = content.getJSONObject("scope");
+                log.info("scope :" + scope);
+                SvcLogicContext context = new SvcLogicContext();
+                vnfType=scope.getString(AsdcArtifactHandlerConstants.VNF_TYPE);
+                context.setAttribute(AsdcArtifactHandlerConstants.VNF_TYPE, scope.getString(AsdcArtifactHandlerConstants.VNF_TYPE));
+                context.setAttribute(AsdcArtifactHandlerConstants.ACTION, content.getString(AsdcArtifactHandlerConstants.ACTION));
+                String actionLevel=content.getString(AsdcArtifactHandlerConstants.ACTION_LEVEL);
+                context.setAttribute(AsdcArtifactHandlerConstants.ACTION_LEVEL, content.getString(AsdcArtifactHandlerConstants.ACTION_LEVEL));
+                if ((null != actionLevel) && actionLevel.equalsIgnoreCase(AsdcArtifactHandlerConstants.ACTION_LEVEL_VNFC)) {
+                    vnfcActionList.put(content.getString(AsdcArtifactHandlerConstants.ACTION));
+                }
+                if (null != actionLevel && actionLevel.equalsIgnoreCase(AsdcArtifactHandlerConstants.ACTION_LEVEL_VF_MODULE)) {
+                    vfModuleActionList.put(content.getString(AsdcArtifactHandlerConstants.ACTION));
+                }
+                if (null != actionLevel && actionLevel.equalsIgnoreCase(AsdcArtifactHandlerConstants.ACTION_LEVEL_VNF)) {
+                    vnfActionList.put(content.getString(AsdcArtifactHandlerConstants.ACTION));
+                }
+                if (null != actionLevel && actionLevel.equalsIgnoreCase(AsdcArtifactHandlerConstants.ACTION_LEVEL_VM)) {
+                    vmActionList.put(content.getString(AsdcArtifactHandlerConstants.ACTION));
+                }
+                if(scope.has(AsdcArtifactHandlerConstants.VNFC_TYPE) && !scope.isNull(AsdcArtifactHandlerConstants.VNFC_TYPE) )
+                    context.setAttribute(AsdcArtifactHandlerConstants.VNFC_TYPE, scope.getString(AsdcArtifactHandlerConstants.VNFC_TYPE));
+                else
+                    context.setAttribute(AsdcArtifactHandlerConstants.VNFC_TYPE,null);
+                if (content.has(AsdcArtifactHandlerConstants.DEVICE_PROTOCOL))
+                    context.setAttribute(AsdcArtifactHandlerConstants.DEVICE_PROTOCOL, content.getString(AsdcArtifactHandlerConstants.DEVICE_PROTOCOL));
+                if (content.has(AsdcArtifactHandlerConstants.USER_NAME))
+                    context.setAttribute(AsdcArtifactHandlerConstants.USER_NAME, content.getString(AsdcArtifactHandlerConstants.USER_NAME));
+                if (content.has(AsdcArtifactHandlerConstants.PORT_NUMBER))
+                    context.setAttribute(AsdcArtifactHandlerConstants.PORT_NUMBER, content.getString(AsdcArtifactHandlerConstants.PORT_NUMBER));
+                context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_TYPE, "");
+                if(content.has("artifact-list") && content.get("artifact-list") instanceof JSONArray){                
+                    JSONArray artifactLists = (JSONArray)content.get("artifact-list"); 
+                    for(int i=0;i<artifactLists.length();i++){
+                        JSONObject artifact=(JSONObject)artifactLists.get(i);
+                        log.info("artifact is " + artifact);
+                        context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME, artifact.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME));
+                        context.setAttribute(AsdcArtifactHandlerConstants.FILE_CATEGORY, artifact.getString(AsdcArtifactHandlerConstants.ARTIFACT_TYPE));                    
+
+                        if(artifact.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME) !=null && 
+                                artifact.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME).toLowerCase().startsWith(AsdcArtifactHandlerConstants.PD))
+                        {
+                            suffix = artifact.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME).substring(AsdcArtifactHandlerConstants.PD.length());
+                            categorySuffix = artifact.getString(AsdcArtifactHandlerConstants.ARTIFACT_TYPE).substring(AsdcArtifactHandlerConstants.PD.length());
+                            pdFile = true;
+                        }
+
+                        dbservice.processAsdcReferences(context, dbservice.isArtifactUpdateRequired(context, AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE));        
+
+                        cleanArtifactInstanceData(context);
+                    }
+
+                    if(pdFile)
+                    {
+                        context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME, "Tosca".concat(suffix));
+                        context.setAttribute(AsdcArtifactHandlerConstants.FILE_CATEGORY, AsdcArtifactHandlerConstants.TOSCA_MODEL);
+                        dbservice.processAsdcReferences(context, dbservice.isArtifactUpdateRequired(context, AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE));
+                        context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME, "Yang".concat(suffix));
+                        context.setAttribute(AsdcArtifactHandlerConstants.FILE_CATEGORY, AsdcArtifactHandlerConstants.PARAMETER_YANG);
+                        dbservice.processAsdcReferences(context, dbservice.isArtifactUpdateRequired(context, AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE));
+                    }
+                }
+                if (content.getString(AsdcArtifactHandlerConstants.ACTION).equals("Configure")) {
+                    if(content.has(AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE) && content.getString(AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE).length() > 0){
+                        context.setAttribute(AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE, content.getString(AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE));
+                        dbservice.processDownloadDgReference(context, dbservice.isArtifactUpdateRequired(context,AsdcArtifactHandlerConstants.DB_DOWNLOAD_DG_REFERENCE));
+                    }
+    
+                    dbservice.processConfigActionDg(context, dbservice.isArtifactUpdateRequired(context, AsdcArtifactHandlerConstants.DB_CONFIG_ACTION_DG));
+                    dbservice.processDeviceInterfaceProtocol(context, dbservice.isArtifactUpdateRequired(context, AsdcArtifactHandlerConstants.DB_DEVICE_INTERFACE_PROTOCOL));
+                    dbservice.processDeviceAuthentication(context, dbservice.isArtifactUpdateRequired(context, AsdcArtifactHandlerConstants.DB_DEVICE_AUTHENTICATION));
+                    
+                }
+                
+                
+                populateProtocolReference(dbservice, content);
+                
+                context.setAttribute(AsdcArtifactHandlerConstants.VNFC_TYPE, null);
+                
+                if( content.has(AsdcArtifactHandlerConstants.VM)  && content.get(AsdcArtifactHandlerConstants.VM) instanceof JSONArray){
+                    JSONArray vmList = (JSONArray)content.get(AsdcArtifactHandlerConstants.VM);
+                    for(int i=0;i<vmList.length();i++){
+                        JSONObject vmInstance=(JSONObject)vmList.get(i);    
+                        context.setAttribute(AsdcArtifactHandlerConstants.VM_INSTANCE, String.valueOf(vmInstance.getInt(AsdcArtifactHandlerConstants.VM_INSTANCE)));
+                        log.info("VALUE = " + context.getAttribute(AsdcArtifactHandlerConstants.VM_INSTANCE));
+                        if(vmInstance.get(AsdcArtifactHandlerConstants.VNFC) instanceof JSONArray){
+                            JSONArray vnfcInstanceList = (JSONArray)vmInstance.get(AsdcArtifactHandlerConstants.VNFC);
+                            for(int k=0;k<vnfcInstanceList.length();k++){
+                                JSONObject vnfcInstance = (JSONObject)vnfcInstanceList.get(k);
+                                context.setAttribute(AsdcArtifactHandlerConstants.VNFC_INSTANCE, String.valueOf(vnfcInstance.getInt(AsdcArtifactHandlerConstants.VNFC_INSTANCE)));
+                                context.setAttribute(AsdcArtifactHandlerConstants.VNFC_TYPE, vnfcInstance.getString(AsdcArtifactHandlerConstants.VNFC_TYPE));
+                                context.setAttribute(AsdcArtifactHandlerConstants.VNFC_FUNCTION_CODE, vnfcInstance.getString(AsdcArtifactHandlerConstants.VNFC_FUNCTION_CODE));
+                                if(vnfcInstance.has(AsdcArtifactHandlerConstants.IPADDRESS_V4_OAM_VIP))
+                                    context.setAttribute(AsdcArtifactHandlerConstants.IPADDRESS_V4_OAM_VIP, vnfcInstance.getString(AsdcArtifactHandlerConstants.IPADDRESS_V4_OAM_VIP));
+                                if(vnfcInstance.has(AsdcArtifactHandlerConstants.GROUP_NOTATION_TYPE))
+                                    context.setAttribute(AsdcArtifactHandlerConstants.GROUP_NOTATION_TYPE, vnfcInstance.getString(AsdcArtifactHandlerConstants.GROUP_NOTATION_TYPE));
+                                if(vnfcInstance.has(AsdcArtifactHandlerConstants.GROUP_NOTATION_VALUE))
+                                    context.setAttribute(AsdcArtifactHandlerConstants.GROUP_NOTATION_VALUE, vnfcInstance.getString(AsdcArtifactHandlerConstants.GROUP_NOTATION_VALUE));
+                                dbservice.processVnfcReference(context, dbservice.isArtifactUpdateRequired(context, AsdcArtifactHandlerConstants.DB_VNFC_REFERENCE));    
+                                cleanVnfcInstance(context);
+                            }
+                            context.setAttribute(AsdcArtifactHandlerConstants.VM_INSTANCE,null);
+                        }
+                    }        
+                } 
+                
+                                
+            }
+            capabilities.put("vnf",vnfActionList );     
+            capabilities.put("vf-module", vfModuleActionList);
+            capabilities.put("vnfc", vnfcActionList);
+            capabilities.put("vm", vmActionList);
+            processAndStoreCapablitiesArtifact(dbservice, document_information, capabilities,capabilityArtifactName,vnfType );
+            
+        }
+            catch(Exception e)
+            {
+                e.printStackTrace();
+                throw new Exception("Error While Storing :  " + e.getMessage());            
+            }
+        
+            return true;            
+        }
+
+        
+        
+
+
+        private void cleanArtifactInstanceData(SvcLogicContext context)
+        {
+            context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME, null);
+            context.setAttribute(AsdcArtifactHandlerConstants.FILE_CATEGORY, null);
+        }
+
+        private void cleanVnfcInstance(SvcLogicContext context) {
+
+            context.setAttribute(AsdcArtifactHandlerConstants.VNFC_INSTANCE, null);
+            context.setAttribute(AsdcArtifactHandlerConstants.VNFC_TYPE, null);
+            context.setAttribute(AsdcArtifactHandlerConstants.VNFC_FUNCTION_CODE, null);
+            context.setAttribute(AsdcArtifactHandlerConstants.IPADDRESS_V4_OAM_VIP, null);
+            context.setAttribute(AsdcArtifactHandlerConstants.GROUP_NOTATION_TYPE, null);
+            context.setAttribute(AsdcArtifactHandlerConstants.GROUP_NOTATION_VALUE, null);
+
+        }
+
+        private void processAndStoreCapablitiesArtifact (DBService dbservice , JSONObject document_information, 
+        JSONObject capabilities, String capabilityArtifactName, String vnfType) throws Exception {
+            log.info("Begin-->processAndStoreCapablitiesArtifact ");
+
+            try {
+                
+                JSONObject newCapabilitiesObject=new JSONObject();
+                newCapabilitiesObject.put("capabilities", capabilities);
+                SvcLogicContext context = new SvcLogicContext();
+                context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME,capabilityArtifactName);
+                context.setAttribute(AsdcArtifactHandlerConstants.FILE_CATEGORY, AsdcArtifactHandlerConstants.CAPABILITY);
+                context.setAttribute(AsdcArtifactHandlerConstants.ACTION, null);
+                context.setAttribute(AsdcArtifactHandlerConstants.VNFC_TYPE, null);
+                context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_TYPE, null);
+                context.setAttribute(AsdcArtifactHandlerConstants.VNF_TYPE,vnfType);
+                context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_CONTENTS,newCapabilitiesObject.toString());
+                dbservice.processAsdcReferences(context, dbservice.isArtifactUpdateRequired(context, AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE));
+                int intversion = 0;
+                
+                String internal_version = dbservice.getInternalVersionNumber(context, context.getAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME), null);
+                log.info("Internal Version number received from Database : " + internal_version);
+                if(internal_version != null){
+                    intversion = Integer.parseInt(internal_version);
+                    intversion++ ;
+                }        
+                context.setAttribute(AsdcArtifactHandlerConstants.SERVICE_UUID, document_information.getString(AsdcArtifactHandlerConstants.SERVICE_UUID));
+                context.setAttribute(AsdcArtifactHandlerConstants.DISTRIBUTION_ID, document_information.getString(AsdcArtifactHandlerConstants.DISTRIBUTION_ID));
+                context.setAttribute(AsdcArtifactHandlerConstants.SERVICE_NAME, document_information.getString(AsdcArtifactHandlerConstants.SERVICE_NAME));
+                context.setAttribute(AsdcArtifactHandlerConstants.SERVICE_DESCRIPTION, document_information.getString(AsdcArtifactHandlerConstants.SERVICE_DESCRIPTION)); 
+                context.setAttribute(AsdcArtifactHandlerConstants.RESOURCE_UUID, document_information.getString(AsdcArtifactHandlerConstants.RESOURCE_UUID));
+                context.setAttribute(AsdcArtifactHandlerConstants.RESOURCE_INSTANCE_NAME,document_information.getString(AsdcArtifactHandlerConstants.RESOURCE_INSTANCE_NAME));
+                context.setAttribute(AsdcArtifactHandlerConstants.RESOURCE_VERSOIN, document_information.getString(AsdcArtifactHandlerConstants.RESOURCE_VERSOIN));
+                context.setAttribute(AsdcArtifactHandlerConstants.RESOURCE_TYPE, document_information.getString(AsdcArtifactHandlerConstants.RESOURCE_TYPE));
+                context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_UUID, document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_UUID)); 
+                context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_VERSOIN,document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_VERSOIN)); 
+                context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_DESRIPTION,document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_DESRIPTION));
+                
+                
+                dbservice.saveArtifacts(context, intversion);
+                return ;            
+            }
+            catch (Exception e) {
+                log.error("Error saving capabilities artifact to DB: "+ e.toString());
+                throw e;
+            }
+            finally {
+                log.info("End-->processAndStoreCapablitiesArtifact ");
+            }
+        
+            }
+        
+
+            private void populateProtocolReference(DBService dbservice, JSONObject content)  throws Exception{
+                log.info("Begin-->populateProtocolReference ");
+                try {
+                    SvcLogicContext context = new SvcLogicContext();
+                    JSONObject scope = content.getJSONObject("scope");
+                    String vnfType=null,protocol=null,action=null,actionLevel=null,template=null;
+                    if(scope.has(AsdcArtifactHandlerConstants.VNF_TYPE) && !scope.isNull(AsdcArtifactHandlerConstants.VNF_TYPE))
+                        vnfType=scope.getString(AsdcArtifactHandlerConstants.VNF_TYPE);
+                    if (content.has(AsdcArtifactHandlerConstants.DEVICE_PROTOCOL))
+                        protocol=content.getString(AsdcArtifactHandlerConstants.DEVICE_PROTOCOL);
+                    if (content.has(AsdcArtifactHandlerConstants.ACTION))
+                        action= content.getString(AsdcArtifactHandlerConstants.ACTION);
+                    if (content.has(AsdcArtifactHandlerConstants.ACTION_LEVEL))
+                        actionLevel=content.getString(AsdcArtifactHandlerConstants.ACTION_LEVEL);
+                    if (content.has(AsdcArtifactHandlerConstants.TEMPLATE) && !content.isNull(AsdcArtifactHandlerConstants.TEMPLATE))
+                        template=content.getString(AsdcArtifactHandlerConstants.TEMPLATE);
+                    dbservice.insertProtocolReference(context, vnfType,protocol,action,actionLevel,template);
+                }
+                catch (Exception e) {
+                    log.error("Error inserting record into protocolReference: "+e.toString());
+                    throw e;
+                }
+                finally {
+                    log.info("End-->populateProtocolReference ");
+                }
+            }
+
+    }
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/ArtifactHandlerProviderUtil.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/ArtifactHandlerProviderUtil.java
new file mode 100644
index 0000000..91b6e88
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/ArtifactHandlerProviderUtil.java
@@ -0,0 +1,184 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.artifact.handler.utils;
+
+import java.io.IOException;
+import java.security.SecureRandom;
+import java.util.HashMap;
+
+import org.apache.commons.lang3.StringUtils;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.artifacthandler.rev170321.UploadartifactInput;
+import org.openecomp.appc.artifact.handler.node.ArtifactHandlerNode;
+import org.openecomp.sdnc.sli.SvcLogicContext;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+public class ArtifactHandlerProviderUtil {
+
+    public UploadartifactInput templateData ; 
+    SvcLogicContext context = null;
+    private static final EELFLogger log = EELFManager.getInstance().getLogger(ArtifactHandlerProviderUtil.class);
+    public static void loadProperties() {
+        // TODO Auto-generated method stub
+        
+    }
+    public enum DistributionStatusEnum {
+        DOWNLOAD_OK,
+        DOWNLOAD_ERROR,
+        ALREADY_DOWNLOADED,
+        DEPLOY_OK,
+        DEPLOY_ERROR,
+        ALREADY_DEPLOYED;
+    }
+
+    public ArtifactHandlerProviderUtil(){};
+    
+    public ArtifactHandlerProviderUtil(UploadartifactInput input) {
+        this.templateData = input;
+        log.info("templateData " + this.templateData);
+    }
+    
+    public void processTemplate(String requestInfo) throws Exception {        
+        if(context == null)
+            context = new SvcLogicContext();
+            
+        ArtifactHandlerNode node  = new ArtifactHandlerNode();
+        try {
+            
+            HashMap<String, String>  processdata = new HashMap<String, String>();
+            processdata.put("postData", requestInfo);
+            log.info("Post data = " + requestInfo);
+            node.processArtifact(processdata, context);
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            log.error("Error: " + e.getMessage());
+            e.printStackTrace();
+            throw e;
+        }
+        
+    }
+    public String createDummyRequestData() throws JSONException, IOException{
+
+
+        JSONObject info = new JSONObject(this.templateData);
+        log.info("INFO = " + info);
+        String artifact_name  = templateData.getDocumentParameters().getArtifactName();
+        String artifact_version =  templateData.getDocumentParameters().getArtifactVersion();
+        
+        JSONObject json = new JSONObject();
+        JSONObject requestInfo = new JSONObject();       
+        String random = getRandom();
+        
+        requestInfo.put(AsdcArtifactHandlerConstants.REQUETS_ID, "TLRID-" + random);
+        requestInfo.put(AsdcArtifactHandlerConstants.REQUEST_ACTION, "StoreAsdcDocumentRequest");
+        requestInfo.put(AsdcArtifactHandlerConstants.SOURCE, "TemplateLoader");
+    
+        JSONObject docParams = new JSONObject();
+        docParams.put(AsdcArtifactHandlerConstants.SERVICE_UUID, "TLSUUID" + templateData.getRequestInformation().getRequestId());
+        docParams.put(AsdcArtifactHandlerConstants.DISTRIBUTION_ID, "TLDID" + random);
+        docParams.put(AsdcArtifactHandlerConstants.SERVICE_NAME, "TLServiceName");
+        docParams.put(AsdcArtifactHandlerConstants.SERVICE_DESCRIPTION, "Template Loader Test");
+        docParams.put(AsdcArtifactHandlerConstants.SERVICE_ARTIFACTS, "[]");
+        docParams.put(AsdcArtifactHandlerConstants.RESOURCE_UUID, "TLRUID" + random);
+        docParams.put(AsdcArtifactHandlerConstants.RESOURCE_INSTANCE_NAME, "TLRIName");
+        docParams.put(AsdcArtifactHandlerConstants.REOURCE_NAME, "TLResourceName");
+        docParams.put(AsdcArtifactHandlerConstants.RESOURCE_VERSOIN, "TLResourceVersion");
+        docParams.put(AsdcArtifactHandlerConstants.RESOURCE_TYPE, "TLResourceType");
+        docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_UUID, "TLAUUID" +  random);
+        docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_NAME, templateData.getDocumentParameters().getArtifactName());
+        docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_TYPE, "APPC-CONFIG");
+        docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_VERSOIN, templateData.getDocumentParameters().getArtifactVersion());
+        docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_DESRIPTION, "AsdcTestDescription");
+    //   String data = IOUtils.toString(TestartifactHandlerNode.class.getClassLoader().getResourceAsStream("template_msrp_msc_a_template.json"), "utf-8");
+    //    String data = IOUtils.toString(TemplateProcessor.class.getClassLoader().getResourceAsStream("referenceData.json"), "utf-8");
+
+       // this.templateData = this.templateData.substring(this.templateData.indexOf("}") + 1);
+        docParams.put("artifact-contents", templateData.getDocumentParameters().getArtifactContents());
+    
+        json.put(AsdcArtifactHandlerConstants.REQUEST_INFORMATION, requestInfo);
+        json.put(AsdcArtifactHandlerConstants.DOCUMENT_PARAMETERS, docParams);
+        System.out.println("Final data ="  + this.templateData);
+        return String.format("{\"input\": %s}", json.toString());
+    }
+    
+    private String getRandom() {
+        SecureRandom random = new SecureRandom();
+        int num = random.nextInt(100000);
+        String formatted = String.format("%05d", num); 
+        return formatted;
+    }
+    
+    public String escapeSql(String str) {
+        if (str == null) {
+            return null;
+        }
+        String searchList[] = new String[]{"'","\\"};
+        String replacementList[] = new String[]{ "''","\\\\"};
+        return StringUtils.replaceEach(str,searchList, replacementList);
+    }
+    public String createRequestData() throws JSONException, IOException{
+
+
+        JSONObject info = new JSONObject(this.templateData);
+        log.info("INFO = " + info);
+                
+        JSONObject json = new JSONObject();
+        JSONObject requestInfo = new JSONObject();       
+        String random = getRandom();
+        
+        requestInfo.put(AsdcArtifactHandlerConstants.REQUETS_ID, templateData.getRequestInformation().getRequestId());
+        requestInfo.put(AsdcArtifactHandlerConstants.REQUEST_ACTION, "StoreAsdcDocumentRequest");
+        requestInfo.put(AsdcArtifactHandlerConstants.SOURCE, templateData.getRequestInformation().getSource());
+    
+        JSONObject docParams = new JSONObject();
+        docParams.put(AsdcArtifactHandlerConstants.SERVICE_UUID, templateData.getDocumentParameters().getResourceUuid());
+        docParams.put(AsdcArtifactHandlerConstants.DISTRIBUTION_ID, templateData.getDocumentParameters().getDistributionId());
+        docParams.put(AsdcArtifactHandlerConstants.SERVICE_NAME, templateData.getDocumentParameters().getServiceName());
+        docParams.put(AsdcArtifactHandlerConstants.SERVICE_DESCRIPTION, templateData.getDocumentParameters().getServiceDescription());
+        docParams.put(AsdcArtifactHandlerConstants.SERVICE_ARTIFACTS, templateData.getDocumentParameters().getServiceArtifacts());
+        docParams.put(AsdcArtifactHandlerConstants.RESOURCE_UUID, templateData.getDocumentParameters().getResourceUuid());
+        docParams.put(AsdcArtifactHandlerConstants.RESOURCE_INSTANCE_NAME, templateData.getDocumentParameters().getResourceInstanceName());
+        docParams.put(AsdcArtifactHandlerConstants.REOURCE_NAME, templateData.getDocumentParameters().getResourceName());
+        docParams.put(AsdcArtifactHandlerConstants.RESOURCE_VERSOIN, templateData.getDocumentParameters().getResourceVersion());
+        docParams.put(AsdcArtifactHandlerConstants.RESOURCE_TYPE, templateData.getDocumentParameters().getResourceType());
+        docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_UUID, templateData.getDocumentParameters().getArtifactUuid());
+        docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_NAME, templateData.getDocumentParameters().getArtifactName());
+        docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_TYPE, templateData.getDocumentParameters().getArtifactType());
+        docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_VERSOIN, templateData.getDocumentParameters().getArtifactVersion());
+        docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_DESRIPTION, templateData.getDocumentParameters().getArtifactDescription());
+
+        docParams.put("artifact-contents", templateData.getDocumentParameters().getArtifactContents());
+    
+        json.put(AsdcArtifactHandlerConstants.REQUEST_INFORMATION, requestInfo);
+        json.put(AsdcArtifactHandlerConstants.DOCUMENT_PARAMETERS, docParams);
+        System.out.println("Final data ="  + this.templateData);
+        return String.format("{\"input\": %s}", json.toString());
+    }
+    
+
+}
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/AsdcArtifactHandlerConstants.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/AsdcArtifactHandlerConstants.java
new file mode 100644
index 0000000..cfcb250
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/AsdcArtifactHandlerConstants.java
@@ -0,0 +1,93 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.artifact.handler.utils;
+
+public class AsdcArtifactHandlerConstants {
+
+    public static final String DOCUMENT_PARAMETERS = "document-parameters";
+    public static final String SERVICE_UUID  = "service-uuid";
+    public static final String DISTRIBUTION_ID  = "distribution-id";
+    public static final String REQUETS_ID = "request-id"; 
+    public static final String REQUEST_ACTION = "request-action"; 
+    public static final String SOURCE = "source";
+    public static final String SERVICE_NAME = "service-name"; 
+    public static final String SERVICE_DESCRIPTION ="service-description"; 
+    public static final String SERVICE_ARTIFACTS = "service-artifacts"; 
+    public static final String RESOURCE_UUID ="resource-uuid"; 
+    public static final String RESOURCE_INSTANCE_NAME = "resource-instance-name";
+    public static final String REOURCE_NAME = "resource-name";
+    public static final String RESOURCE_VERSOIN ="resource-version";
+    public static final String RESOURCE_TYPE= "resource-type"; 
+    public static final String ARTIFACT_UUID ="artifact-uuid";
+    public static final String ARTIFACT_NAME = "artifact-name"; 
+    public static final String ARTIFACT_TYPE = "artifact-type"; 
+    public static final String ARTIFACT_VERSOIN = "artifact-version"; 
+    public static final String ARTIFACT_DESRIPTION = "artifact-description";
+    public static final String ARTIFACT_CONTENTS = "artifact-contents";
+    public static final String REQUEST_INFORMATION = "request-information";
+    public static final String INTERNAL_VERSION = "internal-versoin";
+    public static final String FILE_CATEGORY = "file-category";
+    public static final String VNF_TYPE = "vnf-type";
+    public static final String ACTION = "action";
+    public static final String ACTION_LEVEL = "action-level";
+    public static final String VNFC_TYPE = "vnfc-type";
+    public static final String VM_INSTANCE = "vm-instance";
+    public static final String VM = "vm";
+    public static final String VNFC = "vnfc";
+    public static final String VNFC_FUNCTION_CODE = "vnfc-function-code";
+    public static final String GROUP_NOTATION = "group-notation";
+    public static final String IPADDRESS_V4_OAM_VIP  = "ipaddress-v4-oam-vip";
+    public static final String GROUP_NOTATION_TYPE  = "group-notation-type";
+    public static final String GROUP_NOTATION_VALUE = "group-notation-value";
+    public static final String REFERENCE = "reference";
+    public static final String VNFC_INSTANCE = "vnfc-instance";
+    public static final String DEVICE_PROTOCOL = "device-protocol";
+    public static final String DG_RPC = "dg-rpc";
+    public static final String MODULE = "module";
+    public static final String USER_NAME = "user-name";
+    public static final String PORT_NUMBER = "port-number";
+    public static final String DOWNLOAD_DG_REFERENCE = "download-dg-reference";
+
+    
+    public static final String DB_DOWNLOAD_DG_REFERENCE = "DOWNLOAD_DG_REFERENCE";
+    public static final String DB_ASDC_REFERENCE = "ASDC_REFERENCE";
+    public static final String DB_DEVICE_INTERFACE_PROTOCOL = "DEVICE_INTERFACE_PROTOCOL";
+    public static final String DB_DEVICE_AUTHENTICATION = "DEVICE_AUTHENTICATION";
+    public static final String DB_VNFC_REFERENCE = "VNFC_REFERENCE";
+    public static final String DB_CONFIG_ACTION_DG = "CONFIGURE_ACTION_DG";
+    public static final String PD = "pd";
+    public static final String PARAMETER_YANG = "parameter_yang";
+    public static final String TOSCA_MODEL = "tosca_model";
+    public static final String DESIGN_TOOL = "Design-tool";
+    public static final String ACTION_LEVEL_VNFC = "VNFC";
+    public static final String ACTION_LEVEL_VF_MODULE ="VF-MODULE";
+    public static final String ACTION_LEVEL_VNF = "VNF";
+    public static final String ACTION_LEVEL_VM = "VM";
+    public static final String CAPABILITY = "capability";
+    public static final String TEMPLATE = "template";
+    public static final String ARTIFACT_NAME_REFERENCE = "reference";
+    public static final String ARTIFACT_NAME_CAPABILITY = "capability";
+}
+
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/EscapeUtils.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/EscapeUtils.java
new file mode 100644
index 0000000..a5a3381
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/EscapeUtils.java
@@ -0,0 +1,43 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.artifact.handler.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-inbound/appc-artifact-handler/provider/src/main/resources/initial/artifact-handler-provider.xml b/appc-inbound/appc-artifact-handler/provider/src/main/resources/initial/artifact-handler-provider.xml
new file mode 100644
index 0000000..658cb3f
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/resources/initial/artifact-handler-provider.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ============LICENSE_START=======================================================
+  ONAP : 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.
+  
+  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+  ============LICENSE_END=========================================================
+  -->
+
+<!-- vi: set et smarttab sw=4 tabstop=4: -->
+<snapshot>
+    <configuration>
+        <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+            <modules xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
+                <module>
+                
+                    <!-- This xmlns:prefix should match the namespace in the *-provider-impl.yang file
+                         The prefix: inside type should match the prefix of the yang file. -->
+                    <type xmlns:prefix="org:openecomp:appc:artifact:handler:provider:impl">
+                        prefix:artifact-handler-provider-impl
+                    </type>
+                    <name>artifact-handler-provider-impl</name>
+
+                    <!--  The following sections contain bindings to services defined in the
+                          *-provider-impl yang file. For example the rpc-registry is required
+                          because we have a dependency (or augmentation) named "rpc-registry"
+                          and which binds to the md-sa-binding-registry. If you remove those
+                          dependencies from the yang file then you can remove them from here. -->
+                    <rpc-registry>
+                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
+                        <name>binding-rpc-broker</name>
+                    </rpc-registry>
+                    
+                    <data-broker>
+                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-async-data-broker</type>
+                        <name>binding-data-broker</name>
+                    </data-broker>
+                    
+                     <notification-service>
+                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">
+                            binding:binding-notification-service
+                        </type>
+                        <name>binding-notification-broker</name>
+                    </notification-service>
+                </module>
+
+            </modules>
+        </data>
+
+    </configuration>
+
+    <!--  Required capabilities are basically a listing of all modules that need to be imported before
+          our service can be resolved. Capabilities for dependencies defined above are implied which is
+          why we do not have define a required capability for the data broker, for example. -->
+    <required-capabilities>
+        <capability>org:openecomp:appc:artifact:handler:provider:impl?module=artifact-handler-provider-impl&amp;revision=2017-03-21</capability>
+    </required-capabilities>
+
+</snapshot>
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/yang/artifact-handler-provider-impl.yang b/appc-inbound/appc-artifact-handler/provider/src/main/yang/artifact-handler-provider-impl.yang
new file mode 100644
index 0000000..01eeb39
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/yang/artifact-handler-provider-impl.yang
@@ -0,0 +1,85 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+module artifact-handler-provider-impl {
+
+    yang-version 1;
+    namespace "org:openecomp:appc:artifact:handler:provider:impl";
+    prefix "artifact-handler-provider-impl";
+
+    import config { prefix config; revision-date 2013-04-05; }
+    import opendaylight-md-sal-binding { prefix mdsal; revision-date 2013-10-28; }
+
+     description
+        "This module contains the base YANG definitions for
+    	 artifact-handler-provider impl implementation.";
+
+    revision "2017-03-21" {
+        description
+            "Initial revision.";
+    }
+
+    // This is the definition of the service implementation as a module identity.
+    identity artifact-handler-provider-impl {
+            base config:module-type;
+
+            // Specifies the prefix for generated java classes.
+            config:java-name-prefix ArtifactHandlerProvider;
+    }
+
+    // Augments the 'configuration' choice node under modules/module.
+    // We consume the three main services, RPCs, DataStore, and Notifications
+    augment "/config:modules/config:module/config:configuration" {
+        case artifact-handler-provider-impl {
+            when "/config:modules/config:module/config:type = 'artifact-handler-provider-impl'";
+
+            container rpc-registry {
+                uses config:service-ref {
+                    refine type {
+                        mandatory true;
+                        config:required-identity mdsal:binding-rpc-registry;
+                    }
+                }
+            }
+
+            container notification-service {
+                uses config:service-ref {
+                    refine type {
+                        mandatory true;
+                        config:required-identity mdsal:binding-notification-service;
+                    }
+                }
+            }
+
+            container data-broker {
+                uses config:service-ref {
+                    refine type {
+                        mandatory false;
+                        config:required-identity mdsal:binding-async-data-broker;
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/appc-inbound/appc-artifact-handler/provider/src/test/java/org/openecomp/appc/artifact/handler/node/TestArtifactHandlerNode.java b/appc-inbound/appc-artifact-handler/provider/src/test/java/org/openecomp/appc/artifact/handler/node/TestArtifactHandlerNode.java
new file mode 100644
index 0000000..6687c79
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/test/java/org/openecomp/appc/artifact/handler/node/TestArtifactHandlerNode.java
@@ -0,0 +1,38 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : 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.
+ * 
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.artifact.handler.node;
+
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.util.Enumeration;
+import java.util.Properties;
+
+import org.apache.commons.io.IOUtils;
+import org.json.JSONObject;
+
+public class TestArtifactHandlerNode {
+    
+    //Onap Migration    
+}
diff --git a/appc-inbound/appc-artifact-handler/provider/src/test/resources/svclogic.properties b/appc-inbound/appc-artifact-handler/provider/src/test/resources/svclogic.properties
new file mode 100644
index 0000000..ae595f7
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/test/resources/svclogic.properties
@@ -0,0 +1,37 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : 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.
+# 
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+# ============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-inbound/appc-artifact-handler/provider/src/test/resources/templates/general_template b/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/general_template
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/general_template
diff --git a/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/pd_template b/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/pd_template
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/pd_template
diff --git a/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/reference_template b/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/reference_template
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/reference_template
diff --git a/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/template_Asdc b/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/template_Asdc
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/template_Asdc