Fixed issue with canonicalization of link identifiers.
- added asId() to LinkKey
- BiLink.linkId() now returns LinkKey.asId()

Change-Id: Ie9069ca5302f09fca9e213ce33fa87bd8868e752
diff --git a/core/api/src/main/java/org/onosproject/net/LinkKey.java b/core/api/src/main/java/org/onosproject/net/LinkKey.java
index 0b0d5fb..5a2566f 100644
--- a/core/api/src/main/java/org/onosproject/net/LinkKey.java
+++ b/core/api/src/main/java/org/onosproject/net/LinkKey.java
@@ -15,13 +15,12 @@
  */
 package org.onosproject.net;
 
-import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.base.MoreObjects;
+import org.onosproject.net.link.LinkDescription;
 
 import java.util.Objects;
 
-import org.onosproject.net.link.LinkDescription;
-
-import com.google.common.base.MoreObjects;
+import static com.google.common.base.Preconditions.checkNotNull;
 
 // TODO Consider renaming.
 // it's an identifier for a Link, but it's not ElementId, so not using LinkId.
@@ -31,10 +30,23 @@
  */
 public final class LinkKey {
 
+    private static final String DELIM = "-";
+
     private final ConnectPoint src;
     private final ConnectPoint dst;
 
     /**
+     * Creates a link identifier with source and destination connection point.
+     *
+     * @param src source connection point
+     * @param dst destination connection point
+     */
+    private LinkKey(ConnectPoint src, ConnectPoint dst) {
+        this.src = checkNotNull(src);
+        this.dst = checkNotNull(dst);
+    }
+
+    /**
      * Returns source connection point.
      *
      * @return source connection point
@@ -53,14 +65,38 @@
     }
 
     /**
-     * Creates a link identifier with source and destination connection point.
+     * Returns a string suitable to be used as an identifier.
      *
-     * @param src source connection point
-     * @param dst destination connection point
+     * @return string as identifier
      */
-    private LinkKey(ConnectPoint src, ConnectPoint dst) {
-        this.src = checkNotNull(src);
-        this.dst = checkNotNull(dst);
+    public String asId() {
+        return src + DELIM + dst;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(src, dst);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof LinkKey) {
+            final LinkKey other = (LinkKey) obj;
+            return Objects.equals(this.src, other.src) &&
+                    Objects.equals(this.dst, other.dst);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(getClass())
+                .add("src", src)
+                .add("dst", dst)
+                .toString();
     }
 
     /**
@@ -94,29 +130,4 @@
         return new LinkKey(link.src(), link.dst());
     }
 
-    @Override
-    public int hashCode() {
-        return Objects.hash(src, dst);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj instanceof LinkKey) {
-            final LinkKey other = (LinkKey) obj;
-            return Objects.equals(this.src, other.src) &&
-                    Objects.equals(this.dst, other.dst);
-        }
-        return false;
-    }
-
-    @Override
-    public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("src", src)
-                .add("dst", dst)
-                .toString();
-    }
 }
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/BiLink.java b/core/api/src/main/java/org/onosproject/ui/topo/BiLink.java
index 16e8dc5..b50e34d 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/BiLink.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/BiLink.java
@@ -38,7 +38,7 @@
      * that the caller will have used {@link TopoUtils#canonicalLinkKey(Link)}
      * to generate the key.
      *
-     * @param key canonical key for this bi-link
+     * @param key  canonical key for this bi-link
      * @param link first link
      */
     public BiLink(LinkKey key, Link link) {
@@ -62,7 +62,7 @@
      * @return link identifier
      */
     public String linkId() {
-        return TopoUtils.compactLinkString(one);
+        return key.asId();
     }
 
     /**
@@ -92,6 +92,11 @@
         return two;
     }
 
+    @Override
+    public String toString() {
+        return key.asId();
+    }
+
     /**
      * Returns the link highlighting to use, based on this bi-link's current
      * state.