Initial commit for appc-config-params

Change-Id: I5805591892184b4456dd30639417d783d353a6a3
Signed-off-by: Anand Chaturvedi <ac204h@att.com>
Issue-Id:APPC-9
diff --git a/appc-config/appc-config-params/.gitignore b/appc-config/appc-config-params/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/appc-config/appc-config-params/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/appc-config/appc-config-params/features/.gitignore b/appc-config/appc-config-params/features/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/appc-config/appc-config-params/features/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/appc-config/appc-config-params/features/pom.xml b/appc-config/appc-config-params/features/pom.xml
new file mode 100644
index 0000000..52b7587
--- /dev/null
+++ b/appc-config/appc-config-params/features/pom.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.openecomp.appc</groupId>
+		<artifactId>appc-config-params</artifactId>
+		<version>1.1.0-SNAPSHOT</version>
+	</parent>
+	<artifactId>appc-config-params-features</artifactId>
+	<name>Config Params Plugin - Features</name>
+	<packaging>jar</packaging>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.openecomp.appc</groupId>
+			<artifactId>appc-config-params-provider</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-lang</groupId>
+			<artifactId>commons-lang</artifactId>
+			<version>2.6</version>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.opendaylight.mdsal</groupId>
+			<artifactId>features-mdsal</artifactId>
+			<version>${odl.mdsal.version}</version>
+			<classifier>features</classifier>
+			<type>xml</type>
+
+			<scope>runtime</scope>
+		</dependency>
+
+
+		<!-- dependency for opendaylight-karaf-empty for use by testing -->
+		<dependency>
+			<groupId>org.opendaylight.controller</groupId>
+			<artifactId>opendaylight-karaf-empty</artifactId>
+			<version>${odl.karaf.empty.distro.version}</version>
+			<type>zip</type>
+		</dependency>
+
+
+		<dependency>
+			<!-- Required for launching the feature tests -->
+			<groupId>org.opendaylight.odlparent</groupId>
+			<artifactId>features-test</artifactId>
+			<version>${odl.commons.opendaylight.version}</version>
+			<scope>test</scope>
+		</dependency>
+
+	</dependencies>
+
+	<build>
+		<resources>
+			<resource>
+				<filtering>true</filtering>
+				<directory>src/main/resources</directory>
+			</resource>
+		</resources>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-resources-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>filter</id>
+						<goals>
+							<goal>resources</goal>
+						</goals>
+						<phase>generate-resources</phase>
+					</execution>
+				</executions>
+			</plugin>
+			<!-- launches the feature test, which validates that your karaf feature 
+				can be installed inside of a karaf container. It doesn't validate that your 
+				functionality works correctly, just that you have all of the dependent bundles 
+				defined correctly. <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> 
+				<version>2.16</version> <configuration> <systemPropertyVariables> <karaf.distro.groupId>org.opendaylight.controller</karaf.distro.groupId> 
+				<karaf.distro.artifactId>opendaylight-karaf-empty</karaf.distro.artifactId> 
+				<karaf.distro.version>${odl.karaf.empty.distro.version}</karaf.distro.version> 
+				</systemPropertyVariables> <dependenciesToScan> <dependency>org.opendaylight.yangtools:features-test</dependency> 
+				</dependenciesToScan> </configuration> </plugin> -->
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>build-helper-maven-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>attach-artifacts</id>
+						<goals>
+							<goal>attach-artifact</goal>
+						</goals>
+						<phase>package</phase>
+						<configuration>
+							<artifacts>
+								<artifact>
+									<file>${project.build.directory}/classes/${features.file}</file>
+									<type>xml</type>
+									<classifier>features</classifier>
+								</artifact>
+							</artifacts>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+</project>
diff --git a/appc-config/appc-config-params/features/src/main/resources/features.xml b/appc-config/appc-config-params/features/src/main/resources/features.xml
new file mode 100644
index 0000000..d02b840
--- /dev/null
+++ b/appc-config/appc-config-params/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.
+  ================================================================================
+  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="appc-config-params-${project.version}"
+	xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
+
+	<repository>mvn:org.opendaylight.mdsal/features-mdsal/${odl.mdsal.version}/xml/features</repository>
+
+	<feature name='appc-config-params' description="Application Controller Config Params"
+		version='${project.version}'>
+		<!-- Most applications will have a dependency on the ODL MD-SAL Broker -->
+		<feature version="${broker-mdsal.version}">odl-mdsal-broker</feature>
+		<feature version= '${sdnc.sli.version}'>sdnc-sli</feature>
+		
+		<bundle>mvn:commons-lang/commons-lang/2.6</bundle>
+		<bundle>mvn:commons-collections/commons-collections/${common.collections.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>wrap:mvn:com.att.eelf/eelf-core/${eelf.version}</bundle>
+		<bundle>mvn:ch.qos.logback/logback-core/${logback.version}</bundle>
+		<bundle>mvn:ch.qos.logback/logback-classic/${logback.version}</bundle>
+		<bundle>mvn:org.openecomp.appc/appc-config-params-provider/${project.version}</bundle>
+	</feature>
+</features>
diff --git a/appc-config/appc-config-params/installer/pom.xml b/appc-config/appc-config-params/installer/pom.xml
new file mode 100644
index 0000000..f63b837
--- /dev/null
+++ b/appc-config/appc-config-params/installer/pom.xml
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.openecomp.appc</groupId>
+        <artifactId>appc-config-params</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>appc-config-params-installer</artifactId>
+    <name>Config Component Params - Installer</name>
+    <packaging>pom</packaging>
+    <properties>
+        <application.name>appc-config-params</application.name>
+        <features.boot>appc-config-params</features.boot>
+        <features.repositories>mvn:org.openecomp.appc/appc-config-params-features/${project.version}/xml/features</features.repositories>
+        <include.transitive.dependencies>false</include.transitive.dependencies>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.openecomp.appc</groupId>
+            <artifactId>appc-config-params-features</artifactId>
+            <classifier>features</classifier>
+            <type>xml</type>
+            <exclusions>
+                <exclusion>
+                    <groupId>*</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.openecomp.appc</groupId>
+            <artifactId>appc-config-params-provider</artifactId>
+            <version>1.1.0-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>maven-repo-zip</id>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                        <phase>package</phase>
+                        <configuration>
+                        	<appendAssemblyId>false</appendAssemblyId>
+                            <attach>false</attach>
+                            <finalName>stage/${application.name}-${project.version}</finalName>
+                            <descriptors>
+                                <descriptor>src/assembly/assemble_mvnrepo_zip.xml</descriptor>
+                            </descriptors>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>installer-zip</id>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                        <phase>package</phase>
+                        <configuration>
+                        	<appendAssemblyId>false</appendAssemblyId>
+                            <attach>true</attach>
+                            <finalName>${application.name}-${project.version}</finalName>
+                            <descriptors>
+                                <descriptor>src/assembly/assemble_installer_zip.xml</descriptor>
+                            </descriptors>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-dependencies</id>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <phase>prepare-package</phase>
+                        <configuration>
+                            <transitive>false</transitive>
+                            <outputDirectory>${project.build.directory}/assembly/system</outputDirectory>
+                            <overWriteReleases>false</overWriteReleases>
+                            <overWriteSnapshots>true</overWriteSnapshots>
+                            <overWriteIfNewer>true</overWriteIfNewer>
+                            <useRepositoryLayout>true</useRepositoryLayout>
+                            <addParentPoms>false</addParentPoms>
+                            <copyPom>false</copyPom>
+                            <excludeGroupIds>org.opendaylight</excludeGroupIds>
+                            <scope>provided</scope>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-version</id>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <!-- here the phase you need -->
+                        <phase>validate</phase>
+                        <configuration>
+                            <outputDirectory>${basedir}/target/stage</outputDirectory>
+                            <resources>
+                                <resource>
+                                    <directory>src/main/resources/scripts</directory>
+                                    <includes>
+                                        <include>install-feature.sh</include>
+                                    </includes>
+                                    <filtering>true</filtering>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/appc-config/appc-config-params/installer/src/assembly/assemble_installer_zip.xml b/appc-config/appc-config-params/installer/src/assembly/assemble_installer_zip.xml
new file mode 100644
index 0000000..706fab4
--- /dev/null
+++ b/appc-config/appc-config-params/installer/src/assembly/assemble_installer_zip.xml
@@ -0,0 +1,59 @@
+<!--
+  ============LICENSE_START=======================================================
+  ONAP : APP-C
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+  
+       http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+  -->
+
+<!-- Defines how we build the .zip file which is our distribution. -->
+
+<assembly
+	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+	<id>params</id>
+	<formats>
+		<format>zip</format>
+	</formats>
+
+	<!--  we want "system" and related files right at the root level
+		  as this file is suppose to be unzip on top of a karaf
+		  distro. -->
+	<includeBaseDirectory>false</includeBaseDirectory>
+
+	<fileSets>
+		<fileSet>
+			<directory>target/stage/</directory>
+			<outputDirectory>${application.name}</outputDirectory>
+			<fileMode>755</fileMode>
+			<includes>
+				<include>*.sh</include>
+			</includes>
+		</fileSet>
+		<fileSet>
+			<directory>target/stage/</directory>
+			<outputDirectory>${application.name}</outputDirectory>
+			<fileMode>644</fileMode>
+			<excludes>
+				<exclude>*.sh</exclude>
+			</excludes>
+		</fileSet>
+	</fileSets>
+
+
+
+</assembly>
diff --git a/appc-config/appc-config-params/installer/src/assembly/assemble_mvnrepo_zip.xml b/appc-config/appc-config-params/installer/src/assembly/assemble_mvnrepo_zip.xml
new file mode 100644
index 0000000..f7e0c95
--- /dev/null
+++ b/appc-config/appc-config-params/installer/src/assembly/assemble_mvnrepo_zip.xml
@@ -0,0 +1,47 @@
+<!--
+  ============LICENSE_START=======================================================
+  ONAP : APP-C
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+  
+       http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+  -->
+
+<!-- Defines how we build the .zip file which is our distribution. -->
+
+<assembly
+	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+	<id>params</id>
+	<formats>
+		<format>zip</format>
+	</formats>
+
+	<!--  we want "system" and related files right at the root level
+		  as this file is suppose to be unzip on top of a karaf
+		  distro. -->
+	<includeBaseDirectory>false</includeBaseDirectory>
+
+	<fileSets>
+		<fileSet>
+			<directory>target/assembly/</directory>
+			<outputDirectory>.</outputDirectory>
+			<excludes>
+			</excludes>
+		</fileSet>
+	</fileSets>
+
+</assembly>
diff --git a/appc-config/appc-config-params/installer/src/main/resources/scripts/install-feature.sh b/appc-config/appc-config-params/installer/src/main/resources/scripts/install-feature.sh
new file mode 100644
index 0000000..d3d2ea6
--- /dev/null
+++ b/appc-config/appc-config-params/installer/src/main/resources/scripts/install-feature.sh
@@ -0,0 +1,40 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : APP-C
+# ================================================================================
+# Copyright (C) 2017 AT&T Intellectual Property.  All rights reserved.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+#      http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=========================================================
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+###
+
+#!/bin/bash
+
+ODL_HOME=${ODL_HOME:-/opt/opendaylight/current}
+ODL_KARAF_CLIENT=${ODL_KARAF_CLIENT:-${ODL_HOME}/bin/client}
+ODL_KARAF_CLIENT_OPTS=${ODL_KARAF_CLIENT_OPTS:-"-u karaf"}
+INSTALLERDIR=$(dirname $0)
+
+REPOZIP=${INSTALLERDIR}/${features.boot}-${project.version}.zip
+
+if [ -f ${REPOZIP} ]
+then
+	unzip -n -d ${ODL_HOME} ${REPOZIP}
+else
+	echo "ERROR : repo zip ($REPOZIP) not found"
+	exit 1
+fi
+
+${ODL_KARAF_CLIENT} ${ODL_KARAF_CLIENT_OPTS} feature:repo-add ${features.repositories}
+${ODL_KARAF_CLIENT} ${ODL_KARAF_CLIENT_OPTS} feature:install ${features.boot}
diff --git a/appc-config/appc-config-params/pom.xml b/appc-config/appc-config-params/pom.xml
new file mode 100644
index 0000000..307bace
--- /dev/null
+++ b/appc-config/appc-config-params/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-config</artifactId>
+		<version>1.1.0-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<packaging>pom</packaging>
+	<artifactId>appc-config-params</artifactId>
+
+	<name>Config Params Node</name>
+	<description>Config Params Utilities for DG</description>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>		
+	</properties>
+
+
+	<dependencyManagement>
+
+		<dependencies>
+			<dependency>
+				<groupId>org.openecomp.appc</groupId>
+				<artifactId>appc-config-params-features</artifactId>
+				<classifier>features</classifier>
+				<type>xml</type>
+				<version>${project.version}</version>
+			</dependency>
+
+			<dependency>
+				<groupId>org.openecomp.appc</groupId>
+				<artifactId>appc-config-params-provider</artifactId>
+				<version>${project.version}</version>
+			</dependency>
+		</dependencies>
+
+
+	</dependencyManagement>
+
+
+	<modules>
+		<module>provider</module>
+		<module>features</module>
+		<module>installer</module>
+	</modules>
+</project>
diff --git a/appc-config/appc-config-params/provider/.gitignore b/appc-config/appc-config-params/provider/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/appc-config/appc-config-params/provider/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/appc-config/appc-config-params/provider/pom.xml b/appc-config/appc-config-params/provider/pom.xml
new file mode 100644
index 0000000..2619ca3
--- /dev/null
+++ b/appc-config/appc-config-params/provider/pom.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.openecomp.appc</groupId>
+		<artifactId>appc-config-params</artifactId>
+		<version>1.1.0-SNAPSHOT</version>
+	</parent>
+	<artifactId>appc-config-params-provider</artifactId>
+	<packaging>bundle</packaging>
+	<name>Config Params - Provider</name>
+
+	<dependencies>
+		<dependency>
+			<groupId>equinoxSDK381</groupId>
+			<artifactId>org.eclipse.osgi</artifactId>
+			<version>${equinox.osgi.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.openecomp.sdnc.core</groupId>
+			<artifactId>sli-provider</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.openecomp.sdc.common</groupId>
+			<artifactId>openecomp-tosca-datatype</artifactId>
+			<version>${tosca.datatype.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-databind</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-annotations</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-core</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.dataformat</groupId>
+			<artifactId>jackson-dataformat-yaml</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.yaml</groupId>
+			<artifactId>snakeyaml</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.att.eelf</groupId>
+			<artifactId>eelf-core</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<scope>test</scope>
+		</dependency>
+
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-bundle-plugin</artifactId>
+				<version>${bundle.plugin.version}</version>
+				<extensions>true</extensions>
+				<configuration>
+					<instructions>
+						<Bundle-SymbolicName>org.openecomp.sdnc.config.params</Bundle-SymbolicName>
+						<Bundle-Activator>org.openecomp.sdnc.config.params.ParamsHandlerActivator</Bundle-Activator>
+						<Export-Package>org.openecomp.sdnc.config.params,org.openecomp.sdnc.config.params.data,
+							org.openecomp.sdnc.config.params.parser,org.openecomp.sdnc.config.params.transformer,
+							org.openecomp.sdnc.config.params.transformer.tosca,org.openecomp.sdnc.config.params.transformer.tosca.exceptions</Export-Package>
+						<Import-Package>*</Import-Package>
+						<DynamicImport-Package>*</DynamicImport-Package>
+					</instructions>
+					<manifestLocation>${project.basedir}/src/main/resources/META-INF</manifestLocation>
+				</configuration>
+			</plugin>
+		</plugins>
+		<pluginManagement>
+			<plugins>
+				<!--This plugin's configuration is used to store Eclipse m2e settings 
+					only. It has no influence on the Maven build itself. -->
+			</plugins>
+		</pluginManagement>
+	</build>
+</project>
diff --git a/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/ParamsHandlerActivator.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/ParamsHandlerActivator.java
new file mode 100644
index 0000000..f248159
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/ParamsHandlerActivator.java
@@ -0,0 +1,68 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * 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.
+ * 
+ *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.params;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.openecomp.sdnc.config.params.parser.PropertyDefinitionNode;
+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 ParamsHandlerActivator implements BundleActivator{
+
+	private List<ServiceRegistration> registrations = new LinkedList<ServiceRegistration>();
+
+
+	private static final EELFLogger log = EELFManager.getInstance().getLogger(ParamsHandlerActivator.class);
+
+	@Override
+	public void start(BundleContext ctx) throws Exception
+	{
+
+		try {
+			PropertyDefinitionNode propertyDefinitionNode = new PropertyDefinitionNode();
+			log.info("Registering service "+ propertyDefinitionNode.getClass().getName());
+			registrations.add(ctx.registerService(propertyDefinitionNode.getClass().getName(), propertyDefinitionNode, null));
+			log.info("Registering service sccessful for  "+ propertyDefinitionNode.getClass().getName());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+	}
+	@Override
+	public void stop(BundleContext arg0) throws Exception
+	{
+		for (ServiceRegistration registration: registrations)
+		{
+			registration.unregister();
+			registration = null;
+		}
+
+	}
+
+}
diff --git a/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/ParamsHandlerConstant.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/ParamsHandlerConstant.java
new file mode 100644
index 0000000..4b54198
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/ParamsHandlerConstant.java
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * 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.
+ * 
+ *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.params;
+
+public class ParamsHandlerConstant {
+
+	public static String STRING_ENCODING = "utf-8";
+	public static String Y = "Y";
+	public static String N = "N";
+	public static String DATA_TYPE_TEXT = "TEXT";
+	public static String DATA_TYPE_JSON = "JSON";
+	public static String DATA_TYPE_XML = "XML";
+	public static String DATA_TYPE_SQL = "SQL";
+
+	
+	public static String INPUT_PARAM_PD_CONTENT = "pdContent";
+	public static String INPUT_PARAM_SYSTEM_NAME = "systemName";
+	public static String INPUT_PARAM_JSON_DATA = "jsonData";	
+	public static String INPUT_PARAM_MERGE__JSON_DATA = "mergeJsonData";
+
+
+	public static String INPUT_PARAM_REQUEST_DATA = "requestData";
+	public static String INPUT_PARAM_RESPONSE_PRIFIX = "responsePrefix";
+	public static String OUTPUT_PARAM_CONFIGURATION_PARAMETER = "configuration-parameters";
+	
+
+
+	public static String OUTPUT_PARAM_STATUS = "status";
+	public static String OUTPUT_PARAM_ERROR_MESSAGE = "error-message";
+	public static String OUTPUT_STATUS_SUCCESS = "success";
+	public static String OUTPUT_STATUS_FAILURE = "failure";
+
+}
diff --git a/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/Parameter.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/Parameter.java
new file mode 100644
index 0000000..6a03edd
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/Parameter.java
@@ -0,0 +1,124 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * 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.
+ * 
+ *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.params.data;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class Parameter {
+	private String name;
+	private String description;
+	private String type;
+	private boolean required;
+	private String source;
+
+	@JsonProperty("rule-type")
+	private String ruleType;
+
+	@JsonProperty("default")
+	private String defaultValue;
+
+	@JsonProperty("request-keys")
+	private List<RequestKey> requestKeys;
+
+	@JsonProperty("response-keys")
+	private List<ResponseKey> responseKeys;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public boolean isRequired() {
+		return required;
+	}
+
+	public void setRequired(boolean required) {
+		this.required = required;
+	}
+
+	public String getSource() {
+		return source;
+	}
+
+	public void setSource(String source) {
+		this.source = source;
+	}
+
+	public String getRuleType() {
+		return ruleType;
+	}
+
+	public void setRuleType(String ruleType) {
+		this.ruleType = ruleType;
+	}
+
+	public String getDefaultValue() {
+		return defaultValue;
+	}
+
+	public void setDefaultValue(String defaultValue) {
+		this.defaultValue = defaultValue;
+	}
+
+	public List<RequestKey> getRequestKeys() {
+		return requestKeys;
+	}
+
+	public void setRequestKeys(List<RequestKey> requestKeys) {
+		this.requestKeys = requestKeys;
+	}
+
+	public List<ResponseKey> getResponseKeys() {
+		return responseKeys;
+	}
+
+	public void setResponseKeys(List<ResponseKey> responseKeys) {
+		this.responseKeys = responseKeys;
+	}
+
+
+
+
+
+}
diff --git a/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/PropertyDefinition.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/PropertyDefinition.java
new file mode 100644
index 0000000..0fd1b92
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/PropertyDefinition.java
@@ -0,0 +1,54 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * 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.
+ * 
+ *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.params.data;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class PropertyDefinition {
+	public String kind = "Property Definition";
+	public String version = "V1";
+	
+	@JsonProperty("vnf-parameter-list")
+	public List<Parameter> parameters;
+	public String getKind() {
+		return kind;
+	}
+	public void setKind(String kind) {
+		this.kind = kind;
+	}
+	public String getVersion() {
+		return version;
+	}
+	public void setVersion(String version) {
+		this.version = version;
+	}
+	public List<Parameter> getParameters() {
+		return parameters;
+	}
+	public void setParameters(List<Parameter> parameters) {
+		this.parameters = parameters;
+	}	
+	
+}
diff --git a/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/RequestKey.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/RequestKey.java
new file mode 100644
index 0000000..c1cf0e1
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/RequestKey.java
@@ -0,0 +1,49 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * 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.
+ * 
+ *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.params.data;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class RequestKey{
+	@JsonProperty("key-name")
+	private String keyName;
+	@JsonProperty("key-value")
+	private String keyValue;	
+
+	public String getKeyName() {
+		return keyName;
+	}
+	public void setKeyName(String keyName) {
+		this.keyName = keyName;
+	}
+	public String getKeyValue() {
+		return keyValue;
+	}
+	public void setKeyValue(String keyValue) {
+		this.keyValue = keyValue;
+	}
+	
+	
+	
+
+}
diff --git a/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/ResponseKey.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/ResponseKey.java
new file mode 100644
index 0000000..9e394e4
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/data/ResponseKey.java
@@ -0,0 +1,55 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * 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.
+ * 
+ *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.params.data;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class ResponseKey{
+	@JsonProperty("unique-key-name")
+	private String uniqueKeyName;
+	@JsonProperty("unique-key-value")
+	private String uniqueKeyValue;
+	@JsonProperty("field-key-name")
+	private String fieldKeyName;
+	
+	public String getUniqueKeyName() {
+		return uniqueKeyName;
+	}
+	public void setUniqueKeyName(String uniqueKeyName) {
+		this.uniqueKeyName = uniqueKeyName;
+	}
+	public String getUniqueKeyValue() {
+		return uniqueKeyValue;
+	}
+	public void setUniqueKeyValue(String uniqueKeyValue) {
+		this.uniqueKeyValue = uniqueKeyValue;
+	}
+	public String getFieldKeyName() {
+		return fieldKeyName;
+	}
+	public void setFieldKeyName(String fieldKeyName) {
+		this.fieldKeyName = fieldKeyName;
+	}
+	
+	
+}
diff --git a/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/parser/PropertyDefinitionNode.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/parser/PropertyDefinitionNode.java
new file mode 100644
index 0000000..a19c2b9
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/parser/PropertyDefinitionNode.java
@@ -0,0 +1,249 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * 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.
+ * 
+ *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.params.parser;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.openecomp.sdnc.config.params.ParamsHandlerConstant;
+import org.openecomp.sdnc.config.params.data.Parameter;
+import org.openecomp.sdnc.config.params.data.PropertyDefinition;
+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;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
+
+public class PropertyDefinitionNode implements SvcLogicJavaPlugin{
+
+
+	private static final  EELFLogger log = EELFManager.getInstance().getLogger(PropertyDefinitionNode.class);
+
+	public void processMissingParamKeys(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+		log.info("Received processParamKeys call with params : " + inParams);
+		String responsePrefix = inParams.get(ParamsHandlerConstant.INPUT_PARAM_RESPONSE_PRIFIX);		
+		try{
+			responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+
+			String requestParamJson = inParams.get(ParamsHandlerConstant.INPUT_PARAM_JSON_DATA);	
+			String pdContent = inParams.get(ParamsHandlerConstant.INPUT_PARAM_PD_CONTENT);	
+
+			if(StringUtils.isBlank(pdContent)){
+				throw new Exception("Request Param (pdContent) is Missing ..");
+			}
+
+			if(StringUtils.isBlank(requestParamJson)){
+				throw new Exception("Request Param (jsonData) is Missing ..");
+			}
+
+			PropertyDefinition propertyDefinition = parsePDContent(pdContent);
+			if(propertyDefinition != null){
+				requestParamJson = mergeMissingRequestParamFromPD(propertyDefinition, requestParamJson);
+				ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_CONFIGURATION_PARAMETER, requestParamJson);
+			}
+			
+			ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_STATUS, ParamsHandlerConstant.OUTPUT_STATUS_SUCCESS);
+		} catch (Exception e) {
+			ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_STATUS, ParamsHandlerConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_ERROR_MESSAGE,e.getMessage());
+			log.error("Failed in merging data to template " + e.getMessage());
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+
+	public void processExternalSystemParamKeys(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+		log.info("Received processExternalSystemParamKeys call with params : " + inParams);
+		String responsePrefix = inParams.get(ParamsHandlerConstant.INPUT_PARAM_RESPONSE_PRIFIX);		
+		try{
+			responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+
+			String requestParamJson = inParams.get(ParamsHandlerConstant.INPUT_PARAM_JSON_DATA);	
+			String pdContent = inParams.get(ParamsHandlerConstant.INPUT_PARAM_PD_CONTENT);	
+			String systemName = inParams.get(ParamsHandlerConstant.INPUT_PARAM_SYSTEM_NAME);	
+
+
+			if(StringUtils.isBlank(pdContent)){
+				throw new Exception("Request Param (pdContent) is Missing ..");
+			}
+
+			if(StringUtils.isBlank(requestParamJson)){
+				throw new Exception("Request Param (jsonData) is Missing ..");
+			}
+
+			if(StringUtils.isBlank(systemName)){
+				throw new Exception("Request Param (systemName) is Missing ..");
+			}
+
+			PropertyDefinition propertyDefinition = parsePDContent(pdContent);
+			if(propertyDefinition != null){
+				getSystemRequestParamInfoFromPD(propertyDefinition, requestParamJson, systemName, ctx);
+			}
+
+			ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_STATUS, ParamsHandlerConstant.OUTPUT_STATUS_SUCCESS);
+		} catch (Exception e) {
+			ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_STATUS, ParamsHandlerConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_ERROR_MESSAGE,e.getMessage());
+			log.error("Failed in merging data to template " + e.getMessage());
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+
+
+	public void mergeJsonData(Map<String, String> inParams, SvcLogicContext ctx) throws SvcLogicException {
+		log.info("Received mergeJsonData call with params : " + inParams);
+		String responsePrefix = inParams.get(ParamsHandlerConstant.INPUT_PARAM_RESPONSE_PRIFIX);		
+		try{
+			responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+
+			String requestParamJson = inParams.get(ParamsHandlerConstant.INPUT_PARAM_JSON_DATA);	
+			String mergeJsonData = inParams.get(ParamsHandlerConstant.INPUT_PARAM_MERGE__JSON_DATA);			
+
+			if(StringUtils.isBlank(requestParamJson)){
+				throw new Exception("Request Param (jsonData) is Missing ..");
+			}
+
+			if(StringUtils.isBlank(mergeJsonData)){
+				throw new Exception("Request Param (mergeJsonData) is Missing ..");
+			}
+
+			requestParamJson = mergeJson(requestParamJson, mergeJsonData);
+			ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_CONFIGURATION_PARAMETER, requestParamJson);
+			ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_STATUS, ParamsHandlerConstant.OUTPUT_STATUS_SUCCESS);
+		} catch (Exception e) {
+			ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_STATUS, ParamsHandlerConstant.OUTPUT_STATUS_FAILURE);
+			ctx.setAttribute(responsePrefix + ParamsHandlerConstant.OUTPUT_PARAM_ERROR_MESSAGE,e.getMessage());
+			log.error("Failed in merging data to template " + e.getMessage());
+			throw new SvcLogicException(e.getMessage());
+		}
+	}
+
+
+	/* */
+
+	private PropertyDefinition parsePDContent(String pdContent) throws JsonParseException, JsonMappingException, IOException{
+		PropertyDefinition propertyDefinition = null;
+		if(StringUtils.isNotBlank(pdContent)){
+			ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
+			propertyDefinition = mapper.readValue(pdContent, PropertyDefinition.class);
+		}
+		return propertyDefinition;
+	}
+
+
+	private String mergeMissingRequestParamFromPD(PropertyDefinition propertyDefinition, String requestParamJson) throws Exception{
+
+		if(propertyDefinition == null){
+			throw new Exception("PropertyDefinition is Missing ..");
+		}
+
+		if(StringUtils.isBlank(requestParamJson)){
+			throw new Exception("Request Param is Missing ..");
+		}
+
+		ObjectMapper mapper = new ObjectMapper();
+		Map<String, String> requestParamMap = mapper.readValue(requestParamJson, HashMap.class);
+		if(requestParamMap != null){
+			List<Parameter> parameters = propertyDefinition.getParameters();
+			for (Parameter parameter : parameters) {
+				if(parameter != null){
+					
+					log.info("Checking Key " + parameter.getName() + ":: Source :" +parameter.getSource());	
+					// Add Only non external system keys,If it is not present in request Params
+					if( !requestParamMap.containsKey(parameter.getName()) 
+							&& StringUtils.isBlank(parameter.getSource())
+							){
+						log.info("Adding New Key " + parameter.getName());	
+						requestParamMap.put(parameter.getName(), parameter.getDefaultValue());
+					}					
+				}				
+			}			
+			requestParamJson = mapper.writeValueAsString(requestParamMap);
+			log.info("Processed Request Param " + requestParamJson);	
+		}
+
+		return requestParamJson;
+	}
+
+	private void getSystemRequestParamInfoFromPD(PropertyDefinition propertyDefinition, String requestParamJson, String systemName, SvcLogicContext ctx) throws Exception{
+
+		if(propertyDefinition == null){
+			throw new Exception("PropertyDefinition is Missing ..");
+		}
+
+		if(StringUtils.isBlank(requestParamJson)){
+			throw new Exception("Request Param is Missing ..");
+		}
+
+		ObjectMapper mapper = new ObjectMapper();
+		Map<String, String> requestParamMap = mapper.readValue(requestParamJson, HashMap.class);
+		if(requestParamMap != null){
+			List<Parameter> parameters = propertyDefinition.getParameters();
+
+			List<String> externalSystemKeys = new ArrayList<String>();
+			for (Parameter parameter : parameters) {
+				if(parameter != null){
+					if( !requestParamMap.containsKey(parameter.getName()) && StringUtils.isNotBlank(parameter.getSource()) ){
+						log.info("Adding New System Key " + parameter.getName() + ":"+ mapper.writeValueAsString(parameter));
+						externalSystemKeys.add(parameter.getName());
+						ctx.setAttribute(systemName +"."+parameter.getName(), mapper.writeValueAsString(parameter));
+					}					
+				}				
+			}	
+
+			String systemKeys = systemName+".keys";
+			ctx.setAttribute(systemKeys, mapper.writeValueAsString(externalSystemKeys));
+		}
+	}
+
+
+	private String mergeJson(String requestParamJson, String systemParamJson) throws Exception {
+		ObjectMapper mapper = new ObjectMapper();
+		Map<String, String> requestParamMap = mapper.readValue(requestParamJson, HashMap.class);
+		if(requestParamMap != null){
+			Map<String, String> systemParamMap = mapper.readValue(systemParamJson, HashMap.class);
+			if(systemParamMap != null){
+				for (String systemParamKey : systemParamMap.keySet()) {
+					log.trace("Megging System Key Values " + systemParamKey);	
+					requestParamMap.put( systemParamKey , systemParamMap.get(systemParamKey));		
+				}	
+			}
+			requestParamJson = mapper.writeValueAsString(requestParamMap);
+			log.info("Processed Request Param " + requestParamJson);	
+		}
+
+		return requestParamJson;
+	}
+
+
+
+
+}
diff --git a/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/ArtificatTransformer.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/ArtificatTransformer.java
new file mode 100644
index 0000000..c646d9b
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/ArtificatTransformer.java
@@ -0,0 +1,85 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * 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.
+ * 
+ *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.params.transformer;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.openecomp.sdnc.config.params.data.Parameter;
+import org.openecomp.sdnc.config.params.data.PropertyDefinition;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
+
+public class ArtificatTransformer {
+
+
+	public String convertPDToYaml(PropertyDefinition propertyDefinition) throws JsonParseException, JsonMappingException, IOException{
+		String yamlContent = null;
+		if(propertyDefinition != null){
+			ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
+			mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
+			yamlContent = mapper.writeValueAsString(propertyDefinition);	        
+		}
+		return yamlContent;
+	}
+
+	public String transformYamlToJson(String yaml) throws JsonParseException, JsonMappingException, IOException {
+		ObjectMapper yamlReader = new ObjectMapper(new YAMLFactory());
+		Object obj = yamlReader.readValue(yaml, Object.class);
+		ObjectMapper jsonWriter = new ObjectMapper();
+		jsonWriter.enable(SerializationFeature.INDENT_OUTPUT);	    
+		return jsonWriter.writeValueAsString(obj);
+	}
+
+	public PropertyDefinition convertYAMLToPD(String pdContent) throws JsonParseException, JsonMappingException, IOException{
+		PropertyDefinition propertyDefinition = null;
+		if(StringUtils.isNotBlank(pdContent)){
+			ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
+			propertyDefinition = mapper.readValue(pdContent, PropertyDefinition.class);
+		}
+		return propertyDefinition;
+	}
+
+	public String convertYAMLToParams(String pdContent) throws JsonParseException, JsonMappingException, IOException{
+		String paramJson = null;
+		if(StringUtils.isNotBlank(pdContent)){
+			paramJson = convertPdToParams(convertYAMLToPD(pdContent));
+		}
+		return paramJson;
+	}
+
+	public String convertPdToParams(PropertyDefinition propertyDefinition) throws JsonParseException, JsonMappingException, IOException{
+		String paramJson = null;
+		if(propertyDefinition != null  && propertyDefinition.getParameters() != null){
+			List<Parameter> parameters = propertyDefinition.getParameters();
+
+		}
+		return paramJson;
+	}
+
+}
diff --git a/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessor.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessor.java
new file mode 100644
index 0000000..b4c6880
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessor.java
@@ -0,0 +1,66 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * 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.
+ * 
+ *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.params.transformer.tosca;
+
+import org.openecomp.sdnc.config.params.data.PropertyDefinition;
+import org.openecomp.sdnc.config.params.transformer.tosca.exceptions.ArtifactProcessorException;
+
+import java.io.OutputStream;
+
+public interface ArtifactProcessor
+{
+    /**
+     * Generates Tosca artifact from PropertyDefinition object.
+     *
+     * @param artifact
+     *                PropertyDefinition object which is to be converted to Tosca.
+     * @param stream
+     *                Stream to which the generated Tosca is to be written.
+     * @throws ArtifactProcessorException
+     *                If the Tosca Generation failed
+     */
+    void generateArtifact(PropertyDefinition artifact, OutputStream stream) throws ArtifactProcessorException;
+
+    /**
+     * Generates Tosca artifact from PropertyDefinition string.
+     *
+     * @param artifact
+     *               PropertyDefinition string which is to be converted to Tosca.
+     * @param stream
+     *               Stream to which the generated Tosca is to be written.
+     * @throws ArtifactProcessorException
+     *               If the Tosca Generation failed
+     */
+    void generateArtifact(String artifact, OutputStream stream) throws ArtifactProcessorException;
+
+    /**
+     * Generates the PropertyDefinition object from a Tosca artifact.
+     *
+     * @param toscaArtifact
+     *                Tosca artifact which is to be converted.
+     * @return PropertyDefinition object generated from Tosca
+     * @throws ArtifactProcessorException
+     *                If the PropertyDefinition Generation failed
+     */
+    PropertyDefinition readArtifact(String toscaArtifact) throws ArtifactProcessorException;
+}
diff --git a/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessorFactory.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessorFactory.java
new file mode 100644
index 0000000..65da0c4
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessorFactory.java
@@ -0,0 +1,41 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * 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.
+ * 
+ *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.params.transformer.tosca;
+
+/**
+ * Created by pranavdi on 3/29/2017.
+ */
+public class ArtifactProcessorFactory
+{
+    private static class InstanceHolder
+    {
+        private static ArtifactProcessorImpl instance = new ArtifactProcessorImpl();
+    }
+
+    private ArtifactProcessorFactory(){}
+
+    public static ArtifactProcessor getArtifactProcessor()
+    {
+        return InstanceHolder.instance;
+    }
+}
diff --git a/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessorImpl.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessorImpl.java
new file mode 100644
index 0000000..754676c
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/ArtifactProcessorImpl.java
@@ -0,0 +1,399 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * 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.
+ * 
+ *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.params.transformer.tosca;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
+import org.apache.commons.lang.StringUtils;
+
+import org.openecomp.sdc.tosca.datatypes.model.*;
+import org.openecomp.sdc.tosca.services.YamlUtil;
+import org.openecomp.sdnc.config.params.data.Parameter;
+import org.openecomp.sdnc.config.params.data.PropertyDefinition;
+import org.openecomp.sdnc.config.params.data.RequestKey;
+import org.openecomp.sdnc.config.params.data.ResponseKey;
+import org.openecomp.sdnc.config.params.transformer.tosca.exceptions.ArtifactProcessorException;
+import org.slf4j.MDC;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static com.att.eelf.configuration.Configuration.MDC_SERVICE_NAME;
+
+public class ArtifactProcessorImpl implements ArtifactProcessor
+{
+    private static final String DERIVEDFROM = "org.openecomp.genericvnf";
+    private static final EELFLogger Log = EELFManager.getInstance().getLogger(ArtifactProcessorImpl.class);
+    private static final String EQUALSENCODING = "&equals;";
+    private static final String COLONENCODING = "&colon;";
+    private static final String COMMAENCODING = "&comma;";
+    private static final String GREATERTHANENCODING = "&gt;";
+    private static final String LESSTHANENCODING = "&lt;";
+
+    @Override
+    public void generateArtifact(PropertyDefinition artifact, OutputStream stream) throws ArtifactProcessorException
+    {
+        MDC.clear();
+        MDC.put(MDC_SERVICE_NAME,"ArtifactGenerator");
+        Log.info("Entered into generateArtifact");
+        if(!StringUtils.isBlank(artifact.getKind())) {
+            logArtifact(artifact);
+            ServiceTemplate serviceTemplate = new ServiceTemplate();
+
+            addNodeType(artifact, serviceTemplate);
+
+            TopologyTemplate topologyTemplate = new TopologyTemplate();
+            serviceTemplate.setTopology_template(topologyTemplate);
+            addNodeTemplate(artifact, serviceTemplate);
+
+            String tosca = new YamlUtil().objectToYaml(serviceTemplate);
+            OutputStreamWriter writer = new OutputStreamWriter(stream);
+            try {
+                writer.write(tosca);
+                writer.flush();
+            } catch (IOException e) {
+                Log.error("Error writing to outputstream", e);
+                throw new ArtifactProcessorException(e);
+            } finally {
+                try {
+                    writer.close();
+                } catch (IOException e) {
+                    Log.error("Error while closing outputstream writer", e);
+                }
+                MDC.clear();
+            }
+        }
+        else
+        {
+            Log.error("Kind in PropertyDefinition is blank or null");
+            throw new ArtifactProcessorException("Kind in PropertyDefinition is blank or null");
+        }
+    }
+
+    @Override
+    public void generateArtifact(String artifact, OutputStream stream) throws ArtifactProcessorException
+    {
+        ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
+        try {
+            PropertyDefinition pd = mapper.readValue(artifact, PropertyDefinition.class);
+            generateArtifact(pd, stream);
+        }
+        catch (IOException e)
+        {
+            Log.error("Error parsing property definition content = "+ artifact,e);
+            throw new ArtifactProcessorException(e);
+        }
+    }
+
+    @Override
+    public PropertyDefinition readArtifact(String toscaArtifact) throws ArtifactProcessorException{
+        Log.info("Entered into readArtifact.");
+        Log.info("Received ToscaArtifact:\n" + toscaArtifact);
+
+        PropertyDefinition propertyDefinitionObj = new PropertyDefinition();
+        ServiceTemplate serviceTemplate = new YamlUtil().yamlToObject(toscaArtifact, ServiceTemplate.class);
+
+        //mapping parameters
+        Map<String, NodeType> nodeTypeMap = serviceTemplate.getNode_types();
+        Map<String, NodeTemplate> nodeTemplateMap = serviceTemplate.getTopology_template().getNode_templates();
+
+        String nodeTemplateName = nodeTemplateMap.keySet().toArray(new String[0])[0];
+        NodeTemplate nodeTemplate = nodeTemplateMap.get(nodeTemplateName);
+        Map<String, Object> nodeTemplateProperties = nodeTemplate.getProperties();
+
+        String kind = nodeTypeMap.keySet().toArray(new String[0])[0];
+        NodeType nodeType = nodeTypeMap.get(kind);
+        String version = nodeType.getVersion();
+        Log.info("ReadArtifact for "+ kind + " with version "+version);
+        propertyDefinitionObj.setKind(kind);
+        propertyDefinitionObj.setVersion(version);
+
+        List<Parameter> parameterList = new LinkedList<>();
+
+        Map<String, org.openecomp.sdc.tosca.datatypes.model.PropertyDefinition> propertyDefinitionFromTOSCA = nodeType.getProperties();
+        if(null != propertyDefinitionFromTOSCA){
+            for (String propertyName : propertyDefinitionFromTOSCA.keySet()) {
+                org.openecomp.sdc.tosca.datatypes.model.PropertyDefinition propertyDefinition = propertyDefinitionFromTOSCA.get(propertyName);
+
+                Parameter parameter = new Parameter();
+                parameter.setName(propertyName);
+
+                if (propertyDefinition.get_default() != null) {
+                    parameter.setDefaultValue(propertyDefinition.get_default().toString());
+                }
+                parameter.setDescription(propertyDefinition.getDescription());
+                if (null != propertyDefinition.getRequired()) {
+                    parameter.setRequired(propertyDefinition.getRequired());
+                } else {
+                    parameter.setRequired(false);
+                }
+
+                if (StringUtils.isNotEmpty(propertyDefinition.getType())) {
+                    parameter.setType(propertyDefinition.getType());
+                }
+
+                String propertValueExpr = (String) nodeTemplateProperties.get(propertyName);
+                String[] stringTokens = parsePropertyValueExpression(propertValueExpr);
+                String ruleType = stringTokens[0].substring(stringTokens[0].indexOf('=')+1,stringTokens[0].length()).replaceAll(">","").trim();
+                String responseExpression = stringTokens[1].substring(stringTokens[1].indexOf('=')+1,stringTokens[1].length());
+                String source = stringTokens[2].substring(stringTokens[2].indexOf('=')+1,stringTokens[2].length()).replaceAll(">","").trim();
+                String requestExpression = stringTokens[3].substring(stringTokens[3].indexOf('=')+1,stringTokens[3].length());
+
+                List<RequestKey> requestKeys = readRequestKeys(requestExpression);
+                List<ResponseKey> responseKeys = readResponseKeys(responseExpression);
+
+                parameter.setRuleType(ruleType);
+                parameter.setSource(source);
+                parameter.setRequestKeys(requestKeys);
+                parameter.setResponseKeys(responseKeys);
+
+                parameterList.add(parameter);
+
+            }
+        }
+        propertyDefinitionObj.setParameters(parameterList);
+        Log.info("Exiting from readArtifact. ");
+        return propertyDefinitionObj;
+    }
+
+    private List<ResponseKey> readResponseKeys(String responseExpression) throws ArtifactProcessorException {
+        Log.info("Entered into readResponseKeys.");
+        List<ResponseKey> responseKeyList = null;
+        String expression;
+        expression = responseExpression.replaceAll("<", "").replaceAll(">", "").trim();
+        if (StringUtils.isNotEmpty(expression)) {
+            responseKeyList = new ArrayList<>();
+
+            String[] responseKeys = expression.split(",");
+            for (String responseKeyStr : responseKeys) {
+                ResponseKey responseKey = new ResponseKey();
+                try {
+                    responseKey.setUniqueKeyName(responseKeyStr.split(":")[0].replaceAll(LESSTHANENCODING, "<").replaceAll(GREATERTHANENCODING, ">").replaceAll(COLONENCODING, ":").replaceAll(COMMAENCODING, ",").replaceAll(EQUALSENCODING,"=").trim());
+                    responseKey.setUniqueKeyValue(responseKeyStr.split(":")[1].replaceAll(LESSTHANENCODING, "<").replaceAll(GREATERTHANENCODING, ">").replaceAll(COLONENCODING, ":").replaceAll(COMMAENCODING, ",").replaceAll(EQUALSENCODING,"=").trim());
+                    responseKey.setFieldKeyName(responseKeyStr.split(":")[2].replaceAll(LESSTHANENCODING, "<").replaceAll(GREATERTHANENCODING, ">").replaceAll(COLONENCODING, ":").replaceAll(COMMAENCODING, ",").replaceAll(EQUALSENCODING,"=").trim());
+                } catch (ArrayIndexOutOfBoundsException e) {
+                    Log.error("Invalid response attribute found :" + responseKeyStr + "due to "+e);
+                    throw new ArtifactProcessorException("Invalid response attribute found :" + responseKeyStr);
+                }
+                responseKeyList.add(responseKey);
+            }
+        }
+        Log.info("Exiting from readResponseKeys.");
+        return responseKeyList;
+    }
+
+    private List<RequestKey> readRequestKeys(String requestExpression) {
+        Log.info("Entered into readRequestKeys.");
+        List<RequestKey> requestKeyList = null;
+        String expression;
+        expression = requestExpression.replaceAll("<","").replaceAll(">","").trim();
+        if(StringUtils.isNotEmpty(expression)){
+            requestKeyList = new ArrayList<>();
+            String[] requestKeys = expression.split(",");
+            for(String responseKeyStr :requestKeys){
+                RequestKey requestKey = new RequestKey();
+                requestKey.setKeyName(responseKeyStr.split(":")[0].replaceAll(LESSTHANENCODING, "<").replaceAll(GREATERTHANENCODING, ">").replaceAll(COLONENCODING,":").replaceAll(COMMAENCODING,",").replaceAll(EQUALSENCODING,"=").trim());
+                requestKey.setKeyValue(responseKeyStr.split(":")[1].replaceAll(LESSTHANENCODING, "<").replaceAll(GREATERTHANENCODING, ">").replaceAll(COLONENCODING,":").replaceAll(COMMAENCODING,",").replaceAll(EQUALSENCODING,"=").trim());
+                requestKeyList.add(requestKey);
+            }
+        }
+        Log.info("Exiting from readRequestKeys.");
+        return requestKeyList;
+    }
+
+    private String[] parsePropertyValueExpression(String propertValueExpr) throws ArtifactProcessorException{
+        Log.info("Entered into parsePropertyValueExpression.");
+        String nodeRegex = "<(.*?)>";
+        Pattern pattern = Pattern.compile(nodeRegex, Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(propertValueExpr);
+        List<String> stringTokens = new ArrayList<>();
+        while(matcher.find()){
+            stringTokens.add(matcher.group(0));
+        }
+        String[] propertiesArr = new String[stringTokens.size()];
+        propertiesArr = stringTokens.toArray(propertiesArr);
+        if(propertiesArr.length!=4){
+            throw new ArtifactProcessorException("Invalid input found " + propertValueExpr);
+        }
+        Log.info("Exiting from parsePropertyValueExpression.");
+        return propertiesArr;
+    }
+
+    private void addNodeType(PropertyDefinition artifact, ServiceTemplate toscaTemplate) throws ArtifactProcessorException {
+        //Add basic fields for the node
+        NodeType toscaNodeType = new NodeType();
+        toscaNodeType.setDerived_from(DERIVEDFROM);
+        toscaNodeType.setVersion(artifact.getVersion());
+        toscaNodeType.setDescription("");
+        if(artifact.getParameters()!=null) {
+            Map<String, org.openecomp.sdc.tosca.datatypes.model.PropertyDefinition> toscaPropertyMap = new HashMap<>();
+            toscaNodeType.setProperties(toscaPropertyMap);
+
+            //Add properties from parameters of PD
+            for (Parameter pdParameter : artifact.getParameters()) {
+                addProperty(toscaNodeType, pdParameter);
+            }
+        }
+
+        // This is where it adds node in node Map and adds the map in tosca template
+        Map<String,NodeType> toscaNodeMap = new HashMap<>();
+        toscaNodeMap.put(artifact.getKind(),toscaNodeType);
+        toscaTemplate.setNode_types(toscaNodeMap);
+    }
+
+    private void addProperty(NodeType toscaNodeType, Parameter pdParameter) throws ArtifactProcessorException {
+        if(!StringUtils.isBlank(pdParameter.getName())&& !pdParameter.getName().matches(".*\\s+.*")) {
+            Log.info("Adding parameter " + pdParameter.getName() + " in node type");
+            org.openecomp.sdc.tosca.datatypes.model.PropertyDefinition toscaProperty = new org.openecomp.sdc.tosca.datatypes.model.PropertyDefinition();
+
+            toscaProperty.setType(StringUtils.isBlank(pdParameter.getType()) ? "string" : pdParameter.getType());
+            toscaProperty.set_default(pdParameter.getDefaultValue());
+
+            toscaProperty.setDescription(pdParameter.getDescription());
+            toscaProperty.setRequired(pdParameter.isRequired());
+
+            toscaNodeType.getProperties().put(pdParameter.getName(), toscaProperty);
+        }
+        else
+        {
+            String message ="Parameter name is empty,null or contains whitespace";
+            Log.error(message);
+            throw new ArtifactProcessorException(message);
+        }
+    }
+
+    private void addNodeTemplate(PropertyDefinition artifact, ServiceTemplate toscaTemplate)
+    {
+        NodeTemplate nodeTemplate = new NodeTemplate();
+        nodeTemplate.setType(artifact.getKind());
+        Map<String,Object> templateProperties = new HashMap<>();
+        //Add properties from parameters of PD
+        if(artifact.getParameters()!=null) {
+            for (Parameter pdParameter : artifact.getParameters()) {
+                addTemplateProperty(templateProperties, pdParameter);
+            }
+            nodeTemplate.setProperties(templateProperties);
+        }
+        Map<String,NodeTemplate> nodeTemplateMap = new HashMap<>();
+        nodeTemplateMap.put(artifact.getKind()+"_Template",nodeTemplate);
+        toscaTemplate.getTopology_template().setNode_templates(nodeTemplateMap);
+    }
+
+    private void addTemplateProperty(Map<String,Object> templateProperties, Parameter pdParameter)
+    {
+        Log.info("Adding parameter "+ pdParameter.getName() + " in node templates");
+        String responseKeys = buildResponseKeyExpression(pdParameter.getResponseKeys());
+        String requestKeys = buildRequestKeyExpression(pdParameter.getRequestKeys());
+        String ruleType = buildRuleType(pdParameter.getRuleType());
+        String source = buildSourceSystem(pdParameter.getSource());
+        String properties = ruleType + " " + responseKeys + " " + source + " " + requestKeys;
+        templateProperties.put(pdParameter.getName(),properties);
+    }
+
+    protected String buildResponseKeyExpression(List<ResponseKey> responseKeys)
+    {
+        StringBuilder propertyBuilder = new StringBuilder();
+        propertyBuilder.append("<response-keys = ");
+        if(responseKeys!=null) {
+            Iterator<ResponseKey> itr = responseKeys.iterator();
+            while (itr.hasNext()) {
+                ResponseKey res = itr.next();
+                if(res!=null)
+                    propertyBuilder.append(encode(res.getUniqueKeyName()) + ":" + encode(res.getUniqueKeyValue()) + ":" + encode(res.getFieldKeyName()));
+                if (itr.hasNext())
+                    propertyBuilder.append(" , ");
+            }
+        }
+        propertyBuilder.append(">");
+        return propertyBuilder.toString();
+    }
+
+    protected String buildRequestKeyExpression(List<RequestKey> requestKeys)
+    {
+        StringBuilder propertyBuilder = new StringBuilder();
+        propertyBuilder.append("<request-keys = ");
+        if(requestKeys!=null) {
+            Iterator<RequestKey> itr = requestKeys.iterator();
+            while (itr.hasNext()) {
+                RequestKey res = itr.next();
+                if(res!=null)
+                    propertyBuilder.append(encode(res.getKeyName()) + ":" + encode(res.getKeyValue()));
+                if (itr.hasNext())
+                    propertyBuilder.append(" , ");
+            }
+        }
+        propertyBuilder.append(">");
+        return propertyBuilder.toString();
+    }
+
+    protected String buildRuleType(String classType)
+    {
+        StringBuilder propertyBuilder = new StringBuilder();
+        String encodedClassType = StringUtils.isBlank(encode(classType))?"":encode(classType);
+        propertyBuilder.append("<");
+        propertyBuilder.append("rule-type = "+encodedClassType);
+        propertyBuilder.append(">");
+        return propertyBuilder.toString();
+    }
+
+    protected String buildSourceSystem(String source)
+    {
+        StringBuilder sourceBuilder = new StringBuilder();
+        sourceBuilder.append("<source-system = ");
+        sourceBuilder.append(StringUtils.isBlank(encode(source))?"":encode(source));
+        sourceBuilder.append(">");
+        return sourceBuilder.toString();
+    }
+
+    protected String encode(String string)
+    {
+        String encodedString = null;
+        if(string!=null) {
+            encodedString = string.trim().replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll(":","&colon;").replaceAll(",","&comma;").replaceAll("=","&equals;");
+        }
+        return encodedString;
+    }
+
+    private void logArtifact(PropertyDefinition artifact)
+    {
+        ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
+        String stringArtifact=null;
+        try
+        {
+            stringArtifact = mapper.writeValueAsString(artifact);
+            Log.info("Received PropertyDefinition:\n" + stringArtifact);
+        }
+        catch (JsonProcessingException e)
+        {
+            Log.error("Exception while logging artifact:",e);
+        }
+
+    }
+}
diff --git a/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/exceptions/ArtifactProcessorException.java b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/exceptions/ArtifactProcessorException.java
new file mode 100644
index 0000000..e4ce879
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/java/org/openecomp/sdnc/config/params/transformer/tosca/exceptions/ArtifactProcessorException.java
@@ -0,0 +1,46 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * 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.
+ * 
+ *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.params.transformer.tosca.exceptions;
+
+/**
+ * Created by pranavdi on 3/17/2017.
+ */
+public class ArtifactProcessorException extends Exception
+{
+    public ArtifactProcessorException() {}
+
+    public ArtifactProcessorException(String message)
+    {
+        super(message);
+    }
+
+    public ArtifactProcessorException(Throwable cause)
+    {
+        super(cause);
+    }
+
+    public ArtifactProcessorException(String message, Throwable cause)
+    {
+        super(message,cause);
+    }
+}
diff --git a/appc-config/appc-config-params/provider/src/main/resources/adaptor.properties b/appc-config/appc-config-params/provider/src/main/resources/adaptor.properties
new file mode 100644
index 0000000..525fcf9
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/main/resources/adaptor.properties
@@ -0,0 +1,27 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : APPC
+# ================================================================================
+# 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.
+# 
+#  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+# ============LICENSE_END=========================================================
+###
+
+adaptorName=
+vSphere.url=
+vSphere.user=
+vSphere.passwd=
+org.xml.sax.driver=
diff --git a/appc-config/appc-config-params/provider/src/test/java/org/openecomp/sdnc/config/params/parser/TestPropertyDefinitionNode.java b/appc-config/appc-config-params/provider/src/test/java/org/openecomp/sdnc/config/params/parser/TestPropertyDefinitionNode.java
new file mode 100644
index 0000000..81f4a66
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/test/java/org/openecomp/sdnc/config/params/parser/TestPropertyDefinitionNode.java
@@ -0,0 +1,131 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * 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.
+ * 
+ *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.params.parser;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.io.IOUtils;
+import org.junit.Test;
+import org.junit.Ignore;
+import org.openecomp.sdnc.config.params.ParamsHandlerConstant;
+import org.openecomp.sdnc.config.params.data.PropertyDefinition;
+import org.openecomp.sdnc.config.params.parser.PropertyDefinitionNode;
+import org.openecomp.sdnc.config.params.transformer.ArtificatTransformer;
+
+import org.openecomp.sdnc.sli.SvcLogicContext;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class TestPropertyDefinitionNode {
+
+@Ignore
+	public void testProcessMissingParamKeys() throws Exception {
+		PropertyDefinitionNode propertyDefinitionNode = new PropertyDefinitionNode();
+		Map<String, String> inParams = new HashMap<String, String>();
+		inParams.put(ParamsHandlerConstant.INPUT_PARAM_RESPONSE_PRIFIX, "test");
+
+		String yamlData = IOUtils.toString(TestPropertyDefinitionNode.class.getClassLoader().getResourceAsStream("parser/pd.yaml"), Charset.defaultCharset());
+		inParams.put(ParamsHandlerConstant.INPUT_PARAM_PD_CONTENT, yamlData);
+
+		String jsonData = IOUtils.toString(TestPropertyDefinitionNode.class.getClassLoader().getResourceAsStream("parser/request-param.json"), Charset.defaultCharset());
+		inParams.put(ParamsHandlerConstant.INPUT_PARAM_JSON_DATA, jsonData);
+
+		SvcLogicContext ctx = new SvcLogicContext();
+		propertyDefinitionNode.processMissingParamKeys(inParams, ctx);
+		assertEquals(ctx.getAttribute("test."+ParamsHandlerConstant.OUTPUT_PARAM_STATUS), ParamsHandlerConstant.OUTPUT_STATUS_SUCCESS);
+
+	}
+
+	public void testProcessExternalSystemParamKeys() throws Exception {
+		PropertyDefinitionNode propertyDefinitionNode = new PropertyDefinitionNode();
+		Map<String, String> inParams = new HashMap<String, String>();
+		inParams.put(ParamsHandlerConstant.INPUT_PARAM_RESPONSE_PRIFIX, "test");
+
+		String yamlData = IOUtils.toString(TestPropertyDefinitionNode.class.getClassLoader().getResourceAsStream("parser/pd.yaml"), Charset.defaultCharset());
+		inParams.put(ParamsHandlerConstant.INPUT_PARAM_PD_CONTENT, yamlData);
+
+		String jsonData = IOUtils.toString(TestPropertyDefinitionNode.class.getClassLoader().getResourceAsStream("parser/request-param.json"), Charset.defaultCharset());
+		inParams.put(ParamsHandlerConstant.INPUT_PARAM_JSON_DATA, jsonData);
+
+		inParams.put(ParamsHandlerConstant.INPUT_PARAM_SYSTEM_NAME, "INSTAR");
+
+		SvcLogicContext ctx = new SvcLogicContext();
+		propertyDefinitionNode.processExternalSystemParamKeys(inParams, ctx);
+		assertEquals(ctx.getAttribute("test."+ParamsHandlerConstant.OUTPUT_PARAM_STATUS), ParamsHandlerConstant.OUTPUT_STATUS_SUCCESS);
+
+		System.out.println("Result: " + ctx.getAttributeKeySet());
+		System.out.println("INSTAR.keys : " + ctx.getAttribute("INSTAR.keys"));
+		System.out.println("INSTAR.LOCAL_CORE_ALT_IP_ADDR.request-logic : " + ctx.getAttribute("INSTAR.LOCAL_ACCESS_IP_ADDR"));
+		System.out.println("INSTAR.LOCAL_CORE_ALT_IP_ADDR.request-logic : " + ctx.getAttribute("INSTAR.LOCAL_CORE_ALT_IP_ADDR"));
+
+	}
+
+	public void mergeJsonData() throws Exception {
+		PropertyDefinitionNode propertyDefinitionNode = new PropertyDefinitionNode();
+		Map<String, String> inParams = new HashMap<String, String>();
+		inParams.put(ParamsHandlerConstant.INPUT_PARAM_RESPONSE_PRIFIX, "test");
+
+		String jsonData = IOUtils.toString(TestPropertyDefinitionNode.class.getClassLoader().getResourceAsStream("parser/request-param.json"), Charset.defaultCharset());
+		inParams.put(ParamsHandlerConstant.INPUT_PARAM_JSON_DATA, jsonData);
+
+		String mergeJsonData = IOUtils.toString(TestPropertyDefinitionNode.class.getClassLoader().getResourceAsStream("parser/merge-param.json"), Charset.defaultCharset());
+		inParams.put(ParamsHandlerConstant.INPUT_PARAM_MERGE__JSON_DATA, mergeJsonData);
+
+		SvcLogicContext ctx = new SvcLogicContext();
+		propertyDefinitionNode.mergeJsonData(inParams, ctx);
+		assertEquals(ctx.getAttribute("test."+ParamsHandlerConstant.OUTPUT_PARAM_STATUS), ParamsHandlerConstant.OUTPUT_STATUS_SUCCESS);
+
+		System.out.println("Result: " + ctx.getAttributeKeySet()); 
+		System.out.println("Merged Value : " + ctx.getAttribute("test." +ParamsHandlerConstant.OUTPUT_PARAM_CONFIGURATION_PARAMETER) );
+
+
+	}
+
+//	@Test
+	public void testArtificatTransformer() throws Exception {
+		ArtificatTransformer transformer = new ArtificatTransformer();
+		String yamlData = IOUtils.toString(TestPropertyDefinitionNode.class.getClassLoader().getResourceAsStream("parser/pd.yaml"), Charset.defaultCharset());
+
+		PropertyDefinition propertyDefinition = transformer.convertYAMLToPD(yamlData);
+
+		//		String json = transformer.transformYamlToJson(yamlData);
+		//		System.out.println("TestPropertyDefinitionNode.testArtificatTransformer()" + json);
+		String yaml = transformer.convertPDToYaml(propertyDefinition);
+		System.out.println("TestPropertyDefinitionNode.testArtificatTransformer():\n" + yaml);
+
+	}
+	
+	
+
+
+}
diff --git a/appc-config/appc-config-params/provider/src/test/java/org/openecomp/sdnc/config/params/transformer/tosca/TestArtifactProcessor.java b/appc-config/appc-config-params/provider/src/test/java/org/openecomp/sdnc/config/params/transformer/tosca/TestArtifactProcessor.java
new file mode 100644
index 0000000..5a8930f
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/test/java/org/openecomp/sdnc/config/params/transformer/tosca/TestArtifactProcessor.java
@@ -0,0 +1,104 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * 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.
+ * 
+ *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.params.transformer.tosca;
+
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import org.openecomp.sdnc.config.params.transformer.tosca.exceptions.ArtifactProcessorException;
+
+import java.io.*;
+
+public class TestArtifactProcessor{
+    @Rule
+    public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+//    @Test
+    public void testArtifactProcessor() throws IOException, ArtifactProcessorException {
+
+        ArtifactProcessor arp = ArtifactProcessorFactory.getArtifactProcessor();
+
+        String pdString = getFileContent("tosca/ExamplePropertyDefinition.yml");
+        OutputStream outstream=null;
+
+        File tempFile = temporaryFolder.newFile("TestTosca.yml");
+        outstream = new FileOutputStream(tempFile);
+        arp.generateArtifact(pdString,outstream);
+        outstream.flush();
+        outstream.close();
+
+        String expectedTosca = getFileContent("tosca/ExpectedTosca.yml");
+        String toscaString = getFileContent(tempFile);
+        Assert.assertEquals(expectedTosca,toscaString);
+    }
+
+ //   @Test
+    public void testArtifactProcessorWithStringOutput() throws IOException, ArtifactProcessorException {
+
+        ArtifactProcessor arp = ArtifactProcessorFactory.getArtifactProcessor();
+
+        String pdString = getFileContent("tosca/ExamplePropertyDefinition.yml");
+        OutputStream outstream=null;
+
+        outstream = new ByteArrayOutputStream();
+        arp.generateArtifact(pdString,outstream);
+        outstream.flush();
+        outstream.close();
+
+        String expectedTosca = getFileContent("tosca/ExpectedTosca.yml");
+        String toscaString = outstream.toString();
+        Assert.assertEquals(expectedTosca,toscaString);
+    }
+
+    private String getFileContent(String fileName) throws IOException{
+        ClassLoader classLoader = new TestArtifactProcessor().getClass().getClassLoader();
+        InputStream is = new FileInputStream(classLoader.getResource(fileName).getFile());
+        BufferedReader buf = new BufferedReader(new InputStreamReader(is));
+        String line = buf.readLine();
+        StringBuilder sb = new StringBuilder();
+
+        while (line != null) {
+            sb.append(line).append("\n");
+            line = buf.readLine();
+        }
+        String fileString = sb.toString();
+        is.close();
+        return fileString;
+    }
+
+    private String getFileContent(File file) throws IOException{
+        InputStream is = new FileInputStream(file);
+        BufferedReader buf = new BufferedReader(new InputStreamReader(is));
+        String line = buf.readLine();
+        StringBuilder sb = new StringBuilder();
+
+        while (line != null) {
+            sb.append(line).append("\n");
+            line = buf.readLine();
+        }
+        String fileString = sb.toString();
+        is.close();
+        return fileString;
+    }
+}
diff --git a/appc-config/appc-config-params/provider/src/test/java/org/openecomp/sdnc/config/params/transformer/tosca/TestGenerateArtifactObject.java b/appc-config/appc-config-params/provider/src/test/java/org/openecomp/sdnc/config/params/transformer/tosca/TestGenerateArtifactObject.java
new file mode 100644
index 0000000..8fe8dc7
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/test/java/org/openecomp/sdnc/config/params/transformer/tosca/TestGenerateArtifactObject.java
@@ -0,0 +1,265 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * 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.
+ * 
+ *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.params.transformer.tosca;
+
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import org.openecomp.sdnc.config.params.data.Parameter;
+import org.openecomp.sdnc.config.params.data.PropertyDefinition;
+import org.openecomp.sdnc.config.params.data.RequestKey;
+import org.openecomp.sdnc.config.params.data.ResponseKey;
+import org.openecomp.sdnc.config.params.transformer.tosca.exceptions.ArtifactProcessorException;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * Created by pranavdi on 3/15/2017.
+ */
+public class TestGenerateArtifactObject
+{
+    @Rule
+    public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+    @Test
+    public void testObjectArtifactProcessor() throws IOException, ArtifactProcessorException {
+
+        String expectedTosca="node_types:\n" +
+                "  VNF:\n" +
+                "    derived_from: org.openecomp.genericvnf\n" +
+                "    version: V1\n" +
+                "    description: ''\n" +
+                "    properties:\n" +
+                "      LOCAL_ACCESS_IP_ADDR:\n" +
+                "        type: string\n" +
+                "        required: false\n" +
+                "        default: 192.168.30.1\n" +
+                "        status: SUPPORTED\n" +
+                "      LOCAL_CORE_ALT_IP_ADDR:\n" +
+                "        type: String\n" +
+                "        required: false\n" +
+                "        default: fd00:f4d5:ea06:1:0:110:254\n" +
+                "        status: SUPPORTED\n" +
+                "topology_template:\n" +
+                "  node_templates:\n" +
+                "    VNF_Template:\n" +
+                "      type: VNF\n" +
+                "      properties:\n" +
+                "        LOCAL_ACCESS_IP_ADDR: <rule-type = myRule1> <response-keys = > <source-system = INSTAR> <request-keys = class-type:interface-ip-address , address_fqdn:someVal , address_type:v4>\n" +
+                "        LOCAL_CORE_ALT_IP_ADDR: <rule-type = myRule2> <response-keys = name1:value1:field1> <source-system = INSTAR> <request-keys = >\n";
+        //Create object
+        PropertyDefinition pd = new PropertyDefinition();
+        pd.setKind("VNF");
+        pd.setVersion("V1");
+        pd.setParameters(createParameters());
+
+        //Call ArtifactProcessor
+        OutputStream outstream=null;
+
+        File toscaFile =temporaryFolder.newFile("TestTosca.yml");
+        outstream = new FileOutputStream(toscaFile);
+        ArtifactProcessorImpl arp = new ArtifactProcessorImpl();
+        arp.generateArtifact(pd,outstream);
+        outstream.flush();
+        outstream.close();
+
+        String toscaString = getFileContent(toscaFile);
+        Assert.assertEquals(expectedTosca,toscaString);
+
+    }
+
+//    @Test
+    public void testPDpropertiesSetNull() throws IOException, ArtifactProcessorException {
+        String expectedTosca = "node_types:\n" +
+                "  PropertyDefinition:\n" +
+                "    derived_from: org.openecomp.genericvnf\n" +
+                "    version: V1\n" +
+                "    description: ''\n" +
+                "topology_template:\n" +
+                "  node_templates:\n" +
+                "    PropertyDefinition_Template:\n" +
+                "      type: PropertyDefinition\n";
+        //Create object
+        PropertyDefinition pd = new PropertyDefinition();
+        pd.setKind("PropertyDefinition");
+        pd.setVersion("V1");
+//        pd.setParameters(createParameters());
+
+        //Call ArtifactProcessor
+        OutputStream outstream=null;
+
+        File toscaFile =temporaryFolder.newFile("TestTosca.yml");
+        outstream = new FileOutputStream(toscaFile);
+
+        ArtifactProcessorImpl arp = new ArtifactProcessorImpl();
+        arp.generateArtifact(pd,outstream);
+        outstream.flush();
+        outstream.close();
+
+        String toscaString = getFileContent(toscaFile);
+        Assert.assertEquals(expectedTosca,toscaString);
+    }
+
+ //   @Test
+    public void testArtifactGeneratorInvalidStream() throws IOException {
+        String expectedMsg = "java.io.IOException: Stream Closed";
+        PropertyDefinition pd = new PropertyDefinition();
+        pd.setKind("VNF");
+        pd.setVersion("V1");
+        pd.setParameters(createParameters());
+
+        //Call ArtifactProcessor
+        OutputStream outstream=null;
+        try {
+            File toscaFile =temporaryFolder.newFile("TestTosca.yml");
+            outstream = new FileOutputStream(toscaFile);
+            outstream.close();
+            ArtifactProcessorImpl arp = new ArtifactProcessorImpl();
+            arp.generateArtifact(pd,outstream);
+            Assert.fail();
+        }
+        catch (ArtifactProcessorException e)
+        {
+            Assert.assertEquals(expectedMsg,e.getMessage());
+        }
+    }
+
+    private List<Parameter> createParameters()
+    {
+        //Create single Parameter object 1
+        Parameter singleParameter1 = new Parameter();
+        singleParameter1.setName("LOCAL_ACCESS_IP_ADDR");
+//        singleParameter1.setList(false);
+        singleParameter1.setRequired(false);
+        singleParameter1.setSource("INSTAR");
+        singleParameter1.setDefaultValue("192.168.30.1");
+        singleParameter1.setRuleType("myRule1");
+        singleParameter1.setRequestKeys(createRequestKeys());
+
+        //Create single Parameter object 2
+        Parameter singleParameter2 = new Parameter();
+        singleParameter2.setName("LOCAL_CORE_ALT_IP_ADDR");
+        singleParameter2.setType("String");
+//        singleParameter2.setList(false);
+        singleParameter2.setRequired(false);
+        singleParameter2.setSource("INSTAR");
+        singleParameter2.setDefaultValue("fd00:f4d5:ea06:1:0:110:254");
+        singleParameter2.setRuleType("myRule2");
+        singleParameter2.setResponseKeys(createResponseKeys());
+
+
+        //Add the Parameter objects to the List
+        List<Parameter> parameterList = new ArrayList<Parameter>();
+        parameterList.add(singleParameter1);
+        parameterList.add(singleParameter2);
+        return parameterList;
+    }
+
+    private List<RequestKey> createRequestKeys()
+    {
+        //Create RequestKey object 1
+        RequestKey requestKey1 = new RequestKey();
+        requestKey1.setKeyName("class-type");
+        requestKey1.setKeyValue("interface-ip-address");
+
+        //Create RequestKey object 2
+        RequestKey requestKey2 = new RequestKey();
+        requestKey2.setKeyName("address_fqdn");
+        requestKey2.setKeyValue("someVal");
+
+        //Create RequestKey object 3
+        RequestKey requestKey3 = new RequestKey();
+        requestKey3.setKeyName("address_type");
+        requestKey3.setKeyValue("v4");
+
+        //Add the RequestKey Objects to the List
+        List<RequestKey> requestKeyList = new ArrayList<RequestKey>();
+        requestKeyList.add(requestKey1);
+        requestKeyList.add(requestKey2);
+        requestKeyList.add(requestKey3);
+        return  requestKeyList;
+    }
+
+    private List<ResponseKey> createResponseKeys()
+    {
+        //Create RequestKey object 1
+        ResponseKey responseKey1 = new ResponseKey();
+
+        responseKey1.setUniqueKeyName("name1");
+        responseKey1.setUniqueKeyValue("value1");
+        responseKey1.setFieldKeyName("field1");
+
+        //Add the RequestKey Objects to the List
+        List<ResponseKey> responseKeyList = new ArrayList<ResponseKey>();
+        responseKeyList.add(responseKey1);
+
+        return  responseKeyList;
+    }
+
+    private Parameter createParameter()
+    {
+        Parameter singleParameter1 = new Parameter();
+        singleParameter1.setName("LOCAL_ACCESS_IP_ADDR");
+        //singleParameter1.setList(false);
+        singleParameter1.setRequired(false);
+        singleParameter1.setSource("INSTAR");
+        singleParameter1.setDefaultValue("192.168.30.1");
+        singleParameter1.setRequestKeys(createRequestKeys());
+        singleParameter1.setResponseKeys(createResponseKeys());
+        return singleParameter1;
+    }
+
+    //@Test
+    public void testPDnull() throws IOException, ArtifactProcessorException {
+        PropertyDefinition pd = null;
+        OutputStream outstream=null;
+
+        outstream = new FileOutputStream(".\\TestTosca.yml");
+        ArtifactProcessorImpl arp = new ArtifactProcessorImpl();
+        arp.generateArtifact(pd,outstream);
+        outstream.flush();
+        outstream.close();
+
+
+    }
+
+    private String getFileContent(File file) throws IOException
+    {
+        InputStream is = new FileInputStream(file);
+        BufferedReader buf = new BufferedReader(new InputStreamReader(is));
+        String line = buf.readLine();
+        StringBuilder sb = new StringBuilder();
+
+        while (line != null) {
+            sb.append(line).append("\n");
+            line = buf.readLine();
+        }
+        String fileString = sb.toString();
+        is.close();
+        return fileString;
+    }
+}
diff --git a/appc-config/appc-config-params/provider/src/test/java/org/openecomp/sdnc/config/params/transformer/tosca/TestGenerateArtifactString.java b/appc-config/appc-config-params/provider/src/test/java/org/openecomp/sdnc/config/params/transformer/tosca/TestGenerateArtifactString.java
new file mode 100644
index 0000000..51c458c
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/test/java/org/openecomp/sdnc/config/params/transformer/tosca/TestGenerateArtifactString.java
@@ -0,0 +1,156 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * 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.
+ * 
+ *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.params.transformer.tosca;
+
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import org.openecomp.sdnc.config.params.transformer.tosca.exceptions.ArtifactProcessorException;
+
+import java.io.*;
+import java.net.URL;
+
+/**
+ * Created by pranavdi on 3/21/2017.
+ */
+public class TestGenerateArtifactString{
+
+    @Rule
+    public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+//    @Test
+    public void testStringArtifactGenerator() throws IOException, ArtifactProcessorException {
+
+        String pdString = getFileContent("tosca/ExamplePropertyDefinition.yml");
+        OutputStream outstream=null;
+
+        File tempFile = temporaryFolder.newFile("TestTosca.yml");
+        outstream = new FileOutputStream(tempFile);
+        ArtifactProcessorImpl arp = new ArtifactProcessorImpl();
+        arp.generateArtifact(pdString,outstream);
+        outstream.flush();
+        outstream.close();
+
+        String expectedTosca = getFileContent("tosca/ExpectedTosca.yml");
+        String toscaString = getFileContent(tempFile);
+        Assert.assertEquals(expectedTosca,toscaString);
+
+    }
+
+ //   @Test
+    public void testArtifactGeneratorWithParameterNameBlank() throws IOException, ArtifactProcessorException {
+
+        String pdString = getFileContent("tosca/ExamplePropertyDefinition2.yml");
+        OutputStream outstream=null;
+        String expectedMsg ="Parameter name is empty,null or contains whitespace";
+
+        File tempFile = temporaryFolder.newFile("TestTosca.yml");
+        outstream = new FileOutputStream(tempFile);
+        ArtifactProcessorImpl arp = new ArtifactProcessorImpl();
+        try {
+            arp.generateArtifact(pdString, outstream);
+        }
+        catch (ArtifactProcessorException e)
+        {
+            Assert.assertEquals(expectedMsg,e.getMessage());
+        }
+        outstream.flush();
+        outstream.close();
+    }
+
+  //  @Test
+    public void testArtifactGeneratorWithParameterNameNull() throws IOException, ArtifactProcessorException {
+
+        String pdString = getFileContent("tosca/ExamplePropertyDefinition3.yml");
+        OutputStream outstream=null;
+        String expectedMsg ="Parameter name is empty,null or contains whitespace";
+
+        File tempFile = temporaryFolder.newFile("TestTosca.yml");
+        outstream = new FileOutputStream(tempFile);
+        ArtifactProcessorImpl arp = new ArtifactProcessorImpl();
+        try {
+            arp.generateArtifact(pdString, outstream);
+        }
+        catch (ArtifactProcessorException e)
+        {
+            Assert.assertEquals(expectedMsg,e.getMessage());
+        }
+        outstream.flush();
+        outstream.close();
+    }
+
+   // @Test
+    public void testArtifactGeneratorWithKindNull() throws IOException, ArtifactProcessorException {
+
+        String pdString = getFileContent("tosca/ExamplePropertyDefinition4.yml");
+        OutputStream outstream=null;
+        String expectedMsg ="Kind in PropertyDefinition is blank or null";
+
+        File tempFile = temporaryFolder.newFile("TestTosca.yml");
+        outstream = new FileOutputStream(tempFile);
+        ArtifactProcessorImpl arp = new ArtifactProcessorImpl();
+        try {
+            arp.generateArtifact(pdString, outstream);
+        }
+        catch (ArtifactProcessorException e)
+        {
+            Assert.assertEquals(expectedMsg,e.getMessage());
+        }
+        outstream.flush();
+        outstream.close();
+    }
+
+    private String getFileContent(String fileName) throws IOException
+    {
+        ClassLoader classLoader = new TestGenerateArtifactString().getClass().getClassLoader();
+        InputStream is = new FileInputStream(classLoader.getResource(fileName).getFile());
+        BufferedReader buf = new BufferedReader(new InputStreamReader(is));
+        String line = buf.readLine();
+        StringBuilder sb = new StringBuilder();
+
+        while (line != null) {
+            sb.append(line).append("\n");
+            line = buf.readLine();
+        }
+        String fileString = sb.toString();
+        is.close();
+        return fileString;
+    }
+
+    private String getFileContent(File file) throws IOException
+    {
+        InputStream is = new FileInputStream(file);
+        BufferedReader buf = new BufferedReader(new InputStreamReader(is));
+        String line = buf.readLine();
+        StringBuilder sb = new StringBuilder();
+
+        while (line != null) {
+            sb.append(line).append("\n");
+            line = buf.readLine();
+        }
+        String fileString = sb.toString();
+        is.close();
+        return fileString;
+    }
+}
diff --git a/appc-config/appc-config-params/provider/src/test/java/org/openecomp/sdnc/config/params/transformer/tosca/TestPropertyQueryString.java b/appc-config/appc-config-params/provider/src/test/java/org/openecomp/sdnc/config/params/transformer/tosca/TestPropertyQueryString.java
new file mode 100644
index 0000000..4388843
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/test/java/org/openecomp/sdnc/config/params/transformer/tosca/TestPropertyQueryString.java
@@ -0,0 +1,170 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * 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.
+ * 
+ *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.params.transformer.tosca;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openecomp.sdnc.config.params.data.RequestKey;
+import org.openecomp.sdnc.config.params.data.ResponseKey;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class TestPropertyQueryString
+{
+   // @Test
+    public void testBuildResponseKeys()
+    {
+        ArtifactProcessorImpl arp = new ArtifactProcessorImpl();
+        String properties= arp.buildResponseKeyExpression(createResponseKeys());
+        Assert.assertEquals("<response-keys = address-fqdn:000000000000000000000:ipaddress-v4 , key2:value2:field2>",properties);
+    }
+
+    //@Test
+    public void testBuildRequestKeys()
+    {
+        ArtifactProcessorImpl arp = new ArtifactProcessorImpl();
+        String properties= arp.buildRequestKeyExpression(createRequestKeys());
+        Assert.assertEquals("<request-keys = class-type:interface-ip-address , address_fqdn:m001dbj001p1n004v006 , address_type:v4>",properties);
+    }
+
+    //@Test
+    public void testEncoding()
+    {
+        ArtifactProcessorImpl arp = new ArtifactProcessorImpl();
+
+        String expected1 = "&lt;class-type&gt;";
+        String encoded1 = arp.encode("<class-type>");
+        Assert.assertEquals(expected1,encoded1);
+
+        String expected2 = "&lt;&lt;&lt;metallica&lt;&gt;iron_maiden&gt;&gt;&gt;";
+        String encoded2 = arp.encode("<<<metallica<>iron_maiden>>>");
+        Assert.assertEquals(expected2,encoded2);
+
+        String expected3 = "band-list&colon;metallica&comma;ironmaiden";
+        String encoded3 = arp.encode("band-list:metallica,ironmaiden");
+        Assert.assertEquals(expected3,encoded3);
+
+        String expected4 = "motorhead&equals;lemmy";
+        String encoded4 = arp.encode("motorhead=lemmy");
+        Assert.assertEquals(expected4,encoded4);
+
+        String expected5 = "DreamTheater";
+        String encoded5 = arp.encode("  DreamTheater  ");
+        Assert.assertEquals(expected5,encoded5);
+    }
+
+    //@Test
+    public void testBuildRuleType()
+    {
+        ArtifactProcessorImpl arp = new ArtifactProcessorImpl();
+        String input = "IPV4";
+        String expected = "<rule-type = IPV4>";
+        Assert.assertEquals(expected,arp.buildRuleType(input));
+    }
+
+   // @Test
+    public void testRuleTypeSetNull()
+    {
+        ArtifactProcessorImpl arp = new ArtifactProcessorImpl();
+        String expected = "<rule-type = >";
+        Assert.assertEquals(expected,arp.buildRuleType(null));
+    }
+
+    //@Test
+    public void testBuildRequestKeysWithKeyNull()
+    {
+        ArtifactProcessorImpl arp = new ArtifactProcessorImpl();
+        List<RequestKey> requestKeyList = new ArrayList<RequestKey>();
+        requestKeyList.add(null);
+        String properties= arp.buildRequestKeyExpression(requestKeyList);
+        Assert.assertEquals("<request-keys = >",properties);
+    }
+
+    //@Test
+    public void testBuildResponseKeysWithKeyNull()
+    {
+        ArtifactProcessorImpl arp = new ArtifactProcessorImpl();
+        List<ResponseKey> responseKeyList = new ArrayList<ResponseKey>();
+        responseKeyList.add(null);
+        String properties= arp.buildResponseKeyExpression(responseKeyList);
+        Assert.assertEquals("<response-keys = >",properties);
+    }
+
+    //@Test
+    public void testBuildSourceSystem()
+    {
+        ArtifactProcessorImpl arp = new ArtifactProcessorImpl();
+        Assert.assertEquals("<source-system = INSTAR>",arp.buildSourceSystem("INSTAR"));
+    }
+    //@Test
+    private List<RequestKey> createRequestKeys()
+    {
+        //Create RequestKey object 1
+        RequestKey requestKey1 = new RequestKey();
+        requestKey1.setKeyName("class-type");
+        requestKey1.setKeyValue("interface-ip-address");
+
+        //Create RequestKey object 2
+        RequestKey requestKey2 = new RequestKey();
+        requestKey2.setKeyName("address_fqdn");
+        requestKey2.setKeyValue("00000000000000");
+
+        //Create RequestKey object 3
+        RequestKey requestKey3 = new RequestKey();
+        requestKey3.setKeyName("address_type");
+        requestKey3.setKeyValue("v4");
+
+        //Add the RequestKey Objects to the List
+        List<RequestKey> requestKeyList = new ArrayList<RequestKey>();
+        requestKeyList.add(requestKey1);
+        requestKeyList.add(requestKey2);
+        requestKeyList.add(requestKey3);
+        return  requestKeyList;
+    }
+	//@Test
+    private List<ResponseKey> createResponseKeys()
+    {
+        //Create RequestKey object 1
+        ResponseKey responseKey1 = new ResponseKey();
+
+        responseKey1.setUniqueKeyName("address-fqdn");
+        responseKey1.setUniqueKeyValue("0000000000000");
+        responseKey1.setFieldKeyName("ipaddress-v4");
+
+        ResponseKey responseKey2 = new ResponseKey();
+        responseKey2.setUniqueKeyName("key2");
+        responseKey2.setUniqueKeyValue("value2");
+        responseKey2.setFieldKeyName("field2");
+
+
+        //Add the RequestKey Objects to the List
+        List<ResponseKey> responseKeyList = new ArrayList<ResponseKey>();
+        responseKeyList.add(responseKey1);
+        responseKeyList.add(responseKey2);
+
+        return  responseKeyList;
+    }
+}
diff --git a/appc-config/appc-config-params/provider/src/test/java/org/openecomp/sdnc/config/params/transformer/tosca/TestReadArtifact.java b/appc-config/appc-config-params/provider/src/test/java/org/openecomp/sdnc/config/params/transformer/tosca/TestReadArtifact.java
new file mode 100644
index 0000000..654b4c1
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/test/java/org/openecomp/sdnc/config/params/transformer/tosca/TestReadArtifact.java
@@ -0,0 +1,107 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * 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.
+ * 
+ *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdnc.config.params.transformer.tosca;
+
+//import static org.junit.Assert;
+import org.junit.Assert;
+import org.junit.Test;
+import org.openecomp.sdnc.config.params.data.PropertyDefinition;
+import org.openecomp.sdnc.config.params.transformer.tosca.exceptions.ArtifactProcessorException;
+
+import java.io.*;
+
+
+/**
+ * @author thakkerp
+ * @since March 23,2017
+ */
+public class TestReadArtifact {
+//    @Test
+    public void testReadArtifactPositive() throws ArtifactProcessorException, IOException {
+
+        String toscaArtifact = getFileContent("tosca/ReadArtifactPositiveInputTosca.yml");
+        ArtifactProcessorImpl artifact = new ArtifactProcessorImpl();
+        PropertyDefinition ouptPD = artifact.readArtifact(toscaArtifact);
+        Assert.assertEquals(ouptPD.getKind(),"Property Definition");
+        Assert.assertEquals(ouptPD.getVersion(),"V1");
+
+        Assert.assertEquals(ouptPD.getParameters().get(0).getDefaultValue(),"0.0.0.0");
+        Assert.assertEquals(ouptPD.getParameters().get(0).getName(),"abc");
+        Assert.assertEquals(ouptPD.getParameters().get(0).getSource(),"INSTAR");
+        Assert.assertEquals(ouptPD.getParameters().get(0).getRuleType(),"interface-ip-address");
+        Assert.assertEquals(ouptPD.getParameters().get(0).getDescription(),"param_desc");
+        Assert.assertEquals(ouptPD.getParameters().get(0).getType(),"param1_type");
+        Assert.assertEquals(ouptPD.getParameters().get(1).getRequestKeys().get(0).getKeyName(),"address_fqdn");
+        Assert.assertEquals(ouptPD.getParameters().get(1).getRequestKeys().get(0).getKeyValue(),"000000000");
+        Assert.assertEquals(ouptPD.getParameters().get(1).getRequestKeys().get(0).getKeyName(),"address_fqdn");
+        Assert.assertEquals(ouptPD.getParameters().get(1).getRequestKeys().get(0).getKeyValue(),"000000000");
+        Assert.assertEquals(ouptPD.getParameters().get(0).getResponseKeys().get(0).getUniqueKeyName(),"address-fqdn");
+        //Assert.assertEquals(ouptPD.getParameters().get(0).getResponseKeys().get(0).getUniqueKeyValue(),"000000000");
+        Assert.assertEquals(ouptPD.getParameters().get(0).getResponseKeys().get(0).getFieldKeyName(),"ipaddress-v4");
+
+        Assert.assertEquals(ouptPD.getParameters().get(1).getDefaultValue(),"0:0:0:0:0:0:0:0");
+        Assert.assertEquals(ouptPD.getParameters().get(1).getName(),"param 2");
+        Assert.assertEquals(ouptPD.getParameters().get(1).getSource(),"INSTAR");
+        Assert.assertEquals(ouptPD.getParameters().get(1).getRuleType(),"interface-ip-address");
+        Assert.assertEquals(ouptPD.getParameters().get(1).getDescription(),"param2");
+        Assert.assertEquals(ouptPD.getParameters().get(1).getType(),"param2 type");
+        Assert.assertEquals(ouptPD.getParameters().get(1).getRequestKeys().get(0).getKeyName(),"address_fqdn");
+        Assert.assertEquals(ouptPD.getParameters().get(1).getRequestKeys().get(0).getKeyValue(),"000000000");
+        Assert.assertEquals(ouptPD.getParameters().get(1).getRequestKeys().get(1).getKeyName(),"address_type");
+        Assert.assertEquals(ouptPD.getParameters().get(1).getRequestKeys().get(1).getKeyValue(),"v4");
+        Assert.assertEquals(ouptPD.getParameters().get(1).getResponseKeys().get(0).getUniqueKeyName(),"address-fqdn");
+        Assert.assertEquals(ouptPD.getParameters().get(1).getResponseKeys().get(0).getUniqueKeyValue(),"000000000");
+        Assert.assertEquals(ouptPD.getParameters().get(1).getResponseKeys().get(0).getFieldKeyName(),"ipaddress-v4");
+
+    }
+//@Test
+    public void testReadArtifactNegetive() throws IOException {
+
+        String toscaArtifact = getFileContent("tosca/ReadArtifactNegetiveInputTosca.yml");
+        ArtifactProcessorImpl artifact = new ArtifactProcessorImpl();
+        try {
+            PropertyDefinition ouptPD = artifact.readArtifact(toscaArtifact);
+        } catch (ArtifactProcessorException e) {
+            Assert.assertNotNull(e);
+            Assert.assertEquals(e.getMessage(),"Invalid input found <> source1 <reqk1:reqv1 , reqk2:reqv2>");
+        }
+    }
+
+    private String getFileContent(String fileName) throws IOException
+    {
+        ClassLoader classLoader = new  TestReadArtifact().getClass().getClassLoader();
+        InputStream is = new FileInputStream(classLoader.getResource(fileName).getFile());
+        BufferedReader buf = new BufferedReader(new InputStreamReader(is));
+        String line = buf.readLine();
+        StringBuilder sb = new StringBuilder();
+
+        while (line != null) {
+            sb.append(line).append("\n");
+            line = buf.readLine();
+        }
+        String fileString = sb.toString();
+        is.close();
+        return fileString;
+    }
+
+}
diff --git a/appc-config/appc-config-params/provider/src/test/resources/parser/merge-param.json b/appc-config/appc-config-params/provider/src/test/resources/parser/merge-param.json
new file mode 100644
index 0000000..e610d07
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/test/resources/parser/merge-param.json
@@ -0,0 +1,26 @@
+/*-
+ * ============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=========================================================
+ */
+
+ {
+		"Additional1": "XX.XX.XX",
+		"Additional2": "XXXXXX",
+		"Additiona3": "00",
+		"Additional": "00"
+}
diff --git a/appc-config/appc-config-params/provider/src/test/resources/parser/pd.yaml b/appc-config/appc-config-params/provider/src/test/resources/parser/pd.yaml
new file mode 100644
index 0000000..868665f
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/test/resources/parser/pd.yaml
@@ -0,0 +1,75 @@
+---

+kind: "Property Definition"

+version: "V1"

+vnf-parameter-list:

+- name: "LOCAL_ACCESS_IP_ADDR"

+  description: null

+  type: null

+  required: false

+  source: "INSTAR"

+  rule-type: "interface-ip-address"

+  default: "192.168.30.1"

+  request-keys:

+  - key-name: "address_fqdn"

+    key-value: "someValue"

+  - key-name: "address_type"

+    key-value: "v4"

+  response-keys: null

+- name: "LOCAL_CORE_ALT_IP_ADDR"

+  description: null

+  type: null 

+  required: false

+  source: "INSTAR"

+  rule-type: null

+  default: "fd00:f4d5:ea06:1:0:110:136:254"

+  request-keys:

+  - key-name: "address_fqdn"

+    key-value: "someValue"

+  - key-name: "address_type"

+    key-value: "v4"

+  response-keys: null

+- name: "LOCAL_BILLING_IP_ADDR"

+  description: null

+  type: null 

+  required: false

+  source: null

+  rule-type: null

+  default: "192.168.30.1"

+  request-keys: null

+  response-keys: null

+- name: "REMOTE_ACCESS_IP_ADDR"

+  description: null

+  type: null 

+  required: false

+  source: null

+  rule-type: null

+  default: "192.168.30.1"

+  request-keys: null

+  response-keys: null

+- name: "REMOTE_CORE_ALT_IP_ADDR"

+  description: null

+  type: null 

+  required: false

+  source: null

+  rule-type: null

+  default: "fd00:f4d5:ea06:1:0:110:136:254"

+  request-keys: null

+  response-keys: null

+- name: "REMOTE_BILLING_IP_ADDR"

+  description: null

+  type: null 

+  required: false

+  source: "INSTAR"

+  rule-type: null

+  default: "192.168.30.1"

+  request-keys: null

+  response-keys: null

+- name: "CORE_NETWORK_PLEN"

+  description: null

+  type: null 

+  required: false

+  source: null

+  rule-type: null

+  default: "32"

+  request-keys: null

+  response-keys: null

diff --git a/appc-config/appc-config-params/provider/src/test/resources/parser/request-param.json b/appc-config/appc-config-params/provider/src/test/resources/parser/request-param.json
new file mode 100644
index 0000000..f84141b
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/test/resources/parser/request-param.json
@@ -0,0 +1,27 @@
+/*-
+ * ============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=========================================================
+ */
+
+ {		
+		"LOCAL_BILLING_IP_ADDR": "192.168.30.1",
+		"REMOTE_CORE_ALT_IP_ADDR": "fd00:f4d5:ea06:1:0:110:136:254",
+		"REMOTE_BILLING_IP_ADDR": "192.168.30.1",
+		"CORE_NETWORK_PLEN": "32"
+}
+
diff --git a/appc-config/appc-config-params/provider/src/test/resources/parser/system-param.json b/appc-config/appc-config-params/provider/src/test/resources/parser/system-param.json
new file mode 100644
index 0000000..648abac
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/test/resources/parser/system-param.json
@@ -0,0 +1,25 @@
+/*-
+ * ============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=========================================================
+ */
+
+ {
+		"LOCAL_ACCESS_IP_ADDR": "XX.XX.XX",
+		"LOCAL_BILLING_IP_ADDR": "XXXXXX",
+		"CORE_NETWORK_PLEN": "00"
+}
diff --git a/appc-config/appc-config-params/provider/src/test/resources/tosca/ExamplePropertyDefinition.yml b/appc-config/appc-config-params/provider/src/test/resources/tosca/ExamplePropertyDefinition.yml
new file mode 100644
index 0000000..7c8b31d
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/test/resources/tosca/ExamplePropertyDefinition.yml
@@ -0,0 +1,21 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : APPC
+# ================================================================================
+# 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.
+# 
+#  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+# ============LICENSE_END=========================================================
+###
diff --git a/appc-config/appc-config-params/provider/src/test/resources/tosca/ExamplePropertyDefinition2.yml b/appc-config/appc-config-params/provider/src/test/resources/tosca/ExamplePropertyDefinition2.yml
new file mode 100644
index 0000000..7c8b31d
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/test/resources/tosca/ExamplePropertyDefinition2.yml
@@ -0,0 +1,21 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : APPC
+# ================================================================================
+# 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.
+# 
+#  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+# ============LICENSE_END=========================================================
+###
diff --git a/appc-config/appc-config-params/provider/src/test/resources/tosca/ExamplePropertyDefinition3.yml b/appc-config/appc-config-params/provider/src/test/resources/tosca/ExamplePropertyDefinition3.yml
new file mode 100644
index 0000000..7c8b31d
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/test/resources/tosca/ExamplePropertyDefinition3.yml
@@ -0,0 +1,21 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : APPC
+# ================================================================================
+# 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.
+# 
+#  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+# ============LICENSE_END=========================================================
+###
diff --git a/appc-config/appc-config-params/provider/src/test/resources/tosca/ExamplePropertyDefinition4.yml b/appc-config/appc-config-params/provider/src/test/resources/tosca/ExamplePropertyDefinition4.yml
new file mode 100644
index 0000000..7c8b31d
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/test/resources/tosca/ExamplePropertyDefinition4.yml
@@ -0,0 +1,21 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : APPC
+# ================================================================================
+# 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.
+# 
+#  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+# ============LICENSE_END=========================================================
+###
diff --git a/appc-config/appc-config-params/provider/src/test/resources/tosca/ExpectedTosca.yml b/appc-config/appc-config-params/provider/src/test/resources/tosca/ExpectedTosca.yml
new file mode 100644
index 0000000..d379c47
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/test/resources/tosca/ExpectedTosca.yml
@@ -0,0 +1,75 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : APPC
+# ================================================================================
+# 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.
+# 
+#  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+# ============LICENSE_END=========================================================
+###
+
+node_types:
+  Property Definition:
+    derived_from: org.openecomp.genericvnf
+    version: V1
+    description: ''
+    properties:
+      LOCAL_BILLING_IP_ADDR:
+        type: string
+        required: false
+        default: 192.168.30.1
+        status: SUPPORTED
+      LOCAL_ACCESS_IP_ADDR:
+        type: string
+        required: false
+        default: 192.168.30.1
+        status: SUPPORTED
+      LOCAL_CORE_ALT_IP_ADDR:
+        type: string
+        required: false
+        default: fd00:f4d5:ea06:1:0:110:136:254
+        status: SUPPORTED
+      CORE_NETWORK_PLEN:
+        type: string
+        required: false
+        default: '32'
+        status: SUPPORTED
+      REMOTE_CORE_ALT_IP_ADDR:
+        type: string
+        required: false
+        default: fd00:f4d5:ea06:1:0:110:136:254
+        status: SUPPORTED
+      REMOTE_ACCESS_IP_ADDR:
+        type: string
+        required: false
+        default: 192.168.30.1
+        status: SUPPORTED
+      REMOTE_BILLING_IP_ADDR:
+        type: string
+        required: false
+        default: 192.168.30.1
+        status: SUPPORTED
+topology_template:
+  node_templates:
+    Property Definition_Template:
+      type: Property Definition
+      properties:
+        LOCAL_BILLING_IP_ADDR: <rule-type = > <response-keys = > <source-system = > <request-keys = >
+        LOCAL_ACCESS_IP_ADDR: <rule-type = interface-ip-address> <response-keys = > <source-system = INSTAR> <request-keys = address_fqdn:someValue , address_type:v4>
+        LOCAL_CORE_ALT_IP_ADDR: <rule-type = > <response-keys = > <source-system = INSTAR> <request-keys = >
+        CORE_NETWORK_PLEN: <rule-type = > <response-keys = > <source-system = > <request-keys = >
+        REMOTE_CORE_ALT_IP_ADDR: <rule-type = > <response-keys = > <source-system = > <request-keys = >
+        REMOTE_ACCESS_IP_ADDR: <rule-type = > <response-keys = > <source-system = > <request-keys = >
+        REMOTE_BILLING_IP_ADDR: <rule-type = > <response-keys = > <source-system = INSTAR> <request-keys = >
diff --git a/appc-config/appc-config-params/provider/src/test/resources/tosca/ReadArtifactNegetiveInputTosca.yml b/appc-config/appc-config-params/provider/src/test/resources/tosca/ReadArtifactNegetiveInputTosca.yml
new file mode 100644
index 0000000..0925753
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/test/resources/tosca/ReadArtifactNegetiveInputTosca.yml
@@ -0,0 +1,47 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : APPC
+# ================================================================================
+# 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.
+# 
+#  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+# ============LICENSE_END=========================================================
+###
+
+node_types:
+  Property Definition:
+    derived_from: org.openecomp.genericvnf
+    version: V1
+    description: ''
+    properties:
+      abc:
+        type: param1_type
+        description: param_desc
+        required: false
+        default: 192.168.30.1
+        status: SUPPORTED
+      param 2:
+        type: param2 type
+        description: param2
+        required: false
+        default: fd00:f4d5:ea06:1:0:110:136:254
+        status: SUPPORTED
+topology_template:
+  node_templates:
+    Property Definition_Template:
+      type: Property Definition
+      properties:
+        abc: <> source1 <reqk1:reqv1 , reqk2:reqv2>
+        param 2: <rule-type:rule 2> <> source2 <> 
diff --git a/appc-config/appc-config-params/provider/src/test/resources/tosca/ReadArtifactPositiveInputTosca.yml b/appc-config/appc-config-params/provider/src/test/resources/tosca/ReadArtifactPositiveInputTosca.yml
new file mode 100644
index 0000000..6c12142
--- /dev/null
+++ b/appc-config/appc-config-params/provider/src/test/resources/tosca/ReadArtifactPositiveInputTosca.yml
@@ -0,0 +1,47 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : APPC
+# ================================================================================
+# 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.
+# 
+#  ECOMP is a trademark and service mark of AT&T Intellectual Property.
+# ============LICENSE_END=========================================================
+###
+
+node_types:
+  Property Definition:
+    derived_from: org.openecomp.genericvnf
+    version: V1
+    description: ''
+    properties:
+      abc:
+        type: param1_type
+        description: param_desc
+        required: false
+        default: 0.0.0.0
+        status: SUPPORTED
+      param 2:
+        type: param2 type
+        description: param2
+        required: abc
+        default: 0:0:0:0:0:0:0:0
+        status: SUPPORTED
+topology_template:
+  node_templates:
+    Property Definition_Template:
+      type: Property Definition
+      properties:
+        abc: <rule-type = interface-ip-address> <response-keys = address-fqdn:000000000&equals;000000000:ipaddress-v4 > <source-system=INSTAR> <request-keys=address_fqdn:m001&colon;00000000 , address_type:v&comma;4>
+        param 2: <rule-type = interface-ip-address> <response-keys = address-fqdn:000000000:ipaddress-v4 > <source-system = INSTAR> <request-keys = address_fqdn:000000000 , address_type:v4>