Initial A1 adapter api implmentation

Issue-ID: CCSDK-2604
Change-Id: If946b4f0cc92410e6b903928fd9cb2fd79996dc3
Signed-off-by: Lathish <lathishbabu.ganesan@est.tech>
diff --git a/a1-adapter/a1-adapter-api/feature/.gitignore b/a1-adapter/a1-adapter-api/feature/.gitignore
new file mode 100644
index 0000000..eacf31a
--- /dev/null
+++ b/a1-adapter/a1-adapter-api/feature/.gitignore
@@ -0,0 +1 @@
+/target-ide/
diff --git a/a1-adapter/a1-adapter-api/feature/pom.xml b/a1-adapter/a1-adapter-api/feature/pom.xml
new file mode 100644
index 0000000..cc4c681
--- /dev/null
+++ b/a1-adapter/a1-adapter-api/feature/pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ ============LICENSE_START=======================================================
+  ~ ONAP : ccsdk oran
+  ~ ================================================================================
+  ~ Copyright (C) 2020 Nordix Foundation. 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=======================================================
+  ~
+-->
+<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>2.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.oran</groupId>
+    <artifactId>a1-adapter-feature</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <packaging>feature</packaging>
+
+    <name>ccsdk-oran :: ${project.artifactId}</name>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>a1-adapter-provider</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/a1-adapter/a1-adapter-api/installer/pom.xml b/a1-adapter/a1-adapter-api/installer/pom.xml
index 22b4e9e..2e55f7d 100644
--- a/a1-adapter/a1-adapter-api/installer/pom.xml
+++ b/a1-adapter/a1-adapter-api/installer/pom.xml
@@ -19,14 +19,13 @@
   ~ ============LICENSE_END=======================================================
   ~
 -->
-
 <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>2.0.0-SNAPSHOT</version>
+        <version>2.0.1-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
@@ -42,4 +41,77 @@
         <include.transitive.dependencies>false</include.transitive.dependencies>
     </properties>
 
-</project>
+    <dependencies>
+
+        <dependency>
+            <groupId>org.onap.ccsdk.oran</groupId>
+            <artifactId>${application.name}-feature</artifactId>
+            <version>${project.version}</version>
+            <type>xml</type>
+            <classifier>features</classifier>
+            <exclusions>
+                <exclusion>
+                    <groupId>*</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>a1-adapter-provider</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>maven-repo-zip</id>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                        <phase>package</phase>
+                        <configuration>
+                            <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>
+                </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>a1-adapter-model,a1-adapter-provider,a1-adapter-feature</includeArtifactIds>
+                            <scope>provided</scope>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file
diff --git a/a1-adapter/a1-adapter-api/model/pom.xml b/a1-adapter/a1-adapter-api/model/pom.xml
index 3c90faf..7aa386e 100644
--- a/a1-adapter/a1-adapter-api/model/pom.xml
+++ b/a1-adapter/a1-adapter-api/model/pom.xml
@@ -24,7 +24,7 @@
    <parent>
       <groupId>org.onap.ccsdk.parent</groupId>
       <artifactId>binding-parent</artifactId>
-      <version>2.0.0-SNAPSHOT</version>
+      <version>2.0.1-SNAPSHOT</version>
       <relativePath />
    </parent>
    <groupId>org.onap.ccsdk.oran</groupId>
diff --git a/a1-adapter/a1-adapter-api/pom.xml b/a1-adapter/a1-adapter-api/pom.xml
index 122d295..c1176eb 100644
--- a/a1-adapter/a1-adapter-api/pom.xml
+++ b/a1-adapter/a1-adapter-api/pom.xml
@@ -24,7 +24,7 @@
    <parent>
       <groupId>org.onap.ccsdk.parent</groupId>
       <artifactId>odlparent-lite</artifactId>
-      <version>2.0.0-SNAPSHOT</version>
+      <version>2.0.1-SNAPSHOT</version>
       <relativePath />
    </parent>
    <groupId>org.onap.ccsdk.oran</groupId>
