introduce base adaptor 40/92840/10
authorSmokowski, Kevin (ks6305) <kevin.smokowski@att.com>
Tue, 6 Aug 2019 19:36:13 +0000 (19:36 +0000)
committerKevin Smokowski <kevin.smokowski@att.com>
Fri, 9 Aug 2019 16:48:01 +0000 (16:48 +0000)
introduce base adaptor for other adaptors to extend

Issue-ID: CCSDK-1595
Signed-off-by: Smokowski, Kevin (ks6305) <kevin.smokowski@att.com>
Change-Id: I35d4499491cd87a7d651fa9ed654ad7c677ae2b8

18 files changed:
artifacts/pom.xml
base/http/features/ccsdk-base-http/pom.xml [new file with mode: 0644]
base/http/features/features-base-http/pom.xml [new file with mode: 0644]
base/http/features/pom.xml [new file with mode: 0644]
base/http/installer/pom.xml [new file with mode: 0644]
base/http/installer/src/assembly/assemble_installer_zip.xml [new file with mode: 0644]
base/http/installer/src/assembly/assemble_mvnrepo_zip.xml [new file with mode: 0644]
base/http/installer/src/main/resources/scripts/install-feature.sh [new file with mode: 0644]
base/http/pom.xml [new file with mode: 0644]
base/http/provider/pom.xml [new file with mode: 0644]
base/http/provider/src/main/java/org/onap/ccsdk/sli/adaptors/base/http/AbstractHttpAdapter.java [new file with mode: 0644]
base/http/provider/src/main/java/org/onap/ccsdk/sli/adaptors/base/http/BasicAuthFilter.java [new file with mode: 0644]
base/http/provider/src/test/java/org/onap/ccsdk/sli/adaptors/base/http/AbstractHttpAdapterTest.java [new file with mode: 0644]
base/http/provider/src/test/java/org/onap/ccsdk/sli/adaptors/base/http/BasicAuthFilterTest.java [new file with mode: 0644]
base/http/provider/src/test/resources/testprops.properties [new file with mode: 0644]
base/pom.xml [new file with mode: 0644]
features/ccsdk-sli-adaptors-all/pom.xml
pom.xml

index 697f77c..27d5527 100755 (executable)
                                <type>xml</type>
                                <classifier>feature</classifier>
                        </dependency>
+                       <dependency>
+                               <groupId>org.onap.ccsdk.sli.adaptors</groupId>
+                               <artifactId>ccsdk-base-http</artifactId>
+                               <version>${project.version}</version>
+                               <type>xml</type>
+                               <classifier>feature</classifier>
+                       </dependency>
                        <dependency>
                                <groupId>org.onap.ccsdk.sli.adaptors</groupId>
                                <artifactId>aai-service-provider</artifactId>
                                <artifactId>sql-resource-installer</artifactId>
                                <version>${project.version}</version>
                        </dependency>
+                       <dependency>
+                               <groupId>org.onap.ccsdk.sli.adaptors</groupId>
+                               <artifactId>base-http-provider</artifactId>
+                               <version>${project.version}</version>
+                       </dependency>
+                       <dependency>
+                               <groupId>org.onap.ccsdk.sli.adaptors</groupId>
+                               <artifactId>base-http-installer</artifactId>
+                               <version>${project.version}</version>
+                       </dependency>
                </dependencies>
        </dependencyManagement>
 
