[ONOS-4513] Slice optical-model into separate bundle (1/3)

- net and cli bundle has dependency to optical-model bundle,
  which should be removed in the longer run. (ONOS-4626)

Change-Id: Ieff43ef2002ee21f4578a6e2a729cd35ce3eae3d
diff --git a/apps/newoptical/BUCK b/apps/newoptical/BUCK
index db15c64..ac24ee1 100644
--- a/apps/newoptical/BUCK
+++ b/apps/newoptical/BUCK
@@ -3,6 +3,7 @@
   '//core/store/serializers:onos-core-serializers',
   '//lib:org.apache.karaf.shell.console',
   '//cli:onos-cli',
+  '//apps/optical-model:onos-apps-optical-model',
 ]
 
 TEST_DEPS = [
@@ -19,4 +20,5 @@
   category = 'Traffic Steering',
   url = 'http://onosproject.org',
   description = 'Packet/Optical use-case application.',
+  required_apps = [ 'org.onosproject.optical-model' ],
 )
diff --git a/apps/newoptical/pom.xml b/apps/newoptical/pom.xml
index 13821f7..9eb579c 100644
--- a/apps/newoptical/pom.xml
+++ b/apps/newoptical/pom.xml
@@ -32,9 +32,13 @@
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <onos.app.name>org.onosproject.newoptical</onos.app.name>
+        <onos.app.title>Packet/Optical Use-Case App</onos.app.title>
         <onos.app.category>Traffic Steering</onos.app.category>
         <onos.app.url>https://wiki.onosproject.org/display/ONOS/Packet+Optical+Convergence</onos.app.url>
         <onos.app.origin>ON.Lab</onos.app.origin>
+        <onos.app.requires>
+            org.onosproject.optical-model
+        </onos.app.requires>
     </properties>
 
     <dependencies>
@@ -46,6 +50,12 @@
 
         <dependency>
             <groupId>org.onosproject</groupId>
+            <artifactId>onos-optical-model</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
             <artifactId>onos-core-dist</artifactId>
             <version>${project.version}</version>
         </dependency>