@@ -38,6 +38,7 @@
    <modules>
       <module>model</module>
       <module>provider</module>
+      <module>feature</module>
       <module>installer</module>
    </modules>
    <build>
diff --git a/a1-adapter/a1-adapter-api/provider/pom.xml b/a1-adapter/a1-adapter-api/provider/pom.xml
index bf7ae33..8f1d94e 100644
--- a/a1-adapter/a1-adapter-api/provider/pom.xml
+++ b/a1-adapter/a1-adapter-api/provider/pom.xml
@@ -26,7 +26,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.0.0-SNAPSHOT</version>
+        <version>2.0.1-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
@@ -135,6 +135,13 @@
                         </lifecycleMappingMetadata>
                     </configuration>
                 </plugin>
+                <plugin>
+                  <groupId>org.apache.maven.plugins</groupId>
+                  <artifactId>maven-javadoc-plugin</artifactId>
+                <configuration>
+                  <source>8</source>
+               </configuration>
+            </plugin>
             </plugins>
         </pluginManagement>
     </build>
diff --git a/a1-adapter/a1-adapter-api/provider/src/main/java/org/onap/ccsdk/features/a1/adapter/A1AdapterClient.java b/a1-adapter/a1-adapter-api/provider/src/main/java/org/onap/ccsdk/features/a1/adapter/A1AdapterClient.java
new file mode 100644
index 0000000..fb21de4
--- /dev/null
+++ b/a1-adapter/a1-adapter-api/provider/src/main/java/org/onap/ccsdk/features/a1/adapter/A1AdapterClient.java
@@ -0,0 +1,75 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.ccsdk.features.a1.adapter;
+
+import java.util.Properties;
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
+import org.onap.ccsdk.sli.core.sli.provider.MdsalHelper;
+import org.onap.ccsdk.sli.core.sli.provider.SvcLogicService;
+import org.opendaylight.yang.gen.v1.org.onap.a1.adapter.rev200122.GetA1PolicyTypeOutputBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class A1AdapterClient {
+
+  private static final Logger LOG = LoggerFactory.getLogger(A1AdapterClient.class);
+
+  private SvcLogicService svcLogicService = null;
+
+  public A1AdapterClient(final SvcLogicService svcLogicService) {
+    this.svcLogicService = svcLogicService;
+  }
+
+  public boolean hasGraph(String module, String rpc, String version, String mode)
+      throws SvcLogicException {
+    return svcLogicService.hasGraph(module, rpc, version, mode);
+  }
+
+  public Properties execute(String module, String rpc, String version, String mode,
+      GetA1PolicyTypeOutputBuilder serviceData, Properties parms) throws SvcLogicException {
+    Properties localProp;
+    localProp = MdsalHelper.toProperties(parms, serviceData);
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("Parameters passed to SLI");
+
+      for (Object key : localProp.keySet()) {
+        String parmName = (String) key;
+        String parmValue = localProp.getProperty(parmName);
+
+        LOG.debug(parmName + " = " + parmValue);
+      }
+    }
+    Properties respProps = svcLogicService.execute(module, rpc, version, mode, localProp);
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("Parameters returned by SLI");
+      for (Object key : respProps.keySet()) {
+        String parmName = (String) key;
+        String parmValue = respProps.getProperty(parmName);
+        LOG.debug(parmName + " = " + parmValue);
+      }
+    }
+    if ("failure".equalsIgnoreCase(respProps.getProperty("SvcLogic.status"))) {
+      return respProps;
+    }
+    MdsalHelper.toBuilder(respProps, serviceData);
+    return respProps;
+  }
+}
diff --git a/a1-adapter/a1-adapter-api/provider/src/main/java/org/onap/ccsdk/features/a1/adapter/A1AdapterProvider.java b/a1-adapter/a1-adapter-api/provider/src/main/java/org/onap/ccsdk/features/a1/adapter/A1AdapterProvider.java
new file mode 100644
index 0000000..a1b9ef9
--- /dev/null
+++ b/a1-adapter/a1-adapter-api/provider/src/main/java/org/onap/ccsdk/features/a1/adapter/A1AdapterProvider.java
@@ -0,0 +1,174 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.ccsdk.features.a1.adapter;
+
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.Properties;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import org.onap.ccsdk.sli.core.sli.provider.MdsalHelper;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.yang.gen.v1.org.onap.a1.adapter.rev200122.A1ADAPTERAPIService;
+import org.opendaylight.yang.gen.v1.org.onap.a1.adapter.rev200122.DeleteA1PolicyInput;
+import org.opendaylight.yang.gen.v1.org.onap.a1.adapter.rev200122.DeleteA1PolicyOutput;
+import org.opendaylight.yang.gen.v1.org.onap.a1.adapter.rev200122.GetA1PolicyInput;
+import org.opendaylight.yang.gen.v1.org.onap.a1.adapter.rev200122.GetA1PolicyOutput;
+import org.opendaylight.yang.gen.v1.org.onap.a1.adapter.rev200122.GetA1PolicyStatusInput;
+import org.opendaylight.yang.gen.v1.org.onap.a1.adapter.rev200122.GetA1PolicyStatusOutput;
+import org.opendaylight.yang.gen.v1.org.onap.a1.adapter.rev200122.GetA1PolicyTypeInput;
+import org.opendaylight.yang.gen.v1.org.onap.a1.adapter.rev200122.GetA1PolicyTypeInputBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.a1.adapter.rev200122.GetA1PolicyTypeOutput;
+import org.opendaylight.yang.gen.v1.org.onap.a1.adapter.rev200122.GetA1PolicyTypeOutputBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.a1.adapter.rev200122.PutA1PolicyInput;
+import org.opendaylight.yang.gen.v1.org.onap.a1.adapter.rev200122.PutA1PolicyOutput;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Defines a base implementation for your provider. This class overrides the generated interface
+ * from the YANG model and implements the request model for the A1 interface. This class identifies
+ * the Near-RT RIC throught the IP passed over the payload and calls the corresponding Near-RT RIC
+ * over Rest API
+ *
+ * <pre>
+ *
+ */
+@SuppressWarnings("squid:S1874") // "@Deprecated" code should not be used
+public class A1AdapterProvider implements AutoCloseable, A1ADAPTERAPIService {
+
+  private static final Logger log = LoggerFactory.getLogger(A1AdapterProvider.class);
+
+  private static final String APPLICATION_NAME = "a1Adapter-api";
+
+  private final ExecutorService executor;
+  protected DataBroker dataBroker;
+  protected NotificationPublishService notificationService;
+  protected RpcProviderRegistry rpcRegistry;
+  protected BindingAwareBroker.RpcRegistration<A1ADAPTERAPIService> rpcRegistration;
+  private final A1AdapterClient a1AdapterClient;
+
+  public A1AdapterProvider(final DataBroker dataBroker,
+      final NotificationPublishService notificationPublishService,
+      final RpcProviderRegistry rpcProviderRegistry, final A1AdapterClient a1AdapterClient) {
+
+    log.info("Creating provider for {}", APPLICATION_NAME);
+    executor = Executors.newFixedThreadPool(1);
+    this.dataBroker = dataBroker;
+    this.notificationService = notificationPublishService;
+    this.rpcRegistry = rpcProviderRegistry;
+    this.a1AdapterClient = a1AdapterClient;
+    initialize();
+  }
+
+  public void initialize() {
+    log.info("Initializing provider for {}", APPLICATION_NAME);
+    rpcRegistration = rpcRegistry.addRpcImplementation(A1ADAPTERAPIService.class, this);
+    log.info("Initialization complete for {}", APPLICATION_NAME);
+  }
+
+  protected void initializeChild() {
+    // Override if you have custom initialization intelligence
+  }
+
+  @Override
+  public void close() throws Exception {
+    log.info("Closing provider for {}", APPLICATION_NAME);
+    executor.shutdown();
+    rpcRegistration.close();
+    log.info("Successfully closed provider for {}", APPLICATION_NAME);
+  }
+
+  @Override
+  public ListenableFuture<RpcResult<DeleteA1PolicyOutput>> deleteA1Policy(
+      DeleteA1PolicyInput input) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public ListenableFuture<RpcResult<GetA1PolicyOutput>> getA1Policy(GetA1PolicyInput input) {
+    log.info("Start of getA1Policy");
+    return null;
+  }
+
+  @Override
+  public ListenableFuture<RpcResult<GetA1PolicyStatusOutput>> getA1PolicyStatus(
+      GetA1PolicyStatusInput input) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public ListenableFuture<RpcResult<GetA1PolicyTypeOutput>> getA1PolicyType(
+      GetA1PolicyTypeInput input) {
+    log.info("Start of getA1PolicyType");
+    final String svcOperation = "getA1PolicyType";
+    Properties parms = new Properties();
+    GetA1PolicyTypeOutputBuilder policyTypeResponse = new GetA1PolicyTypeOutputBuilder();
+    // add input to parms
+    log.info("Adding INPUT data for " + svcOperation + " input: " + input);
+    GetA1PolicyTypeInputBuilder inputBuilder = new GetA1PolicyTypeInputBuilder(input);
+    MdsalHelper.toProperties(parms, inputBuilder.build());
+    log.info("Printing SLI parameters to be passed");
+    // iterate properties file to get key-value pairs
+    for (String key : parms.stringPropertyNames()) {
+      String value = parms.getProperty(key);
+      log.info("The SLI parameter in " + key + " is: " + value);
+    }
+    // Call SLI sync method
+    try {
+      if (a1AdapterClient.hasGraph("A1-ADAPTER-API", svcOperation, null, "sync")) {
+        log.info("A1AdapterClient has a Directed Graph for '" + svcOperation + "'");
+        try {
+          a1AdapterClient.execute("A1-ADAPTER-API", svcOperation, null, "sync", policyTypeResponse,
+              parms);
+          policyTypeResponse.setHttpStatus(200);
+        } catch (Exception e) {
+          log.error("Caught exception executing service logic for " + svcOperation, e);
+          policyTypeResponse.setHttpStatus(500);
+        }
+      } else {
+        log.error("No service logic active for A1Adapter: '" + svcOperation + "'");
+        policyTypeResponse.setHttpStatus(503);
+      }
+    } catch (Exception e) {
+      log.error("Caught exception looking for service logic", e);
+      policyTypeResponse.setHttpStatus(500);
+    }
+    RpcResult<GetA1PolicyTypeOutput> rpcResult = RpcResultBuilder
+        .<GetA1PolicyTypeOutput>status(true).withResult(policyTypeResponse.build()).build();
+    log.info("End of getA1PolicyType");
+    return Futures.immediateFuture(rpcResult);
+  }
+
+  @Override
+  public ListenableFuture<RpcResult<PutA1PolicyOutput>> putA1Policy(PutA1PolicyInput input) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+}
diff --git a/a1-adapter/a1-adapter-api/provider/src/main/resources/OSGI-INF/blueprint/impl-blueprint.xml b/a1-adapter/a1-adapter-api/provider/src/main/resources/OSGI-INF/blueprint/impl-blueprint.xml
new file mode 100644
index 0000000..2940360
--- /dev/null
+++ b/a1-adapter/a1-adapter-api/provider/src/main/resources/OSGI-INF/blueprint/impl-blueprint.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ ============LICENSE_START=======================================================
+  ~ ONAP : ccsdk oran
+  ~ ================================================================================
+  ~ Copyright (C) 2020 Nordix Foundation. 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=======================================================
+  ~
+-->
+
+<blueprint xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
+           xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" odl:use-default-for-reference-types="true">
+
+    <reference id="svcLogicService"
+               interface="org.onap.ccsdk.sli.core.sli.provider.SvcLogicService"/>
+
+    <bean id="client" class="org.onap.ccsdk.features.a1.adapter.A1AdapterClient">
+        <argument ref="svcLogicService"/>
+    </bean>
+
+    <reference id="dataBroker" interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"
+               odl:type="default"/>
+
+    <reference id="notificationService"
+               interface="org.opendaylight.controller.md.sal.binding.api.NotificationPublishService"
+               odl:type="default"/>
+
+    <reference id="rpcRegistry" interface="org.opendaylight.controller.sal.binding.api.RpcProviderRegistry"
+               odl:type="default"/>
+
+    <bean id="provider" class="org.onap.ccsdk.features.a1.adapter.A1AdapterProvider">
+        <argument ref="dataBroker"/>
+        <argument ref="rpcRegistry"/>
+        <argument ref="notificationService"/>
+        <argument ref="client"/>
+    </bean>
+
+</blueprint>
diff --git a/a1-adapter/a1-adapter-api/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml b/a1-adapter/a1-adapter-api/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
new file mode 100644
index 0000000..2940360
--- /dev/null
+++ b/a1-adapter/a1-adapter-api/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ ============LICENSE_START=======================================================
+  ~ ONAP : ccsdk oran
+  ~ ================================================================================
+  ~ Copyright (C) 2020 Nordix Foundation. 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=======================================================
+  ~
+-->
+
+<blueprint xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
+           xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" odl:use-default-for-reference-types="true">
+
+    <reference id="svcLogicService"
+               interface="org.onap.ccsdk.sli.core.sli.provider.SvcLogicService"/>
+
+    <bean id="client" class="org.onap.ccsdk.features.a1.adapter.A1AdapterClient">
+        <argument ref="svcLogicService"/>
+    </bean>
+
+    <reference id="dataBroker" interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"
+               odl:type="default"/>
+
+    <reference id="notificationService"
+               interface="org.opendaylight.controller.md.sal.binding.api.NotificationPublishService"
+               odl:type="default"/>
+
+    <reference id="rpcRegistry" interface="org.opendaylight.controller.sal.binding.api.RpcProviderRegistry"
+               odl:type="default"/>
+
+    <bean id="provider" class="org.onap.ccsdk.features.a1.adapter.A1AdapterProvider">
+        <argument ref="dataBroker"/>
+        <argument ref="rpcRegistry"/>
+        <argument ref="notificationService"/>
+        <argument ref="client"/>
+    </bean>
+
+</blueprint>
diff --git a/a1-adapter/a1-adapter-api/provider/src/test/java/org/onap/ccsdk/features/a1/adapter/A1AdapterProviderTest.java b/a1-adapter/a1-adapter-api/provider/src/test/java/org/onap/ccsdk/features/a1/adapter/A1AdapterProviderTest.java
new file mode 100644
index 0000000..901bc00
--- /dev/null
+++ b/a1-adapter/a1-adapter-api/provider/src/test/java/org/onap/ccsdk/features/a1/adapter/A1AdapterProviderTest.java
@@ -0,0 +1,101 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 Nordix Foundation.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.ccsdk.features.a1.adapter;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.when;
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.Properties;
+import java.util.concurrent.ExecutionException;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.yang.gen.v1.org.onap.a1.adapter.rev200122.GetA1PolicyTypeInputBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.a1.adapter.rev200122.GetA1PolicyTypeOutput;
+import org.opendaylight.yang.gen.v1.org.onap.a1.adapter.rev200122.GetA1PolicyTypeOutputBuilder;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This class Tests all the methods in A1AdapterProvider
+ *
+ */
+
+@RunWith(MockitoJUnitRunner.Silent.class)
+public class A1AdapterProviderTest {
+
+  protected static final Logger LOG = LoggerFactory.getLogger(A1AdapterProviderTest.class);
+
+  class A1AdapterProviderMock extends A1AdapterProvider {
+
+    A1AdapterProviderMock(final DataBroker dataBroker,
+        final NotificationPublishService notificationPublishService,
+        final RpcProviderRegistry rpcProviderRegistry, final A1AdapterClient A1AdapterClient) {
+      super(dataBroker, mockNotificationPublishService, mockRpcProviderRegistry, a1AdapterClient);
+    }
+
+  }
+
+  private A1AdapterProviderMock a1AdapterProviderMock = null;
+  @Mock
+  private DataBroker dataBroker;
+  @Mock
+  private NotificationPublishService mockNotificationPublishService;
+  @Mock
+  private RpcProviderRegistry mockRpcProviderRegistry;
+  @Mock
+  private A1AdapterClient a1AdapterClient;
+  private static String module = "A1-ADAPTER-API";
+  private static String mode = "sync";
+
+  @Before
+  public void setUp() throws Exception {
+
+    a1AdapterProviderMock = new A1AdapterProviderMock(dataBroker, mockNotificationPublishService,
+        mockRpcProviderRegistry, a1AdapterClient);
+    a1AdapterProviderMock = Mockito.spy(a1AdapterProviderMock);
+
+  }
+
+  @Test
+  public void test_getA1PolicyType()
+      throws SvcLogicException, InterruptedException, ExecutionException {
+    String rpc = "getA1PolicyType";
+    Properties respProps = new Properties();
+    GetA1PolicyTypeInputBuilder inputBuilder = new GetA1PolicyTypeInputBuilder();
+    when(a1AdapterClient.hasGraph(module, rpc, null, mode)).thenReturn(true);
+    when(a1AdapterClient.execute(eq(module), eq(rpc), eq(null), eq(mode),
+        any(GetA1PolicyTypeOutputBuilder.class), any(Properties.class))).thenReturn(respProps);
+    ListenableFuture<RpcResult<GetA1PolicyTypeOutput>> result =
+        a1AdapterProviderMock.getA1PolicyType(inputBuilder.build());
+    assertEquals("200", String.valueOf(result.get().getResult().getHttpStatus()));
+  }
+}
diff --git a/a1-adapter/features/a1-adapter-northbound/pom.xml b/a1-adapter/features/a1-adapter-northbound/pom.xml
new file mode 100644
index 0000000..57d82cc
--- /dev/null
+++ b/a1-adapter/features/a1-adapter-northbound/pom.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ ============LICENSE_START=======================================================
+  ~ ONAP : ccsdk oran
+  ~ ================================================================================
+  ~ Copyright (C) 2020 Nordix Foundation. 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=======================================================
+  ~
+-->
+<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>2.0.1-SNAPSHOT</version>
+        <relativePath/>
+	</parent>
+
+    <groupId>org.onap.ccsdk.oran</groupId>
+    <artifactId>a1-adapter-northbound</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <packaging>feature</packaging>
+    <name>ccsdk-oran :: ${project.artifactId}</name>
+    <dependencies>
+      <dependency>
+          <groupId>org.onap.ccsdk.oran</groupId>
+           <artifactId>a1-adapter-feature</artifactId>
+            <version>${project.version}</version>
+            <type>xml</type>
+            <classifier>features</classifier>
+      </dependency>
+   </dependencies>
+</project>
\ No newline at end of file
diff --git a/a1-adapter/features/installer/pom.xml b/a1-adapter/features/installer/pom.xml
new file mode 100644
index 0000000..f83849e
--- /dev/null
+++ b/a1-adapter/features/installer/pom.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ ============LICENSE_START=======================================================
+  ~ ONAP : ccsdk oran
+  ~ ================================================================================
+  ~ Copyright (C) 2020 Nordix Foundation. 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=======================================================
+  ~
+-->
+<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>2.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+	<groupId>org.onap.ccsdk.oran</groupId>
+	<artifactId>a1-adapter-northbound-installer</artifactId>
+	<version>1.0.0-SNAPSHOT</version>
+	<packaging>pom</packaging>
+
+	<name>ccsdk-oran :: ${project.artifactId}</name>
+
+	<properties>
+		<application.name>a1-adapter-northbound</application.name>
+		<features.boot>${application.name}</features.boot>
+		<features.repositories>mvn:org.onap.ccsdk.oran/${features.boot}/${project.version}/xml/features</features.repositories>
+		<include.transitive.dependencies>false</include.transitive.dependencies>
+	</properties>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.onap.ccsdk.oran</groupId>
+			<artifactId>${application.name}</artifactId>
+			<version>${project.version}</version>
+			<type>xml</type>
+			<classifier>features</classifier>
+			<exclusions>
+				<exclusion>
+					<groupId>*</groupId>
+					<artifactId>*</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+	</dependencies>
+
+	<build>
+        <plugins>
+            <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>
+                            <includeGroupIds>org.onap.ccsdk.oran</includeGroupIds>
+                            <scope>provided</scope>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <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>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/a1-adapter/features/installer/src/assembly/assemble_mvnrepo_zip.xml b/a1-adapter/features/installer/src/assembly/assemble_mvnrepo_zip.xml
new file mode 100644
index 0000000..6a64b21
--- /dev/null
+++ b/a1-adapter/features/installer/src/assembly/assemble_mvnrepo_zip.xml
@@ -0,0 +1,48 @@
+<!--
+  ~ ============LICENSE_START=======================================================
+  ~ ONAP : ccsdk oran
+  ~ ================================================================================
+  ~ Copyright (C) 2020 Nordix Foundation. 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:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+  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/a1-adapter/features/pom.xml b/a1-adapter/features/pom.xml
index 2309ff0..5efa09c 100644
--- a/a1-adapter/features/pom.xml
+++ b/a1-adapter/features/pom.xml
@@ -20,16 +20,24 @@
   ~
 -->
 <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>2.0.0-SNAPSHOT</version>
