summaryrefslogtreecommitdiffstats
path: root/appc-inbound/appc-artifact-handler
diff options
context:
space:
mode:
authorSkip Wonnell <kw5258@att.com>2017-08-14 17:47:10 -0500
committerPatrick Brady <pb071s@att.com>2017-08-18 05:46:15 +0000
commitab6c2c0cd441cf40723016e9a82aeeeb933fec7e (patch)
tree10d9de942694ca129cfc78d13cf2269f5c37cfc9 /appc-inbound/appc-artifact-handler
parent5166a76913fcb658be58adffed441590979e41cf (diff)
Initial adds artifact handler and design services
asdc-artifact-handler: an interface to receive artifacts distributed by SDC and persist them into the local database. appc-design-services: an interface to manage VNF configuration artifacts, primarily those generated by the configuration design tool. Includes these user stories: APPC-28/85 Change-Id: Ib207070d4593554fa424fc69d9c77a6cd5349fec Signed-off-by: Skip Wonnell <kw5258@att.com> Issue-Id: APPC-9
Diffstat (limited to 'appc-inbound/appc-artifact-handler')
-rwxr-xr-xappc-inbound/appc-artifact-handler/.gitignore32
-rwxr-xr-xappc-inbound/appc-artifact-handler/features/.gitignore1
-rwxr-xr-xappc-inbound/appc-artifact-handler/features/pom.xml99
-rw-r--r--appc-inbound/appc-artifact-handler/features/src/main/resources/features.xml53
-rwxr-xr-xappc-inbound/appc-artifact-handler/installer/.gitignore1
-rwxr-xr-xappc-inbound/appc-artifact-handler/installer/pom.xml132
-rwxr-xr-xappc-inbound/appc-artifact-handler/installer/resources/scripts/install-feature.sh39
-rw-r--r--appc-inbound/appc-artifact-handler/installer/src/assembly/assemble_installer_zip.xml62
-rw-r--r--appc-inbound/appc-artifact-handler/installer/src/assembly/assemble_mvnrepo_zip.xml50
-rw-r--r--appc-inbound/appc-artifact-handler/installer/src/main/resources/scripts/install-feature.sh43
-rwxr-xr-xappc-inbound/appc-artifact-handler/model/.gitignore2
-rwxr-xr-xappc-inbound/appc-artifact-handler/model/pom.xml158
-rwxr-xr-xappc-inbound/appc-artifact-handler/model/scripts/python/yang2props.py57
-rwxr-xr-xappc-inbound/appc-artifact-handler/model/src/main/.gitignore1
-rw-r--r--appc-inbound/appc-artifact-handler/model/src/main/yang/artifact-handler.yang139
-rwxr-xr-xappc-inbound/appc-artifact-handler/pom.xml49
-rwxr-xr-xappc-inbound/appc-artifact-handler/provider/.gitignore2
-rwxr-xr-xappc-inbound/appc-artifact-handler/provider/pom.xml184
-rwxr-xr-xappc-inbound/appc-artifact-handler/provider/src/main/.gitignore2
-rw-r--r--appc-inbound/appc-artifact-handler/provider/src/main/java/org/opendaylight/yang/gen/v1/org/openecomp/appc/artifact/handler/provider/impl/rev170321/ArtifactHandlerProviderModule.java59
-rw-r--r--appc-inbound/appc-artifact-handler/provider/src/main/java/org/opendaylight/yang/gen/v1/org/openecomp/appc/artifact/handler/provider/impl/rev170321/ArtifactHandlerProviderModuleFactory.java37
-rw-r--r--appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/ArtifactHandlerProvider.java213
-rw-r--r--appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/AsdcArtifactHandlerActivator.java59
-rw-r--r--appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/dbservices/DBService.java462
-rw-r--r--appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/node/ArtifactHandlerNode.java450
-rw-r--r--appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/ArtifactHandlerProviderUtil.java184
-rw-r--r--appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/AsdcArtifactHandlerConstants.java93
-rw-r--r--appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/EscapeUtils.java43
-rw-r--r--appc-inbound/appc-artifact-handler/provider/src/main/resources/initial/artifact-handler-provider.xml75
-rw-r--r--appc-inbound/appc-artifact-handler/provider/src/main/yang/artifact-handler-provider-impl.yang85
-rw-r--r--appc-inbound/appc-artifact-handler/provider/src/test/java/org/openecomp/appc/artifact/handler/node/TestArtifactHandlerNode.java38
-rw-r--r--appc-inbound/appc-artifact-handler/provider/src/test/resources/svclogic.properties37
-rwxr-xr-xappc-inbound/appc-artifact-handler/provider/src/test/resources/templates/general_template0
-rwxr-xr-xappc-inbound/appc-artifact-handler/provider/src/test/resources/templates/pd_template0
-rwxr-xr-xappc-inbound/appc-artifact-handler/provider/src/test/resources/templates/reference_template0
-rwxr-xr-xappc-inbound/appc-artifact-handler/provider/src/test/resources/templates/template_Asdc0
36 files changed, 2941 insertions, 0 deletions
diff --git a/appc-inbound/appc-artifact-handler/.gitignore b/appc-inbound/appc-artifact-handler/.gitignore
new file mode 100755
index 000000000..ab7c300b8
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/.gitignore
@@ -0,0 +1,32 @@
+# Target dirs in all projects
+**/target/*
+
+# Added for Intellij IDEA IDE
+**/.idea/*
+*.iml
+
+# Generated models and features
+**/bin/*
+
+# MANIFEST.MF is updated on every clean install
+**/src/main/resources/META-INF/
+**/pom.xml.versionsBackup
+pom.xml.versionsBackup
+
+.project
+
+*.prefs
+.classpath
+**/.classpath
+/target/
+logs/
+debug-logs/
+/.settings/
+**/*.iml
+/.idea/
+
+
+# MANIFEST.MF is updated on every clean install
+**/src/main/resources/META-INF/
+**/src/main/yang-gen-sal
+**/src/main/yang-gen-config
diff --git a/appc-inbound/appc-artifact-handler/features/.gitignore b/appc-inbound/appc-artifact-handler/features/.gitignore
new file mode 100755
index 000000000..b83d22266
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/features/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/appc-inbound/appc-artifact-handler/features/pom.xml b/appc-inbound/appc-artifact-handler/features/pom.xml
new file mode 100755
index 000000000..ab4f624ea
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/features/pom.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>appc-artifact-handler</artifactId>
+ <groupId>org.openecomp.appc</groupId>
+ <version>1.1.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>appc-artifact-handler-features</artifactId>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.openecomp.appc</groupId>
+ <artifactId>appc-artifact-handler-model</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.openecomp.appc</groupId>
+ <artifactId>appc-artifact-handler-provider</artifactId>
+ <classifier>config</classifier>
+ <type>xml</type>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.mdsal</groupId>
+ <artifactId>features-mdsal</artifactId>
+ <classifier>features</classifier>
+ <type>xml</type>
+ <scope>runtime</scope>
+ </dependency>
+ <!-- dependency for opendaylight-karaf-empty for use by testing -->
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>opendaylight-karaf-empty</artifactId>
+ <type>zip</type>
+ </dependency>
+
+ <dependency>
+ <!-- Required for launching the feature tests -->
+ <groupId>org.opendaylight.odlparent</groupId>
+ <artifactId>features-test</artifactId>
+ <scope>test</scope>
+ <version>${odl.commons.opendaylight.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>features-yangtools</artifactId>
+ <classifier>features</classifier>
+ <type>xml</type>
+ <scope>runtime</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <resources>
+ <resource>
+ <filtering>true</filtering>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>filter</id>
+ <goals>
+ <goal>resources</goal>
+ </goals>
+ <phase>generate-resources</phase>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>attach-artifacts</id>
+ <goals>
+ <goal>attach-artifact</goal>
+ </goals>
+ <phase>package</phase>
+ <configuration>
+ <artifacts>
+ <artifact>
+ <file>${project.build.directory}/classes/${features.file}</file>
+ <type>xml</type>
+ <classifier>features</classifier>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/appc-inbound/appc-artifact-handler/features/src/main/resources/features.xml b/appc-inbound/appc-artifact-handler/features/src/main/resources/features.xml
new file mode 100644
index 000000000..f742dfcb0
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/features/src/main/resources/features.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ============LICENSE_START=======================================================
+ ONAP : APPC
+ ================================================================================
+ Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ ================================================================================
+ Copyright (C) 2017 Amdocs
+ =============================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ ============LICENSE_END=========================================================
+ -->
+
+
+<features name="app-cntrl-artifact-handler-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
+
+
+ <repository>mvn:org.opendaylight.mdsal/features-mdsal/${odl.mdsal.version}/xml/features</repository>
+
+ <feature name='app-cntrl-artifact-handler' description="Application Controller Artifact Handler"
+ version='${project.version}'>
+ <!-- Most applications will have a dependency on the ODL MD-SAL Broker -->
+ <feature version="${broker-mdsal.version">odl-mdsal-broker</feature>
+ <feature version='${sdnctl.sli.version}'>sdnc-sli</feature>
+ <bundle>wrap:mvn:com.att.eelf/eelf-core/${eelf.version}</bundle>
+ <bundle>wrap:mvn:com.fasterxml.jackson.core/jackson-databind/${jackson.version}</bundle>
+ <bundle>wrap:mvn:com.fasterxml.jackson.core/jackson-annotations/${jackson.version}</bundle>
+ <bundle>wrap:mvn:com.fasterxml.jackson.core/jackson-core/${jackson.version}</bundle>
+ <bundle>wrap:mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/${jackson.version}</bundle>
+ <bundle>wrap:mvn:org.yaml/snakeyaml/${snakeyaml.version}</bundle>
+ <bundle>wrap:mvn:org.openecomp.appc/appc-yang-generator/${project.version}</bundle>
+ <bundle>wrap:mvn:org.openecomp.sdc.common/openecomp-tosca-datatype/${tosca.datatype.version}</bundle>
+ <bundle>mvn:org.openecomp.appc/appc-config-params-provider/${project.version}</bundle>
+ <bundle>mvn:org.openecomp.appc/appc-artifact-handler-model/${project.version}</bundle>
+ <bundle>mvn:org.openecomp.appc/appc-artifact-handler-provider/${project.version}</bundle>
+ <configfile finalname="etc/opendaylight/karaf/200-artifact-handler-provider.xml">mvn:org.openecomp.appc/appc-artifact-handler-provider/${project.version}/xml/config</configfile>
+ </feature>
+
+</features>
diff --git a/appc-inbound/appc-artifact-handler/installer/.gitignore b/appc-inbound/appc-artifact-handler/installer/.gitignore
new file mode 100755
index 000000000..b83d22266
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/installer/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/appc-inbound/appc-artifact-handler/installer/pom.xml b/appc-inbound/appc-artifact-handler/installer/pom.xml
new file mode 100755
index 000000000..9af28bf6a
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/installer/pom.xml
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>appc-artifact-handler</artifactId>
+ <groupId>org.openecomp.appc</groupId>
+ <version>1.1.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>appc-artifact-handler-installer</artifactId>
+ <name>appc-artifact-handler-installer</name>
+ <packaging>pom</packaging>
+
+ <properties>
+ <application.name>appc-artifact-handler</application.name>
+ <features.boot>appc-artifact-handler</features.boot>
+ <features.repositories>mvn:org.openecomp.appc/appc-artifact-handler-features/${project.version}/xml/features</features.repositories>
+ <include.transitive.dependencies>false</include.transitive.dependencies>
+ </properties>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.openecomp.appc</groupId>
+ <artifactId>appc-artifact-handler-features</artifactId>
+ <classifier>features</classifier>
+ <type>xml</type>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.openecomp.appc</groupId>
+ <artifactId>appc-artifact-handler-provider</artifactId>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>maven-repo-zip</id>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <phase>package</phase>
+ <configuration>
+ <appendAssemblyId>false</appendAssemblyId>
+ <attach>false</attach>
+ <finalName>stage/${application.name}-${project.version}</finalName>
+ <descriptors>
+ <descriptor>src/assembly/assemble_mvnrepo_zip.xml</descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ <execution>
+ <id>installer-zip</id>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <phase>package</phase>
+ <configuration>
+ <appendAssemblyId>false</appendAssemblyId>
+ <attach>true</attach>
+ <finalName>${application.name}-${project.version}</finalName>
+ <descriptors>
+ <descriptor>src/assembly/assemble_installer_zip.xml</descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>copy-dependencies</id>
+ <goals>
+ <goal>copy-dependencies</goal>
+ </goals>
+ <phase>prepare-package</phase>
+ <configuration>
+ <transitive>false</transitive>
+ <outputDirectory>${project.build.directory}/assembly/system</outputDirectory>
+ <overWriteReleases>false</overWriteReleases>
+ <overWriteSnapshots>true</overWriteSnapshots>
+ <overWriteIfNewer>true</overWriteIfNewer>
+ <useRepositoryLayout>true</useRepositoryLayout>
+ <addParentPoms>false</addParentPoms>
+ <copyPom>false</copyPom>
+ <excludeGroupIds>org.opendaylight</excludeGroupIds>
+ <scope>provided</scope>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>copy-version</id>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <!-- here the phase you need -->
+ <phase>validate</phase>
+ <configuration>
+ <outputDirectory>${basedir}/target/stage</outputDirectory>
+ <resources>
+ <resource>
+ <directory>src/main/resources/scripts</directory>
+ <includes>
+ <include>install-feature.sh</include>
+ </includes>
+ <filtering>true</filtering>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/appc-inbound/appc-artifact-handler/installer/resources/scripts/install-feature.sh b/appc-inbound/appc-artifact-handler/installer/resources/scripts/install-feature.sh
new file mode 100755
index 000000000..c5a39bf9a
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/installer/resources/scripts/install-feature.sh
@@ -0,0 +1,39 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : APP-C
+# ================================================================================
+# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=========================================================
+###
+
+#!/bin/bash
+
+ODL_HOME=${ODL_HOME:-/opt/opendaylight/current}
+ODL_KARAF_CLIENT=${ODL_KARAF_CLIENT:-${ODL_HOME}/bin/client}
+ODL_KARAF_CLIENT_OPTS=${ODL_KARAF_CLIENT_OPTS:-"-u karaf"}
+INSTALLERDIR=$(dirname $0)
+
+REPOZIP=${INSTALLERDIR}/${features.boot}-${project.version}.zip
+
+if [ -f ${REPOZIP} ]
+then
+ unzip -n -d ${ODL_HOME} ${REPOZIP}
+else
+ echo "ERROR : repo zip ($REPOZIP) not found"
+ exit 1
+fi
+
+${ODL_KARAF_CLIENT} ${ODL_KARAF_CLIENT_OPTS} feature:repo-add ${features.repositories}
+${ODL_KARAF_CLIENT} ${ODL_KARAF_CLIENT_OPTS} feature:install ${features.boot}
diff --git a/appc-inbound/appc-artifact-handler/installer/src/assembly/assemble_installer_zip.xml b/appc-inbound/appc-artifact-handler/installer/src/assembly/assemble_installer_zip.xml
new file mode 100644
index 000000000..e54eede04
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/installer/src/assembly/assemble_installer_zip.xml
@@ -0,0 +1,62 @@
+<!--
+ ============LICENSE_START=======================================================
+ ONAP : APPC
+ ================================================================================
+ Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ ================================================================================
+ Copyright (C) 2017 Amdocs
+ =============================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ ============LICENSE_END=========================================================
+ -->
+
+<!-- Defines how we build the .zip file which is our distribution. -->
+
+<assembly
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+ <id>controller</id>
+ <formats>
+ <format>zip</format>
+ </formats>
+
+ <!-- we want "system" and related files right at the root level
+ as this file is suppose to be unzip on top of a karaf
+ distro. -->
+ <includeBaseDirectory>false</includeBaseDirectory>
+
+ <fileSets>
+ <fileSet>
+ <directory>target/stage/</directory>
+ <outputDirectory>${application.name}</outputDirectory>
+ <fileMode>755</fileMode>
+ <includes>
+ <include>*.sh</include>
+ </includes>
+ </fileSet>
+ <fileSet>
+ <directory>target/stage/</directory>
+ <outputDirectory>${application.name}</outputDirectory>
+ <fileMode>644</fileMode>
+ <excludes>
+ <exclude>*.sh</exclude>
+ </excludes>
+ </fileSet>
+ </fileSets>
+
+
+
+</assembly>
diff --git a/appc-inbound/appc-artifact-handler/installer/src/assembly/assemble_mvnrepo_zip.xml b/appc-inbound/appc-artifact-handler/installer/src/assembly/assemble_mvnrepo_zip.xml
new file mode 100644
index 000000000..fc99e918e
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/installer/src/assembly/assemble_mvnrepo_zip.xml
@@ -0,0 +1,50 @@
+<!--
+ ============LICENSE_START=======================================================
+ ONAP : APPC
+ ================================================================================
+ Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ ================================================================================
+ Copyright (C) 2017 Amdocs
+ =============================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ ============LICENSE_END=========================================================
+ -->
+
+<!-- Defines how we build the .zip file which is our distribution. -->
+
+<assembly
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+ <id>controller</id>
+ <formats>
+ <format>zip</format>
+ </formats>
+
+ <!-- we want "system" and related files right at the root level
+ as this file is suppose to be unzip on top of a karaf
+ distro. -->
+ <includeBaseDirectory>false</includeBaseDirectory>
+
+ <fileSets>
+ <fileSet>
+ <directory>target/assembly/</directory>
+ <outputDirectory>.</outputDirectory>
+ <excludes>
+ </excludes>
+ </fileSet>
+ </fileSets>
+
+</assembly>
diff --git a/appc-inbound/appc-artifact-handler/installer/src/main/resources/scripts/install-feature.sh b/appc-inbound/appc-artifact-handler/installer/src/main/resources/scripts/install-feature.sh
new file mode 100644
index 000000000..05b4ae373
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/installer/src/main/resources/scripts/install-feature.sh
@@ -0,0 +1,43 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : APPC
+# ================================================================================
+# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# Copyright (C) 2017 Amdocs
+# =============================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+# ============LICENSE_END=========================================================
+###
+
+#!/bin/bash
+
+ODL_HOME=${ODL_HOME:-/opt/opendaylight/current}
+ODL_KARAF_CLIENT=${ODL_KARAF_CLIENT:-${ODL_HOME}/bin/client}
+ODL_KARAF_CLIENT_OPTS=${ODL_KARAF_CLIENT_OPTS:-"-u karaf"}
+INSTALLERDIR=$(dirname $0)
+
+REPOZIP=${INSTALLERDIR}/${features.boot}-${project.version}.zip
+
+if [ -f ${REPOZIP} ]
+then
+ unzip -n -d ${ODL_HOME} ${REPOZIP}
+else
+ echo "ERROR : repo zip ($REPOZIP) not found"
+ exit 1
+fi
+
+${ODL_KARAF_CLIENT} ${ODL_KARAF_CLIENT_OPTS} feature:repo-add ${features.repositories}
+${ODL_KARAF_CLIENT} ${ODL_KARAF_CLIENT_OPTS} feature:install ${features.boot}
diff --git a/appc-inbound/appc-artifact-handler/model/.gitignore b/appc-inbound/appc-artifact-handler/model/.gitignore
new file mode 100755
index 000000000..0f44a0f25
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/model/.gitignore
@@ -0,0 +1,2 @@
+/target/
+/.classpath
diff --git a/appc-inbound/appc-artifact-handler/model/pom.xml b/appc-inbound/appc-artifact-handler/model/pom.xml
new file mode 100755
index 000000000..7b9402d8f
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/model/pom.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>appc-artifact-handler</artifactId>
+ <groupId>org.openecomp.appc</groupId>
+ <version>1.1.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>appc-artifact-handler-model</artifactId>
+ <packaging>bundle</packaging>
+
+ <build>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Import-Package>*</Import-Package>
+ </instructions>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-maven-plugin</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>org.opendaylight.mdsal</groupId>
+ <artifactId>maven-sal-api-gen-plugin</artifactId>
+ <!-- <version>${odl.yangtools.version}</version> -->
+ <version>${odl.sal.api.gen.plugin.version}</version>
+ <type>jar</type>
+ </dependency>
+ </dependencies>
+ <executions>
+ <execution>
+ <goals>
+ <goal>generate-sources</goal>
+ </goals>
+ <configuration>
+ <yangFilesRootDir>${yang.file.directory}</yangFilesRootDir>
+ <codeGenerators>
+ <generator>
+ <codeGeneratorClass>org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl</codeGeneratorClass>
+ <outputBaseDir>${salGeneratorPath}</outputBaseDir>
+ </generator>
+ </codeGenerators>
+ <inspectDependencies>true</inspectDependencies>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <version>1.2.1</version>
+ <executions>
+ <execution>
+ <configuration>
+ <executable>python</executable>
+ <arguments>
+ <argument>scripts/python/yang2props.py</argument>
+ <argument>src/main/yang/artifact-handler.yang</argument>
+ <argument>target/artifact-handler.properties</argument>
+ </arguments>
+ </configuration>
+ <id>generation</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>attach-artifacts</id>
+ <goals>
+ <goal>attach-artifact</goal>
+ </goals>
+ <phase>package</phase>
+ <configuration>
+ <artifacts>
+ <artifact>
+ <file>${project.build.directory}/artifact-handler.properties</file>
+ <type>properties</type>
+ <classifier>artifact-handler</classifier>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <!--This plugin's configuration is used to store Eclipse m2e settings
+ only. It has no influence on the Maven build itself. -->
+ <plugin>
+ <groupId>org.eclipse.m2e</groupId>
+ <artifactId>lifecycle-mapping</artifactId>
+ <version>1.0.0</version>
+ <configuration>
+ <lifecycleMappingMetadata>
+ <pluginExecutions>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>
+ org.codehaus.mojo
+ </groupId>
+ <artifactId>
+ exec-maven-plugin
+ </artifactId>
+ <versionRange>
+ [1.2.1,)
+ </versionRange>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore />
+ </action>
+ </pluginExecution>
+ </pluginExecutions>
+ </lifecycleMappingMetadata>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.opendaylight.mdsal</groupId>
+ <artifactId>yang-binding</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-common</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.mdsal.model</groupId>
+ <artifactId>ietf-inet-types</artifactId>
+ <version>${odl.ietf-inet-types.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.mdsal.model</groupId>
+ <artifactId>ietf-yang-types</artifactId>
+ <version>${odl.ietf-yang-types.version}</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/appc-inbound/appc-artifact-handler/model/scripts/python/yang2props.py b/appc-inbound/appc-artifact-handler/model/scripts/python/yang2props.py
new file mode 100755
index 000000000..559d31b8b
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/model/scripts/python/yang2props.py
@@ -0,0 +1,57 @@
+#!/usr/bin/python
+
+import re
+import sys
+
+
+# Convert word from foo-bar to FooBar
+# words begining with a digit will be converted to _digit
+def to_enum(s):
+ if s[0].isdigit():
+ s = "_" + s
+ else:
+ s = s[0].upper() + s[1:]
+ return re.sub(r'(?!^)-([a-zA-Z])', lambda m: m.group(1).upper(), s)
+
+leaf = ""
+val = ""
+li = []
+
+if len(sys.argv) < 3:
+ print 'yang2props.py <input yang> <output properties>'
+ sys.exit(2)
+
+with open(sys.argv[1], "r") as ins:
+ for line in ins:
+ # if we see a leaf save the name for later
+ if "leaf " in line:
+ match = re.search(r'leaf (\S+)', line)
+ if match:
+ leaf = match.group(1)
+
+ # if we see enum convert the value to enum format and see if it changed
+ # if the value is different write a property entry
+ if "enum " in line:
+ match = re.search(r'enum "(\S+)";', line)
+ if match:
+ val = match.group(1)
+ enum = to_enum(val)
+
+ # see if converting to enum changed the string
+ if val != enum:
+ property = "yang."+leaf+"."+enum+"="+val
+ if property not in li:
+ li.append( property)
+
+
+# Open output file
+fo = open(sys.argv[2], "wb")
+fo.write("# yang conversion properties \n")
+fo.write("# used to convert Enum back to the original yang value \n")
+fo.write("\n".join(li))
+fo.write("\n")
+
+# Close opend file
+fo.close()
+
+
diff --git a/appc-inbound/appc-artifact-handler/model/src/main/.gitignore b/appc-inbound/appc-artifact-handler/model/src/main/.gitignore
new file mode 100755
index 000000000..380e77fc2
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/model/src/main/.gitignore
@@ -0,0 +1 @@
+/yang-gen-sal/
diff --git a/appc-inbound/appc-artifact-handler/model/src/main/yang/artifact-handler.yang b/appc-inbound/appc-artifact-handler/model/src/main/yang/artifact-handler.yang
new file mode 100644
index 000000000..1839fbd67
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/model/src/main/yang/artifact-handler.yang
@@ -0,0 +1,139 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+module artifact-handler {
+ yang-version 1;
+
+ namespace "org.openecomp.appc:artifacthandler";
+ prefix artifacthandler;
+
+ import ietf-inet-types { prefix "ietf"; revision-date "2010-09-24"; }
+ organization "AT&T, Inc.";
+
+ description
+ "Defines APPC interface to push reference data and templates.";
+
+ revision "2017-03-21" {
+ description
+ "Initial draft";
+ }
+
+ grouping configuration-document-information {
+ uses request-information;
+ uses document-parameters;
+ }
+
+ grouping request-information {
+ container request-information {
+ leaf request-id {
+ type string;
+ }
+ leaf request-action {
+ type enumeration {
+ enum "StoreAsdcDocumentRequest";
+ }
+ }
+ leaf request-sub-action {
+ type enumeration {
+ enum "STOREDOCUMENT";
+ }
+ }
+ leaf source {
+ type string;
+ }
+ }
+ }
+ grouping document-parameters {
+ container document-parameters {
+ leaf service-uuid {
+ type string;
+ mandatory true;
+ }
+ leaf distribution-id {
+ type string;
+ }
+ leaf service-name {
+ type string;
+ }
+ leaf service-description {
+ type string;
+ }
+ leaf service-artifacts {
+ type string;
+ }
+ leaf resource-uuid {
+ type string;
+ }
+ leaf resource-instance-name {
+ type string;
+ }
+ leaf resource-name {
+ type string;
+ }
+ leaf resource-version {
+ type string;
+ }
+ leaf resource-type {
+ type string;
+ }
+ leaf artifact-uuid {
+ type string;
+ }
+ leaf artifact-name {
+ type string;
+ }
+ leaf artifact-type {
+ type string;
+ }
+ leaf artifact-version {
+ type string;
+ }
+ leaf artifact-description {
+ type string;
+ }
+ leaf artifact-contents {
+ type string;
+ }
+ }
+ }
+ rpc uploadartifact {
+ description "upload the artifact into APPC";
+ input {
+ uses configuration-document-information;
+ }
+ output {
+ container config-document-response {
+ leaf request-id {
+ type string;
+ }
+ leaf status {
+ type string;
+ }
+ leaf error-reason {
+ type string;
+ }
+ }
+ }
+ }
+}
diff --git a/appc-inbound/appc-artifact-handler/pom.xml b/appc-inbound/appc-artifact-handler/pom.xml
new file mode 100755
index 000000000..ffa735255
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/pom.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <parent>
+ <groupId>org.openecomp.appc</groupId>
+ <artifactId>appc-inbound</artifactId>
+ <version>1.1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <packaging>pom</packaging>
+ <artifactId>appc-artifact-handler</artifactId>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.openecomp.appc</groupId>
+ <artifactId>appc-artifact-handler-features</artifactId>
+ <classifier>features</classifier>
+ <type>xml</type>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.openecomp.appc</groupId>
+ <artifactId>appc-artifact-handler-model</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.openecomp.appc</groupId>
+ <artifactId>appc-artifact-handler-provider</artifactId>
+ <version>${project.version}</version>
+ <classifier>config</classifier>
+ <type>xml</type>
+ </dependency>
+ <dependency>
+ <groupId>org.openecomp.appc</groupId>
+ <artifactId>appc-artifact-handler-provider</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <modules>
+ <module>model</module>
+ <module>provider</module>
+ <module>features</module>
+ <module>installer</module>
+ </modules>
+</project>
diff --git a/appc-inbound/appc-artifact-handler/provider/.gitignore b/appc-inbound/appc-artifact-handler/provider/.gitignore
new file mode 100755
index 000000000..0f44a0f25
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/.gitignore
@@ -0,0 +1,2 @@
+/target/
+/.classpath
diff --git a/appc-inbound/appc-artifact-handler/provider/pom.xml b/appc-inbound/appc-artifact-handler/provider/pom.xml
new file mode 100755
index 000000000..90d34a320
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/pom.xml
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>appc-artifact-handler</artifactId>
+ <groupId>org.openecomp.appc</groupId>
+ <version>1.1.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>appc-artifact-handler-provider</artifactId>
+ <packaging>bundle</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Bundle-SymbolicName>org.openecomp.appc.artifact.handler</Bundle-SymbolicName>
+ <Bundle-Activator>org.openecomp.appc.artifact.handler.AsdcArtifactHandlerActivator</Bundle-Activator>
+ <Export-Package>org.openecomp.appc.artifact.handler,org.opendaylight.controller.config.yang.config.artifact-handler_provider.impl</Export-Package>
+ <Import-Package>*</Import-Package>
+ <DynamicImport-Package>*</DynamicImport-Package>
+ </instructions>
+ <manifestLocation>${project.basedir}/src/main/resources/META-INF</manifestLocation>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>config</id>
+ <goals>
+ <goal>generate-sources</goal>
+ </goals>
+ <configuration>
+ <codeGenerators>
+ <generator>
+ <codeGeneratorClass>org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator</codeGeneratorClass>
+ <outputBaseDir>${jmxGeneratorPath}</outputBaseDir>
+ <additionalConfiguration>
+ <namespaceToPackage1>urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang</namespaceToPackage1>
+ </additionalConfiguration>
+ </generator>
+ <generator>
+ <codeGeneratorClass>org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl</codeGeneratorClass>
+ <outputBaseDir>${salGeneratorPath}</outputBaseDir>
+ </generator>
+ </codeGenerators>
+ <inspectDependencies>true</inspectDependencies>
+ </configuration>
+ </execution>
+ </executions>
+ <dependencies>
+ <dependency>
+ <groupId>org.opendaylight.mdsal</groupId>
+ <artifactId>maven-sal-api-gen-plugin</artifactId>
+ <version>${odl.sal.api.gen.plugin.version}</version>
+ <type>jar</type>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>yang-jmx-generator-plugin</artifactId>
+ <version>${odl.yang.jmx.generator.version}</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>attach-artifacts</id>
+ <goals>
+ <goal>attach-artifact</goal>
+ </goals>
+ <phase>package</phase>
+ <configuration>
+ <artifacts>
+ <artifact>
+ <file>${project.build.directory}/classes/initial/artifact-handler-provider.xml</file>
+ <type>xml</type>
+ <classifier>config</classifier>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.openecomp.appc</groupId>
+ <artifactId>appc-artifact-handler-model</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>config-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.openecomp.appc</groupId>
+ <artifactId>appc-yang-generator</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>sal-binding-config</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>sal-binding-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>sal-common-util</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.openecomp.sdnc.core</groupId>
+ <artifactId>sli-common</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.openecomp.sdnc.core</groupId>
+ <artifactId>sli-provider</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.openecomp.appc</groupId>
+ <artifactId>appc-config-params-provider</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <artifactId>sal-test-model</artifactId>
+ <groupId>org.opendaylight.controller</groupId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <artifactId>sal-rest-connector</artifactId>
+ <groupId>org.opendaylight.netconf</groupId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>sal-binding-broker-impl</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>sal-binding-broker-impl</artifactId>
+ <version>${odl.mdsal.version}</version>
+ <classifier>tests</classifier>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.att.eelf</groupId>
+ <artifactId>eelf-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.json</groupId>
+ <artifactId>json</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.openecomp.sdnc.adaptors</groupId>
+ <artifactId>sql-resource-provider</artifactId>
+ <version>${openecomp.sdnc.sql-resource.version}</version>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/.gitignore b/appc-inbound/appc-artifact-handler/provider/src/main/.gitignore
new file mode 100755
index 000000000..f49bcf5ee
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/.gitignore
@@ -0,0 +1,2 @@
+/yang-gen-config/
+/yang-gen-sal/
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/opendaylight/yang/gen/v1/org/openecomp/appc/artifact/handler/provider/impl/rev170321/ArtifactHandlerProviderModule.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/opendaylight/yang/gen/v1/org/openecomp/appc/artifact/handler/provider/impl/rev170321/ArtifactHandlerProviderModule.java
new file mode 100644
index 000000000..a35ba6821
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/opendaylight/yang/gen/v1/org/openecomp/appc/artifact/handler/provider/impl/rev170321/ArtifactHandlerProviderModule.java
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.opendaylight.yang.gen.v1.org.openecomp.appc.artifact.handler.provider.impl.rev170321;
+
+import org.openecomp.appc.artifact.handler.ArtifactHandlerProvider;
+
+public class ArtifactHandlerProviderModule extends org.opendaylight.yang.gen.v1.org.openecomp.appc.artifact.handler.provider.impl.rev170321.AbstractArtifactHandlerProviderModule {
+ public ArtifactHandlerProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+ super(identifier, dependencyResolver);
+ }
+
+ public ArtifactHandlerProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.yang.gen.v1.org.openecomp.appc.artifact.handler.provider.impl.rev170321.ArtifactHandlerProviderModule oldModule, java.lang.AutoCloseable oldInstance) {
+ super(identifier, dependencyResolver, oldModule, oldInstance);
+ }
+
+ @Override
+ public void customValidation() {
+ // add custom validation form module attributes here.
+ }
+
+ @Override
+ public java.lang.AutoCloseable createInstance() {
+ final ArtifactHandlerProvider provider = new ArtifactHandlerProvider(getDataBrokerDependency()
+ , getNotificationServiceDependency()
+ , getRpcRegistryDependency());
+
+ return new AutoCloseable() {
+
+ @Override
+ public void close() throws Exception {
+ provider.close();
+ }
+ };
+ }
+
+
+}
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/opendaylight/yang/gen/v1/org/openecomp/appc/artifact/handler/provider/impl/rev170321/ArtifactHandlerProviderModuleFactory.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/opendaylight/yang/gen/v1/org/openecomp/appc/artifact/handler/provider/impl/rev170321/ArtifactHandlerProviderModuleFactory.java
new file mode 100644
index 000000000..171eada9b
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/opendaylight/yang/gen/v1/org/openecomp/appc/artifact/handler/provider/impl/rev170321/ArtifactHandlerProviderModuleFactory.java
@@ -0,0 +1,37 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+/*
+* Generated file
+*
+* Generated from: yang module name: artifact-handler-provider-impl yang module local name: artifact-handler-provider-impl
+* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
+* Generated at: Wed Aug 09 09:36:59 EDT 2017
+*
+* Do not modify this file unless it is present under src/main directory
+*/
+package org.opendaylight.yang.gen.v1.org.openecomp.appc.artifact.handler.provider.impl.rev170321;
+public class ArtifactHandlerProviderModuleFactory extends org.opendaylight.yang.gen.v1.org.openecomp.appc.artifact.handler.provider.impl.rev170321.AbstractArtifactHandlerProviderModuleFactory {
+
+}
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/ArtifactHandlerProvider.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/ArtifactHandlerProvider.java
new file mode 100644
index 000000000..233984f55
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/ArtifactHandlerProvider.java
@@ -0,0 +1,213 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.artifact.handler;
+
+import java.util.HashMap;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.artifacthandler.rev170321.ArtifactHandlerService;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.artifacthandler.rev170321.UploadartifactInput;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.artifacthandler.rev170321.UploadartifactInputBuilder;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.artifacthandler.rev170321.UploadartifactOutput;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.artifacthandler.rev170321.UploadartifactOutputBuilder;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.artifacthandler.rev170321.uploadartifact.output.ConfigDocumentResponseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.Services;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.ServicesBuilder;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.openecomp.appc.artifact.handler.node.ArtifactHandlerNode;
+import org.openecomp.appc.artifact.handler.utils.ArtifactHandlerProviderUtil;
+import org.openecomp.appc.artifact.handler.utils.AsdcArtifactHandlerConstants;
+import org.openecomp.sdnc.sli.SvcLogicContext;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.Futures;
+
+
+
+public class ArtifactHandlerProvider implements AutoCloseable, ArtifactHandlerService, DataChangeListener {
+
+ private static final EELFLogger log = EELFManager.getInstance().getLogger(ArtifactHandlerProvider.class);
+ private final String appName = "ArtifactsHandler";
+ private final ExecutorService executor;
+ protected DataBroker dataBroker;
+ protected NotificationProviderService notificationService;
+ protected RpcProviderRegistry rpcRegistry;
+ private ListenerRegistration<DataChangeListener> dclServices;
+
+ protected BindingAwareBroker.RpcRegistration<ArtifactHandlerService> rpcRegistration;
+
+ public ArtifactHandlerProvider(DataBroker dataBroker2,
+ NotificationProviderService notificationProviderService,
+ RpcProviderRegistry rpcProviderRegistry) {
+ this.log.info("Creating provider for " + appName);
+ executor = Executors.newFixedThreadPool(10);
+ dataBroker = dataBroker2;
+ notificationService = notificationProviderService;
+ rpcRegistry = rpcProviderRegistry;
+ initialize();
+
+ }
+
+ public void initialize() {
+ log.info("Initializing provider for " + appName);
+ // Create the top level containers
+ createContainers();
+ try {
+ ArtifactHandlerProviderUtil.loadProperties();
+ } catch (Exception e) {
+ log.error("Caught Exception while trying to load properties file");
+ }
+ // Listener for changes to Services tree
+
+ rpcRegistration = rpcRegistry.addRpcImplementation(
+ ArtifactHandlerService.class, this);
+
+ log.info("Initialization complete for " + appName);
+ }
+ private void createContainers() {
+ final WriteTransaction t = dataBroker.newReadWriteTransaction();
+ // Create the Services container
+ t.merge(LogicalDatastoreType.CONFIGURATION,InstanceIdentifier.create(Services.class),new ServicesBuilder().build());
+ t.merge(LogicalDatastoreType.OPERATIONAL,InstanceIdentifier.create(Services.class),new ServicesBuilder().build());
+
+ try {
+ CheckedFuture<Void, TransactionCommitFailedException> checkedFuture = t.submit();
+ checkedFuture.get();
+ log.info("Create Containers succeeded!: ");
+
+ } catch (InterruptedException | ExecutionException e) {
+ log.error("Create Containers Failed: " + e);
+ e.printStackTrace();
+ }
+ }
+
+
+ @Override
+ public void onDataChanged(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+
+
+ @Override
+ public void close() throws Exception {
+
+ log.info("Closing provider for " + appName);
+ if(this.executor != null){
+ executor.shutdown();
+ }
+ if(this.rpcRegistration != null){
+ rpcRegistration.close();
+ }
+ log.info("Successfully closed provider for " + appName);
+
+ }
+
+ private RpcResult<UploadartifactOutput> buildResponse1(
+ String svcRequestId,
+ String topic,
+ String code,
+ String message,
+ String finalInd) {
+
+ UploadartifactOutputBuilder responseBuilder = new UploadartifactOutputBuilder();
+ ConfigDocumentResponseBuilder configResponseBuilder=new ConfigDocumentResponseBuilder();
+ configResponseBuilder.setRequestId(svcRequestId);
+ configResponseBuilder.setStatus(code);
+ configResponseBuilder.setErrorReason(message);
+ RpcResult<UploadartifactOutput> rpcResult = RpcResultBuilder.<UploadartifactOutput> status(true)
+ .withResult(responseBuilder.build()).build();
+ return rpcResult;
+ }
+
+ @Override
+ public Future<RpcResult<UploadartifactOutput>> uploadartifact(UploadartifactInput input) {
+
+ if (input == null || input.getDocumentParameters() == null || input.getDocumentParameters().getArtifactContents() == null ) {
+ RpcResult<UploadartifactOutput> rpcResult =
+ buildResponse1("N/A", "N/A", "INVALID_INPUT", "Invalid input, null or empty document information" , "Y");
+ return Futures.immediateFuture(rpcResult);
+ }
+ UploadartifactInputBuilder inputBuilder = new UploadartifactInputBuilder(input);
+ ConfigDocumentResponseBuilder configResponseBuilder = new ConfigDocumentResponseBuilder();
+ UploadartifactOutputBuilder responseBuilder = new UploadartifactOutputBuilder();
+ log.info("Received input = " + input );
+ ArtifactHandlerProviderUtil designUtil = new ArtifactHandlerProviderUtil(input);
+ configResponseBuilder.setRequestId(input.getRequestInformation().getRequestId());
+ try{
+
+ if(input.getRequestInformation().getSource() !=null){
+ if(input.getRequestInformation().getSource().equalsIgnoreCase(AsdcArtifactHandlerConstants.DESIGN_TOOL)){
+ designUtil.processTemplate(designUtil.createDummyRequestData());
+ configResponseBuilder.setStatus(ArtifactHandlerProviderUtil.DistributionStatusEnum.DEPLOY_OK.toString());
+ }
+ else
+ {
+ designUtil.processTemplate(designUtil.createRequestData());
+ configResponseBuilder.setStatus(ArtifactHandlerProviderUtil.DistributionStatusEnum.DEPLOY_OK.toString());
+ }
+ }
+ else
+ {
+ throw new Exception("No Tempalte data found");
+ }
+
+
+ }
+ catch (Exception e) {
+
+ configResponseBuilder.setErrorReason(e.getMessage());
+ configResponseBuilder.setStatus(ArtifactHandlerProviderUtil.DistributionStatusEnum.DEPLOY_ERROR.toString());
+ log.error("Caught exception looking for Artifact Handler", e);
+ log.info("Caught exception looking for Artifact Handler: ");
+ }
+
+ responseBuilder.setConfigDocumentResponse(configResponseBuilder.build());
+ RpcResult<UploadartifactOutput> rpcResult = RpcResultBuilder.<UploadartifactOutput> status(true).withResult(responseBuilder.build()).build();
+ return Futures.immediateFuture(rpcResult);
+
+ }
+}
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/AsdcArtifactHandlerActivator.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/AsdcArtifactHandlerActivator.java
new file mode 100644
index 000000000..4c8e1358f
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/AsdcArtifactHandlerActivator.java
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.artifact.handler;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Properties;
+
+import org.openecomp.appc.artifact.handler.node.ArtifactHandlerNode;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+public class AsdcArtifactHandlerActivator implements BundleActivator {
+
+ private static final EELFLogger log = EELFManager.getInstance().getLogger(AsdcArtifactHandlerActivator.class);
+ private List<ServiceRegistration> registrations = new LinkedList<ServiceRegistration>();
+
+ @Override
+ public void start(BundleContext ctx) throws Exception {
+ ArtifactHandlerNode artifactHandlerNode = new ArtifactHandlerNode();
+ log.info("Registering service-- " + artifactHandlerNode.getClass().getName());
+ registrations.add(ctx.registerService(artifactHandlerNode.getClass().getName(), artifactHandlerNode, null));
+
+ }
+
+ @Override
+ public void stop(BundleContext arg0) throws Exception {
+ for (ServiceRegistration registration : registrations) {
+ registration.unregister();
+ registration = null;
+ }
+ }
+}
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/dbservices/DBService.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/dbservices/DBService.java
new file mode 100644
index 000000000..4984ebf43
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/dbservices/DBService.java
@@ -0,0 +1,462 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.artifact.handler.dbservices;
+
+import java.sql.SQLException;
+import java.util.HashMap;
+
+import org.openecomp.appc.artifact.handler.utils.AsdcArtifactHandlerConstants;
+import org.openecomp.sdnc.sli.SvcLogicContext;
+import org.openecomp.sdnc.sli.SvcLogicException;
+import org.openecomp.sdnc.sli.SvcLogicResource;
+import org.openecomp.sdnc.sli.SvcLogicResource.QueryStatus;
+import org.openecomp.sdnc.sli.resource.sql.SqlResource;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+public class DBService {
+
+ private static final EELFLogger log = EELFManager.getInstance().getLogger(DBService.class);
+ private SvcLogicResource serviceLogic;
+ private static DBService dgGeneralDBService = null;
+ public static DBService initialise() {
+ if (dgGeneralDBService == null) {
+ dgGeneralDBService = new DBService();
+ }
+ return dgGeneralDBService;
+ }
+ private DBService() {
+ if (serviceLogic == null) {
+ serviceLogic = new SqlResource();
+ }
+ }
+
+ public String getInternalVersionNumber(SvcLogicContext ctx, String artifactName, String prefix) throws SvcLogicException {
+ String fn = "DBService.getInternalVersionNumber";
+ QueryStatus status = null;
+ String artifactInternalVersion = null;
+ if (serviceLogic != null && ctx != null) {
+ String key = "select max(internal_version) as maximum from ASDC_ARTIFACTS WHERE ARTIFACT_NAME = '" + artifactName + "'";
+ log.info("Getting internal Versoin :" + key);
+ status = serviceLogic.query("SQL", false, null, key, prefix, null, ctx);
+ if(status.toString().equals("FAILURE"))
+ throw new SvcLogicException("Error - getting internal Artifact Number");
+ artifactInternalVersion = ctx.getAttribute("maximum");
+ log.info("Internal Version received as : " + artifactInternalVersion);
+ log.info("Internal Version received as1 : " + ctx.getAttribute("max(internal_version)"));
+ log.info("Internal Version received as1 : " + ctx.getAttribute("max"));
+ log.info("Internal Version received as1 : " + ctx.getAttribute("internal_version"));
+ log.info("Internal Version received as1 : " + ctx.getAttributeKeySet().toString());
+ }
+ return artifactInternalVersion;
+ }
+ public String getArtifactID(SvcLogicContext ctx, String artifactName) throws SvcLogicException {
+ String fn = "DBService.getArtifactID";
+ QueryStatus status = null;
+ String artifactID = null;
+ if (serviceLogic != null && ctx != null) {
+ String key = "select max(ASDC_ARTIFACTS_ID) as id from ASDC_ARTIFACTS WHERE ARTIFACT_NAME = '" + artifactName + "'";
+ log.info("Getting Artifact ID String :" + key);
+ status = serviceLogic.query("SQL", false, null, key, null, null, ctx);
+ if(status.toString().equals("FAILURE"))
+ throw new SvcLogicException("Error - getting Artifact ID from database");
+ artifactID = ctx.getAttribute("id");
+ log.info("ASDC_ARTIFACTS_ID received as : " + ctx.getAttribute("id"));
+ }
+ return artifactID;
+ }
+ public QueryStatus saveArtifacts(SvcLogicContext ctx, int intversion) throws SvcLogicException {
+ String fn = "DBService.saveArtifacts";
+ QueryStatus status = null;
+ if (serviceLogic != null && ctx != null) {
+ String key = "INSERT INTO ASDC_ARTIFACTS " +
+ "SET SERVICE_UUID = $service-uuid , " +
+ " DISTRIBUTION_ID = $distribution-id ," +
+ " SERVICE_NAME = $service-name ," +
+ " SERVICE_DESCRIPTION = $service-description ," +
+ " RESOURCE_UUID = $resource-uuid ," +
+ " RESOURCE_INSTANCE_NAME = $resource-instance-name ," +
+ " RESOURCE_NAME = $resource-name ," +
+ " RESOURCE_VERSION = $resource-version ," +
+ " RESOURCE_TYPE = $resource-type ," +
+ " ARTIFACT_UUID = $artifact-uuid ," +
+ " ARTIFACT_TYPE = $artifact-type ," +
+ " ARTIFACT_VERSION = $artifact-version ," +
+ " ARTIFACT_DESCRIPTION = $artifact-description ," +
+ " INTERNAL_VERSION = " + intversion + "," +
+ " ARTIFACT_NAME = $artifact-name ," +
+ " ARTIFACT_CONTENT = $artifact-contents " ;
+
+ status = serviceLogic.save("SQL", false, false, key, null, null, ctx);
+ if(status.toString().equals("FAILURE"))
+ throw new SvcLogicException("Error While processing storing Artifact: " +ctx.getAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME));
+ }
+ return status;
+
+ }
+ public QueryStatus logData(SvcLogicContext ctx, String prefix) throws SvcLogicException {
+ String fn = "DBService.saveReferenceData";
+ QueryStatus status = null;
+ if (serviceLogic != null && ctx != null) {
+ String key = "INSERT INTO CONFIG_TRANSACTION_LOG " + " SET request_id = $request-id , "
+ + " message_type = $log-message-type , "
+ + " message = $log-message ;";
+ status = serviceLogic.save("SQL", false, false, key, null, prefix, ctx);
+ if(status.toString().equals("FAILURE"))
+ throw new SvcLogicException("Error while loging data");
+
+ }
+ return status;
+ }
+
+ public void processConfigureActionDg(SvcLogicContext context, boolean isUpdate) {
+ String fn = "DBService.processConfigureActionDg";
+ log.info("Update Parameter for ASDC Reference " + isUpdate );
+ String key = "";
+ QueryStatus status = null;
+ if(isUpdate);
+
+ }
+
+ public void processAsdcReferences(SvcLogicContext context, boolean isUpdate) throws SvcLogicException {
+ String fn = "DBService.processAsdcReferences";
+ String key = "";
+ QueryStatus status = null;
+
+ if (isUpdate && AsdcArtifactHandlerConstants.FILE_CATEGORY.equals(AsdcArtifactHandlerConstants.CAPABILITY)) {
+ key = "update " + AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE + " set ARTIFACT_NAME = $" + AsdcArtifactHandlerConstants.ARTIFACT_NAME +
+ " where VNFC_TYPE = $" + AsdcArtifactHandlerConstants.VNFC_TYPE +
+ " and FILE_CATEGORY = $" + AsdcArtifactHandlerConstants.FILE_CATEGORY +
+ " and ACTION = null";
+ }
+ else if(isUpdate)
+ key = "update " + AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE + " set ARTIFACT_NAME = $" + AsdcArtifactHandlerConstants.ARTIFACT_NAME +
+ " where VNFC_TYPE = $" + AsdcArtifactHandlerConstants.VNFC_TYPE +
+ " and FILE_CATEGORY = $" + AsdcArtifactHandlerConstants.FILE_CATEGORY +
+ " and ACTION = $" + AsdcArtifactHandlerConstants.ACTION ;
+
+ else {
+ if (AsdcArtifactHandlerConstants.FILE_CATEGORY.equals(AsdcArtifactHandlerConstants.CAPABILITY)) {
+ key = "insert into " + AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE +
+ " set VNFC_TYPE = null " +
+ " , FILE_CATEGORY = $" + AsdcArtifactHandlerConstants.FILE_CATEGORY +
+ " , VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE +
+ " , ACTION = null " +
+ " , ARTIFACT_TYPE = null " +
+ " , ARTIFACT_NAME = $" + AsdcArtifactHandlerConstants.ARTIFACT_NAME ;
+ }
+ else {
+ key = "insert into " + AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE +
+ " set VNFC_TYPE = $" + AsdcArtifactHandlerConstants.VNFC_TYPE +
+ " , FILE_CATEGORY = $" + AsdcArtifactHandlerConstants.FILE_CATEGORY +
+ " , VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE +
+ " , ACTION = $" + AsdcArtifactHandlerConstants.ACTION +
+ " , ARTIFACT_TYPE = $" + AsdcArtifactHandlerConstants.ARTIFACT_TYPE +
+ " , ARTIFACT_NAME = $" + AsdcArtifactHandlerConstants.ARTIFACT_NAME ;
+ }
+ }
+ if (serviceLogic != null && context != null) {
+ log.info("Insert Key: " + key);
+ status = serviceLogic.save("SQL", false, false, key, null, null, context);
+ if(status.toString().equals("FAILURE"))
+ throw new SvcLogicException("Error While processing asdc_reference table ");
+ }
+ }
+
+ public boolean isArtifactUpdateRequired(SvcLogicContext context, String db) throws SvcLogicException, SQLException {
+ String fn = "DBService.isArtifactUpdateRequired";
+ log.info("Checking if Update required for this data" );
+
+ log.info("db" + db);
+ log.info("ACTION=" + context.getAttribute(AsdcArtifactHandlerConstants.ACTION));
+ log.info("VNFC_TYPE=" + context.getAttribute(AsdcArtifactHandlerConstants.VNFC_TYPE));
+ log.info("VNFC_INSTANCE=" + context.getAttribute(AsdcArtifactHandlerConstants.VNFC_INSTANCE));
+ log.info("VM_INSTANCE=" + context.getAttribute(AsdcArtifactHandlerConstants.VM_INSTANCE));
+ log.info("VNF_TYPE=" + context.getAttribute(AsdcArtifactHandlerConstants.VNF_TYPE));
+ String whereClause = "";
+
+ QueryStatus status = null;
+ /* if(context.getAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME) !=null &&
+ context.getAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME).toLowerCase().startsWith(AsdcArtifactHandlerConstants.PD))
+ whereClause = " where artifact_name = $" + AsdcArtifactHandlerConstants.ARTIFACT_NAME
+ + " and vnf_type = 'DummyVnf' ";
+ else*/
+ whereClause = " where VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE;
+
+ if (db !=null && db.equals(AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE) &&
+ context.getAttribute(AsdcArtifactHandlerConstants.FILE_CATEGORY).equals(AsdcArtifactHandlerConstants.CAPABILITY) &&
+ context.getAttribute(AsdcArtifactHandlerConstants.ACTION) ==null) {
+ whereClause = whereClause + " and FILE_CATEGORY = $" + AsdcArtifactHandlerConstants.FILE_CATEGORY ;
+ }
+
+ else if(db !=null && db.equals(AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE)) {
+ whereClause = whereClause + " and VNFC_TYPE = $" + AsdcArtifactHandlerConstants.VNFC_TYPE
+ + " and FILE_CATEGORY = $" + AsdcArtifactHandlerConstants.FILE_CATEGORY
+ + " and ACTION = $" + AsdcArtifactHandlerConstants.ACTION;
+ }
+
+ else if(db.equals(AsdcArtifactHandlerConstants.DB_DOWNLOAD_DG_REFERENCE)) {
+ whereClause = " where PROTOCOL = $" + AsdcArtifactHandlerConstants.DEVICE_PROTOCOL;
+ }
+ else if(db.equals(AsdcArtifactHandlerConstants.DB_CONFIG_ACTION_DG)) {
+ whereClause = whereClause + " and ACTION = $" + AsdcArtifactHandlerConstants.ACTION;
+ }
+ else if(db.equals(AsdcArtifactHandlerConstants.DB_VNFC_REFERENCE)){
+ int vm_instance = -1 ;
+ if(context.getAttribute(AsdcArtifactHandlerConstants.VM_INSTANCE) !=null)
+ vm_instance = Integer.parseInt(context.getAttribute(AsdcArtifactHandlerConstants.VM_INSTANCE));
+ int vnfc_instance = -1 ;
+ if(context.getAttribute(AsdcArtifactHandlerConstants.VNFC_INSTANCE) !=null)
+ vnfc_instance = Integer.parseInt(context.getAttribute(AsdcArtifactHandlerConstants.VNFC_INSTANCE));
+ whereClause = whereClause + " and ACTION = $" + AsdcArtifactHandlerConstants.ACTION
+ + " and VNFC_TYPE = $" + AsdcArtifactHandlerConstants.VNFC_TYPE
+ + " and VNFC_INSTANCE = $" + AsdcArtifactHandlerConstants.VNFC_INSTANCE
+ + " and VM_INSTANCE = $" + AsdcArtifactHandlerConstants.VM_INSTANCE ;
+
+ }
+ if (serviceLogic != null && context != null) {
+ String key = "select COUNT(*) from " + db + whereClause ;
+ log.info("SELECT String : " + key);
+ status = serviceLogic.query("SQL", false, null, key, null, null, context);
+ if(status.toString().equals("FAILURE")){
+ throw new SvcLogicException("Error while reading data from " + db );
+ }
+ String count = context.getAttribute("COUNT(*)");
+ log.info("Number of row Returned : " + count + ": " + status + ":");
+ if(count !=null && Integer.parseInt(count) > 0){
+ context.setAttribute(count, null);
+ return true;
+ }
+ else
+ return false;
+ }
+ return false;
+ }
+
+ public void processDeviceInterfaceProtocol(SvcLogicContext context, boolean isUpdate) throws SvcLogicException {
+ String fn = "DBService.processDeviceInterfaceProtocol";
+ log.info("Starting DB operation for Device Interface Protocol " + isUpdate );
+ String key = "";
+ QueryStatus status = null;
+ if(isUpdate)
+ key = "update " + AsdcArtifactHandlerConstants.DB_DEVICE_INTERFACE_PROTOCOL +
+ " set PROTOCOL = $" + AsdcArtifactHandlerConstants.DEVICE_PROTOCOL +
+ " , DG_RPC = 'getDeviceRunningConfig' " +
+ " , MODULE = 'APPC' " +
+ " where VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE ;
+ else
+ key = "insert into " + AsdcArtifactHandlerConstants.DB_DEVICE_INTERFACE_PROTOCOL+
+ " set VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE +
+ " , PROTOCOL = $" + AsdcArtifactHandlerConstants.DEVICE_PROTOCOL +
+ " , DG_RPC = 'getDeviceRunningConfig' " +
+ " , MODULE = 'APPC' " ;
+
+ if (serviceLogic != null && context != null) {
+
+ status = serviceLogic.save("SQL", false, false, key, null, null, context);
+ if(status.toString().equals("FAILURE"))
+ throw new SvcLogicException("Error While processing DEVICE_INTERFACE_PROTOCOL table ");
+ }
+
+ }
+
+ public void processDeviceAuthentication(SvcLogicContext context, boolean isUpdate) throws SvcLogicException {
+ String fn = "DBService.processDeviceAuthentication";
+ log.info(fn + "Starting DB operation for Device Authentication " + isUpdate );
+ String key = "";
+ QueryStatus status = null;
+ if(isUpdate)
+ key = "update " + AsdcArtifactHandlerConstants.DB_DEVICE_AUTHENTICATION +
+ " set USER_NAME = $" + AsdcArtifactHandlerConstants.USER_NAME +
+ " , PASSWORD = 'dummy' " +
+ " , PORT_NUMBER = $" + AsdcArtifactHandlerConstants.PORT_NUMBER +
+ " where VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE ;
+ else
+ key = "insert into " + AsdcArtifactHandlerConstants.DB_DEVICE_AUTHENTICATION+
+ " set VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE +
+ " , USER_NAME = $" + AsdcArtifactHandlerConstants.USER_NAME +
+ " , PASSWORD = 'dummy' " +
+ " , PORT_NUMBER = $" + AsdcArtifactHandlerConstants.PORT_NUMBER;
+
+ if (serviceLogic != null && context != null) {
+ status = serviceLogic.save("SQL", false, false, key, null, null, context);
+ if(status.toString().equals("FAILURE"))
+ throw new SvcLogicException("Error While processing DEVICE_AUTHENTICATION table ");
+ }
+ }
+
+ public void processVnfcReference(SvcLogicContext context, boolean isUpdate) throws SvcLogicException {
+ String fn = "DBService.processVnfcReference";
+ log.info(fn + "Starting DB operation for Vnfc Reference " + isUpdate );
+ String key = "";
+ int vm_instance = -1 ;
+ if(context.getAttribute(AsdcArtifactHandlerConstants.VM_INSTANCE) !=null)
+ vm_instance = Integer.parseInt(context.getAttribute(AsdcArtifactHandlerConstants.VM_INSTANCE));
+ int vnfc_instance = -1 ;
+ if(context.getAttribute(AsdcArtifactHandlerConstants.VNFC_INSTANCE) !=null)
+ vnfc_instance = Integer.parseInt(context.getAttribute(AsdcArtifactHandlerConstants.VNFC_INSTANCE));
+ QueryStatus status = null;
+ if(isUpdate)
+ key = "update " + AsdcArtifactHandlerConstants.DB_VNFC_REFERENCE +
+ " set VM_INSTANCE = " + vm_instance +
+ " , VNFC_INSTANCE = " + vnfc_instance +
+ " , VNFC_TYPE = $" + AsdcArtifactHandlerConstants.VNFC_TYPE +
+ " , VNFC_FUNCTION_CODE = $" + AsdcArtifactHandlerConstants.VNFC_FUNCTION_CODE +
+ " , GROUP_NOTATION_TYPE = $" + AsdcArtifactHandlerConstants.GROUP_NOTATION_TYPE +
+ " , GROUP_NOTATION_VALUE = $" + AsdcArtifactHandlerConstants.GROUP_NOTATION_VALUE +
+ " , IPADDRESS_V4_OAM_VIP = $" + AsdcArtifactHandlerConstants.IPADDRESS_V4_OAM_VIP +
+ " where VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE +
+ " and ACTION = $" + AsdcArtifactHandlerConstants.ACTION +
+ " and VNFC_TYPE = $" + AsdcArtifactHandlerConstants.VNFC_TYPE +
+ " and VNFC_INSTANCE = $" + AsdcArtifactHandlerConstants.VNFC_INSTANCE
+ + " and VM_INSTANCE = $" + AsdcArtifactHandlerConstants.VM_INSTANCE ;
+ else
+ key = "insert into " + AsdcArtifactHandlerConstants.DB_VNFC_REFERENCE+
+ " set VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE +
+ " , ACTION = $" + AsdcArtifactHandlerConstants.ACTION +
+ " , VM_INSTANCE = $" + AsdcArtifactHandlerConstants.VM_INSTANCE +
+ " , VNFC_INSTANCE = $" + AsdcArtifactHandlerConstants.VNFC_INSTANCE +
+ " , VNFC_TYPE = $" + AsdcArtifactHandlerConstants.VNFC_TYPE +
+ " , VNFC_FUNCTION_CODE = $" + AsdcArtifactHandlerConstants.VNFC_FUNCTION_CODE +
+ " , GROUP_NOTATION_TYPE = $" + AsdcArtifactHandlerConstants.GROUP_NOTATION_TYPE +
+ " , IPADDRESS_V4_OAM_VIP = $" + AsdcArtifactHandlerConstants.IPADDRESS_V4_OAM_VIP +
+ " , GROUP_NOTATION_VALUE = $" + AsdcArtifactHandlerConstants.GROUP_NOTATION_VALUE ;
+
+ if (serviceLogic != null && context != null) {
+ status = serviceLogic.save("SQL", false, false, key, null, null, context);
+ if(status.toString().equals("FAILURE"))
+ throw new SvcLogicException("Error While processing VNFC_REFERENCE table ");
+ }
+ }
+
+ public void processDownloadDgReference(SvcLogicContext context, boolean isUpdate) throws SvcLogicException, SQLException {
+ String fn = "DBService.processDownloadDgReference";
+ log.info(fn + "Starting DB operation for Download DG Reference " + isUpdate );
+ String key = "";
+ QueryStatus status = null;
+
+ if(isUpdate)
+ key = "update " + AsdcArtifactHandlerConstants.DB_DOWNLOAD_DG_REFERENCE +
+ " set DOWNLOAD_CONFIG_DG = $" + AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE +
+ " where PROTOCOL = $" + AsdcArtifactHandlerConstants.DEVICE_PROTOCOL ;
+ else
+ key = "insert into " + AsdcArtifactHandlerConstants.DB_DOWNLOAD_DG_REFERENCE+
+ " set DOWNLOAD_CONFIG_DG = $" + AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE +
+ " , PROTOCOL = $" + AsdcArtifactHandlerConstants.DEVICE_PROTOCOL ;
+
+ if (serviceLogic != null && context != null)
+ status = serviceLogic.save("SQL", false, false, key, null, null, context);
+ if(status.toString().equals("FAILURE"))
+ throw new SvcLogicException("Error While processing DOWNLOAD_DG_REFERENCE table ");
+ }
+ public void processConfigActionDg(SvcLogicContext context, boolean isUpdate) throws SvcLogicException
+ {
+ String fn = "DBService.processConfigActionDg";
+ log.info(fn + "Starting DB operation for Config DG Action " + isUpdate );
+ String key = "";
+ QueryStatus status = null;
+
+ if(context.getAttribute(AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE) != null &&
+ context.getAttribute(AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE).length() > 0){
+ if(isUpdate)
+ key = "update " + AsdcArtifactHandlerConstants.DB_CONFIG_ACTION_DG +
+ " set DOWNLOAD_CONFIG_DG = $" + AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE +
+ " where ACTION = $" + AsdcArtifactHandlerConstants.ACTION +
+ " and VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE ;
+ else
+ key = "insert into " + AsdcArtifactHandlerConstants.DB_CONFIG_ACTION_DG+
+ " set DOWNLOAD_CONFIG_DG = $" + AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE +
+ " , ACTION = $" + AsdcArtifactHandlerConstants.ACTION +
+ " , VNF_TYPE = $" + AsdcArtifactHandlerConstants.VNF_TYPE ;
+
+ if (serviceLogic != null && context != null)
+ status = serviceLogic.save("SQL", false, false, key, null, null, context);
+ if(status.toString().equals("FAILURE"))
+ throw new SvcLogicException("Error While processing Configure DG Action table ");
+ }
+ else
+ log.info("No Update required for Config DG Action");
+
+ }
+
+ public String getModelDataInformationbyArtifactName(String artifact_name) throws SvcLogicException
+ {
+ String fn = "DBService.getVnfData";
+ String key = "";
+ SvcLogicContext con = new SvcLogicContext();
+ HashMap<String, String> modelData = new HashMap<String, String>();
+ QueryStatus status = null;
+ key = "select VNF_TYPE, VNFC_TYPE, ACTION, FILE_CATEGORY, ARTIFACT_TYPE from ASDC_REFERENCE where ARTIFACT_NAME = " + artifact_name ;
+
+ if (serviceLogic != null && con != null) {
+ log.info(fn + "select Key: " + key);
+ status = serviceLogic.query("SQL", false, null, key, null, null, con);
+ if(status.toString().equals("FAILURE"))
+ throw new SvcLogicException("Error While processing is ArtifactUpdateRequiredforPD table ");
+
+ }
+
+ log.info(fn + "Vnf_received :" + con.getAttribute("VNF_TYPE"));
+
+ return con.getAttribute("VNF_TYPE");
+
+ }
+ public void updateYangContents(SvcLogicContext context, String artifactId, String yangContents) throws SvcLogicException {
+ String fn = "DBService.updateYangContents";
+ log.info(fn + "Starting DB operation for updateYangContents");
+ String key = "";
+ QueryStatus status = null;
+
+ key = "update ASDC_ARTIFACTS " +
+ " set ARTIFACT_CONTENT = '" + yangContents + "'" +
+ " where ASDC_ARTIFACTS_ID = " + artifactId ;
+
+ if (serviceLogic != null && context != null)
+ status = serviceLogic.save("SQL", false, false, key, null, null, context);
+ if(status.toString().equals("FAILURE"))
+ throw new SvcLogicException("Error While processing Configure DG Action table ");
+
+ }
+
+
+ public void insertProtocolReference(SvcLogicContext context, String vnfType, String protocol, String action, String action_level,
+ String template) throws SvcLogicException {
+ String fn = "DBService.insertProtocolReference";
+ log.info(fn + "Starting DB operation for insertProtocolReference");
+ String key = "";
+ QueryStatus status = null;
+
+ key = "insert into PROTOCOL_REFERENCE (ACTION, VNF_TYPE, PROTOCOL, UPDATED_DATE, TEMPLATE, ACTION_LEVEL)" +
+ " values (" +
+ "'"+action +"', '"+ vnfType+"', '"+protocol+"', now(),'"+template+"', '"+action_level+"')";
+
+ if (serviceLogic != null && context != null)
+ status = serviceLogic.save("SQL", false, false, key, null, null, context);
+ if(status.toString().equals("FAILURE"))
+ throw new SvcLogicException("Error While processing insertProtocolReference ");
+
+ }
+}
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/node/ArtifactHandlerNode.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/node/ArtifactHandlerNode.java
new file mode 100644
index 000000000..e4cefad48
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/node/ArtifactHandlerNode.java
@@ -0,0 +1,450 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.artifact.handler.node;
+
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+import java.util.Map;
+
+import org.apache.commons.lang.StringUtils;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.openecomp.appc.artifact.handler.dbservices.DBService;
+import org.openecomp.appc.artifact.handler.utils.ArtifactHandlerProviderUtil;
+import org.openecomp.appc.artifact.handler.utils.AsdcArtifactHandlerConstants;
+import org.openecomp.appc.yang.YANGGenerator;
+import org.openecomp.appc.yang.impl.YANGGeneratorFactory;
+import org.openecomp.sdnc.config.params.transformer.tosca.ArtifactProcessorImpl;
+import org.openecomp.sdnc.sli.SvcLogicContext;
+import org.openecomp.sdnc.sli.SvcLogicException;
+import org.openecomp.sdnc.sli.SvcLogicJavaPlugin;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+
+
+public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
+
+ private static final EELFLogger log = EELFManager.getInstance().getLogger(ArtifactHandlerNode.class);
+ public void processArtifact(Map<String, String> inParams, SvcLogicContext ctx) throws Exception
+ {
+ String responsePrefix = inParams.get("response_prefix");
+ try{
+ if(inParams != null && !inParams.isEmpty() && inParams.get("postData") !=null ){
+ log.info("Received request for process Artifact with params: " + inParams.toString());
+ String postData = inParams.get("postData");
+ JSONObject input = new JSONObject(postData).getJSONObject("input");
+ responsePrefix = StringUtils.isNotBlank(responsePrefix) ? (responsePrefix+".") : "";
+ storeUpdateAsdcArtifacts(input);
+ }
+ }
+ catch(Exception e){
+ e.printStackTrace();
+ throw e;
+ }
+ }
+
+ private boolean storeUpdateAsdcArtifacts(JSONObject postDataJson) throws Exception {
+ log.info("Starting processing of ASDC Artifacs into Handler with Data : " + postDataJson.toString());
+ try{
+ JSONObject request_information = (JSONObject)postDataJson.get(AsdcArtifactHandlerConstants.REQUEST_INFORMATION);
+ JSONObject document_information =(JSONObject)postDataJson.get(AsdcArtifactHandlerConstants.DOCUMENT_PARAMETERS);
+ String artifact_name = document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME);
+ if(artifact_name !=null){
+ updateStoreArtifacts(request_information, document_information );
+ if(artifact_name.toLowerCase().startsWith(AsdcArtifactHandlerConstants.REFERENCE))
+ return storeReferenceData(request_information, document_information );
+ else if (artifact_name.toLowerCase().startsWith(AsdcArtifactHandlerConstants.PD))
+ return createDataForPD(request_information, document_information );
+
+ }
+ else
+ throw new Exception("Missing Artifact Name for Request : " + request_information.getString(AsdcArtifactHandlerConstants.REQUETS_ID));
+ }
+ catch(Exception e){
+ e.printStackTrace();
+ throw new Exception("Error while processing Request ID : " + ((JSONObject)postDataJson.get(AsdcArtifactHandlerConstants.REQUEST_INFORMATION)).getString(AsdcArtifactHandlerConstants.REQUETS_ID) + e.getMessage());
+ }
+ return false;
+
+ }
+ private boolean createDataForPD(JSONObject request_information, JSONObject document_information) throws Exception {
+
+ String fn = "ArtifactHandlerNode.createReferenceDataForPD";
+ String artifact_name = document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME);
+ log.info(fn + "Received PD File Name: " + artifact_name + " and suffix lenght " + AsdcArtifactHandlerConstants.PD.length());
+ try {
+
+ String suffix = artifact_name.substring(AsdcArtifactHandlerConstants.PD.length());
+ createArtifactRecords(request_information, document_information, suffix);
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new Exception("Error while createing PD data records " + e.getMessage());
+ }
+ return true;
+ }
+
+ private void createArtifactRecords(JSONObject request_information, JSONObject document_information, String suffix) throws Exception {
+
+ log.info("Creating Tosca Records and storing into ASDC Artifacs");
+ String [] docs = {"Tosca", "Yang"};
+ ArtifactHandlerProviderUtil ahpUtil = new ArtifactHandlerProviderUtil();
+ String PDFileContents = document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_CONTENTS);
+
+ //Tosca generation
+ OutputStream toscaStream = new ByteArrayOutputStream();
+ String toscaContents = null;
+ ArtifactProcessorImpl toscaGenerator = new ArtifactProcessorImpl();
+ toscaGenerator.generateArtifact(PDFileContents,toscaStream);
+ if(toscaStream != null)
+ toscaContents = toscaStream.toString();
+ log.info("Generated Tosca File : " + toscaContents);
+
+ //Yang generation
+ //String yangContents = "Dummay Yang, Yang contents will be available after IST Integration";
+
+ String yangContents = "YANG generation is in Progress";
+ String yangName = null;
+
+ for(String doc : docs){
+ document_information.put(AsdcArtifactHandlerConstants.ARTIFACT_TYPE, doc.concat("Type"));
+ document_information.put(AsdcArtifactHandlerConstants.ARTIFACT_DESRIPTION, doc.concat("Model"));
+ if(doc.equals("Tosca"))
+ document_information.put(AsdcArtifactHandlerConstants.ARTIFACT_CONTENTS, ahpUtil.escapeSql(toscaContents));
+ else if (doc.equals("Yang"))
+ document_information.put(AsdcArtifactHandlerConstants.ARTIFACT_CONTENTS, ahpUtil.escapeSql(yangContents));
+ document_information.put(AsdcArtifactHandlerConstants.ARTIFACT_NAME, doc.concat(suffix));
+ yangName = doc.concat(suffix);
+ updateStoreArtifacts(request_information, document_information);
+ }
+
+ String artifactId = getArtifactID(yangName);
+ OutputStream yangStream = new ByteArrayOutputStream();
+ YANGGenerator yangGenerator = YANGGeneratorFactory.getYANGGenerator();
+ yangGenerator.generateYANG(artifactId , toscaContents, yangStream);
+ if(yangStream != null)
+ yangContents = yangStream.toString();
+
+ if(yangContents !=null ){
+ updateYangContents(artifactId, ahpUtil.escapeSql(yangContents));
+ }
+
+ }
+
+ private void updateYangContents(String artifactId, String yangContents) throws SvcLogicException {
+ SvcLogicContext context = new SvcLogicContext();
+ DBService dbservice = DBService.initialise();
+ dbservice.updateYangContents(context, artifactId, yangContents);
+ }
+
+ private String getArtifactID(String yangName) throws SvcLogicException {
+ SvcLogicContext context = new SvcLogicContext();
+ DBService dbservice = DBService.initialise();
+ return dbservice.getArtifactID(context, yangName);
+ }
+
+ private boolean updateStoreArtifacts(JSONObject request_information, JSONObject document_information ) throws Exception {
+ log.info("UpdateStoreArtifactsStarted storing of ASDC Artifacs ");
+
+ SvcLogicContext context = new SvcLogicContext();
+ DBService dbservice = DBService.initialise();
+ ArtifactHandlerProviderUtil ahpUtil = new ArtifactHandlerProviderUtil();
+ int intversion = 0;
+ context.setAttribute("artifact_name",document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME));
+ String internal_version = dbservice.getInternalVersionNumber(context, document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME), null);
+ log.info("Internal Version number received from Database : " + internal_version);
+ if(internal_version != null){
+ intversion = Integer.parseInt(internal_version);
+ intversion++ ;
+ }
+ context.setAttribute(AsdcArtifactHandlerConstants.SERVICE_UUID, document_information.getString(AsdcArtifactHandlerConstants.SERVICE_UUID));
+ context.setAttribute(AsdcArtifactHandlerConstants.DISTRIBUTION_ID, document_information.getString(AsdcArtifactHandlerConstants.DISTRIBUTION_ID));
+ context.setAttribute(AsdcArtifactHandlerConstants.SERVICE_NAME, document_information.getString(AsdcArtifactHandlerConstants.SERVICE_NAME));
+ context.setAttribute(AsdcArtifactHandlerConstants.SERVICE_DESCRIPTION, document_information.getString(AsdcArtifactHandlerConstants.SERVICE_DESCRIPTION));
+ context.setAttribute(AsdcArtifactHandlerConstants.RESOURCE_UUID, document_information.getString(AsdcArtifactHandlerConstants.RESOURCE_UUID));
+ context.setAttribute(AsdcArtifactHandlerConstants.RESOURCE_INSTANCE_NAME,document_information.getString(AsdcArtifactHandlerConstants.RESOURCE_INSTANCE_NAME));
+ context.setAttribute(AsdcArtifactHandlerConstants.RESOURCE_VERSOIN, document_information.getString(AsdcArtifactHandlerConstants.RESOURCE_VERSOIN));
+ context.setAttribute(AsdcArtifactHandlerConstants.RESOURCE_TYPE, document_information.getString(AsdcArtifactHandlerConstants.RESOURCE_TYPE));
+ context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_UUID, document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_UUID));
+ context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_TYPE,document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_TYPE));
+ context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_VERSOIN,document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_VERSOIN));
+ context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_DESRIPTION,document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_DESRIPTION));
+ context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_CONTENTS,ahpUtil.escapeSql(document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_CONTENTS)));
+ context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME,document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME));
+ dbservice.saveArtifacts(context, intversion);
+ return true;
+
+ }
+
+ public boolean storeReferenceData(JSONObject request_information, JSONObject document_information) throws Exception {
+ log.info("Started storing of ASDC Artifacs into Handler" );
+ try{
+ boolean updateRequired = false;
+ boolean pdFile = false;
+ String suffix = null;
+ String categorySuffix = null;
+ DBService dbservice = DBService.initialise();
+ ArtifactHandlerProviderUtil ahpUtil = new ArtifactHandlerProviderUtil();
+ String contentString = ahpUtil.escapeSql(document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_CONTENTS)) ;
+ String artifactName=ahpUtil.escapeSql(document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME));
+ String capabilityArtifactName=StringUtils.replace(artifactName,AsdcArtifactHandlerConstants.ARTIFACT_NAME_REFERENCE,AsdcArtifactHandlerConstants.ARTIFACT_NAME_CAPABILITY);
+ JSONObject capabilities = new JSONObject();
+ JSONArray vnfActionList = new JSONArray();
+ JSONArray vfModuleActionList = new JSONArray();
+ JSONArray vnfcActionList = new JSONArray();
+ JSONArray vmActionList = new JSONArray();
+ String vnfType=null;
+ JSONObject contentObject = new JSONObject(contentString);
+ JSONArray contentArray= contentObject.getJSONArray("reference_data");
+ for(int a=0; a<contentArray.length() ; a++){
+
+ JSONObject content = (JSONObject) contentArray.get(a);
+ log.info("contentString =" + content.toString());
+ JSONObject scope = content.getJSONObject("scope");
+ log.info("scope :" + scope);
+ SvcLogicContext context = new SvcLogicContext();
+ vnfType=scope.getString(AsdcArtifactHandlerConstants.VNF_TYPE);
+ context.setAttribute(AsdcArtifactHandlerConstants.VNF_TYPE, scope.getString(AsdcArtifactHandlerConstants.VNF_TYPE));
+ context.setAttribute(AsdcArtifactHandlerConstants.ACTION, content.getString(AsdcArtifactHandlerConstants.ACTION));
+ String actionLevel=content.getString(AsdcArtifactHandlerConstants.ACTION_LEVEL);
+ context.setAttribute(AsdcArtifactHandlerConstants.ACTION_LEVEL, content.getString(AsdcArtifactHandlerConstants.ACTION_LEVEL));
+ if ((null != actionLevel) && actionLevel.equalsIgnoreCase(AsdcArtifactHandlerConstants.ACTION_LEVEL_VNFC)) {
+ vnfcActionList.put(content.getString(AsdcArtifactHandlerConstants.ACTION));
+ }
+ if (null != actionLevel && actionLevel.equalsIgnoreCase(AsdcArtifactHandlerConstants.ACTION_LEVEL_VF_MODULE)) {
+ vfModuleActionList.put(content.getString(AsdcArtifactHandlerConstants.ACTION));
+ }
+ if (null != actionLevel && actionLevel.equalsIgnoreCase(AsdcArtifactHandlerConstants.ACTION_LEVEL_VNF)) {
+ vnfActionList.put(content.getString(AsdcArtifactHandlerConstants.ACTION));
+ }
+ if (null != actionLevel && actionLevel.equalsIgnoreCase(AsdcArtifactHandlerConstants.ACTION_LEVEL_VM)) {
+ vmActionList.put(content.getString(AsdcArtifactHandlerConstants.ACTION));
+ }
+ if(scope.has(AsdcArtifactHandlerConstants.VNFC_TYPE) && !scope.isNull(AsdcArtifactHandlerConstants.VNFC_TYPE) )
+ context.setAttribute(AsdcArtifactHandlerConstants.VNFC_TYPE, scope.getString(AsdcArtifactHandlerConstants.VNFC_TYPE));
+ else
+ context.setAttribute(AsdcArtifactHandlerConstants.VNFC_TYPE,null);
+ if (content.has(AsdcArtifactHandlerConstants.DEVICE_PROTOCOL))
+ context.setAttribute(AsdcArtifactHandlerConstants.DEVICE_PROTOCOL, content.getString(AsdcArtifactHandlerConstants.DEVICE_PROTOCOL));
+ if (content.has(AsdcArtifactHandlerConstants.USER_NAME))
+ context.setAttribute(AsdcArtifactHandlerConstants.USER_NAME, content.getString(AsdcArtifactHandlerConstants.USER_NAME));
+ if (content.has(AsdcArtifactHandlerConstants.PORT_NUMBER))
+ context.setAttribute(AsdcArtifactHandlerConstants.PORT_NUMBER, content.getString(AsdcArtifactHandlerConstants.PORT_NUMBER));
+ context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_TYPE, "");
+ if(content.has("artifact-list") && content.get("artifact-list") instanceof JSONArray){
+ JSONArray artifactLists = (JSONArray)content.get("artifact-list");
+ for(int i=0;i<artifactLists.length();i++){
+ JSONObject artifact=(JSONObject)artifactLists.get(i);
+ log.info("artifact is " + artifact);
+ context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME, artifact.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME));
+ context.setAttribute(AsdcArtifactHandlerConstants.FILE_CATEGORY, artifact.getString(AsdcArtifactHandlerConstants.ARTIFACT_TYPE));
+
+ if(artifact.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME) !=null &&
+ artifact.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME).toLowerCase().startsWith(AsdcArtifactHandlerConstants.PD))
+ {
+ suffix = artifact.getString(AsdcArtifactHandlerConstants.ARTIFACT_NAME).substring(AsdcArtifactHandlerConstants.PD.length());
+ categorySuffix = artifact.getString(AsdcArtifactHandlerConstants.ARTIFACT_TYPE).substring(AsdcArtifactHandlerConstants.PD.length());
+ pdFile = true;
+ }
+
+ dbservice.processAsdcReferences(context, dbservice.isArtifactUpdateRequired(context, AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE));
+
+ cleanArtifactInstanceData(context);
+ }
+
+ if(pdFile)
+ {
+ context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME, "Tosca".concat(suffix));
+ context.setAttribute(AsdcArtifactHandlerConstants.FILE_CATEGORY, AsdcArtifactHandlerConstants.TOSCA_MODEL);
+ dbservice.processAsdcReferences(context, dbservice.isArtifactUpdateRequired(context, AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE));
+ context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME, "Yang".concat(suffix));
+ context.setAttribute(AsdcArtifactHandlerConstants.FILE_CATEGORY, AsdcArtifactHandlerConstants.PARAMETER_YANG);
+ dbservice.processAsdcReferences(context, dbservice.isArtifactUpdateRequired(context, AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE));
+ }
+ }
+ if (content.getString(AsdcArtifactHandlerConstants.ACTION).equals("Configure")) {
+ if(content.has(AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE) && content.getString(AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE).length() > 0){
+ context.setAttribute(AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE, content.getString(AsdcArtifactHandlerConstants.DOWNLOAD_DG_REFERENCE));
+ dbservice.processDownloadDgReference(context, dbservice.isArtifactUpdateRequired(context,AsdcArtifactHandlerConstants.DB_DOWNLOAD_DG_REFERENCE));
+ }
+
+ dbservice.processConfigActionDg(context, dbservice.isArtifactUpdateRequired(context, AsdcArtifactHandlerConstants.DB_CONFIG_ACTION_DG));
+ dbservice.processDeviceInterfaceProtocol(context, dbservice.isArtifactUpdateRequired(context, AsdcArtifactHandlerConstants.DB_DEVICE_INTERFACE_PROTOCOL));
+ dbservice.processDeviceAuthentication(context, dbservice.isArtifactUpdateRequired(context, AsdcArtifactHandlerConstants.DB_DEVICE_AUTHENTICATION));
+
+ }
+
+
+ populateProtocolReference(dbservice, content);
+
+ context.setAttribute(AsdcArtifactHandlerConstants.VNFC_TYPE, null);
+
+ if( content.has(AsdcArtifactHandlerConstants.VM) && content.get(AsdcArtifactHandlerConstants.VM) instanceof JSONArray){
+ JSONArray vmList = (JSONArray)content.get(AsdcArtifactHandlerConstants.VM);
+ for(int i=0;i<vmList.length();i++){
+ JSONObject vmInstance=(JSONObject)vmList.get(i);
+ context.setAttribute(AsdcArtifactHandlerConstants.VM_INSTANCE, String.valueOf(vmInstance.getInt(AsdcArtifactHandlerConstants.VM_INSTANCE)));
+ log.info("VALUE = " + context.getAttribute(AsdcArtifactHandlerConstants.VM_INSTANCE));
+ if(vmInstance.get(AsdcArtifactHandlerConstants.VNFC) instanceof JSONArray){
+ JSONArray vnfcInstanceList = (JSONArray)vmInstance.get(AsdcArtifactHandlerConstants.VNFC);
+ for(int k=0;k<vnfcInstanceList.length();k++){
+ JSONObject vnfcInstance = (JSONObject)vnfcInstanceList.get(k);
+ context.setAttribute(AsdcArtifactHandlerConstants.VNFC_INSTANCE, String.valueOf(vnfcInstance.getInt(AsdcArtifactHandlerConstants.VNFC_INSTANCE)));
+ context.setAttribute(AsdcArtifactHandlerConstants.VNFC_TYPE, vnfcInstance.getString(AsdcArtifactHandlerConstants.VNFC_TYPE));
+ context.setAttribute(AsdcArtifactHandlerConstants.VNFC_FUNCTION_CODE, vnfcInstance.getString(AsdcArtifactHandlerConstants.VNFC_FUNCTION_CODE));
+ if(vnfcInstance.has(AsdcArtifactHandlerConstants.IPADDRESS_V4_OAM_VIP))
+ context.setAttribute(AsdcArtifactHandlerConstants.IPADDRESS_V4_OAM_VIP, vnfcInstance.getString(AsdcArtifactHandlerConstants.IPADDRESS_V4_OAM_VIP));
+ if(vnfcInstance.has(AsdcArtifactHandlerConstants.GROUP_NOTATION_TYPE))
+ context.setAttribute(AsdcArtifactHandlerConstants.GROUP_NOTATION_TYPE, vnfcInstance.getString(AsdcArtifactHandlerConstants.GROUP_NOTATION_TYPE));
+ if(vnfcInstance.has(AsdcArtifactHandlerConstants.GROUP_NOTATION_VALUE))
+ context.setAttribute(AsdcArtifactHandlerConstants.GROUP_NOTATION_VALUE, vnfcInstance.getString(AsdcArtifactHandlerConstants.GROUP_NOTATION_VALUE));
+ dbservice.processVnfcReference(context, dbservice.isArtifactUpdateRequired(context, AsdcArtifactHandlerConstants.DB_VNFC_REFERENCE));
+ cleanVnfcInstance(context);
+ }
+ context.setAttribute(AsdcArtifactHandlerConstants.VM_INSTANCE,null);
+ }
+ }
+ }
+
+
+ }
+ capabilities.put("vnf",vnfActionList );
+ capabilities.put("vf-module", vfModuleActionList);
+ capabilities.put("vnfc", vnfcActionList);
+ capabilities.put("vm", vmActionList);
+ processAndStoreCapablitiesArtifact(dbservice, document_information, capabilities,capabilityArtifactName,vnfType );
+
+ }
+ catch(Exception e)
+ {
+ e.printStackTrace();
+ throw new Exception("Error While Storing : " + e.getMessage());
+ }
+
+ return true;
+ }
+
+
+
+
+
+ private void cleanArtifactInstanceData(SvcLogicContext context)
+ {
+ context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME, null);
+ context.setAttribute(AsdcArtifactHandlerConstants.FILE_CATEGORY, null);
+ }
+
+ private void cleanVnfcInstance(SvcLogicContext context) {
+
+ context.setAttribute(AsdcArtifactHandlerConstants.VNFC_INSTANCE, null);
+ context.setAttribute(AsdcArtifactHandlerConstants.VNFC_TYPE, null);
+ context.setAttribute(AsdcArtifactHandlerConstants.VNFC_FUNCTION_CODE, null);
+ context.setAttribute(AsdcArtifactHandlerConstants.IPADDRESS_V4_OAM_VIP, null);
+ context.setAttribute(AsdcArtifactHandlerConstants.GROUP_NOTATION_TYPE, null);
+ context.setAttribute(AsdcArtifactHandlerConstants.GROUP_NOTATION_VALUE, null);
+
+ }
+
+ private void processAndStoreCapablitiesArtifact (DBService dbservice , JSONObject document_information,
+ JSONObject capabilities, String capabilityArtifactName, String vnfType) throws Exception {
+ log.info("Begin-->processAndStoreCapablitiesArtifact ");
+
+ try {
+
+ JSONObject newCapabilitiesObject=new JSONObject();
+ newCapabilitiesObject.put("capabilities", capabilities);
+ SvcLogicContext context = new SvcLogicContext();
+ context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME,capabilityArtifactName);
+ context.setAttribute(AsdcArtifactHandlerConstants.FILE_CATEGORY, AsdcArtifactHandlerConstants.CAPABILITY);
+ context.setAttribute(AsdcArtifactHandlerConstants.ACTION, null);
+ context.setAttribute(AsdcArtifactHandlerConstants.VNFC_TYPE, null);
+ context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_TYPE, null);
+ context.setAttribute(AsdcArtifactHandlerConstants.VNF_TYPE,vnfType);
+ context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_CONTENTS,newCapabilitiesObject.toString());
+ dbservice.processAsdcReferences(context, dbservice.isArtifactUpdateRequired(context, AsdcArtifactHandlerConstants.DB_ASDC_REFERENCE));
+ int intversion = 0;
+
+ String internal_version = dbservice.getInternalVersionNumber(context, context.getAttribute(AsdcArtifactHandlerConstants.ARTIFACT_NAME), null);
+ log.info("Internal Version number received from Database : " + internal_version);
+ if(internal_version != null){
+ intversion = Integer.parseInt(internal_version);
+ intversion++ ;
+ }
+ context.setAttribute(AsdcArtifactHandlerConstants.SERVICE_UUID, document_information.getString(AsdcArtifactHandlerConstants.SERVICE_UUID));
+ context.setAttribute(AsdcArtifactHandlerConstants.DISTRIBUTION_ID, document_information.getString(AsdcArtifactHandlerConstants.DISTRIBUTION_ID));
+ context.setAttribute(AsdcArtifactHandlerConstants.SERVICE_NAME, document_information.getString(AsdcArtifactHandlerConstants.SERVICE_NAME));
+ context.setAttribute(AsdcArtifactHandlerConstants.SERVICE_DESCRIPTION, document_information.getString(AsdcArtifactHandlerConstants.SERVICE_DESCRIPTION));
+ context.setAttribute(AsdcArtifactHandlerConstants.RESOURCE_UUID, document_information.getString(AsdcArtifactHandlerConstants.RESOURCE_UUID));
+ context.setAttribute(AsdcArtifactHandlerConstants.RESOURCE_INSTANCE_NAME,document_information.getString(AsdcArtifactHandlerConstants.RESOURCE_INSTANCE_NAME));
+ context.setAttribute(AsdcArtifactHandlerConstants.RESOURCE_VERSOIN, document_information.getString(AsdcArtifactHandlerConstants.RESOURCE_VERSOIN));
+ context.setAttribute(AsdcArtifactHandlerConstants.RESOURCE_TYPE, document_information.getString(AsdcArtifactHandlerConstants.RESOURCE_TYPE));
+ context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_UUID, document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_UUID));
+ context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_VERSOIN,document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_VERSOIN));
+ context.setAttribute(AsdcArtifactHandlerConstants.ARTIFACT_DESRIPTION,document_information.getString(AsdcArtifactHandlerConstants.ARTIFACT_DESRIPTION));
+
+
+ dbservice.saveArtifacts(context, intversion);
+ return ;
+ }
+ catch (Exception e) {
+ log.error("Error saving capabilities artifact to DB: "+ e.toString());
+ throw e;
+ }
+ finally {
+ log.info("End-->processAndStoreCapablitiesArtifact ");
+ }
+
+ }
+
+
+ private void populateProtocolReference(DBService dbservice, JSONObject content) throws Exception{
+ log.info("Begin-->populateProtocolReference ");
+ try {
+ SvcLogicContext context = new SvcLogicContext();
+ JSONObject scope = content.getJSONObject("scope");
+ String vnfType=null,protocol=null,action=null,actionLevel=null,template=null;
+ if(scope.has(AsdcArtifactHandlerConstants.VNF_TYPE) && !scope.isNull(AsdcArtifactHandlerConstants.VNF_TYPE))
+ vnfType=scope.getString(AsdcArtifactHandlerConstants.VNF_TYPE);
+ if (content.has(AsdcArtifactHandlerConstants.DEVICE_PROTOCOL))
+ protocol=content.getString(AsdcArtifactHandlerConstants.DEVICE_PROTOCOL);
+ if (content.has(AsdcArtifactHandlerConstants.ACTION))
+ action= content.getString(AsdcArtifactHandlerConstants.ACTION);
+ if (content.has(AsdcArtifactHandlerConstants.ACTION_LEVEL))
+ actionLevel=content.getString(AsdcArtifactHandlerConstants.ACTION_LEVEL);
+ if (content.has(AsdcArtifactHandlerConstants.TEMPLATE) && !content.isNull(AsdcArtifactHandlerConstants.TEMPLATE))
+ template=content.getString(AsdcArtifactHandlerConstants.TEMPLATE);
+ dbservice.insertProtocolReference(context, vnfType,protocol,action,actionLevel,template);
+ }
+ catch (Exception e) {
+ log.error("Error inserting record into protocolReference: "+e.toString());
+ throw e;
+ }
+ finally {
+ log.info("End-->populateProtocolReference ");
+ }
+ }
+
+ }
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/ArtifactHandlerProviderUtil.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/ArtifactHandlerProviderUtil.java
new file mode 100644
index 000000000..91b6e88b0
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/ArtifactHandlerProviderUtil.java
@@ -0,0 +1,184 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.artifact.handler.utils;
+
+import java.io.IOException;
+import java.security.SecureRandom;
+import java.util.HashMap;
+
+import org.apache.commons.lang3.StringUtils;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.opendaylight.yang.gen.v1.org.openecomp.appc.artifacthandler.rev170321.UploadartifactInput;
+import org.openecomp.appc.artifact.handler.node.ArtifactHandlerNode;
+import org.openecomp.sdnc.sli.SvcLogicContext;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+public class ArtifactHandlerProviderUtil {
+
+ public UploadartifactInput templateData ;
+ SvcLogicContext context = null;
+ private static final EELFLogger log = EELFManager.getInstance().getLogger(ArtifactHandlerProviderUtil.class);
+ public static void loadProperties() {
+ // TODO Auto-generated method stub
+
+ }
+ public enum DistributionStatusEnum {
+ DOWNLOAD_OK,
+ DOWNLOAD_ERROR,
+ ALREADY_DOWNLOADED,
+ DEPLOY_OK,
+ DEPLOY_ERROR,
+ ALREADY_DEPLOYED;
+ }
+
+ public ArtifactHandlerProviderUtil(){};
+
+ public ArtifactHandlerProviderUtil(UploadartifactInput input) {
+ this.templateData = input;
+ log.info("templateData " + this.templateData);
+ }
+
+ public void processTemplate(String requestInfo) throws Exception {
+ if(context == null)
+ context = new SvcLogicContext();
+
+ ArtifactHandlerNode node = new ArtifactHandlerNode();
+ try {
+
+ HashMap<String, String> processdata = new HashMap<String, String>();
+ processdata.put("postData", requestInfo);
+ log.info("Post data = " + requestInfo);
+ node.processArtifact(processdata, context);
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ log.error("Error: " + e.getMessage());
+ e.printStackTrace();
+ throw e;
+ }
+
+ }
+ public String createDummyRequestData() throws JSONException, IOException{
+
+
+ JSONObject info = new JSONObject(this.templateData);
+ log.info("INFO = " + info);
+ String artifact_name = templateData.getDocumentParameters().getArtifactName();
+ String artifact_version = templateData.getDocumentParameters().getArtifactVersion();
+
+ JSONObject json = new JSONObject();
+ JSONObject requestInfo = new JSONObject();
+ String random = getRandom();
+
+ requestInfo.put(AsdcArtifactHandlerConstants.REQUETS_ID, "TLRID-" + random);
+ requestInfo.put(AsdcArtifactHandlerConstants.REQUEST_ACTION, "StoreAsdcDocumentRequest");
+ requestInfo.put(AsdcArtifactHandlerConstants.SOURCE, "TemplateLoader");
+
+ JSONObject docParams = new JSONObject();
+ docParams.put(AsdcArtifactHandlerConstants.SERVICE_UUID, "TLSUUID" + templateData.getRequestInformation().getRequestId());
+ docParams.put(AsdcArtifactHandlerConstants.DISTRIBUTION_ID, "TLDID" + random);
+ docParams.put(AsdcArtifactHandlerConstants.SERVICE_NAME, "TLServiceName");
+ docParams.put(AsdcArtifactHandlerConstants.SERVICE_DESCRIPTION, "Template Loader Test");
+ docParams.put(AsdcArtifactHandlerConstants.SERVICE_ARTIFACTS, "[]");
+ docParams.put(AsdcArtifactHandlerConstants.RESOURCE_UUID, "TLRUID" + random);
+ docParams.put(AsdcArtifactHandlerConstants.RESOURCE_INSTANCE_NAME, "TLRIName");
+ docParams.put(AsdcArtifactHandlerConstants.REOURCE_NAME, "TLResourceName");
+ docParams.put(AsdcArtifactHandlerConstants.RESOURCE_VERSOIN, "TLResourceVersion");
+ docParams.put(AsdcArtifactHandlerConstants.RESOURCE_TYPE, "TLResourceType");
+ docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_UUID, "TLAUUID" + random);
+ docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_NAME, templateData.getDocumentParameters().getArtifactName());
+ docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_TYPE, "APPC-CONFIG");
+ docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_VERSOIN, templateData.getDocumentParameters().getArtifactVersion());
+ docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_DESRIPTION, "AsdcTestDescription");
+ // String data = IOUtils.toString(TestartifactHandlerNode.class.getClassLoader().getResourceAsStream("template_msrp_msc_a_template.json"), "utf-8");
+ // String data = IOUtils.toString(TemplateProcessor.class.getClassLoader().getResourceAsStream("referenceData.json"), "utf-8");
+
+ // this.templateData = this.templateData.substring(this.templateData.indexOf("}") + 1);
+ docParams.put("artifact-contents", templateData.getDocumentParameters().getArtifactContents());
+
+ json.put(AsdcArtifactHandlerConstants.REQUEST_INFORMATION, requestInfo);
+ json.put(AsdcArtifactHandlerConstants.DOCUMENT_PARAMETERS, docParams);
+ System.out.println("Final data =" + this.templateData);
+ return String.format("{\"input\": %s}", json.toString());
+ }
+
+ private String getRandom() {
+ SecureRandom random = new SecureRandom();
+ int num = random.nextInt(100000);
+ String formatted = String.format("%05d", num);
+ return formatted;
+ }
+
+ public String escapeSql(String str) {
+ if (str == null) {
+ return null;
+ }
+ String searchList[] = new String[]{"'","\\"};
+ String replacementList[] = new String[]{ "''","\\\\"};
+ return StringUtils.replaceEach(str,searchList, replacementList);
+ }
+ public String createRequestData() throws JSONException, IOException{
+
+
+ JSONObject info = new JSONObject(this.templateData);
+ log.info("INFO = " + info);
+
+ JSONObject json = new JSONObject();
+ JSONObject requestInfo = new JSONObject();
+ String random = getRandom();
+
+ requestInfo.put(AsdcArtifactHandlerConstants.REQUETS_ID, templateData.getRequestInformation().getRequestId());
+ requestInfo.put(AsdcArtifactHandlerConstants.REQUEST_ACTION, "StoreAsdcDocumentRequest");
+ requestInfo.put(AsdcArtifactHandlerConstants.SOURCE, templateData.getRequestInformation().getSource());
+
+ JSONObject docParams = new JSONObject();
+ docParams.put(AsdcArtifactHandlerConstants.SERVICE_UUID, templateData.getDocumentParameters().getResourceUuid());
+ docParams.put(AsdcArtifactHandlerConstants.DISTRIBUTION_ID, templateData.getDocumentParameters().getDistributionId());
+ docParams.put(AsdcArtifactHandlerConstants.SERVICE_NAME, templateData.getDocumentParameters().getServiceName());
+ docParams.put(AsdcArtifactHandlerConstants.SERVICE_DESCRIPTION, templateData.getDocumentParameters().getServiceDescription());
+ docParams.put(AsdcArtifactHandlerConstants.SERVICE_ARTIFACTS, templateData.getDocumentParameters().getServiceArtifacts());
+ docParams.put(AsdcArtifactHandlerConstants.RESOURCE_UUID, templateData.getDocumentParameters().getResourceUuid());
+ docParams.put(AsdcArtifactHandlerConstants.RESOURCE_INSTANCE_NAME, templateData.getDocumentParameters().getResourceInstanceName());
+ docParams.put(AsdcArtifactHandlerConstants.REOURCE_NAME, templateData.getDocumentParameters().getResourceName());
+ docParams.put(AsdcArtifactHandlerConstants.RESOURCE_VERSOIN, templateData.getDocumentParameters().getResourceVersion());
+ docParams.put(AsdcArtifactHandlerConstants.RESOURCE_TYPE, templateData.getDocumentParameters().getResourceType());
+ docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_UUID, templateData.getDocumentParameters().getArtifactUuid());
+ docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_NAME, templateData.getDocumentParameters().getArtifactName());
+ docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_TYPE, templateData.getDocumentParameters().getArtifactType());
+ docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_VERSOIN, templateData.getDocumentParameters().getArtifactVersion());
+ docParams.put(AsdcArtifactHandlerConstants.ARTIFACT_DESRIPTION, templateData.getDocumentParameters().getArtifactDescription());
+
+ docParams.put("artifact-contents", templateData.getDocumentParameters().getArtifactContents());
+
+ json.put(AsdcArtifactHandlerConstants.REQUEST_INFORMATION, requestInfo);
+ json.put(AsdcArtifactHandlerConstants.DOCUMENT_PARAMETERS, docParams);
+ System.out.println("Final data =" + this.templateData);
+ return String.format("{\"input\": %s}", json.toString());
+ }
+
+
+}
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/AsdcArtifactHandlerConstants.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/AsdcArtifactHandlerConstants.java
new file mode 100644
index 000000000..cfcb250ee
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/AsdcArtifactHandlerConstants.java
@@ -0,0 +1,93 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.artifact.handler.utils;
+
+public class AsdcArtifactHandlerConstants {
+
+ public static final String DOCUMENT_PARAMETERS = "document-parameters";
+ public static final String SERVICE_UUID = "service-uuid";
+ public static final String DISTRIBUTION_ID = "distribution-id";
+ public static final String REQUETS_ID = "request-id";
+ public static final String REQUEST_ACTION = "request-action";
+ public static final String SOURCE = "source";
+ public static final String SERVICE_NAME = "service-name";
+ public static final String SERVICE_DESCRIPTION ="service-description";
+ public static final String SERVICE_ARTIFACTS = "service-artifacts";
+ public static final String RESOURCE_UUID ="resource-uuid";
+ public static final String RESOURCE_INSTANCE_NAME = "resource-instance-name";
+ public static final String REOURCE_NAME = "resource-name";
+ public static final String RESOURCE_VERSOIN ="resource-version";
+ public static final String RESOURCE_TYPE= "resource-type";
+ public static final String ARTIFACT_UUID ="artifact-uuid";
+ public static final String ARTIFACT_NAME = "artifact-name";
+ public static final String ARTIFACT_TYPE = "artifact-type";
+ public static final String ARTIFACT_VERSOIN = "artifact-version";
+ public static final String ARTIFACT_DESRIPTION = "artifact-description";
+ public static final String ARTIFACT_CONTENTS = "artifact-contents";
+ public static final String REQUEST_INFORMATION = "request-information";
+ public static final String INTERNAL_VERSION = "internal-versoin";
+ public static final String FILE_CATEGORY = "file-category";
+ public static final String VNF_TYPE = "vnf-type";
+ public static final String ACTION = "action";
+ public static final String ACTION_LEVEL = "action-level";
+ public static final String VNFC_TYPE = "vnfc-type";
+ public static final String VM_INSTANCE = "vm-instance";
+ public static final String VM = "vm";
+ public static final String VNFC = "vnfc";
+ public static final String VNFC_FUNCTION_CODE = "vnfc-function-code";
+ public static final String GROUP_NOTATION = "group-notation";
+ public static final String IPADDRESS_V4_OAM_VIP = "ipaddress-v4-oam-vip";
+ public static final String GROUP_NOTATION_TYPE = "group-notation-type";
+ public static final String GROUP_NOTATION_VALUE = "group-notation-value";
+ public static final String REFERENCE = "reference";
+ public static final String VNFC_INSTANCE = "vnfc-instance";
+ public static final String DEVICE_PROTOCOL = "device-protocol";
+ public static final String DG_RPC = "dg-rpc";
+ public static final String MODULE = "module";
+ public static final String USER_NAME = "user-name";
+ public static final String PORT_NUMBER = "port-number";
+ public static final String DOWNLOAD_DG_REFERENCE = "download-dg-reference";
+
+
+ public static final String DB_DOWNLOAD_DG_REFERENCE = "DOWNLOAD_DG_REFERENCE";
+ public static final String DB_ASDC_REFERENCE = "ASDC_REFERENCE";
+ public static final String DB_DEVICE_INTERFACE_PROTOCOL = "DEVICE_INTERFACE_PROTOCOL";
+ public static final String DB_DEVICE_AUTHENTICATION = "DEVICE_AUTHENTICATION";
+ public static final String DB_VNFC_REFERENCE = "VNFC_REFERENCE";
+ public static final String DB_CONFIG_ACTION_DG = "CONFIGURE_ACTION_DG";
+ public static final String PD = "pd";
+ public static final String PARAMETER_YANG = "parameter_yang";
+ public static final String TOSCA_MODEL = "tosca_model";
+ public static final String DESIGN_TOOL = "Design-tool";
+ public static final String ACTION_LEVEL_VNFC = "VNFC";
+ public static final String ACTION_LEVEL_VF_MODULE ="VF-MODULE";
+ public static final String ACTION_LEVEL_VNF = "VNF";
+ public static final String ACTION_LEVEL_VM = "VM";
+ public static final String CAPABILITY = "capability";
+ public static final String TEMPLATE = "template";
+ public static final String ARTIFACT_NAME_REFERENCE = "reference";
+ public static final String ARTIFACT_NAME_CAPABILITY = "capability";
+}
+
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/EscapeUtils.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/EscapeUtils.java
new file mode 100644
index 000000000..a5a338198
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/openecomp/appc/artifact/handler/utils/EscapeUtils.java
@@ -0,0 +1,43 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.artifact.handler.utils;
+
+import org.apache.commons.lang3.StringUtils;
+
+public class EscapeUtils {
+
+ public EscapeUtils() {
+ // TODO Auto-generated constructor stub
+ }
+
+ public static String escapeSql(String str) {
+ if (str == null) {
+ return null;
+ }
+ String searchList[] = new String[]{"'","\\"};
+ String replacementList[] = new String[]{ "''","\\\\"};
+ return StringUtils.replaceEach(str,searchList, replacementList);
+ }
+}
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/resources/initial/artifact-handler-provider.xml b/appc-inbound/appc-artifact-handler/provider/src/main/resources/initial/artifact-handler-provider.xml
new file mode 100644
index 000000000..658cb3fd6
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/resources/initial/artifact-handler-provider.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ============LICENSE_START=======================================================
+ ONAP : APPC
+ ================================================================================
+ Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ ================================================================================
+ Copyright (C) 2017 Amdocs
+ =============================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ ============LICENSE_END=========================================================
+ -->
+
+<!-- vi: set et smarttab sw=4 tabstop=4: -->
+<snapshot>
+ <configuration>
+ <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+ <modules xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
+ <module>
+
+ <!-- This xmlns:prefix should match the namespace in the *-provider-impl.yang file
+ The prefix: inside type should match the prefix of the yang file. -->
+ <type xmlns:prefix="org:openecomp:appc:artifact:handler:provider:impl">
+ prefix:artifact-handler-provider-impl
+ </type>
+ <name>artifact-handler-provider-impl</name>
+
+ <!-- The following sections contain bindings to services defined in the
+ *-provider-impl yang file. For example the rpc-registry is required
+ because we have a dependency (or augmentation) named "rpc-registry"
+ and which binds to the md-sa-binding-registry. If you remove those
+ dependencies from the yang file then you can remove them from here. -->
+ <rpc-registry>
+ <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
+ <name>binding-rpc-broker</name>
+ </rpc-registry>
+
+ <data-broker>
+ <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-async-data-broker</type>
+ <name>binding-data-broker</name>
+ </data-broker>
+
+ <notification-service>
+ <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">
+ binding:binding-notification-service
+ </type>
+ <name>binding-notification-broker</name>
+ </notification-service>
+ </module>
+
+ </modules>
+ </data>
+
+ </configuration>
+
+ <!-- Required capabilities are basically a listing of all modules that need to be imported before
+ our service can be resolved. Capabilities for dependencies defined above are implied which is
+ why we do not have define a required capability for the data broker, for example. -->
+ <required-capabilities>
+ <capability>org:openecomp:appc:artifact:handler:provider:impl?module=artifact-handler-provider-impl&amp;revision=2017-03-21</capability>
+ </required-capabilities>
+
+</snapshot>
diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/yang/artifact-handler-provider-impl.yang b/appc-inbound/appc-artifact-handler/provider/src/main/yang/artifact-handler-provider-impl.yang
new file mode 100644
index 000000000..01eeb3919
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/main/yang/artifact-handler-provider-impl.yang
@@ -0,0 +1,85 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+module artifact-handler-provider-impl {
+
+ yang-version 1;
+ namespace "org:openecomp:appc:artifact:handler:provider:impl";
+ prefix "artifact-handler-provider-impl";
+
+ import config { prefix config; revision-date 2013-04-05; }
+ import opendaylight-md-sal-binding { prefix mdsal; revision-date 2013-10-28; }
+
+ description
+ "This module contains the base YANG definitions for
+ artifact-handler-provider impl implementation.";
+
+ revision "2017-03-21" {
+ description
+ "Initial revision.";
+ }
+
+ // This is the definition of the service implementation as a module identity.
+ identity artifact-handler-provider-impl {
+ base config:module-type;
+
+ // Specifies the prefix for generated java classes.
+ config:java-name-prefix ArtifactHandlerProvider;
+ }
+
+ // Augments the 'configuration' choice node under modules/module.
+ // We consume the three main services, RPCs, DataStore, and Notifications
+ augment "/config:modules/config:module/config:configuration" {
+ case artifact-handler-provider-impl {
+ when "/config:modules/config:module/config:type = 'artifact-handler-provider-impl'";
+
+ container rpc-registry {
+ uses config:service-ref {
+ refine type {
+ mandatory true;
+ config:required-identity mdsal:binding-rpc-registry;
+ }
+ }
+ }
+
+ container notification-service {
+ uses config:service-ref {
+ refine type {
+ mandatory true;
+ config:required-identity mdsal:binding-notification-service;
+ }
+ }
+ }
+
+ container data-broker {
+ uses config:service-ref {
+ refine type {
+ mandatory false;
+ config:required-identity mdsal:binding-async-data-broker;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/appc-inbound/appc-artifact-handler/provider/src/test/java/org/openecomp/appc/artifact/handler/node/TestArtifactHandlerNode.java b/appc-inbound/appc-artifact-handler/provider/src/test/java/org/openecomp/appc/artifact/handler/node/TestArtifactHandlerNode.java
new file mode 100644
index 000000000..6687c790b
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/test/java/org/openecomp/appc/artifact/handler/node/TestArtifactHandlerNode.java
@@ -0,0 +1,38 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.appc.artifact.handler.node;
+
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.util.Enumeration;
+import java.util.Properties;
+
+import org.apache.commons.io.IOUtils;
+import org.json.JSONObject;
+
+public class TestArtifactHandlerNode {
+
+ //Onap Migration
+}
diff --git a/appc-inbound/appc-artifact-handler/provider/src/test/resources/svclogic.properties b/appc-inbound/appc-artifact-handler/provider/src/test/resources/svclogic.properties
new file mode 100644
index 000000000..ae595f73b
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/test/resources/svclogic.properties
@@ -0,0 +1,37 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : APPC
+# ================================================================================
+# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# Copyright (C) 2017 Amdocs
+# =============================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+# ============LICENSE_END=========================================================
+###
+
+org.openecomp.sdnc.sli.dbtype=
+org.openecomp.sdnc.sli.jdbc.hosts=
+org.openecomp.sdnc.sli.jdbc.url=
+org.openecomp.sdnc.sli.jdbc.database=
+org.openecomp.sdnc.sli.jdbc.user=
+org.openecomp.sdnc.sli.jdbc.password=
+org.openecomp.sdnc.sli.jdbc.connection.name=
+
+org.openecomp.sdnc.sli.jdbc.connection.timeout=
+org.openecomp.sdnc.sli.jdbc.request.timeout=
+org.openecomp.sdnc.sli.jdbc.limit.init=
+org.openecomp.sdnc.sli.jdbc.limit.min=
+org.openecomp.sdnc.sli.jdbc.limit.max=
diff --git a/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/general_template b/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/general_template
new file mode 100755
index 000000000..e69de29bb
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/general_template
diff --git a/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/pd_template b/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/pd_template
new file mode 100755
index 000000000..e69de29bb
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/pd_template
diff --git a/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/reference_template b/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/reference_template
new file mode 100755
index 000000000..e69de29bb
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/reference_template
diff --git a/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/template_Asdc b/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/template_Asdc
new file mode 100755
index 000000000..e69de29bb
--- /dev/null
+++ b/appc-inbound/appc-artifact-handler/provider/src/test/resources/templates/template_Asdc