diff --git a/apps/optical-model/BUCK b/apps/optical-model/BUCK
new file mode 100644
index 0000000..cf06443
--- /dev/null
+++ b/apps/optical-model/BUCK
@@ -0,0 +1,26 @@
+COMPILE_DEPS = [
+    '//lib:CORE_DEPS',
+    '//incubator/api:onos-incubator-api',
+]
+
+TEST_DEPS = [
+    '//lib:TEST',
+]
+
+
+osgi_jar_with_tests (
+    deps = COMPILE_DEPS,
+    test_deps = TEST_DEPS,
+)
+
+onos_app (
+    app_name = 'org.onosproject.optical-model',
+    # Is there a way to change BUCK target name properly?
+    #name = 'onos-optical-model',
+    feature_coords = 'org.onosproject:onos-optical-model:%s' % (ONOS_VERSION),
+    title = 'Optical information model',
+    category = 'Optical',
+    url = 'https://wiki.onosproject.org/x/C4m',
+    description = 'ONOS optical information model.',
+    required_apps = [ ],
+)
diff --git a/apps/optical-model/features.xml b/apps/optical-model/features.xml
new file mode 100644
index 0000000..c16534a
--- /dev/null
+++ b/apps/optical-model/features.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+  ~ Copyright 2016-present Open Networking Laboratory
+  ~
+  ~ 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.1" name="${project.artifactId}-${project.version}">
+    <feature name="${project.artifactId}" version="${project.version}"
+             description="${project.description}">
+        <feature>onos-api</feature>
+        <bundle>mvn:${project.groupId}/${project.artifactId}/${project.version}</bundle>
+    </feature>
+</features>
diff --git a/apps/optical-model/pom.xml b/apps/optical-model/pom.xml
new file mode 100644
index 0000000..90fd800
--- /dev/null
+++ b/apps/optical-model/pom.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2016-present Open Networking Laboratory
+  ~
+  ~ 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">
+    <parent>
+        <artifactId>onos-apps</artifactId>
+        <groupId>org.onosproject</groupId>
+        <version>1.7.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>onos-optical-model</artifactId>
+    <packaging>bundle</packaging>
+
+    <description>ONOS Optical Model extensions</description>
+
+    <properties>
+        <onos.app.name>org.onosproject.optical-model</onos.app.name>
+        <onos.app.origin>ON.Lab</onos.app.origin>
+        <onos.app.category>Optical</onos.app.category>
+        <onos.app.title>Optical information model</onos.app.title>
+        <onos.app.url>https://wiki.onosproject.org/x/C4m</onos.app.url>
+        <onos.app.requires>
+        </onos.app.requires>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-api</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onlab-junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava-testlib</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+    </dependencies>
+</project>
diff --git a/core/api/src/main/java/org/onosproject/net/optical/DefaultOpticalDevice.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/DefaultOpticalDevice.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/DefaultOpticalDevice.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/DefaultOpticalDevice.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/OchPort.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/OchPort.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/OchPort.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/OchPort.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/OduCltPort.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/OduCltPort.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/OduCltPort.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/OduCltPort.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/OmsPort.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/OmsPort.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/OmsPort.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/OmsPort.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/OpticalDevice.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/OpticalDevice.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/OpticalDevice.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/OpticalDevice.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/OtuPort.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/OtuPort.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/OtuPort.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/OtuPort.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/device/OchPortHelper.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OchPortHelper.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/device/OchPortHelper.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/device/OchPortHelper.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/device/OduCltPortHelper.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OduCltPortHelper.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/device/OduCltPortHelper.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/device/OduCltPortHelper.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/device/OmsPortHelper.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OmsPortHelper.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/device/OmsPortHelper.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/device/OmsPortHelper.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/device/OpticalDeviceServiceView.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OpticalDeviceServiceView.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/device/OpticalDeviceServiceView.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/device/OpticalDeviceServiceView.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/device/OtuPortHelper.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OtuPortHelper.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/device/OtuPortHelper.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/device/OtuPortHelper.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/device/package-info.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/package-info.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/device/package-info.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/device/package-info.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/device/port/AbstractPortMapper.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/port/AbstractPortMapper.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/device/port/AbstractPortMapper.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/device/port/AbstractPortMapper.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/device/port/IdentityMapper.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/port/IdentityMapper.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/device/port/IdentityMapper.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/device/port/IdentityMapper.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/device/port/OchPortMapper.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/port/OchPortMapper.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/device/port/OchPortMapper.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/device/port/OchPortMapper.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/device/port/OduCltPortMapper.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/port/OduCltPortMapper.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/device/port/OduCltPortMapper.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/device/port/OduCltPortMapper.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/device/port/OmsPortMapper.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/port/OmsPortMapper.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/device/port/OmsPortMapper.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/device/port/OmsPortMapper.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/device/port/OtuPortMapper.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/port/OtuPortMapper.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/device/port/OtuPortMapper.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/device/port/OtuPortMapper.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/device/port/PortMapper.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/port/PortMapper.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/device/port/PortMapper.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/device/port/PortMapper.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/device/port/package-info.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/port/package-info.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/device/port/package-info.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/device/port/package-info.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/impl/DefaultOchPort.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/impl/DefaultOchPort.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/impl/DefaultOchPort.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/impl/DefaultOchPort.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/impl/DefaultOduCltPort.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/impl/DefaultOduCltPort.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/impl/DefaultOduCltPort.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/impl/DefaultOduCltPort.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/impl/DefaultOmsPort.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/impl/DefaultOmsPort.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/impl/DefaultOmsPort.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/impl/DefaultOmsPort.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/impl/DefaultOtuPort.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/impl/DefaultOtuPort.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/impl/DefaultOtuPort.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/impl/DefaultOtuPort.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/impl/package-info.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/impl/package-info.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/impl/package-info.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/impl/package-info.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/json/OchSignalCodec.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/json/OchSignalCodec.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/json/OchSignalCodec.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/json/OchSignalCodec.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/json/package-info.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/json/package-info.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/json/package-info.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/json/package-info.java
diff --git a/core/api/src/main/java/org/onosproject/net/optical/package-info.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/package-info.java
similarity index 100%
rename from core/api/src/main/java/org/onosproject/net/optical/package-info.java
rename to apps/optical-model/src/main/java/org/onosproject/net/optical/package-info.java
diff --git a/core/api/src/test/java/org/onosproject/net/optical/device/OmsPortHelperTest.java b/apps/optical-model/src/test/java/org/onosproject/net/optical/device/OmsPortHelperTest.java
similarity index 100%
rename from core/api/src/test/java/org/onosproject/net/optical/device/OmsPortHelperTest.java
rename to apps/optical-model/src/test/java/org/onosproject/net/optical/device/OmsPortHelperTest.java
diff --git a/core/api/src/test/java/org/onosproject/net/optical/impl/DefaultOmsPortTest.java b/apps/optical-model/src/test/java/org/onosproject/net/optical/impl/DefaultOmsPortTest.java
similarity index 100%
rename from core/api/src/test/java/org/onosproject/net/optical/impl/DefaultOmsPortTest.java
rename to apps/optical-model/src/test/java/org/onosproject/net/optical/impl/DefaultOmsPortTest.java
diff --git a/apps/optical/BUCK b/apps/optical/BUCK
index 49a3743..c70cbb8 100644
--- a/apps/optical/BUCK
+++ b/apps/optical/BUCK
@@ -1,5 +1,6 @@
 COMPILE_DEPS = [
     '//lib:CORE_DEPS',
+    '//apps/optical-model:onos-apps-optical-model',
 ]
 
 osgi_jar_with_tests (
@@ -11,4 +12,5 @@
     category = 'Traffic Steering',
     url = 'http://onosproject.org',
     description = 'Packet/Optical use-case application.',
+    required_apps = [ 'org.onosproject.optical-model' ],
 )