-      <relativePath />
-   </parent>
-   <groupId>org.onap.ccsdk.oran</groupId>
-   <artifactId>ccsdk-a1-adapter-feature-aggregator</artifactId>
-   <version>1.0.0-SNAPSHOT</version>
-   <packaging>pom</packaging>
-   <name>ccsdk-oran :: ${project.artifactId}</name>
-</project>
\ No newline at end of file
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.onap.ccsdk.parent</groupId>
+		<artifactId>odlparent-lite</artifactId>
+		<version>2.0.1-SNAPSHOT</version>
+		<relativePath/>
+	</parent>
+
+	<groupId>org.onap.ccsdk.oran</groupId>
+	<artifactId>ccsdk-a1-adapter-feature-aggregator</artifactId>
+	<version>1.0.0-SNAPSHOT</version>
+	<packaging>pom</packaging>
+
+	<name>ccsdk-oran :: ${project.artifactId}</name>
+
+	<modules>
+        <module>a1-adapter-northbound</module>
+        <module>installer</module>
+    </modules>
+</project>
diff --git a/a1-adapter/pom.xml b/a1-adapter/pom.xml
index 473b125..c3ecfe9 100644
--- a/a1-adapter/pom.xml
+++ b/a1-adapter/pom.xml
@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ ============LICENSE_START=======================================================
   ~ ONAP : ccsdk oran
@@ -27,7 +26,7 @@
     <version>1.0.0-SNAPSHOT</version>
     <packaging>pom</packaging>
 
-    <name>ccsdk-features :: ${project.artifactId}</name>
+    <name>ccsdk-oran :: ${project.artifactId}</name>
     <modules>
       <module>a1-adapter-api</module>
       <module>features</module>
diff --git a/pom.xml b/pom.xml
index 9a76954..7353a17 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,7 +35,6 @@
     <properties>
         <sonar-maven-plugin.version>3.7.0.1746</sonar-maven-plugin.version>
     </properties>
-
     <build>
         <plugins>
             <!-- support sonar in multi-module project -->
@@ -46,4 +45,4 @@
             </plugin>
         </plugins>
     </build>
-</project>
+</project>
\ No newline at end of file