[ONOS-3730] Populate portSpeed for ODUCLT and OCH ports.

Also move the enum definition of ODU client port signal type outside of OduCltPort class.

Change-Id: Ibdff21d9707ad3d79587f579ad675f673cf9afeb
diff --git a/core/api/src/main/java/org/onosproject/net/CltSignalType.java b/core/api/src/main/java/org/onosproject/net/CltSignalType.java
new file mode 100644
index 0000000..5a5843e
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/CltSignalType.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2016 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.
+ */
+
+package org.onosproject.net;
+
+/**
+ * Represents ODU (Optical channel Data Unit) client port signal type.
+ *
+ * <p>
+ * See ITU G.709 "Interfaces for the Optical Transport Network (OTN)" and
+ * Open Networking Foundation "Optical Transport Protocol Extensions Version 1.0".
+ * </p>
+ */
+public enum CltSignalType {
+    /** bit rate in Mbps. */
+    CLT_1GBE(1_000),
+    CLT_10GBE(10_000),
+    CLT_40GBE(40_000),
+    CLT_100GBE(100_000);
+
+    private final long bitRate;
+
+    CltSignalType(long bitRate) {
+        this.bitRate = bitRate;
+    }
+
+    /**
+     * Return the bit rate in Mbps of the port.
+     * @return bit rate
+     */
+    public long bitRate() {
+        return this.bitRate;
+    }
+}
\ No newline at end of file
diff --git a/core/api/src/main/java/org/onosproject/net/OchPort.java b/core/api/src/main/java/org/onosproject/net/OchPort.java
index 8f1630b..c63b29d 100644
--- a/core/api/src/main/java/org/onosproject/net/OchPort.java
+++ b/core/api/src/main/java/org/onosproject/net/OchPort.java
@@ -44,8 +44,8 @@
      */
     public OchPort(Element element, PortNumber number, boolean isEnabled, OduSignalType signalType,
                    boolean isTunable, OchSignal lambda, Annotations... annotations) {
-        super(element, number, isEnabled, Type.OCH, 0, annotations);
-        this.signalType = checkNotNull(signalType);
+        super(element, number, isEnabled, Type.OCH, checkNotNull(signalType).bitRate(), annotations);
+        this.signalType = signalType;
         this.isTunable = isTunable;
         this.lambda = checkNotNull(lambda);
     }