diff --git a/base/http/features/ccsdk-base-http/pom.xml b/base/http/features/ccsdk-base-http/pom.xml
new file mode 100644 (file)
index 0000000..0e18c73
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+
+       <parent>
+               <groupId>org.onap.ccsdk.parent</groupId>
+               <artifactId>single-feature-parent</artifactId>
+               <version>1.3.2</version>
+               <relativePath/>
+       </parent>
+
+       <groupId>org.onap.ccsdk.sli.adaptors</groupId>
+       <artifactId>ccsdk-base-http</artifactId>
+       <version>0.5.1-SNAPSHOT</version>
+       <packaging>feature</packaging>
+
+       <name>ccsdk-sli-adaptors :: base-http :: ${project.artifactId}</name>
+
+       <dependencies>
+               <dependency>
+                       <groupId>${project.groupId}</groupId>
+                       <artifactId>base-http-provider</artifactId>
+                       <version>${project.version}</version>
+               </dependency>
+       </dependencies>
+</project>
diff --git a/base/http/features/features-base-http/pom.xml b/base/http/features/features-base-http/pom.xml
new file mode 100644 (file)
index 0000000..8400485
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+
+       <parent>
+               <groupId>org.onap.ccsdk.parent</groupId>
+               <artifactId>feature-repo-parent</artifactId>
+               <version>1.3.2</version>
+               <relativePath/>
+       </parent>
+
+       <groupId>org.onap.ccsdk.sli.adaptors</groupId>
+       <artifactId>features-base-http</artifactId>
+       <version>0.5.1-SNAPSHOT</version>
+       <packaging>feature</packaging>
+
+       <name>ccsdk-sli-adaptors :: base-http :: ${project.artifactId}</name>
+
+       <dependencies>
+               <dependency>
+                       <groupId>${project.groupId}</groupId>
+                       <artifactId>ccsdk-base-http</artifactId>
+                       <version>${project.version}</version>
+                       <type>xml</type>
+                       <classifier>features</classifier>
+               </dependency>
+
+       </dependencies>
+</project>
diff --git a/base/http/features/pom.xml b/base/http/features/pom.xml
new file mode 100644 (file)
index 0000000..a9abe51
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>odlparent-lite</artifactId>
+        <version>1.3.2</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.sli.adaptors</groupId>
+    <artifactId>base-http-features</artifactId>
+    <version>0.5.1-SNAPSHOT</version>
+    <packaging>pom</packaging>
+
+    <name>ccsdk-sli-adaptors :: base-http :: ${project.artifactId}</name>
+
+    <modules>
+        <module>ccsdk-base-http</module>
+        <module>features-base-http</module>
+    </modules>
+</project>
diff --git a/base/http/installer/pom.xml b/base/http/installer/pom.xml
new file mode 100644 (file)
index 0000000..ac233cb
--- /dev/null
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+
+       <parent>
+               <groupId>org.onap.ccsdk.parent</groupId>
+               <artifactId>odlparent-lite</artifactId>
+               <version>1.3.2</version>
+               <relativePath/>
+       </parent>
+
+       <groupId>org.onap.ccsdk.sli.adaptors</groupId>
+       <artifactId>base-http-installer</artifactId>
+       <version>0.5.1-SNAPSHOT</version>
+       <packaging>pom</packaging>
+
+       <name>ccsdk-sli-adaptors :: base-http :: ${project.artifactId}</name>
+
+       <properties>
+               <application.name>ccsdk-base-http</application.name>
+               <features.boot>${application.name}</features.boot>
+        <features.repositories>mvn:org.onap.ccsdk.sli.adaptors/${features.boot}/${project.version}/xml/features</features.repositories>
+               <include.transitive.dependencies>false</include.transitive.dependencies>
+       </properties>
+
+       <dependencies>
+
+               <dependency>
+                       <groupId>org.onap.ccsdk.sli.adaptors</groupId>
+                       <artifactId>${application.name}</artifactId>
+                       <version>${project.version}</version>
+                       <type>xml</type>
+                       <classifier>features</classifier>
+                       <exclusions>
+                               <exclusion>
+                                       <groupId>*</groupId>
+                                       <artifactId>*</artifactId>
+                               </exclusion>
+                       </exclusions>
+               </dependency>
+
+               <dependency>
+                       <groupId>org.onap.ccsdk.sli.adaptors</groupId>
+                       <artifactId>base-http-provider</artifactId>
+                       <version>${project.version}</version>
+               </dependency>
+       </dependencies>
+
+       <build>
+               <plugins>
+                       <plugin>
+                               <artifactId>maven-assembly-plugin</artifactId>
+                               <version>2.6</version>
+                               <executions>
+                                       <execution>
+                                               <id>maven-repo-zip</id>
+                                               <goals>
+                                                       <goal>single</goal>
+                                               </goals>
+                                               <phase>package</phase>
+                                               <configuration>
+                                                       <attach>true</attach>
+                                                       <finalName>stage/${application.name}-${project.version}</finalName>
+                                                       <descriptors>
+                                                               <descriptor>src/assembly/assemble_mvnrepo_zip.xml</descriptor>
+                                                       </descriptors>
+                                                       <appendAssemblyId>true</appendAssemblyId>
+                                               </configuration>
+                                       </execution>
+                                       <execution>
+                                               <id>installer-zip</id>
+                                               <goals>
+                                                       <goal>single</goal>
+                                               </goals>
+                                               <phase>package</phase>
+                                               <configuration>
+                                                       <attach>true</attach>
+                                                       <finalName>${application.name}-${project.version}-installer</finalName>
+                                                       <descriptors>
+                                                               <descriptor>src/assembly/assemble_installer_zip.xml</descriptor>
+                                                       </descriptors>
+                                                       <appendAssemblyId>false</appendAssemblyId>
+                                               </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>
+                                                       <includeArtifactIds>ccsdk-base-http,base-http-provider</includeArtifactIds>
+                                                       <scope>provided</scope>
+                                               </configuration>
+                                       </execution>
+                               </executions>
+                       </plugin>
+                       <plugin>
+                               <artifactId>maven-resources-plugin</artifactId>
+                               <version>2.6</version>
+                               <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/base/http/installer/src/assembly/assemble_installer_zip.xml b/base/http/installer/src/assembly/assemble_installer_zip.xml
new file mode 100644 (file)
index 0000000..3bed4b5
--- /dev/null
@@ -0,0 +1,59 @@
+<!--
+  ============LICENSE_START=======================================================
+  openECOMP : SDN-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=========================================================
+  -->
+
+<!-- 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>installer_zip</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/base/http/installer/src/assembly/assemble_mvnrepo_zip.xml b/base/http/installer/src/assembly/assemble_mvnrepo_zip.xml
new file mode 100644 (file)
index 0000000..35e79db
--- /dev/null
@@ -0,0 +1,49 @@
+<!--
+  ============LICENSE_START=======================================================
+  openECOMP : SDN-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=========================================================
+  -->
+
+<!-- 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>repo</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/base/http/installer/src/main/resources/scripts/install-feature.sh b/base/http/installer/src/main/resources/scripts/install-feature.sh
new file mode 100644 (file)
index 0000000..6e3d416
--- /dev/null
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+###
+# ============LICENSE_START=======================================================
+# openECOMP : SDN-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=========================================================
+###
+
+ODL_HOME=${ODL_HOME:-/opt/opendaylight/current}
+ODL_KARAF_CLIENT=${ODL_KARAF_CLIENT:-${ODL_HOME}/bin/client}
+INSTALLERDIR=$(dirname $0)
+
+REPOZIP=${INSTALLERDIR}/${features.boot}-${project.version}.zip
+
+if [ -f ${REPOZIP} ]
+then
+       unzip -nd ${ODL_HOME} ${REPOZIP}
+else
+       echo "ERROR : repo zip ($REPOZIP) not found"
+       exit 1
+fi
+
+${ODL_KARAF_CLIENT} feature:repo-add ${features.repositories}
+${ODL_KARAF_CLIENT} feature:install ${features.boot}
diff --git a/base/http/pom.xml b/base/http/pom.xml
new file mode 100644 (file)
index 0000000..368e3fb
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>odlparent-lite</artifactId>
+        <version>1.3.2</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.sli.adaptors.base</groupId>
+    <artifactId>http</artifactId>
+    <version>0.5.1-SNAPSHOT</version>
+    <packaging>pom</packaging>
+
+    <modules>
+        <module>provider</module>
+        <module>features</module>
+        <module>installer</module>
+    </modules>
+</project>
diff --git a/base/http/provider/pom.xml b/base/http/provider/pom.xml
new file mode 100644 (file)
index 0000000..4cbe85c
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+
+       <parent>
+               <groupId>org.onap.ccsdk.parent</groupId>
+               <artifactId>binding-parent</artifactId>
+               <version>1.3.2</version>
+               <relativePath />
+       </parent>
+
+       <groupId>org.onap.ccsdk.sli.adaptors</groupId>
+       <artifactId>base-http-provider</artifactId>
+       <version>0.5.1-SNAPSHOT</version>
+       <packaging>bundle</packaging>
+
+       <dependencies>
+               <dependency>
+                       <groupId>javax.ws.rs</groupId>
+                       <artifactId>javax.ws.rs-api</artifactId>
+                       <scope>provided</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.slf4j</groupId>
+                       <artifactId>slf4j-api</artifactId>
+                       <scope>provided</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.glassfish.jersey.core</groupId>
+                       <artifactId>jersey-client</artifactId>
+                       <version>${jersey.version}</version>
+                       <scope>test</scope>
+               </dependency>
+       </dependencies>
+</project>
diff --git a/base/http/provider/src/main/java/org/onap/ccsdk/sli/adaptors/base/http/AbstractHttpAdapter.java b/base/http/provider/src/main/java/org/onap/ccsdk/sli/adaptors/base/http/AbstractHttpAdapter.java
new file mode 100644 (file)
index 0000000..fda4baf
--- /dev/null
@@ -0,0 +1,109 @@
+package org.onap.ccsdk.sli.adaptors.base.http;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Properties;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.SSLSession;
+import javax.ws.rs.client.ClientBuilder;
+import javax.xml.bind.DatatypeConverter;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AbstractHttpAdapter {
+    protected static final String SDNC_CONFIG_DIR = "SDNC_CONFIG_DIR";
+    private static final String SDNC_CONFIG_DIR_DEFAULT = "/opt/sdnc/data/properties";
+    protected static final int DEFAULT_HTTP_CONNECT_TIMEOUT_MS = 60000; // 1 minute
+    protected static final int DEFAULT_HTTP_READ_TIMEOUT_MS = 1800000; // 30 minutes
+    protected ClientBuilder clientBuilder;
+
+    private static final Logger logger = LoggerFactory.getLogger(AbstractHttpAdapter.class);
+
+    public AbstractHttpAdapter() {
+        clientBuilder = ClientBuilder.newBuilder();
+        setTimeouts();
+        registerLoggingFilter();
+        defaultHostNameVerifier();
+    }
+    
+    private void defaultHostNameVerifier() {
+        clientBuilder.hostnameVerifier(new HostnameVerifier() {
+            @Override
+            public boolean verify(String hostname, SSLSession session) {
+                return true;
+            }
+        });
+    }
+
+    protected abstract void registerLoggingFilter();
+
+    private void setTimeouts() {
+        Integer httpReadTimeout = readOptionalInteger("HTTP_READ_TIMEOUT_MS", DEFAULT_HTTP_READ_TIMEOUT_MS);
+        Integer httpConnectTimeout = readOptionalInteger("HTTP_CONNECT_TIMEOUT_MS", DEFAULT_HTTP_CONNECT_TIMEOUT_MS);
+
+        // restore once we migrate to once we migrate to javax.ws.rs-api 2.1
+        // clientBuilder.connectTimeout(30, TimeUnit.SECONDS);
+        // clientBuilder.readTimeout(30, TimeUnit.SECONDS);
+
+        // Setting jersey specific properties is ugly, such behavior should be removed
+        // once we migrate to javax.ws.rs-api 2.1
+        clientBuilder.property("jersey.config.client.readTimeout", httpReadTimeout);
+        clientBuilder.property("jersey.config.client.connectTimeout", httpConnectTimeout);
+    }
+
+    public Properties getProperties(String propertiesFileName) throws FileNotFoundException, IOException {
+        // Check System property, then environment variable then default if null
+        String propDir = System.getProperty(SDNC_CONFIG_DIR);
+        if (propDir == null || propDir.length() < 1) {
+            propDir = System.getenv(SDNC_CONFIG_DIR);
+        }
+        if (propDir == null || propDir.length() < 1) {
+            propDir = SDNC_CONFIG_DIR_DEFAULT;
+        }
+        Properties properties = new Properties();
+        // forward slash is checked to support path src/test/resources on windows machine
+        if (!propDir.endsWith(File.separator) && !propDir.endsWith("/")) {
+            propDir = propDir + File.separator;
+        }
+        String path = propDir + propertiesFileName;
+        properties.load(new FileInputStream(path));
+        logger.trace("Initialized properties from ({}) properties ({})", path, properties);
+        return properties;
+    }
+
+    protected void addBasicAuthCredentials(String username, String password) {
+        String basicAuthValue = getBasicAuthValue(username,password);
+        clientBuilder.register(new BasicAuthFilter(basicAuthValue));
+    }
+
+    protected String getBasicAuthValue(String userName, String password) {
+        String token = userName + ":" + password;
+        try {
+            return "BASIC " + DatatypeConverter.printBase64Binary(token.getBytes("UTF-8"));
+        } catch (Exception e) {
+            logger.error("getBasicAuthValue threw an exception, credentials will be null", e);
+        }
+        return null;
+    }
+
+    public ClientBuilder getClientBuilder() {
+        return clientBuilder;
+    }
+
+    private Integer readOptionalInteger(String propertyName, Integer defaultValue) {
+        String stringValue = System.getProperty(propertyName);
+        if (stringValue != null && stringValue.length() > 0) {
+            try {
+                return Integer.valueOf(stringValue);
+            } catch (NumberFormatException e) {
+                logger.warn("property " + propertyName + " had the value " + stringValue + " that could not be converted to an Integer, default " + defaultValue + " will be used instead", e);
+            }
+        }
+        return defaultValue;
+    }
+
+}
diff --git a/base/http/provider/src/main/java/org/onap/ccsdk/sli/adaptors/base/http/BasicAuthFilter.java b/base/http/provider/src/main/java/org/onap/ccsdk/sli/adaptors/base/http/BasicAuthFilter.java
new file mode 100644 (file)
index 0000000..48d996e
--- /dev/null
@@ -0,0 +1,24 @@
+package org.onap.ccsdk.sli.adaptors.base.http;
+
+import java.io.IOException;
+
+import javax.ws.rs.client.ClientRequestContext;
+import javax.ws.rs.client.ClientRequestFilter;
+import javax.ws.rs.core.MultivaluedMap;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class BasicAuthFilter implements ClientRequestFilter {
+    private final String basicAuthValue;
+
+
+    public BasicAuthFilter(String basicAuthValue) {
+        this.basicAuthValue = basicAuthValue;
+    }
+
+    public void filter(ClientRequestContext requestContext) throws IOException {
+        MultivaluedMap<String, Object> headers = requestContext.getHeaders();
+        headers.add("Authorization", basicAuthValue);
+    }
+}
diff --git a/base/http/provider/src/test/java/org/onap/ccsdk/sli/adaptors/base/http/AbstractHttpAdapterTest.java b/base/http/provider/src/test/java/org/onap/ccsdk/sli/adaptors/base/http/AbstractHttpAdapterTest.java
new file mode 100644 (file)
index 0000000..ee2d223
--- /dev/null
@@ -0,0 +1,47 @@
+package org.onap.ccsdk.sli.adaptors.base.http;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.assertNotNull;\r
+\r
+import java.util.Properties;\r
+import java.util.Set;\r
+\r
+import javax.ws.rs.client.Client;\r
+\r
+import org.junit.Test;\r
+\r
+public class AbstractHttpAdapterTest {\r
+    \r
+    public class NonLoggingHttpAdapter extends AbstractHttpAdapter {\r
+        @Override\r
+        protected void registerLoggingFilter() {\r
+            // nonlogging, do nothing\r
+        }\r
+    }\r
+    \r
+    @Test\r
+    public void checkTimeouts() throws Exception {\r
+        NonLoggingHttpAdapter adapter = new NonLoggingHttpAdapter();\r
+        Client client = adapter.getClientBuilder().build();\r
+        assertNotNull(client.getConfiguration().getProperty("jersey.config.client.readTimeout"));\r
+        assertNotNull(client.getConfiguration().getProperty("jersey.config.client.connectTimeout"));\r
+    }\r
+    \r
+    @Test\r
+    public void propertiesTest() throws Exception {\r
+        System.setProperty(AbstractHttpAdapter.SDNC_CONFIG_DIR, "src/test/resources/");\r
+        NonLoggingHttpAdapter adapter = new NonLoggingHttpAdapter();\r
+        Properties props = adapter.getProperties("testprops.properties");\r
+        assertNotNull(props);\r
+        assertEquals("world", props.get("hello"));\r
+    }\r
+    \r
+    @Test\r
+    public void basicAuthFilter() throws Exception {\r
+        NonLoggingHttpAdapter adapter = new NonLoggingHttpAdapter();\r
+        adapter.addBasicAuthCredentials("hello", "world");\r
+        Set<Object> objs = adapter.getClientBuilder().getConfiguration().getInstances();\r
+        assertEquals(BasicAuthFilter.class,objs.iterator().next().getClass());\r
+    }\r
+\r
+}\r
diff --git a/base/http/provider/src/test/java/org/onap/ccsdk/sli/adaptors/base/http/BasicAuthFilterTest.java b/base/http/provider/src/test/java/org/onap/ccsdk/sli/adaptors/base/http/BasicAuthFilterTest.java
new file mode 100644 (file)
index 0000000..b9565ba
--- /dev/null
@@ -0,0 +1,20 @@
+package org.onap.ccsdk.sli.adaptors.base.http;
+
+import static org.junit.Assert.assertNotNull;
+
+import org.junit.Test;
+
+public class BasicAuthFilterTest {
+    
+    @Test
+    public void notNullParameters() throws Exception {
+        BasicAuthFilter myFilter = new BasicAuthFilter("helloworld");
+        assertNotNull(myFilter);
+    }
+    
+    @Test
+    public void nullParameters() throws Exception {
+        BasicAuthFilter myFilter = new BasicAuthFilter(null);
+        assertNotNull(myFilter);
+    }
+}
diff --git a/base/http/provider/src/test/resources/testprops.properties b/base/http/provider/src/test/resources/testprops.properties
new file mode 100644 (file)
index 0000000..3f60268
--- /dev/null
@@ -0,0 +1 @@
+hello = world
\ No newline at end of file
diff --git a/base/pom.xml b/base/pom.xml
new file mode 100644 (file)
index 0000000..eb18d16
--- /dev/null
@@ -0,0 +1,21 @@
+<?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.onap.ccsdk.parent</groupId>
+        <artifactId>odlparent-lite</artifactId>
+        <version>1.3.2</version>
+        <relativePath/>
+     </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>pom</packaging>
+    <groupId>org.onap.ccsdk.sli.adaptors</groupId>
+    <artifactId>base-parent</artifactId>
+    <version>0.5.1-SNAPSHOT</version>
+
+    <modules>
+        <module>http</module>
+    </modules>
+
+</project>
index e5d3c16..e80e956 100644 (file)
             <type>xml</type>
             <classifier>features</classifier>
         </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>ccsdk-base-http</artifactId>
+            <version>${project.version}</version>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
   </dependencies>
 </project>
diff --git a/pom.xml b/pom.xml
index 03a7d5e..becf026 100755 (executable)
--- a/pom.xml
+++ b/pom.xml
         <module>mdsal-resource</module>
         <module>resource-assignment</module>
         <module>sql-resource</module>
+        <module>base</module>
+        <module>message-router</module>
         <module>features</module>
         <module>artifacts</module>
-        <module>message-router</module>
     </modules>
     <organization>
         <name>ONAP</name>