diff --git a/apps/optical/pom.xml b/apps/optical/pom.xml
index 08d0937..afda139 100644
--- a/apps/optical/pom.xml
+++ b/apps/optical/pom.xml
@@ -36,11 +36,19 @@
         <onos.app.category>Traffic Steering</onos.app.category>
         <onos.app.url>http://onosproject.org</onos.app.url>
         <onos.app.readme>Packet/Optical use-case application.</onos.app.readme>
+        <onos.app.requires>
+            org.onosproject.optical-model
+        </onos.app.requires>
     </properties>
 
     <dependencies>
         <dependency>
             <groupId>org.onosproject</groupId>
+            <artifactId>onos-optical-model</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
             <artifactId>onos-cli</artifactId>
             <version>${project.version}</version>
         </dependency>
diff --git a/apps/pom.xml b/apps/pom.xml
index 887199f..fdc7e53 100644
--- a/apps/pom.xml
+++ b/apps/pom.xml
@@ -34,6 +34,7 @@
         <module>mobility</module>
         <module>proxyarp</module>
         <module>sdnip</module>
+        <module>optical-model</module>
         <module>optical</module>
         <module>newoptical</module>
         <module>metrics</module>
diff --git a/cli/BUCK b/cli/BUCK
index d00ee98..d9dc9e6 100644
--- a/cli/BUCK
+++ b/cli/BUCK
@@ -5,6 +5,8 @@
     '//incubator/net:onos-incubator-net',
     '//utils/rest:onlab-rest',
     '//core/common:onos-core-common',
