Add range checking methods to PowerConfig

Change-Id: I8c113df90a8225db34256856cb2eb80ee7d68a9e
diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/PowerConfig.java b/core/api/src/main/java/org/onosproject/net/behaviour/PowerConfig.java
index 21254aa1..8e45767 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/PowerConfig.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/PowerConfig.java
@@ -15,6 +15,8 @@
  */
 package org.onosproject.net.behaviour;
 
+import com.google.common.annotations.Beta;
+import com.google.common.collect.Range;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.driver.HandlerBehaviour;
 
@@ -29,6 +31,7 @@
  *
  * Power levels are specified with a long and unit .01 dBm.
  */
+@Beta
 public interface PowerConfig<T> extends HandlerBehaviour {
 
     /**
@@ -43,7 +46,6 @@
     /**
      * Set the target power on the component.
      *
-     *
      * @param port the port
      * @param component the port component
      * @param power target power in .01 dBm
@@ -58,4 +60,31 @@
      * @return power power in .01 dBm
      */
     Optional<Long> currentPower(PortNumber port, T component);
+
+    /**
+     * Get the acceptable target power range for setTargetPower,
+     * as optical components have different configurable output power ranges.
+     *
+     * @param port the port
+     * @param component the port component
+     * @return the accepted target power range, null if the component's power is
+     * not configurable. For example the port target power can only be set on TX ports.
+     */
+    default Optional<Range<Long>> getTargetPowerRange(PortNumber port, T component) {
+        return Optional.empty();
+    }
+
+    /**
+     * Get the expected input power range for the component,
+     * as optical components have different working input power ranges.
+     *
+     * @param port the port
+     * @param component the port component
+     * @return the expected input power range, null if the component does not have
+     * a specified input power range. For example input power range only applies
+     * to RX ports.
+     */
+    default Optional<Range<Long>> getInputPowerRange(PortNumber port, T component) {
+        return Optional.empty();
+    }
 }