Refactor: split api from single bundle for openstacknetworking

Change-Id: I8d94476d04bea1c0440e9735f519fdca3b1bd77d
diff --git a/apps/openstacknetworking/BUCK b/apps/openstacknetworking/BUCK
index ba0f6db..c1e8532 100644
--- a/apps/openstacknetworking/BUCK
+++ b/apps/openstacknetworking/BUCK
@@ -1,99 +1,15 @@
-def get_openstack4j_deps_path():
-
-    WEB_INF_PATH = 'WEB-INF/classes/deps/'
-    OPENSTACK4J_DEPS = [
-        'openstack4j-core',
-        'openstack4j-http-connector',
-        'openstack4j-httpclient',
-    ]
-    OPENSTACK4J_VER = '3.1.0'
-
-    openstack_deps_path = ''
-
-    for dep in OPENSTACK4J_DEPS:
-        name = dep + '-' + OPENSTACK4J_VER + '.jar'
-        path = WEB_INF_PATH + name
-        openstack_deps_path = openstack_deps_path + path + ','
-
-    return openstack_deps_path
-
-def get_jackson_deps_path():
-
-    WEB_INF_PATH = 'WEB-INF/classes/deps/'
-    JACKSON_DEPS_WITH_VER = [
-        'json-patch-1.9.jar',
-        'jackson-coreutils-1.6.jar',
-        'msg-simple-1.1.jar',
-        'btf-1.2.jar',
-        'snakeyaml-1.15.jar'
-    ]
-
-    jackson_deps_path = ''
-
-    for dep in JACKSON_DEPS_WITH_VER:
-        path = WEB_INF_PATH + dep
-        jackson_deps_path = jackson_deps_path + path + ','
-
-    return jackson_deps_path
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//core/store/serializers:onos-core-serializers',
-    '//lib:org.apache.karaf.shell.console',
-    '//lib:javax.ws.rs-api',
-    '//utils/rest:onlab-rest',
-    '//cli:onos-cli',
-    '//apps/openstacknode/api:onos-apps-openstacknode-api',
-    '//lib:openstack4j-core',
-    '//lib:openstack4j-http-connector',
-    '//lib:openstack4j-httpclient',
-    '//lib:json-patch',
-    '//lib:jackson-coreutils',
-    '//lib:btf',
-    '//lib:msg-simple',
-    '//lib:snakeyaml',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//core/common:onos-core-common-tests',
-    '//web/api:onos-rest-tests',
-    '//lib:TEST_REST',
-]
-
 BUNDLES = [
-    '//apps/openstacknetworking:onos-apps-openstacknetworking',
+    '//apps/openstacknetworking/api:onos-apps-openstacknetworking-api',
+    '//apps/openstacknetworking/app:onos-apps-openstacknetworking-app',
 ]
 