+    # TODO Remove after decoupling optical
+    '//apps/optical-model:onos-apps-optical-model',
 ]
 
 osgi_jar (
diff --git a/cli/pom.xml b/cli/pom.xml
index 76d69fa..28579c3 100644
--- a/cli/pom.xml
+++ b/cli/pom.xml
@@ -49,6 +49,13 @@
             <artifactId>onos-core-common</artifactId>
         </dependency>
 
+        <!-- TODO Remove after decoupling optical -->
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-optical-model</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
diff --git a/core/net/BUCK b/core/net/BUCK
index fa93865..25db0df 100644
--- a/core/net/BUCK
+++ b/core/net/BUCK
@@ -4,6 +4,8 @@
     '//utils/rest:onlab-rest',
     '//incubator/net:onos-incubator-net',
     '//incubator/store:onos-incubator-store',
+    # TODO Remove after decoupling optical
+    '//apps/optical-model:onos-apps-optical-model',
 ]
 
 TEST_DEPS = [
@@ -19,4 +21,4 @@
     deps = COMPILE_DEPS,
     test_deps = TEST_DEPS,
     visibility = ['PUBLIC'],
-)
\ No newline at end of file
+)
diff --git a/core/net/pom.xml b/core/net/pom.xml
index 1d3650b..428ec4d 100644
--- a/core/net/pom.xml
+++ b/core/net/pom.xml
@@ -104,6 +104,16 @@
             <artifactId>onos-incubator-api</artifactId>
         </dependency>
 
+        <!-- TODO Remove after decoupling optical -->
+        <!-- - DeviceManager.InternalDeviceProviderService#ensureGeneric -->
+        <!-- - OpticalCompilers x4 -->
+        <!-- - OpticalPortOperator -->
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-optical-model</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
         <dependency>
             <groupId>org.apache.karaf.features</groupId>
             <artifactId>org.apache.karaf.features.core</artifactId>
diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
index 8e09e8e..23aba6a 100644
--- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
+++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
@@ -569,6 +569,7 @@
                 case VIRTUAL:
                     return desc;
                 default:
+                    // TODO: add plugin mechanism in order to decouple this
                     OpticalPortConfig opc = networkConfigService.getConfig(
                             new ConnectPoint(did, desc.portNumber()), OpticalPortConfig.class);
                     return OpticalPortOperator.combine(opc, desc);
diff --git a/drivers/ciena/BUCK b/drivers/ciena/BUCK
index 57e0ff6..5eba907 100644
--- a/drivers/ciena/BUCK
+++ b/drivers/ciena/BUCK
@@ -4,6 +4,7 @@
     '//utils/rest:onlab-rest',
     '//drivers/utilities:onos-drivers-utilities',
     '//protocols/rest/api:onos-protocols-rest-api',
+    '//apps/optical-model:onos-apps-optical-model',
 ]
 
 TEST_DEPS = [
@@ -30,5 +31,5 @@
     url = 'http://onosproject.org',
     description = 'ONOS Ciena Device Drivers application.',
     included_bundles = BUNDLES,
-    required_apps = [ 'org.onosproject.restsb' ],
+    required_apps = [ 'org.onosproject.restsb', 'org.onosproject.optical-model' ],
 )
diff --git a/drivers/ciena/pom.xml b/drivers/ciena/pom.xml
index fb43a4e..4d571e3 100644
--- a/drivers/ciena/pom.xml
+++ b/drivers/ciena/pom.xml
@@ -37,13 +37,20 @@
         <onos.app.category>Drivers</onos.app.category>
         <onos.app.url>http://onosproject.org</onos.app.url>
         <onos.app.requires>
-            org.onosproject.restsb
+            org.onosproject.restsb,
+            org.onosproject.optical-model
         </onos.app.requires>
     </properties>
 
     <dependencies>
         <dependency>
             <groupId>org.onosproject</groupId>
+            <artifactId>onos-optical-model</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
             <artifactId>onos-drivers-utilities</artifactId>
             <version>${project.version}</version>
         </dependency>
@@ -54,4 +61,4 @@
         </dependency>
     </dependencies>
 
-</project>
\ No newline at end of file
+</project>
diff --git a/drivers/fujitsu/BUCK b/drivers/fujitsu/BUCK
index 4890811..2ab5166 100644
--- a/drivers/fujitsu/BUCK
+++ b/drivers/fujitsu/BUCK
@@ -4,6 +4,7 @@
     '//protocols/netconf/api:onos-protocols-netconf-api',
     '//lib:org.apache.karaf.shell.console',
     '//cli:onos-cli',
