[ONOS-7885] Adding Terminal_device device Type

Change-Id: I42a8f8aeef73e1d51d4b5128b9eb7e8879d0418c
diff --git a/apps/newoptical/src/main/java/org/onosproject/newoptical/OpticalPathProvisioner.java b/apps/newoptical/src/main/java/org/onosproject/newoptical/OpticalPathProvisioner.java
index f39b01a..abedb45 100644
--- a/apps/newoptical/src/main/java/org/onosproject/newoptical/OpticalPathProvisioner.java
+++ b/apps/newoptical/src/main/java/org/onosproject/newoptical/OpticalPathProvisioner.java
@@ -563,11 +563,11 @@
      * Verifies if given device type is NOT in packet layer, i.e., switch or router device.
      *
      * @param type device type
-     * @return true if in packet layer, false otherwise
+     * @return true if in optical layer, false otherwise
      */
     private boolean isTransportLayer(Device.Type type) {
         return type == Device.Type.ROADM || type == Device.Type.OTN || type == Device.Type.ROADM_OTN ||
-                type == Device.Type.OLS;
+                type == Device.Type.OLS ||  type == Device.Type.TERMINAL_DEVICE;
     }
 
     /**
diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/util/OpticalIntentUtility.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/util/OpticalIntentUtility.java
index 758db56..4a6af72 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/util/OpticalIntentUtility.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/util/OpticalIntentUtility.java
@@ -34,6 +34,7 @@
 import org.onosproject.net.intent.OpticalOduIntent;
 import org.onosproject.net.optical.OchPort;
 
+import static org.onosproject.net.Device.Type;
 import static org.onosproject.net.optical.device.OpticalDeviceServiceView.opticalView;
 
 import org.slf4j.Logger;
@@ -90,9 +91,9 @@
             }
 
             CltSignalType signalType = ((OduCltPort) srcPort).signalType();
-            if (Device.Type.ROADM.equals(srcDevice.type()) ||
-                    Device.Type.ROADM_OTN.equals(srcDevice.type()) ||
-                    Device.Type.OLS.equals(srcDevice.type())) {
+            if (Type.ROADM.equals(srcDevice.type()) ||
+                    Type.ROADM_OTN.equals(srcDevice.type()) ||
+                    Type.OLS.equals(srcDevice.type())) {
                 intent = OpticalCircuitIntent.builder()
                         .appId(appId)
                         .key(key)
@@ -101,7 +102,7 @@
                         .signalType(signalType)
                         .bidirectional(bidirectional)
                         .build();
-            } else if (Device.Type.OTN.equals(srcDevice.type())) {
+            } else if (Type.OTN.equals(srcDevice.type()) || Type.TERMINAL_DEVICE.equals(srcDevice.type())) {
                 intent = OpticalOduIntent.builder()
                         .appId(appId)
                         .key(key)
@@ -173,9 +174,9 @@
             }
 
             CltSignalType signalType = ((OduCltPort) srcPort).signalType();
-            if (Device.Type.ROADM.equals(srcDevice.type()) ||
-                    Device.Type.ROADM_OTN.equals(srcDevice.type()) ||
-                    Device.Type.OLS.equals(srcDevice.type())) {
+            if (Type.ROADM.equals(srcDevice.type()) ||
+                    Type.ROADM_OTN.equals(srcDevice.type()) ||
+                    Type.OLS.equals(srcDevice.type())) {
                 intent = OpticalCircuitIntent.builder()
                         .appId(appId)
                         .key(key)
@@ -184,7 +185,7 @@
                         .signalType(signalType)
                         .bidirectional(bidirectional)
                         .build();
-            } else if (Device.Type.OTN.equals(srcDevice.type())) {
+            } else if (Type.OTN.equals(srcDevice.type()) || Type.TERMINAL_DEVICE.equals(srcDevice.type())) {
                 intent = OpticalOduIntent.builder()
                         .appId(appId)
                         .key(key)
diff --git a/core/api/src/main/java/org/onosproject/net/Device.java b/core/api/src/main/java/org/onosproject/net/Device.java
index da9a72e..e0a3d69 100644
--- a/core/api/src/main/java/org/onosproject/net/Device.java
+++ b/core/api/src/main/java/org/onosproject/net/Device.java
@@ -27,7 +27,8 @@
      */
     enum Type {
         SWITCH, ROUTER, ROADM, OTN, ROADM_OTN, FIREWALL, BALANCER, IPS, IDS, CONTROLLER,
-        VIRTUAL, FIBER_SWITCH, MICROWAVE, OLT, ONU, OPTICAL_AMPLIFIER, OLS, OTHER, SERVER
+        VIRTUAL, FIBER_SWITCH, MICROWAVE, OLT, ONU, OPTICAL_AMPLIFIER, OLS, TERMINAL_DEVICE,
+        OTHER, SERVER
     }
 
     /**
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 513e648..0f0069e 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
@@ -707,8 +707,8 @@
                 log.trace("Device not found: {}", deviceId);
                 return;
             }
-            if ((Device.Type.ROADM.equals(device.type())) ||
-                    (Device.Type.OTN.equals(device.type())) || (Device.Type.OLS.equals(device.type()))) {
+            if ((Type.ROADM.equals(device.type())) || (Type.OTN.equals(device.type())) ||
+                    (Type.OLS.equals(device.type())) || (Type.TERMINAL_DEVICE.equals(device.type()))) {
                 // FIXME This is ignoring all other info in portDescription given as input??
                 PortDescription storedPortDesc = store.getPortDescription(provider().id(),
                                                                           deviceId,
diff --git a/core/protobuf/models/proto/net/device/DeviceEnumsProto.proto b/core/protobuf/models/proto/net/device/DeviceEnumsProto.proto
index aaecef0..e74503c 100644
--- a/core/protobuf/models/proto/net/device/DeviceEnumsProto.proto
+++ b/core/protobuf/models/proto/net/device/DeviceEnumsProto.proto
@@ -34,6 +34,7 @@
     FIBER_SWITCH = 12;
     MICROWAVE = 13;
     OLS = 14;
+    TERMINAL_DEVICE = 15;
 }
 
 enum DeviceEventTypeProto {
diff --git a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/CassiniTerminalDeviceDiscovery.java b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/CassiniTerminalDeviceDiscovery.java
index ca7fbc2..acb6c4a 100644
--- a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/CassiniTerminalDeviceDiscovery.java
+++ b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/CassiniTerminalDeviceDiscovery.java
@@ -140,7 +140,7 @@
     @Override
     public DeviceDescription discoverDeviceDetails() {
         return new DefaultDeviceDescription(handler().data().deviceId().uri(),
-                                            Device.Type.OTN,
+                                            Device.Type.TERMINAL_DEVICE,
                                             "EDGECORE",
                                             "Cassini",
                                             "OcNOS",
diff --git a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/InfineraOpenConfigDeviceDiscovery.java b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/InfineraOpenConfigDeviceDiscovery.java
index 55eb6c7..e137b92 100644
--- a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/InfineraOpenConfigDeviceDiscovery.java
+++ b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/InfineraOpenConfigDeviceDiscovery.java
@@ -64,7 +64,7 @@
     @Override
     public DeviceDescription discoverDeviceDetails() {
         return new DefaultDeviceDescription(handler().data().deviceId().uri(),
-                Device.Type.OTN, "Infinera", "XT-3300",
+                Device.Type.TERMINAL_DEVICE, "Infinera", "XT-3300",
                 "unknown", "unknown", new ChassisId());
     }
 
diff --git a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/OpenConfigDeviceDiscovery.java b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/OpenConfigDeviceDiscovery.java
index fa5b14e..086c5ab 100644
--- a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/OpenConfigDeviceDiscovery.java
+++ b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/OpenConfigDeviceDiscovery.java
@@ -64,7 +64,7 @@
     @Override
     public DeviceDescription discoverDeviceDetails() {
         return new DefaultDeviceDescription(handler().data().deviceId().uri(),
-                Device.Type.OTN, "unknown", "unknown",
+                Device.Type.TERMINAL_DEVICE, "unknown", "unknown",
                 "unknown", "unknown", new ChassisId());
     }
 
diff --git a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/openconfig/TerminalDeviceDiscovery.java b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/openconfig/TerminalDeviceDiscovery.java
index b65f15c..36926e8 100644
--- a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/openconfig/TerminalDeviceDiscovery.java
+++ b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/openconfig/TerminalDeviceDiscovery.java
@@ -257,7 +257,7 @@
 
         // Other option "OTHER", we use ROADM for now
         org.onosproject.net.Device.Type type =
-            org.onosproject.net.Device.Type.ROADM;
+            Device.Type.TERMINAL_DEVICE;
 
         // Some defaults
         String vendor       = "NOVENDOR";
diff --git a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LldpLinkProvider.java b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LldpLinkProvider.java
index 4f44307..768c207 100644
--- a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LldpLinkProvider.java
+++ b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LldpLinkProvider.java
@@ -189,7 +189,8 @@
                                           Device.Type.FIBER_SWITCH,
                                           Device.Type.OPTICAL_AMPLIFIER,
                                           Device.Type.OTN,
-                                          Device.Type.OLS),
+                                          Device.Type.OLS,
+                                          Device.Type.TERMINAL_DEVICE),
                                ImmutableMap.of(NO_LLDP, SuppressionRules.ANY_VALUE));
 
     private SuppressionRules rules = LldpLinkProvider.DEFAULT_RULES;
diff --git a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProvider.java b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProvider.java
index 0767230..ca34e10 100644
--- a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProvider.java
+++ b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProvider.java
@@ -121,7 +121,9 @@
             ImmutableSet.copyOf(EnumSet.of(Device.Type.ROADM,
                                            Device.Type.ROADM_OTN,
                                            Device.Type.FIBER_SWITCH,
-                                           Device.Type.OTN));
+                                           Device.Type.OTN,
+                                           Device.Type.OLS,
+                                           Device.Type.TERMINAL_DEVICE));
 
     /**
      * Creates a OpenFlow meter provider.
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java
index 021e4e1..5f30bf8 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java
@@ -775,14 +775,16 @@
         // Send optical first, others later for layered rendering
         for (Device device : services.device().getDevices()) {
             if ((device.type() == Device.Type.ROADM) ||
-                    (device.type() == Device.Type.OTN) || (device.type() == Device.Type.OLS)) {
+                    (device.type() == Device.Type.OTN) ||
+                    (device.type() == Device.Type.OLS) ||
+                    (device.type() == Device.Type.TERMINAL_DEVICE)) {
                 sendMessage(deviceMessage(new DeviceEvent(DEVICE_ADDED, device)));
             }
         }
         for (Device device : services.device().getDevices()) {
             if ((device.type() != Device.Type.ROADM) &&
                     (device.type() != Device.Type.OTN) && (device.type() != Device.Type.OLS) &&
-                    (device.type() != Device.Type.CONTROLLER)) {
+                    (device.type() != Device.Type.TERMINAL_DEVICE) && (device.type() != Device.Type.CONTROLLER)) {
                 sendMessage(deviceMessage(new DeviceEvent(DEVICE_ADDED, device)));
             }
         }
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java
index 6f370b8..994f014 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java
@@ -142,6 +142,7 @@
         DEVICE_GLYPHS.put(Device.Type.ROADM, "m_roadm");
         DEVICE_GLYPHS.put(Device.Type.OLS, "m_roadm");
         DEVICE_GLYPHS.put(Device.Type.OTN, "m_otn");
+        DEVICE_GLYPHS.put(Device.Type.TERMINAL_DEVICE, "m_otn");
         DEVICE_GLYPHS.put(Device.Type.ROADM_OTN, "m_roadm_otn");
         DEVICE_GLYPHS.put(Device.Type.BALANCER, "m_balancer");
         DEVICE_GLYPHS.put(Device.Type.IPS, "m_ips");
diff --git a/web/gui/src/main/webapp/app/view/topo/topoD3.js b/web/gui/src/main/webapp/app/view/topo/topoD3.js
index 15499a5..1b73fbf 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoD3.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoD3.js
@@ -74,6 +74,8 @@
         'switch': 'm_switch',
         roadm: 'm_roadm',
         otn: 'm_otn',
+        ols: 'm_roadm',
+        terminal_device: 'm_otn',
         roadm_otn: 'm_roadm_otn',
         fiber_switch: 'm_fiberSwitch',
         microwave: 'm_microwave',
diff --git a/web/gui/src/main/webapp/app/view/topo/topoFilter.js b/web/gui/src/main/webapp/app/view/topo/topoFilter.js
index b5a5283..5e4d43a 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoFilter.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoFilter.js
@@ -52,6 +52,9 @@
                 router: 'pkt',
                 roadm: 'opt',
                 otn: 'opt',
+                ols: 'opt',
+                terminal_device: 'opt',
+                roadm_otn: 'opt',
             },
             link: {
                 hostLink: 'pkt',