-INCLUDE_PACKAGES = 'com.google.common.net,com.google.common.io,com.fasterxml.jackson.annotation'
-EXCLUDE_PACKAGES = '!org.openstack4j,!org.openstack4j.*'
-ALL_PACKAGES = '*'
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/openstacknetworking',
-    api_title = 'OpenStack Networking API',
-    api_version = '1.0',
-    api_description = 'REST API for OpenStack Networking',
-    api_package = 'org.onosproject.openstacknetworking.web',
-
-    # dependency embedding
-    import_packages = INCLUDE_PACKAGES + ',' + EXCLUDE_PACKAGES  + ',' + ALL_PACKAGES,
-    bundle_classpath = get_openstack4j_deps_path() + get_jackson_deps_path()
-)
-
 onos_app (
-    app_name = 'org.onosproject.openstacknetworking',
-    title = 'OpenStack Networking',
+    title = 'OpenStack Networking Application',
     category = 'Utility',
-    url = 'http://onosproject.org',
+    url = 'https://wiki.onosproject.org/display/ONOS/SONA%3A+DC+Network+Virtualization',
     included_bundles = BUNDLES,
-    description = 'OpenStack Networking application.',
+    description = 'SONA Openstack Networking Application.',
     required_apps = [
         'org.onosproject.openstacknode'
     ]
-)
\ No newline at end of file
+)
diff --git a/apps/openstacknetworking/api/BUCK b/apps/openstacknetworking/api/BUCK
new file mode 100644
index 0000000..b502204
--- /dev/null
+++ b/apps/openstacknetworking/api/BUCK
@@ -0,0 +1,12 @@
+include_defs('//apps/openstacknetworking/openstack4j.bucklet')
+
+COMPILE_DEPS = [
+    '//lib:CORE_DEPS',
+    '//lib:openstack4j-core',
+]
+
+osgi_jar_with_tests (
+    deps = COMPILE_DEPS,
+
+    import_packages = INCLUDE_PACKAGES + ',' + EXCLUDE_PACKAGES  + ',' + ALL_PACKAGES,
+)
diff --git a/apps/openstacknetworking/api/pom.xml b/apps/openstacknetworking/api/pom.xml
new file mode 100644
index 0000000..ea606bd
--- /dev/null
+++ b/apps/openstacknetworking/api/pom.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2018-present Open Networking 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.
+  -->
+<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.onosproject</groupId>
+        <artifactId>onos-apps-openstacknetworking</artifactId>
+        <version>1.13.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>onos-apps-openstacknetworking-api</artifactId>
+    <packaging>bundle</packaging>
+
+    <description>SONA Openstack Networking API Application</description>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-api</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.pacesys</groupId>
+            <artifactId>openstack4j-core</artifactId>
+            <version>${openstack4j.version}</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Bundle-SymbolicName>
+                            ${project.groupId}.${project.artifactId}
+                        </Bundle-SymbolicName>
+                        <Import-Package>
+                            !org.openstack4j.*,
+                            *
+                        </Import-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/Constants.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/Constants.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/Constants.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/Constants.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/ExternalPeerRouter.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/ExternalPeerRouter.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/ExternalPeerRouter.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/ExternalPeerRouter.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/InstancePort.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/InstancePort.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/InstancePort.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/InstancePort.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/InstancePortEvent.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/InstancePortEvent.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/InstancePortEvent.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/InstancePortEvent.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/InstancePortListener.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/InstancePortListener.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/InstancePortListener.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/InstancePortListener.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/InstancePortService.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/InstancePortService.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/InstancePortService.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/InstancePortService.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackFlowRuleService.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackFlowRuleService.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackFlowRuleService.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackFlowRuleService.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkAdminService.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkAdminService.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkAdminService.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkAdminService.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkEvent.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkEvent.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkEvent.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkEvent.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkListener.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkListener.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkListener.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkListener.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkService.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkService.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkService.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkService.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkStore.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkStore.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkStore.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkStore.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkStoreDelegate.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkStoreDelegate.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkStoreDelegate.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackNetworkStoreDelegate.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterAdminService.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterAdminService.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterAdminService.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterAdminService.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterEvent.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterEvent.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterEvent.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterEvent.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterListener.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterListener.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterListener.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterListener.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterService.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterService.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterService.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterService.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterStore.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterStore.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterStore.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterStore.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterStoreDelegate.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterStoreDelegate.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterStoreDelegate.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackRouterStoreDelegate.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupAdminService.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupAdminService.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupAdminService.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupAdminService.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupEvent.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupEvent.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupEvent.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupEvent.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupListener.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupListener.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupListener.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupListener.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupService.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupService.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupService.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupService.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupStore.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupStore.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupStore.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupStore.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupStoreDelegate.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupStoreDelegate.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupStoreDelegate.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/OpenstackSecurityGroupStoreDelegate.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/package-info.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/package-info.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/api/package-info.java
rename to apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/package-info.java
diff --git a/apps/openstacknetworking/app/BUCK b/apps/openstacknetworking/app/BUCK
new file mode 100644
index 0000000..b4c5f92
--- /dev/null
+++ b/apps/openstacknetworking/app/BUCK
@@ -0,0 +1,44 @@
+include_defs('//apps/openstacknetworking/openstack4j.bucklet')
+
+COMPILE_DEPS = [
+    '//lib:CORE_DEPS',
+    '//lib:JACKSON',
+    '//lib:KRYO',
+    '//core/store/serializers:onos-core-serializers',
+    '//lib:org.apache.karaf.shell.console',
+    '//lib:javax.ws.rs-api',
+    '//utils/rest:onlab-rest',
+    '//cli:onos-cli',
+    '//apps/openstacknode/api:onos-apps-openstacknode-api',
+    '//apps/openstacknetworking/api:onos-apps-openstacknetworking-api',
+    '//lib:openstack4j-core',
+    '//lib:openstack4j-http-connector',
+    '//lib:openstack4j-httpclient',
+    '//lib:json-patch',
+    '//lib:jackson-coreutils',
+    '//lib:btf',
+    '//lib:msg-simple',
+    '//lib:snakeyaml',
+]
+
+TEST_DEPS = [
+    '//lib:TEST_ADAPTERS',
+    '//core/api:onos-api-tests',
+    '//core/common:onos-core-common-tests',
+    '//web/api:onos-rest-tests',
+    '//lib:TEST_REST',
+]
+
+osgi_jar_with_tests (
+    deps = COMPILE_DEPS,
+    test_deps = TEST_DEPS,
+    web_context = '/onos/openstacknetworking',
+    api_title = 'OpenStack Networking API',
+    api_version = '1.0',
+    api_description = 'REST API for OpenStack Networking',
+    api_package = 'org.onosproject.openstacknetworking.web',
+
+    # dependency embedding
+    import_packages = INCLUDE_PACKAGES + ',' + EXCLUDE_PACKAGES  + ',' + ALL_PACKAGES,
+    bundle_classpath = get_openstack4j_deps_path() + get_jackson_deps_path()
+)
\ No newline at end of file
diff --git a/apps/openstacknetworking/app/app.xml b/apps/openstacknetworking/app/app.xml
new file mode 100644
index 0000000..cb178ed
--- /dev/null
+++ b/apps/openstacknetworking/app/app.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2018-present Open Networking 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.
+  -->
+<app name="org.onosproject.openstacknetworking" origin="ON.Lab" version="${project.version}"
+     category="Utility" url="https://wiki.onosproject.org/display/ONOS/SONA%3A+DC+Network+Virtualization"
+     title="OpenStack Networking App" features="${project.artifactId}" apps="org.onosproject.openstacknode"
+     featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features">
+    <description>${project.description}</description>
+    <artifact>mvn:${project.groupId}/onos-apps-openstacknetworking-api/${project.version}</artifact>
+    <artifact>mvn:${project.groupId}/onos-apps-openstacknetworking-app/${project.version}</artifact>
+</app>
diff --git a/apps/openstacknetworking/app/features.xml b/apps/openstacknetworking/app/features.xml
new file mode 100644
index 0000000..51cb23f
--- /dev/null
+++ b/apps/openstacknetworking/app/features.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+  ~ Copyright 2018-present Open Networking 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.
+  -->
+<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}">
+    <feature name="${project.artifactId}" version="${project.version}"
+             description="${project.description}">
+        <feature>onos-api</feature>
+        <bundle>mvn:${project.groupId}/onos-apps-openstacknetworking-api/${project.version}</bundle>
+        <bundle>mvn:${project.groupId}/onos-apps-openstacknetworking-app/${project.version}</bundle>
+    </feature>
+</features>
diff --git a/apps/openstacknetworking/app/pom.xml b/apps/openstacknetworking/app/pom.xml
new file mode 100644
index 0000000..0658518
--- /dev/null
+++ b/apps/openstacknetworking/app/pom.xml
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2018-present Open Networking 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.
+  -->
+<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">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onosproject</groupId>
+        <artifactId>onos-apps-openstacknetworking</artifactId>
+        <version>1.13.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>onos-apps-openstacknetworking-app</artifactId>
+    <packaging>bundle</packaging>
+
+    <description>SONA Openstack Networking Application</description>
+
+    <properties>
+        <web.context>/onos/openstacknetworking</web.context>
+        <api.version>1.0.0</api.version>
+        <api.title>ONOS OpenStack Networking REST API</api.title>
+        <api.description>
+            APIs for interacting with OpenStack Neutron ONOS driver.
+        </api.description>
+        <api.package>org.onosproject.openstacknetworking.web</api.package>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-apps-openstacknetworking-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-core-serializers</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-cli</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.karaf.shell</groupId>
+            <artifactId>org.apache.karaf.shell.console</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.scr.annotations</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-rest</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onlab-rest</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onlab-osgi</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onlab-misc</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-core-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onlab-junit</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-api</artifactId>
+            <classifier>tests</classifier>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-core-common</artifactId>
+            <classifier>tests</classifier>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-apps-openstacknode-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.ws.rs</groupId>
+            <artifactId>javax.ws.rs-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.compendium</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.core</groupId>
+            <artifactId>jersey-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.pacesys</groupId>
+            <artifactId>openstack4j-core</artifactId>
+            <version>${openstack4j.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.pacesys.openstack4j.connectors</groupId>
+            <artifactId>openstack4j-http-connector</artifactId>
+            <version>${openstack4j.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.pacesys.openstack4j.connectors</groupId>
+            <artifactId>openstack4j-httpclient</artifactId>
+            <version>${openstack4j.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.github.fge</groupId>
+            <artifactId>json-patch</artifactId>
+            <version>${json-patch.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.github.fge</groupId>
+            <artifactId>jackson-coreutils</artifactId>
+            <version>${jackson-coreutils.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.github.fge</groupId>
+            <artifactId>btf</artifactId>
+            <version>${btf.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.github.fge</groupId>
+            <artifactId>msg-simple</artifactId>
+            <version>${msg-simple.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.yaml</groupId>
+            <artifactId>snakeyaml</artifactId>
+            <version>${snakeyaml.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.glassfish.jersey.core</groupId>
+            <artifactId>jersey-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-servlet</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework</groupId>
+            <artifactId>jersey-test-framework-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-jetty</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onlab-osgi</artifactId>
+            <classifier>tests</classifier>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-rest</artifactId>
+            <version>${project.version}</version>
+            <classifier>tests</classifier>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.onosproject</groupId>
+                <artifactId>onos-maven-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-scr-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-scr-srcdescriptor</id>
+                        <goals>
+                            <goal>scr</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <supportedProjectTypes>
+                        <supportedProjectType>bundle</supportedProjectType>
+                        <supportedProjectType>war</supportedProjectType>
+                    </supportedProjectTypes>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <_wab>src/main/webapp/</_wab>
+                        <Include-Resource>
+                            WEB-INF/classes/apidoc/swagger.json=target/swagger.json,
+                            {maven-resources}
+                        </Include-Resource>
+                        <Bundle-SymbolicName>
+                            ${project.groupId}.${project.artifactId}
+                        </Bundle-SymbolicName>
+                        <Web-ContextPath>${web.context}</Web-ContextPath>
+                        <Import-Package>
+                            !org.apache.http.*,
+                            !com.fasterxml.jackson.dataformat.*,
+                            !javax.annotation,
+                            *,org.glassfish.jersey.servlet
+                        </Import-Package>
+                        <Embed-Dependency>
+                            openstack4j-core,
+                            openstack4j-http-connector,
+                            openstack4j-httpclient,
+                            json-patch,
+                            jackson-coreutils,
+                            btf,
+                            msg-simple,
+                            snakeyaml
+                        </Embed-Dependency>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/DeleteExternalPeerRouterCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/DeleteExternalPeerRouterCommand.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/DeleteExternalPeerRouterCommand.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/DeleteExternalPeerRouterCommand.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/ExternalPeerRouterListCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/ExternalPeerRouterListCommand.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/ExternalPeerRouterListCommand.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/ExternalPeerRouterListCommand.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/IpAddressCompleter.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/IpAddressCompleter.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/IpAddressCompleter.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/IpAddressCompleter.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/MacAddressCompleter.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/MacAddressCompleter.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/MacAddressCompleter.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/MacAddressCompleter.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackFloatingIpListCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackFloatingIpListCommand.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackFloatingIpListCommand.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackFloatingIpListCommand.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackNetworkListCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackNetworkListCommand.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackNetworkListCommand.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackNetworkListCommand.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPortListCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPortListCommand.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPortListCommand.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPortListCommand.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPurgeRulesCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPurgeRulesCommand.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPurgeRulesCommand.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPurgeRulesCommand.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPurgeStateCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPurgeStateCommand.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPurgeStateCommand.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPurgeStateCommand.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackRouterListCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackRouterListCommand.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackRouterListCommand.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackRouterListCommand.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSecurityGroupListCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSecurityGroupListCommand.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSecurityGroupListCommand.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSecurityGroupListCommand.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSyncRulesCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSyncRulesCommand.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSyncRulesCommand.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSyncRulesCommand.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSyncStateCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSyncStateCommand.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSyncStateCommand.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackSyncStateCommand.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/UpdateExternalPeerRouterCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/UpdateExternalPeerRouterCommand.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/UpdateExternalPeerRouterCommand.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/UpdateExternalPeerRouterCommand.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/UpdateExternalPeerRouterVlanCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/UpdateExternalPeerRouterVlanCommand.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/UpdateExternalPeerRouterVlanCommand.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/UpdateExternalPeerRouterVlanCommand.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/VlanIdCompleter.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/VlanIdCompleter.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/VlanIdCompleter.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/VlanIdCompleter.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/package-info.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/package-info.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/cli/package-info.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/package-info.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/DefaultExternalPeerRouter.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DefaultExternalPeerRouter.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/DefaultExternalPeerRouter.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DefaultExternalPeerRouter.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackNetworkStore.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackNetworkStore.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackNetworkStore.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackNetworkStore.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackRouterStore.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackRouterStore.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackRouterStore.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackRouterStore.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/DistributedSecurityGroupStore.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedSecurityGroupStore.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/DistributedSecurityGroupStore.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedSecurityGroupStore.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/HostBasedInstancePort.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/HostBasedInstancePort.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/HostBasedInstancePort.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/HostBasedInstancePort.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/HostBasedInstancePortManager.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/HostBasedInstancePortManager.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/HostBasedInstancePortManager.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/HostBasedInstancePortManager.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackFlowRuleManager.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackFlowRuleManager.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackFlowRuleManager.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackFlowRuleManager.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManager.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManager.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManager.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManager.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRouterManager.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRouterManager.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRouterManager.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRouterManager.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingHandler.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingHandler.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingHandler.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingIcmpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingIcmpHandler.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingIcmpHandler.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingIcmpHandler.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingSnatHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingSnatHandler.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingSnatHandler.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingSnatHandler.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupHandler.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupHandler.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupHandler.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupManager.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupManager.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupManager.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupManager.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingArpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingArpHandler.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingArpHandler.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingArpHandler.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingDhcpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingDhcpHandler.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingDhcpHandler.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingDhcpHandler.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHostProvider.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHostProvider.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHostProvider.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHostProvider.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/RulePopulatorUtil.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/RulePopulatorUtil.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/RulePopulatorUtil.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/RulePopulatorUtil.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/package-info.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/package-info.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/impl/package-info.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/package-info.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/util/OpenstackUtil.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackUtil.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/util/OpenstackUtil.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackUtil.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/util/package-info.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/package-info.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/util/package-info.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/package-info.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/web/OpenstackFloatingIpWebResource.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackFloatingIpWebResource.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/web/OpenstackFloatingIpWebResource.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackFloatingIpWebResource.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/web/OpenstackNetworkWebResource.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackNetworkWebResource.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/web/OpenstackNetworkWebResource.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackNetworkWebResource.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/web/OpenstackNetworkingWebApplication.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackNetworkingWebApplication.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/web/OpenstackNetworkingWebApplication.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackNetworkingWebApplication.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResource.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResource.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResource.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResource.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/web/OpenstackRouterWebResource.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackRouterWebResource.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/web/OpenstackRouterWebResource.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackRouterWebResource.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/web/OpenstackSecurityGroupRuleWebResource.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackSecurityGroupRuleWebResource.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/web/OpenstackSecurityGroupRuleWebResource.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackSecurityGroupRuleWebResource.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/web/OpenstackSecurityGroupWebResource.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackSecurityGroupWebResource.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/web/OpenstackSecurityGroupWebResource.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackSecurityGroupWebResource.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/web/OpenstackSubnetWebResource.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackSubnetWebResource.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/web/OpenstackSubnetWebResource.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackSubnetWebResource.java
diff --git a/apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/web/package-info.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/package-info.java
similarity index 100%
rename from apps/openstacknetworking/src/main/java/org/onosproject/openstacknetworking/web/package-info.java
rename to apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/package-info.java
diff --git a/apps/openstacknetworking/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/apps/openstacknetworking/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml
similarity index 100%
rename from apps/openstacknetworking/src/main/resources/OSGI-INF/blueprint/shell-config.xml
rename to apps/openstacknetworking/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml
diff --git a/apps/openstacknetworking/src/main/resources/definitions/NeutronFloatingIp.json b/apps/openstacknetworking/app/src/main/resources/definitions/NeutronFloatingIp.json
similarity index 100%
rename from apps/openstacknetworking/src/main/resources/definitions/NeutronFloatingIp.json
rename to apps/openstacknetworking/app/src/main/resources/definitions/NeutronFloatingIp.json
diff --git a/apps/openstacknetworking/src/main/resources/definitions/NeutronNetwork.json b/apps/openstacknetworking/app/src/main/resources/definitions/NeutronNetwork.json
similarity index 100%
rename from apps/openstacknetworking/src/main/resources/definitions/NeutronNetwork.json
rename to apps/openstacknetworking/app/src/main/resources/definitions/NeutronNetwork.json
diff --git a/apps/openstacknetworking/src/main/resources/definitions/NeutronPort.json b/apps/openstacknetworking/app/src/main/resources/definitions/NeutronPort.json
similarity index 100%
rename from apps/openstacknetworking/src/main/resources/definitions/NeutronPort.json
rename to apps/openstacknetworking/app/src/main/resources/definitions/NeutronPort.json
diff --git a/apps/openstacknetworking/src/main/resources/definitions/NeutronRouter.json b/apps/openstacknetworking/app/src/main/resources/definitions/NeutronRouter.json
similarity index 100%
rename from apps/openstacknetworking/src/main/resources/definitions/NeutronRouter.json
rename to apps/openstacknetworking/app/src/main/resources/definitions/NeutronRouter.json
diff --git a/apps/openstacknetworking/src/main/resources/definitions/NeutronRouterInterface.json b/apps/openstacknetworking/app/src/main/resources/definitions/NeutronRouterInterface.json
similarity index 100%
rename from apps/openstacknetworking/src/main/resources/definitions/NeutronRouterInterface.json
rename to apps/openstacknetworking/app/src/main/resources/definitions/NeutronRouterInterface.json
diff --git a/apps/openstacknetworking/src/main/resources/definitions/NeutronSecurityGroup.json b/apps/openstacknetworking/app/src/main/resources/definitions/NeutronSecurityGroup.json
similarity index 100%
rename from apps/openstacknetworking/src/main/resources/definitions/NeutronSecurityGroup.json
rename to apps/openstacknetworking/app/src/main/resources/definitions/NeutronSecurityGroup.json
diff --git a/apps/openstacknetworking/src/main/resources/definitions/NeutronSecurityGroupRule.json b/apps/openstacknetworking/app/src/main/resources/definitions/NeutronSecurityGroupRule.json
similarity index 100%
rename from apps/openstacknetworking/src/main/resources/definitions/NeutronSecurityGroupRule.json
rename to apps/openstacknetworking/app/src/main/resources/definitions/NeutronSecurityGroupRule.json
diff --git a/apps/openstacknetworking/src/main/resources/definitions/NeutronSubnet.json b/apps/openstacknetworking/app/src/main/resources/definitions/NeutronSubnet.json
similarity index 100%
rename from apps/openstacknetworking/src/main/resources/definitions/NeutronSubnet.json
rename to apps/openstacknetworking/app/src/main/resources/definitions/NeutronSubnet.json
diff --git a/apps/openstacknetworking/src/main/resources/deps/btf-1.2.jar b/apps/openstacknetworking/app/src/main/resources/deps/btf-1.2.jar
similarity index 100%
rename from apps/openstacknetworking/src/main/resources/deps/btf-1.2.jar
rename to apps/openstacknetworking/app/src/main/resources/deps/btf-1.2.jar
Binary files differ
diff --git a/apps/openstacknetworking/src/main/resources/deps/jackson-coreutils-1.6.jar b/apps/openstacknetworking/app/src/main/resources/deps/jackson-coreutils-1.6.jar
similarity index 100%
rename from apps/openstacknetworking/src/main/resources/deps/jackson-coreutils-1.6.jar
rename to apps/openstacknetworking/app/src/main/resources/deps/jackson-coreutils-1.6.jar
Binary files differ
diff --git a/apps/openstacknetworking/src/main/resources/deps/json-patch-1.9.jar b/apps/openstacknetworking/app/src/main/resources/deps/json-patch-1.9.jar
similarity index 100%
rename from apps/openstacknetworking/src/main/resources/deps/json-patch-1.9.jar
rename to apps/openstacknetworking/app/src/main/resources/deps/json-patch-1.9.jar
Binary files differ
diff --git a/apps/openstacknetworking/src/main/resources/deps/msg-simple-1.1.jar b/apps/openstacknetworking/app/src/main/resources/deps/msg-simple-1.1.jar
similarity index 100%
rename from apps/openstacknetworking/src/main/resources/deps/msg-simple-1.1.jar
rename to apps/openstacknetworking/app/src/main/resources/deps/msg-simple-1.1.jar
Binary files differ
diff --git a/apps/openstacknetworking/src/main/resources/deps/openstack4j-core-3.1.0.jar b/apps/openstacknetworking/app/src/main/resources/deps/openstack4j-core-3.1.0.jar
similarity index 100%
rename from apps/openstacknetworking/src/main/resources/deps/openstack4j-core-3.1.0.jar
rename to apps/openstacknetworking/app/src/main/resources/deps/openstack4j-core-3.1.0.jar
Binary files differ
diff --git a/apps/openstacknetworking/src/main/resources/deps/openstack4j-http-connector-3.1.0.jar b/apps/openstacknetworking/app/src/main/resources/deps/openstack4j-http-connector-3.1.0.jar
similarity index 100%
rename from apps/openstacknetworking/src/main/resources/deps/openstack4j-http-connector-3.1.0.jar
rename to apps/openstacknetworking/app/src/main/resources/deps/openstack4j-http-connector-3.1.0.jar
Binary files differ
diff --git a/apps/openstacknetworking/src/main/resources/deps/openstack4j-httpclient-3.1.0.jar b/apps/openstacknetworking/app/src/main/resources/deps/openstack4j-httpclient-3.1.0.jar
similarity index 100%
rename from apps/openstacknetworking/src/main/resources/deps/openstack4j-httpclient-3.1.0.jar
rename to apps/openstacknetworking/app/src/main/resources/deps/openstack4j-httpclient-3.1.0.jar
Binary files differ
diff --git a/apps/openstacknetworking/src/main/resources/deps/snakeyaml-1.15.jar b/apps/openstacknetworking/app/src/main/resources/deps/snakeyaml-1.15.jar
similarity index 100%
rename from apps/openstacknetworking/src/main/resources/deps/snakeyaml-1.15.jar
rename to apps/openstacknetworking/app/src/main/resources/deps/snakeyaml-1.15.jar
Binary files differ
diff --git a/apps/openstacknetworking/src/main/webapp/WEB-INF/web.xml b/apps/openstacknetworking/app/src/main/webapp/WEB-INF/web.xml
similarity index 100%
rename from apps/openstacknetworking/src/main/webapp/WEB-INF/web.xml
rename to apps/openstacknetworking/app/src/main/webapp/WEB-INF/web.xml
diff --git a/apps/openstacknetworking/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManagerTest.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManagerTest.java
similarity index 100%
rename from apps/openstacknetworking/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManagerTest.java
rename to apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackNetworkManagerTest.java
diff --git a/apps/openstacknetworking/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackRouterManagerTest.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackRouterManagerTest.java
similarity index 100%
rename from apps/openstacknetworking/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackRouterManagerTest.java
rename to apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackRouterManagerTest.java
diff --git a/apps/openstacknetworking/src/test/java/org/onosproject/openstacknetworking/web/OpenstackFloatingIpWebResourceTest.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/web/OpenstackFloatingIpWebResourceTest.java
similarity index 100%
rename from apps/openstacknetworking/src/test/java/org/onosproject/openstacknetworking/web/OpenstackFloatingIpWebResourceTest.java
rename to apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/web/OpenstackFloatingIpWebResourceTest.java
diff --git a/apps/openstacknetworking/src/test/java/org/onosproject/openstacknetworking/web/OpenstackNetworkWebResourceTest.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/web/OpenstackNetworkWebResourceTest.java
similarity index 100%
rename from apps/openstacknetworking/src/test/java/org/onosproject/openstacknetworking/web/OpenstackNetworkWebResourceTest.java
rename to apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/web/OpenstackNetworkWebResourceTest.java
diff --git a/apps/openstacknetworking/src/test/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResourceTest.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResourceTest.java
similarity index 100%
rename from apps/openstacknetworking/src/test/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResourceTest.java
rename to apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResourceTest.java
diff --git a/apps/openstacknetworking/src/test/java/org/onosproject/openstacknetworking/web/OpenstackRouterWebResourceTest.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/web/OpenstackRouterWebResourceTest.java
similarity index 100%
rename from apps/openstacknetworking/src/test/java/org/onosproject/openstacknetworking/web/OpenstackRouterWebResourceTest.java
rename to apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/web/OpenstackRouterWebResourceTest.java
diff --git a/apps/openstacknetworking/src/test/java/org/onosproject/openstacknetworking/web/OpenstackSecurityGroupRuleWebResourceTest.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/web/OpenstackSecurityGroupRuleWebResourceTest.java
similarity index 100%
rename from apps/openstacknetworking/src/test/java/org/onosproject/openstacknetworking/web/OpenstackSecurityGroupRuleWebResourceTest.java
rename to apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/web/OpenstackSecurityGroupRuleWebResourceTest.java
diff --git a/apps/openstacknetworking/src/test/java/org/onosproject/openstacknetworking/web/OpenstackSecurityGroupWebResourceTest.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/web/OpenstackSecurityGroupWebResourceTest.java
similarity index 100%
rename from apps/openstacknetworking/src/test/java/org/onosproject/openstacknetworking/web/OpenstackSecurityGroupWebResourceTest.java
rename to apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/web/OpenstackSecurityGroupWebResourceTest.java
diff --git a/apps/openstacknetworking/src/test/java/org/onosproject/openstacknetworking/web/OpenstackSubnetWebResourceTest.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/web/OpenstackSubnetWebResourceTest.java
similarity index 100%
rename from apps/openstacknetworking/src/test/java/org/onosproject/openstacknetworking/web/OpenstackSubnetWebResourceTest.java
rename to apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/web/OpenstackSubnetWebResourceTest.java
diff --git a/apps/openstacknetworking/src/test/resources/org/onosproject/openstacknetworking/web/dummy.json b/apps/openstacknetworking/app/src/test/resources/org/onosproject/openstacknetworking/web/dummy.json
similarity index 100%
rename from apps/openstacknetworking/src/test/resources/org/onosproject/openstacknetworking/web/dummy.json
rename to apps/openstacknetworking/app/src/test/resources/org/onosproject/openstacknetworking/web/dummy.json
diff --git a/apps/openstacknetworking/src/test/resources/org/onosproject/openstacknetworking/web/openstack-floatingip.json b/apps/openstacknetworking/app/src/test/resources/org/onosproject/openstacknetworking/web/openstack-floatingip.json
similarity index 100%
rename from apps/openstacknetworking/src/test/resources/org/onosproject/openstacknetworking/web/openstack-floatingip.json
rename to apps/openstacknetworking/app/src/test/resources/org/onosproject/openstacknetworking/web/openstack-floatingip.json
diff --git a/apps/openstacknetworking/src/test/resources/org/onosproject/openstacknetworking/web/openstack-network.json b/apps/openstacknetworking/app/src/test/resources/org/onosproject/openstacknetworking/web/openstack-network.json
similarity index 100%
rename from apps/openstacknetworking/src/test/resources/org/onosproject/openstacknetworking/web/openstack-network.json
rename to apps/openstacknetworking/app/src/test/resources/org/onosproject/openstacknetworking/web/openstack-network.json
diff --git a/apps/openstacknetworking/src/test/resources/org/onosproject/openstacknetworking/web/openstack-port.json b/apps/openstacknetworking/app/src/test/resources/org/onosproject/openstacknetworking/web/openstack-port.json
similarity index 100%
rename from apps/openstacknetworking/src/test/resources/org/onosproject/openstacknetworking/web/openstack-port.json
rename to apps/openstacknetworking/app/src/test/resources/org/onosproject/openstacknetworking/web/openstack-port.json
diff --git a/apps/openstacknetworking/src/test/resources/org/onosproject/openstacknetworking/web/openstack-router-interface.json b/apps/openstacknetworking/app/src/test/resources/org/onosproject/openstacknetworking/web/openstack-router-interface.json
similarity index 100%
rename from apps/openstacknetworking/src/test/resources/org/onosproject/openstacknetworking/web/openstack-router-interface.json
rename to apps/openstacknetworking/app/src/test/resources/org/onosproject/openstacknetworking/web/openstack-router-interface.json
diff --git a/apps/openstacknetworking/src/test/resources/org/onosproject/openstacknetworking/web/openstack-router.json b/apps/openstacknetworking/app/src/test/resources/org/onosproject/openstacknetworking/web/openstack-router.json
similarity index 100%
rename from apps/openstacknetworking/src/test/resources/org/onosproject/openstacknetworking/web/openstack-router.json
rename to apps/openstacknetworking/app/src/test/resources/org/onosproject/openstacknetworking/web/openstack-router.json
diff --git a/apps/openstacknetworking/src/test/resources/org/onosproject/openstacknetworking/web/openstack-security-group-rule.json b/apps/openstacknetworking/app/src/test/resources/org/onosproject/openstacknetworking/web/openstack-security-group-rule.json
similarity index 100%
rename from apps/openstacknetworking/src/test/resources/org/onosproject/openstacknetworking/web/openstack-security-group-rule.json
rename to apps/openstacknetworking/app/src/test/resources/org/onosproject/openstacknetworking/web/openstack-security-group-rule.json
diff --git a/apps/openstacknetworking/src/test/resources/org/onosproject/openstacknetworking/web/openstack-security-group.json b/apps/openstacknetworking/app/src/test/resources/org/onosproject/openstacknetworking/web/openstack-security-group.json
similarity index 100%
rename from apps/openstacknetworking/src/test/resources/org/onosproject/openstacknetworking/web/openstack-security-group.json
rename to apps/openstacknetworking/app/src/test/resources/org/onosproject/openstacknetworking/web/openstack-security-group.json
diff --git a/apps/openstacknetworking/src/test/resources/org/onosproject/openstacknetworking/web/openstack-subnet.json b/apps/openstacknetworking/app/src/test/resources/org/onosproject/openstacknetworking/web/openstack-subnet.json
similarity index 100%
rename from apps/openstacknetworking/src/test/resources/org/onosproject/openstacknetworking/web/openstack-subnet.json
rename to apps/openstacknetworking/app/src/test/resources/org/onosproject/openstacknetworking/web/openstack-subnet.json
diff --git a/apps/openstacknetworking/openstack4j.bucklet b/apps/openstacknetworking/openstack4j.bucklet
new file mode 100644
index 0000000..6de5d52
--- /dev/null
+++ b/apps/openstacknetworking/openstack4j.bucklet
@@ -0,0 +1,41 @@
+INCLUDE_PACKAGES = 'com.google.common.net,com.google.common.io,com.fasterxml.jackson.annotation'
+EXCLUDE_PACKAGES = '!org.openstack4j,!org.openstack4j.*'
+ALL_PACKAGES = '*'
+
+def get_openstack4j_deps_path():
+
+    WEB_INF_PATH = 'WEB-INF/classes/deps/'
+    OPENSTACK4J_DEPS = [
+        'openstack4j-core',
+        'openstack4j-http-connector',
+        'openstack4j-httpclient',
+    ]
+    OPENSTACK4J_VER = '3.1.0'
+
+    openstack_deps_path = ''
+
+    for dep in OPENSTACK4J_DEPS:
+        name = dep + '-' + OPENSTACK4J_VER + '.jar'
+        path = WEB_INF_PATH + name
+        openstack_deps_path = openstack_deps_path + path + ','
+
+    return openstack_deps_path
+
+def get_jackson_deps_path():
+
+    WEB_INF_PATH = 'WEB-INF/classes/deps/'
+    JACKSON_DEPS_WITH_VER = [
+        'json-patch-1.9.jar',
+        'jackson-coreutils-1.6.jar',
+        'msg-simple-1.1.jar',
+        'btf-1.2.jar',
+        'snakeyaml-1.15.jar'
+    ]
+
+    jackson_deps_path = ''
+
+    for dep in JACKSON_DEPS_WITH_VER:
+        path = WEB_INF_PATH + dep
+        jackson_deps_path = jackson_deps_path + path + ','
+
+    return jackson_deps_path
\ No newline at end of file
diff --git a/apps/openstacknetworking/pom.xml b/apps/openstacknetworking/pom.xml
index 648d038..7956813 100644
--- a/apps/openstacknetworking/pom.xml
+++ b/apps/openstacknetworking/pom.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-  ~ Copyright 2016-present Open Networking Foundation
+  ~ Copyright 2018-present Open Networking Foundation
   ~
   ~ Licensed under the Apache License, Version 2.0 (the "License");
   ~ you may not use this file except in compliance with the License.
@@ -16,7 +16,7 @@
   -->
 <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">
+         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>
@@ -26,257 +26,22 @@
     </parent>
 
     <artifactId>onos-apps-openstacknetworking</artifactId>
-    <packaging>bundle</packaging>
+    <packaging>pom</packaging>
+
+    <description>SONA Openstack Networking Application</description>
 
     <properties>
-        <onos.app.name>org.onosproject.openstacknetworking</onos.app.name>
-        <onos.app.title>OpenStack Networking App</onos.app.title>
-        <onos.app.category>Traffic Steering</onos.app.category>
-        <onos.app.url>http://onosproject.org</onos.app.url>
-        <onos.app.readme>OpenStack networking application</onos.app.readme>
-        <onos.app.requires>
-            org.onosproject.openstacknode
-        </onos.app.requires>
-        <web.context>/onos/openstacknetworking</web.context>
-        <api.version>1.0.0</api.version>
-        <api.title>ONOS OpenStack Networking REST API</api.title>
-        <api.description>
-            APIs for interacting with OpenStack Neutron ONOS driver.
-        </api.description>
-        <api.package>org.onosproject.openstacknetworking.web</api.package>
+        <openstack4j.version>3.1.0</openstack4j.version>
+        <json-patch.version>1.9</json-patch.version>
+        <jackson-coreutils.version>1.6</jackson-coreutils.version>
+        <btf.version>1.2</btf.version>
+        <msg-simple.version>1.1</msg-simple.version>
+        <snakeyaml.version>1.15</snakeyaml.version>
     </properties>
 
-    <dependencies>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-core-serializers</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-cli</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.karaf.shell</groupId>
-            <artifactId>org.apache.karaf.shell.console</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.scr.annotations</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-rest</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onlab-rest</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onlab-osgi</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onlab-misc</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-core-common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onlab-junit</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-api</artifactId>
-            <classifier>tests</classifier>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-core-common</artifactId>
-            <classifier>tests</classifier>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-apps-openstacknode-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.ws.rs</groupId>
-            <artifactId>javax.ws.rs-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-databind</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-annotations</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.glassfish.jersey.core</groupId>
-            <artifactId>jersey-common</artifactId>
-            <version>2.25</version>
-        </dependency>
-        <dependency>
-            <groupId>org.pacesys</groupId>
-            <artifactId>openstack4j-core</artifactId>
-            <version>3.1.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.pacesys.openstack4j.connectors</groupId>
-            <artifactId>openstack4j-http-connector</artifactId>
-            <version>3.1.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.pacesys.openstack4j.connectors</groupId>
-            <artifactId>openstack4j-httpclient</artifactId>
-            <version>3.1.0</version>
-        </dependency>
-        <dependency>
-            <groupId>com.github.fge</groupId>
-            <artifactId>json-patch</artifactId>
-            <version>1.9</version>
-        </dependency>
-        <dependency>
-            <groupId>com.github.fge</groupId>
-            <artifactId>jackson-coreutils</artifactId>
-            <version>1.6</version>
-        </dependency>
-        <dependency>
-            <groupId>com.github.fge</groupId>
-            <artifactId>btf</artifactId>
-            <version>1.2</version>
-        </dependency>
-        <dependency>
-            <groupId>com.github.fge</groupId>
-            <artifactId>msg-simple</artifactId>
-            <version>1.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.yaml</groupId>
-            <artifactId>snakeyaml</artifactId>
-            <version>1.15</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.glassfish.jersey.core</groupId>
-            <artifactId>jersey-client</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.glassfish.jersey.containers</groupId>
-            <artifactId>jersey-container-servlet</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.glassfish.jersey.test-framework</groupId>
-            <artifactId>jersey-test-framework-core</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-jetty</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onlab-osgi</artifactId>
-            <classifier>tests</classifier>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-rest</artifactId>
-            <version>${project.version}</version>
-            <classifier>tests</classifier>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.onosproject</groupId>
-                <artifactId>onos-maven-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-scr-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>generate-scr-srcdescriptor</id>
-                        <goals>
-                            <goal>scr</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <supportedProjectTypes>
-                        <supportedProjectType>bundle</supportedProjectType>
-                        <supportedProjectType>war</supportedProjectType>
-                    </supportedProjectTypes>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <_wab>src/main/webapp/</_wab>
-                        <Include-Resource>
-                            WEB-INF/classes/apidoc/swagger.json=target/swagger.json,
-                            {maven-resources}
-                        </Include-Resource>
-                        <Bundle-SymbolicName>
-                            ${project.groupId}.${project.artifactId}
-                        </Bundle-SymbolicName>
-                        <Web-ContextPath>${web.context}</Web-ContextPath>
-                        <Import-Package>
-                            !org.apache.http.*,
-                            !com.fasterxml.jackson.dataformat.*,
-                            !javax.annotation,
-                            *,org.glassfish.jersey.servlet
-                        </Import-Package>
-                        <Embed-Dependency>
-                            openstack4j-core,
-                            openstack4j-http-connector,
-                            openstack4j-httpclient,
-                            json-patch,
-                            jackson-coreutils,
-                            btf,
-                            msg-simple,
-                            snakeyaml
-                        </Embed-Dependency>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
+    <modules>
+        <module>api</module>
+        <module>app</module>
+    </modules>
 
 </project>