+    '//apps/optical-model:onos-apps-optical-model',
 ]
 
 TEST_DEPS = [
@@ -30,5 +31,5 @@
     url = 'http://onosproject.org',
     description = 'ONOS Fujitsu device drivers application.',
     included_bundles = BUNDLES,
-    required_apps = [ 'org.onosproject.netconf' ],
+    required_apps = [ 'org.onosproject.netconf', 'org.onosproject.optical-model' ],
 )
diff --git a/drivers/fujitsu/pom.xml b/drivers/fujitsu/pom.xml
index 323c51e..431ef9f 100644
--- a/drivers/fujitsu/pom.xml
+++ b/drivers/fujitsu/pom.xml
@@ -37,13 +37,20 @@
         <onos.app.title>Fujitsu Device Drivers</onos.app.title>
         <onos.app.url>http://onosproject.org</onos.app.url>
         <onos.app.requires>
-            org.onosproject.netconf
+            org.onosproject.netconf,
+            org.onosproject.optical-model
         </onos.app.requires>
     </properties>
 
     <dependencies>
         <dependency>
             <groupId>org.onosproject</groupId>
+            <artifactId>onos-optical-model</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
             <artifactId>onos-netconf-api</artifactId>
             <version>${project.version}</version>
         </dependency>
@@ -64,4 +71,4 @@
         </dependency>
     </dependencies>
 
-</project>
\ No newline at end of file
+</project>
diff --git a/drivers/lumentum/BUCK b/drivers/lumentum/BUCK
index 0025279..0feb6ee 100644
--- a/drivers/lumentum/BUCK
+++ b/drivers/lumentum/BUCK
@@ -4,6 +4,7 @@
     '//drivers/utilities:onos-drivers-utilities',
     '//protocols/snmp/api:onos-protocols-snmp-api',
     '//incubator/api:onos-incubator-api',
+    '//apps/optical-model:onos-apps-optical-model',
 ]
 
 TEST_DEPS = [
@@ -24,5 +25,5 @@
     category = 'Drivers',
     url = 'http://onosproject.org',
     description = 'ONOS Lumentum Device Drivers application.',
-    required_apps = [ 'org.onosproject.snmp', 'org.onosproject.faultmanagement' ],
+    required_apps = [ 'org.onosproject.snmp', 'org.onosproject.faultmanagement', 'org.onosproject.optical-model' ],
 )
diff --git a/drivers/lumentum/pom.xml b/drivers/lumentum/pom.xml
index 22b0ea6..9a2c4eb 100644
--- a/drivers/lumentum/pom.xml
+++ b/drivers/lumentum/pom.xml
@@ -37,12 +37,19 @@
         <onos.app.url>http://onosproject.org</onos.app.url>
         <onos.app.requires>
             org.onosproject.snmp,
-            org.onosproject.faultmanagement
+            org.onosproject.faultmanagement,
+            org.onosproject.optical-model
         </onos.app.requires>
     </properties>
 
     <dependencies>
         <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-optical-model</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
             <groupId>org.apache.servicemix.bundles</groupId>
             <artifactId>org.apache.servicemix.bundles.snmp4j</artifactId>
             <version>2.3.4_1</version>
@@ -53,4 +60,4 @@
             <version>${project.version}</version>
         </dependency>
     </dependencies>
-</project>
\ No newline at end of file
+</project>
diff --git a/drivers/optical/BUCK b/drivers/optical/BUCK
index 4519263..3515382 100644
--- a/drivers/optical/BUCK
+++ b/drivers/optical/BUCK
@@ -3,6 +3,7 @@
     '//lib:openflowj',
     '//protocols/openflow/api:onos-protocols-openflow-api',
     '//drivers/default:onos-drivers-default',
+    '//apps/optical-model:onos-apps-optical-model',
 ]
 
 TEST_DEPS = [
@@ -23,5 +24,5 @@
     category = 'Drivers',
     url = 'http://onosproject.org',
     description = 'ONOS other optical Device Drivers application.',
-    required_apps = [ 'org.onosproject.drivers' ],
+    required_apps = [ 'org.onosproject.drivers', 'org.onosproject.optical-model' ],
 )
