diff options
author | Skip Wonnell <kw5258@att.com> | 2017-08-14 17:47:10 -0500 |
---|---|---|
committer | Patrick Brady <pb071s@att.com> | 2017-08-18 05:46:15 +0000 |
commit | ab6c2c0cd441cf40723016e9a82aeeeb933fec7e (patch) | |
tree | 10d9de942694ca129cfc78d13cf2269f5c37cfc9 /appc-inbound/appc-artifact-handler | |
parent | 5166a76913fcb658be58adffed441590979e41cf (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')
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&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 |