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 = "=";
+ private static final String COLONENCODING = ":";
+ private static final String COMMAENCODING = ",";
+ private static final String GREATERTHANENCODING = ">";
+ private static final String LESSTHANENCODING = "<";
+
+ @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("<", "<").replaceAll(">", ">").replaceAll(":",":").replaceAll(",",",").replaceAll("=","=");
+ }
+ 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 = "<class-type>";
+ String encoded1 = arp.encode("<class-type>");
+ Assert.assertEquals(expected1,encoded1);
+
+ String expected2 = "<<<metallica<>iron_maiden>>>";
+ String encoded2 = arp.encode("<<<metallica<>iron_maiden>>>");
+ Assert.assertEquals(expected2,encoded2);
+
+ String expected3 = "band-list:metallica,ironmaiden";
+ String encoded3 = arp.encode("band-list:metallica,ironmaiden");
+ Assert.assertEquals(expected3,encoded3);
+
+ String expected4 = "motorhead=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=000000000:ipaddress-v4 > <source-system=INSTAR> <request-keys=address_fqdn:m001:00000000 , address_type:v,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>