diff --git a/drivers/optical/pom.xml b/drivers/optical/pom.xml
index 64e7153..ebcee1c 100644
--- a/drivers/optical/pom.xml
+++ b/drivers/optical/pom.xml
@@ -37,11 +37,17 @@
         <onos.app.title>Other optical Device Drivers</onos.app.title>
         <onos.app.url>http://onosproject.org</onos.app.url>
         <onos.app.requires>
-            org.onosproject.drivers
+            org.onosproject.drivers,
+            org.onosproject.optical-model
         </onos.app.requires>
     </properties>
 
     <dependencies>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-optical-model</artifactId>
+            <version>${project.version}</version>
+        </dependency>
 
         <dependency>
             <groupId>org.onosproject</groupId>
diff --git a/drivers/utilities/pom.xml b/drivers/utilities/pom.xml
index 10881f9..ef1b012 100644
--- a/drivers/utilities/pom.xml
+++ b/drivers/utilities/pom.xml
@@ -30,4 +30,4 @@
     <artifactId>onos-drivers-utilities</artifactId>
     <packaging>bundle</packaging>
 
-</project>
\ No newline at end of file
+</project>
diff --git a/features/BUCK b/features/BUCK
index d249509..ec2fd10 100644
--- a/features/BUCK
+++ b/features/BUCK
@@ -128,6 +128,8 @@
   required_features = ['onos-api'],
   included_bundles = [
     '//cli:onos-cli',
+    # TODO Remove after decoupling optical
+    '//apps/optical-model:onos-apps-optical-model',
   ]
 )
 
diff --git a/features/features.xml b/features/features.xml
index 807b85a..19cb7db 100644
--- a/features/features.xml
+++ b/features/features.xml
@@ -142,6 +142,8 @@
              description="ONOS admin command console components">
         <feature>onos-api</feature>
         <bundle>mvn:org.onosproject/onos-cli/@ONOS-VERSION</bundle>
+        <!-- TODO Remove after decoupling optical -->
+        <bundle>mvn:org.onosproject/onos-optical-model/@ONOS-VERSION</bundle>
     </feature>
 
     <feature name="onos-security" version="@FEATURE-VERSION"
diff --git a/modules.defs b/modules.defs
index 1e6b26a..a258519 100644
--- a/modules.defs
+++ b/modules.defs
@@ -127,6 +127,7 @@
     '//apps/mobility:onos-apps-mobility-oar',
     '//apps/optical:onos-apps-optical-oar',
     '//apps/newoptical:onos-apps-newoptical-oar',
+    '//apps/optical-model:onos-apps-optical-model-oar',
     '//apps/pathpainter:onos-apps-pathpainter-oar',
     '//apps/pcep-api:onos-apps-pcep-api-oar',
     '//apps/pim:onos-apps-pim-oar',
diff --git a/providers/openflow/device/BUCK b/providers/openflow/device/BUCK
index b498b34..4d9269c 100644
--- a/providers/openflow/device/BUCK
+++ b/providers/openflow/device/BUCK
@@ -2,6 +2,7 @@
     '//lib:CORE_DEPS',
     '//lib:openflowj',
     '//protocols/openflow/api:onos-protocols-openflow-api',
+    '//apps/optical-model:onos-apps-optical-model',
 ]
 
 TEST_DEPS = [
diff --git a/providers/openflow/device/pom.xml b/providers/openflow/device/pom.xml
index 45ac621..624d89c 100644
--- a/providers/openflow/device/pom.xml
+++ b/providers/openflow/device/pom.xml
@@ -31,6 +31,12 @@
     <description>ONOS OpenFlow protocol device provider</description>
     <dependencies>
         <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-optical-model</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.compendium</artifactId>
         </dependency>
diff --git a/web/api/BUCK b/web/api/BUCK
index f74f488..f3de3a0 100644
--- a/web/api/BUCK
+++ b/web/api/BUCK
@@ -14,4 +14,4 @@
     deps = COMPILE_DEPS,
     test_deps = TEST_DEPS,
     web_context = '/onos/v1',
-)
\ No newline at end of file
+)