diff --git a/core/api/src/main/java/org/onosproject/net/OduCltPort.java b/core/api/src/main/java/org/onosproject/net/OduCltPort.java
index 08bb943..56f0002 100644
--- a/core/api/src/main/java/org/onosproject/net/OduCltPort.java
+++ b/core/api/src/main/java/org/onosproject/net/OduCltPort.java
@@ -28,15 +28,7 @@
 
 public class OduCltPort extends DefaultPort {
 
-    public enum SignalType {
-        CLT_1GBE,
-        CLT_10GBE,
-        CLT_40GBE,
-        CLT_100GBE
-    }
-
-    private final SignalType signalType;
-
+    private final CltSignalType signalType;
 
     /**
      * Creates an ODU client port in the specified network element.
@@ -48,9 +40,9 @@
      * @param annotations       optional key/value annotations
      */
     public OduCltPort(Element element, PortNumber number, boolean isEnabled,
-                      SignalType signalType, Annotations... annotations) {
-        super(element, number, isEnabled, Type.ODUCLT, 0, annotations);
-        this.signalType = checkNotNull(signalType);
+                      CltSignalType signalType, Annotations... annotations) {
+        super(element, number, isEnabled, Type.ODUCLT, checkNotNull(signalType).bitRate(), annotations);
+        this.signalType = signalType;
     }
 
     /**
@@ -58,7 +50,7 @@
      *
      * @return ODU client signal type
      */
-    public SignalType signalType() {
+    public CltSignalType signalType() {
         return signalType;
     }
 
diff --git a/core/api/src/main/java/org/onosproject/net/OduSignalType.java b/core/api/src/main/java/org/onosproject/net/OduSignalType.java
index 014c893..336d4fc 100644
--- a/core/api/src/main/java/org/onosproject/net/OduSignalType.java
+++ b/core/api/src/main/java/org/onosproject/net/OduSignalType.java
@@ -24,10 +24,25 @@
  * </p>
  */
 public enum OduSignalType {
-    ODU0,
-    ODU1,
-    ODU2,
-    ODU2e,
-    ODU3,
-    ODU4
+    /** bit rate in Mbps. */
+    ODU0(1_250),
+    ODU1(2_500),
+    ODU2(10_000),
+    ODU2e(10_000),
+    ODU3(40_000),
+    ODU4(100_000);
+
+    private final long bitRate;
+
+    OduSignalType(long bitRate) {
+        this.bitRate = bitRate;
+    }
+
+    /**
+     * Return the bit rate in Mbps of the port.
+     * @return bit rate
+     */
+    public long bitRate() {
+        return this.bitRate;
+    }
 }
diff --git a/core/api/src/main/java/org/onosproject/net/device/OduCltPortDescription.java b/core/api/src/main/java/org/onosproject/net/device/OduCltPortDescription.java
index eee7de2..3991e64 100644
--- a/core/api/src/main/java/org/onosproject/net/device/OduCltPortDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/device/OduCltPortDescription.java
@@ -16,7 +16,7 @@
 package org.onosproject.net.device;
 
 import com.google.common.base.MoreObjects;
-import org.onosproject.net.OduCltPort;
+import org.onosproject.net.CltSignalType;
 import org.onosproject.net.Port;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.SparseAnnotations;
@@ -26,7 +26,7 @@
  */
 public class OduCltPortDescription extends DefaultPortDescription {
 
-    private final OduCltPort.SignalType signalType;
+    private final CltSignalType signalType;
 
     /**
      * Creates ODU client port description based on the supplied information.
@@ -36,7 +36,7 @@
      * @param signalType    ODU client signal type
      * @param annotations   optional key/value annotations map
      */
-    public OduCltPortDescription(PortNumber number, boolean isEnabled, OduCltPort.SignalType signalType,
+    public OduCltPortDescription(PortNumber number, boolean isEnabled, CltSignalType signalType,
                                  SparseAnnotations... annotations) {
         super(number, isEnabled, Port.Type.ODUCLT, 0, annotations);
         this.signalType = signalType;
@@ -49,7 +49,7 @@
      * @param signalType    ODU client signal type
      * @param annotations   optional key/value annotations map
      */
-    public OduCltPortDescription(PortDescription base, OduCltPort.SignalType signalType,
+    public OduCltPortDescription(PortDescription base, CltSignalType signalType,
                                  SparseAnnotations annotations) {
         super(base, annotations);
         this.signalType = signalType;
@@ -60,7 +60,7 @@
      *
      * @return ODU client signal type
      */
-    public OduCltPort.SignalType signalType() {
+    public CltSignalType signalType() {
         return signalType;
     }
 
diff --git a/core/api/src/main/java/org/onosproject/net/intent/OpticalCircuitIntent.java b/core/api/src/main/java/org/onosproject/net/intent/OpticalCircuitIntent.java
index 1e515c8..2a412f1 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/OpticalCircuitIntent.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/OpticalCircuitIntent.java
@@ -18,8 +18,8 @@
 import com.google.common.annotations.Beta;
 import com.google.common.base.MoreObjects;
 import org.onosproject.core.ApplicationId;
+import org.onosproject.net.CltSignalType;
 import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.OduCltPort;
 
 import java.util.Collections;
 
@@ -33,7 +33,7 @@
 public class OpticalCircuitIntent extends Intent {
     private final ConnectPoint src;
     private final ConnectPoint dst;
-    private final OduCltPort.SignalType signalType;
+    private final CltSignalType signalType;
     private final boolean isBidirectional;
 
     /**
@@ -49,7 +49,7 @@
      * @param priority priority to use for flows from this intent
      */
     protected OpticalCircuitIntent(ApplicationId appId, Key key, ConnectPoint src, ConnectPoint dst,
-                                   OduCltPort.SignalType signalType, boolean isBidirectional, int priority) {
+                                   CltSignalType signalType, boolean isBidirectional, int priority) {
         super(appId, key, Collections.emptyList(), priority);
         this.src = checkNotNull(src);
         this.dst = checkNotNull(dst);
@@ -73,7 +73,7 @@
     public static class Builder extends Intent.Builder {
         private ConnectPoint src;
         private ConnectPoint dst;
-        private OduCltPort.SignalType signalType;
+        private CltSignalType signalType;
         private boolean isBidirectional;
 
         @Override
@@ -119,7 +119,7 @@
          * @param signalType signal type to use for built intent
          * @return this builder
          */
-        public Builder signalType(OduCltPort.SignalType signalType) {
+        public Builder signalType(CltSignalType signalType) {
             this.signalType = signalType;
             return this;
         }
@@ -188,7 +188,7 @@
      *
      * @return ODU signal type
      */
-    public OduCltPort.SignalType getSignalType() {
+    public CltSignalType getSignalType() {
         return signalType;
     }