Support for OTN using optical circuit intents.
Refined DeviceResourceService.

Change-Id: I489f368a0fac5f4a8d0a1a1cb716f845558db35e
diff --git a/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java b/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java
index 47efc1b..dc41ee9 100644
--- a/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java
+++ b/apps/optical/src/main/java/org/onosproject/optical/OpticalPathProvisioner.java
@@ -29,7 +29,9 @@
 import org.onosproject.net.Device;
 import org.onosproject.net.Host;
 import org.onosproject.net.Link;
+import org.onosproject.net.OchPort;
 import org.onosproject.net.OduCltPort;
+import org.onosproject.net.OduSignalType;
 import org.onosproject.net.Path;
 import org.onosproject.net.Port;
 import org.onosproject.net.device.DeviceService;
@@ -40,6 +42,7 @@
 import org.onosproject.net.intent.IntentListener;
 import org.onosproject.net.intent.IntentService;
 import org.onosproject.net.intent.IntentState;
+import org.onosproject.net.intent.OpticalCircuitIntent;
 import org.onosproject.net.intent.OpticalConnectivityIntent;
 import org.onosproject.net.intent.PointToPointIntent;
 import org.onosproject.net.resource.device.DeviceResourceService;
@@ -307,17 +310,33 @@
 
                 Port srcPort = deviceService.getPort(src.deviceId(), src.port());
                 Port dstPort = deviceService.getPort(dst.deviceId(), dst.port());
-                // Create lightpath
-                // TODO: Ensure src & dst are of type OchPort
-                Intent opticalIntent = OpticalConnectivityIntent.builder()
-                        .appId(appId)
-                        .src(src)
-                        .dst(dst)
-                        .build();
-                intents.add(opticalIntent);
+
                 if (srcPort instanceof OduCltPort && dstPort instanceof OduCltPort) {
+                    // TODO: Check availability of ports
+
+                    // Create OTN circuit
+                    Intent circuitIntent = OpticalCircuitIntent.builder()
+                            .appId(appId)
+                            .src(src)
+                            .dst(dst)
+                            .signalType(OduCltPort.SignalType.CLT_10GBE)
+                            .build();
+                    intents.add(circuitIntent);
                     continue;
-                    // also create OTN service
+                } else if (srcPort instanceof OchPort && dstPort instanceof OchPort) {
+                    // Create lightpath
+                    // FIXME: hardcoded ODU signal type
+                    Intent opticalIntent = OpticalConnectivityIntent.builder()
+                            .appId(appId)
+                            .src(src)
+                            .dst(dst)
+                            .signalType(OduSignalType.ODU4)
+                            .build();
+                    intents.add(opticalIntent);
+                    continue;
+                } else {
+                    log.warn("Unsupported cross connect point types {} {}", srcPort.type(), dstPort.type());
+                    return Collections.emptyList();
                 }
             }