ONOS-2186 - GUI Topo Overlay - (WIP)
- split BiLink into abstract superclass and concrete subclasses.
- created BiLinkMap to collate bilinks (and derivative subclasses).
- added missing Javadocs, and other general cleanup.

Change-Id: Icfa85bc44a223c6cf245a4005170583dad1cc801
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/AbstractHighlight.java b/core/api/src/main/java/org/onosproject/ui/topo/AbstractHighlight.java
index 23cd7d8..5e7ef4b 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/AbstractHighlight.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/AbstractHighlight.java
@@ -18,22 +18,38 @@
 package org.onosproject.ui.topo;
 
 /**
- * Partial implementation of the types of highlight to apply to topology
- * elements.
+ * Partial implementation of the highlighting to apply to topology
+ * view elements.
  */
 public abstract class AbstractHighlight {
     private final TopoElementType type;
     private final String elementId;
 
+    /**
+     * Constructs the highlight.
+     *
+     * @param type highlight element type
+     * @param elementId element identifier
+     */
     public AbstractHighlight(TopoElementType type, String elementId) {
         this.type = type;
         this.elementId = elementId;
     }
 
+    /**
+     * Returns the element type.
+     *
+     * @return element type
+     */
     public TopoElementType type() {
         return type;
     }
 
+    /**
+     * Returns the element identifier.
+     *
+     * @return element identifier
+     */
     public String elementId() {
         return elementId;
     }
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java b/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java
index 1b721b8..fe1ecb2 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java
@@ -18,7 +18,7 @@
 package org.onosproject.ui.topo;
 
 /**
- * Denotes the types of highlight to apply to a link.
+ * Denotes the highlighting to apply to a device.
  */
 public class DeviceHighlight extends AbstractHighlight {
 
@@ -26,5 +26,8 @@
         super(TopoElementType.DEVICE, deviceId);
     }
 
+    // TODO: implement device highlighting:
+    //   - visual highlight
+    //   - badging
 
 }
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/HostHighlight.java b/core/api/src/main/java/org/onosproject/ui/topo/HostHighlight.java
index ff8b3be..cb64e07 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/HostHighlight.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/HostHighlight.java
@@ -18,7 +18,7 @@
 package org.onosproject.ui.topo;
 
 /**
- * Denotes the types of highlight to apply to a link.
+ * Denotes the highlighting to apply to a host.
  */
 public class HostHighlight extends AbstractHighlight {
 
@@ -26,5 +26,8 @@
         super(TopoElementType.HOST, hostId);
     }
 
+    // TODO: implement host highlighting:
+    //   - visual highlight
+    //   - badging
 
 }
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/LinkHighlight.java b/core/api/src/main/java/org/onosproject/ui/topo/LinkHighlight.java
index d8e4279..b4e4330 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/LinkHighlight.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/LinkHighlight.java
@@ -27,8 +27,8 @@
  * Denotes the highlighting to be applied to a link.
  * {@link Flavor} is a closed set of NO-, PRIMARY-, or SECONDARY- highlighting.
  * {@link Mod} is an open ended set of additional modifications (CSS classes)
- * to apply. Note that {@link #MOD_OPTICAL} and {@link #MOD_ANIMATED} are
- * pre-defined mods.
+ * that may also be applied.
+ * Note that {@link #MOD_OPTICAL} and {@link #MOD_ANIMATED} are pre-defined mods.
  * Label text may be set, which will also be displayed on the link.
  */
 public class LinkHighlight extends AbstractHighlight {
@@ -136,48 +136,6 @@
     }
 
     /**
-     * Link highlighting modification.
-     * <p>
-     * Note that this translates to a CSS class name that is applied to
-     * the link in the Topology UI.
-     */
-    public static final class Mod implements Comparable<Mod> {
-        private final String modId;
-
-        public Mod(String modId) {
-            this.modId = checkNotNull(modId);
-        }
-
-        @Override
-        public String toString() {
-            return modId;
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (this == o) {
-                return true;
-            }
-            if (o == null || getClass() != o.getClass()) {
-                return false;
-            }
-            Mod mod = (Mod) o;
-            return modId.equals(mod.modId);
-        }
-
-        @Override
-        public int hashCode() {
-            return modId.hashCode();
-        }
-
-
-        @Override
-        public int compareTo(Mod o) {
-            return this.modId.compareTo(o.modId);
-        }
-    }
-
-    /**
      * Denotes a link to be tagged as an optical link.
      */
     public static final Mod MOD_OPTICAL = new Mod("optical");
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/Mod.java b/core/api/src/main/java/org/onosproject/ui/topo/Mod.java
new file mode 100644
index 0000000..d21a872
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/ui/topo/Mod.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2015 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.ui.topo;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Highlighting modification.
+ * <p>
+ * Note that (for link highlights) this translates to a CSS class name
+ * that is applied to the link in the Topology UI.
+ */
+public final class Mod implements Comparable<Mod> {
+    private final String modId;
+
+    /**
+     * Constructs a mod with the given identifier.
+     *
+     * @param modId modification identifier
+     */
+    public Mod(String modId) {
+        this.modId = checkNotNull(modId);
+    }
+
+    @Override
+    public String toString() {
+        return modId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        Mod mod = (Mod) o;
+        return modId.equals(mod.modId);
+    }
+
+    @Override
+    public int hashCode() {
+        return modId.hashCode();
+    }
+
+    @Override
+    public int compareTo(Mod o) {
+        return this.modId.compareTo(o.modId);
+    }
+}