Slice out LinkKey

Change-Id: Ibfcafd07858c5357a2321220e01ddab44f347923
diff --git a/core/api/src/main/java/org/onlab/onos/net/LinkKey.java b/core/api/src/main/java/org/onlab/onos/net/LinkKey.java
new file mode 100644
index 0000000..dee4e88
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/net/LinkKey.java
@@ -0,0 +1,71 @@
+package org.onlab.onos.net;
+
+import java.util.Objects;
+
+import com.google.common.base.MoreObjects;
+
+// TODO Consider renaming.
+// it's an identifier for a Link, but it's not ElementId, so not using LinkId.
+/**
+ * Immutable representation of a link identity.
+ */
+public class LinkKey {
+
+    private final ConnectPoint src;
+    private final ConnectPoint dst;
+
+    /**
+     * Returns source connection point.
+     *
+     * @return source connection point
+     */
+    public ConnectPoint src() {
+        return src;
+    }
+
+    /**
+     * Returns destination connection point.
+     *
+     * @return destination connection point
+     */
+    public ConnectPoint dst() {
+        return dst;
+    }
+
+    /**
+     * Creates a link identifier with source and destination connection point.
+     *
+     * @param src source connection point
+     * @param dst destination connection point
+     */
+    public LinkKey(ConnectPoint src, ConnectPoint dst) {
+        this.src = src;
+        this.dst = 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/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkStore.java b/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkStore.java
index ccb2bfb..17bbc88 100644
--- a/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkStore.java
+++ b/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkStore.java
@@ -3,6 +3,7 @@
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Multimap;
+
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -11,6 +12,7 @@
 import org.onlab.onos.net.DefaultLink;
 import org.onlab.onos.net.DeviceId;
 import org.onlab.onos.net.Link;
+import org.onlab.onos.net.LinkKey;
 import org.onlab.onos.net.link.LinkDescription;
 import org.onlab.onos.net.link.LinkEvent;
 import org.onlab.onos.net.link.LinkStore;
@@ -22,7 +24,6 @@
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Map;
-import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -123,7 +124,7 @@
     // Creates and stores the link and returns the appropriate event.
     private LinkEvent createLink(ProviderId providerId, LinkKey key,
                                  LinkDescription linkDescription) {
-        DefaultLink link = new DefaultLink(providerId, key.src, key.dst,
+        DefaultLink link = new DefaultLink(providerId, key.src(), key.dst(),
                                            linkDescription.type());
         synchronized (this) {
             links.put(key, link);
@@ -165,33 +166,4 @@
             return null;
         }
     }
-
-    // Auxiliary key to track links.
-    private class LinkKey {
-        final ConnectPoint src;
-        final ConnectPoint dst;
-
-        LinkKey(ConnectPoint src, ConnectPoint dst) {
-            this.src = src;
-            this.dst = 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;
-        }
-    }
 }