modified LinkKey creation to follow other id objects

Change-Id: Ie70444f9069486d0251482464595f5835cf12539
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
index d3ff0f4..56c96e0 100644
--- a/core/api/src/main/java/org/onlab/onos/net/LinkKey.java
+++ b/core/api/src/main/java/org/onlab/onos/net/LinkKey.java
@@ -1,7 +1,11 @@
 package org.onlab.onos.net;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import java.util.Objects;
 
+import org.onlab.onos.net.link.LinkDescription;
+
 import com.google.common.base.MoreObjects;
 
 // TODO Consider renaming.
@@ -10,7 +14,7 @@
 /**
  * Immutable representation of a link identity.
  */
-public class LinkKey {
+public final class LinkKey {
 
     private final ConnectPoint src;
     private final ConnectPoint dst;
@@ -39,18 +43,40 @@
      * @param src source connection point
      * @param dst destination connection point
      */
-    public LinkKey(ConnectPoint src, ConnectPoint dst) {
-        this.src = src;
-        this.dst = dst;
+    private LinkKey(ConnectPoint src, ConnectPoint dst) {
+        this.src = checkNotNull(src);
+        this.dst = checkNotNull(dst);
+    }
+
+    /**
+     * Creates a link identifier with source and destination connection point.
+     *
+     * @param src source connection point
+     * @param dst destination connection point
+     * @return a link identifier
+     */
+    public static LinkKey linkKey(ConnectPoint src, ConnectPoint dst) {
+        return new LinkKey(src, dst);
     }
 
     /**
      * Creates a link identifier for the specified link.
      *
      * @param link link descriptor
+     * @return a link identifier
      */
-    public LinkKey(Link link) {
-        this(link.src(), link.dst());
+    public static LinkKey linkKey(Link link) {
+        return new LinkKey(link.src(), link.dst());
+    }
+
+    /**
+     * Creates a link identifier for the specified link.
+     *
+     * @param desc link description
+     * @return a link identifier
+     */
+    public static LinkKey linkKey(LinkDescription desc) {
+        return new LinkKey(desc.src(), desc.dst());
     }
 
     @Override
@@ -65,7 +91,7 @@
         }
         if (obj instanceof LinkKey) {
             final LinkKey other = (LinkKey) obj;
-            return Objects.equals(this.src(), other.src()) &&
+            return Objects.equals(this.src, other.src) &&
                     Objects.equals(this.dst, other.dst);
         }
         return false;
@@ -74,7 +100,7 @@
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
-                .add("src", src())
+                .add("src", src)
                 .add("dst", dst)
                 .toString();
     }
diff --git a/core/net/src/main/java/org/onlab/onos/net/intent/impl/ObjectiveTracker.java b/core/net/src/main/java/org/onlab/onos/net/intent/impl/ObjectiveTracker.java
index d84c367..7ba4e26 100644
--- a/core/net/src/main/java/org/onlab/onos/net/intent/impl/ObjectiveTracker.java
+++ b/core/net/src/main/java/org/onlab/onos/net/intent/impl/ObjectiveTracker.java
@@ -28,6 +28,7 @@
 import static com.google.common.collect.Multimaps.synchronizedSetMultimap;
 import static java.util.concurrent.Executors.newSingleThreadExecutor;
 import static org.onlab.onos.net.link.LinkEvent.Type.LINK_REMOVED;
+import static org.onlab.onos.net.LinkKey.linkKey;
 import static org.onlab.util.Tools.namedThreads;
 import static org.slf4j.LoggerFactory.getLogger;
 
@@ -82,14 +83,14 @@
     @Override
     public void addTrackedResources(IntentId intentId, Collection<Link> resources) {
         for (Link link : resources) {
-            intentsByLink.put(new LinkKey(link), intentId);
+            intentsByLink.put(linkKey(link), intentId);
         }
     }
 
     @Override
     public void removeTrackedResources(IntentId intentId, Collection<Link> resources) {
         for (Link link : resources) {
-            intentsByLink.remove(new LinkKey(link), intentId);
+            intentsByLink.remove(linkKey(link), intentId);
         }
     }
 
@@ -125,7 +126,7 @@
                     if (reason instanceof LinkEvent) {
                         LinkEvent linkEvent = (LinkEvent) reason;
                         if (linkEvent.type() == LINK_REMOVED) {
-                            Set<IntentId> intentIds = intentsByLink.get(new LinkKey(linkEvent.subject()));
+                            Set<IntentId> intentIds = intentsByLink.get(linkKey(linkEvent.subject()));
                             toBeRecompiled.addAll(intentIds);
                         }
                         recompileOnly = recompileOnly && linkEvent.type() == LINK_REMOVED;
diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/link/impl/GossipLinkStore.java b/core/store/dist/src/main/java/org/onlab/onos/store/link/impl/GossipLinkStore.java
index 52b23ce..e59d65d 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/link/impl/GossipLinkStore.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/link/impl/GossipLinkStore.java
@@ -67,6 +67,7 @@
 import static org.onlab.onos.net.DefaultAnnotations.merge;
 import static org.onlab.onos.net.Link.Type.DIRECT;
 import static org.onlab.onos.net.Link.Type.INDIRECT;
+import static org.onlab.onos.net.LinkKey.linkKey;
 import static org.onlab.onos.net.link.LinkEvent.Type.*;
 import static org.onlab.util.Tools.namedThreads;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -203,7 +204,7 @@
 
     @Override
     public Link getLink(ConnectPoint src, ConnectPoint dst) {
-        return links.get(new LinkKey(src, dst));
+        return links.get(linkKey(src, dst));
     }
 
     @Override
@@ -237,7 +238,7 @@
 
         final Timestamped<LinkDescription> deltaDesc = new Timestamped<>(linkDescription, newTimestamp);
 
-        LinkKey key = new LinkKey(linkDescription.src(), linkDescription.dst());
+        LinkKey key = linkKey(linkDescription);
         final LinkEvent event;
         final Timestamped<LinkDescription> mergedDesc;
         synchronized (getLinkDescriptions(key)) {
@@ -264,7 +265,7 @@
             ProviderId providerId,
             Timestamped<LinkDescription> linkDescription) {
 
-        LinkKey key = new LinkKey(linkDescription.value().src(), linkDescription.value().dst());
+        LinkKey key = linkKey(linkDescription.value());
         ConcurrentMap<ProviderId, Timestamped<LinkDescription>> descs = getLinkDescriptions(key);
 
         synchronized (descs) {
@@ -357,7 +358,7 @@
 
     @Override
     public LinkEvent removeLink(ConnectPoint src, ConnectPoint dst) {
-        final LinkKey key = new LinkKey(src, dst);
+        final LinkKey key = linkKey(src, dst);
 
         DeviceId dstDeviceId = dst.deviceId();
         Timestamp timestamp = deviceClockService.getTimestamp(dstDeviceId);
diff --git a/core/store/hz/net/src/main/java/org/onlab/onos/store/link/impl/DistributedLinkStore.java b/core/store/hz/net/src/main/java/org/onlab/onos/store/link/impl/DistributedLinkStore.java
index 3dd42a3..5e1ff1a 100644
--- a/core/store/hz/net/src/main/java/org/onlab/onos/store/link/impl/DistributedLinkStore.java
+++ b/core/store/hz/net/src/main/java/org/onlab/onos/store/link/impl/DistributedLinkStore.java
@@ -3,6 +3,7 @@
 import static com.google.common.cache.CacheBuilder.newBuilder;
 import static org.onlab.onos.net.Link.Type.DIRECT;
 import static org.onlab.onos.net.Link.Type.INDIRECT;
+import static org.onlab.onos.net.LinkKey.linkKey;
 import static org.onlab.onos.net.link.LinkEvent.Type.LINK_ADDED;
 import static org.onlab.onos.net.link.LinkEvent.Type.LINK_REMOVED;
 import static org.onlab.onos.net.link.LinkEvent.Type.LINK_UPDATED;
@@ -122,7 +123,7 @@
 
     @Override
     public Link getLink(ConnectPoint src, ConnectPoint dst) {
-        return links.getUnchecked(new LinkKey(src, dst)).orNull();
+        return links.getUnchecked(linkKey(src, dst)).orNull();
     }
 
     @Override
@@ -150,7 +151,7 @@
     @Override
     public LinkEvent createOrUpdateLink(ProviderId providerId,
                                         LinkDescription linkDescription) {
-        LinkKey key = new LinkKey(linkDescription.src(), linkDescription.dst());
+        LinkKey key = linkKey(linkDescription);
         Optional<DefaultLink> link = links.getUnchecked(key);
         if (!link.isPresent()) {
             return createLink(providerId, key, linkDescription);
@@ -216,7 +217,7 @@
     @Override
     public LinkEvent removeLink(ConnectPoint src, ConnectPoint dst) {
         synchronized (this) {
-            LinkKey key = new LinkKey(src, dst);
+            LinkKey key = linkKey(src, dst);
             byte[] keyBytes = serialize(key);
             Link link = deserialize(rawLinks.remove(keyBytes));
             links.invalidate(key);
diff --git a/core/store/hz/net/src/test/java/org/onlab/onos/store/link/impl/DistributedLinkStoreTest.java b/core/store/hz/net/src/test/java/org/onlab/onos/store/link/impl/DistributedLinkStoreTest.java
index dd959b5..7415fed 100644
--- a/core/store/hz/net/src/test/java/org/onlab/onos/store/link/impl/DistributedLinkStoreTest.java
+++ b/core/store/hz/net/src/test/java/org/onlab/onos/store/link/impl/DistributedLinkStoreTest.java
@@ -3,6 +3,7 @@
 import static org.junit.Assert.*;
 import static org.onlab.onos.net.DeviceId.deviceId;
 import static org.onlab.onos.net.Link.Type.*;
+import static org.onlab.onos.net.LinkKey.linkKey;
 import static org.onlab.onos.net.link.LinkEvent.Type.*;
 
 import java.util.HashMap;
@@ -122,8 +123,8 @@
         assertEquals("initialy empty", 0,
                 Iterables.size(linkStore.getLinks()));
 
-        LinkKey linkId1 = new LinkKey(new ConnectPoint(DID1, P1), new ConnectPoint(DID2, P2));
-        LinkKey linkId2 = new LinkKey(new ConnectPoint(DID2, P2), new ConnectPoint(DID1, P1));
+        LinkKey linkId1 = linkKey(new ConnectPoint(DID1, P1), new ConnectPoint(DID2, P2));
+        LinkKey linkId2 = linkKey(new ConnectPoint(DID2, P2), new ConnectPoint(DID1, P1));
 
         putLink(linkId1, DIRECT);
         putLink(linkId2, DIRECT);
@@ -134,7 +135,7 @@
 
         Map<LinkKey, Link> links = new HashMap<>();
         for (Link link : linkStore.getLinks()) {
-            links.put(new LinkKey(link.src(), link.dst()), link);
+            links.put(linkKey(link), link);
         }
 
         assertLink(linkId1, DIRECT, links.get(linkId1));
@@ -143,9 +144,9 @@
 
     @Test
     public final void testGetDeviceEgressLinks() {
-        LinkKey linkId1 = new LinkKey(new ConnectPoint(DID1, P1), new ConnectPoint(DID2, P2));
-        LinkKey linkId2 = new LinkKey(new ConnectPoint(DID2, P2), new ConnectPoint(DID1, P1));
-        LinkKey linkId3 = new LinkKey(new ConnectPoint(DID1, P2), new ConnectPoint(DID2, P3));
+        LinkKey linkId1 = linkKey(new ConnectPoint(DID1, P1), new ConnectPoint(DID2, P2));
+        LinkKey linkId2 = linkKey(new ConnectPoint(DID2, P2), new ConnectPoint(DID1, P1));
+        LinkKey linkId3 = linkKey(new ConnectPoint(DID1, P2), new ConnectPoint(DID2, P3));
 
         putLink(linkId1, DIRECT);
         putLink(linkId2, DIRECT);
@@ -166,9 +167,9 @@
 
     @Test
     public final void testGetDeviceIngressLinks() {
-        LinkKey linkId1 = new LinkKey(new ConnectPoint(DID1, P1), new ConnectPoint(DID2, P2));
-        LinkKey linkId2 = new LinkKey(new ConnectPoint(DID2, P2), new ConnectPoint(DID1, P1));
-        LinkKey linkId3 = new LinkKey(new ConnectPoint(DID1, P2), new ConnectPoint(DID2, P3));
+        LinkKey linkId1 = linkKey(new ConnectPoint(DID1, P1), new ConnectPoint(DID2, P2));
+        LinkKey linkId2 = linkKey(new ConnectPoint(DID2, P2), new ConnectPoint(DID1, P1));
+        LinkKey linkId3 = linkKey(new ConnectPoint(DID1, P2), new ConnectPoint(DID2, P3));
 
         putLink(linkId1, DIRECT);
         putLink(linkId2, DIRECT);
@@ -191,7 +192,7 @@
     public final void testGetLink() {
         ConnectPoint src = new ConnectPoint(DID1, P1);
         ConnectPoint dst = new ConnectPoint(DID2, P2);
-        LinkKey linkId1 = new LinkKey(src, dst);
+        LinkKey linkId1 = linkKey(src, dst);
 
         putLink(linkId1, DIRECT);
 
@@ -206,9 +207,9 @@
     public final void testGetEgressLinks() {
         final ConnectPoint d1P1 = new ConnectPoint(DID1, P1);
         final ConnectPoint d2P2 = new ConnectPoint(DID2, P2);
-        LinkKey linkId1 = new LinkKey(d1P1, d2P2);
-        LinkKey linkId2 = new LinkKey(d2P2, d1P1);
-        LinkKey linkId3 = new LinkKey(new ConnectPoint(DID1, P2), new ConnectPoint(DID2, P3));
+        LinkKey linkId1 = linkKey(d1P1, d2P2);
+        LinkKey linkId2 = linkKey(d2P2, d1P1);
+        LinkKey linkId3 = linkKey(new ConnectPoint(DID1, P2), new ConnectPoint(DID2, P3));
 
         putLink(linkId1, DIRECT);
         putLink(linkId2, DIRECT);
@@ -231,9 +232,9 @@
     public final void testGetIngressLinks() {
         final ConnectPoint d1P1 = new ConnectPoint(DID1, P1);
         final ConnectPoint d2P2 = new ConnectPoint(DID2, P2);
-        LinkKey linkId1 = new LinkKey(d1P1, d2P2);
-        LinkKey linkId2 = new LinkKey(d2P2, d1P1);
-        LinkKey linkId3 = new LinkKey(new ConnectPoint(DID1, P2), new ConnectPoint(DID2, P3));
+        LinkKey linkId1 = linkKey(d1P1, d2P2);
+        LinkKey linkId2 = linkKey(d2P2, d1P1);
+        LinkKey linkId3 = linkKey(new ConnectPoint(DID1, P2), new ConnectPoint(DID2, P3));
 
         putLink(linkId1, DIRECT);
         putLink(linkId2, DIRECT);
@@ -282,8 +283,8 @@
     public final void testRemoveLink() {
         final ConnectPoint d1P1 = new ConnectPoint(DID1, P1);
         final ConnectPoint d2P2 = new ConnectPoint(DID2, P2);
-        LinkKey linkId1 = new LinkKey(d1P1, d2P2);
-        LinkKey linkId2 = new LinkKey(d2P2, d1P1);
+        LinkKey linkId1 = linkKey(d1P1, d2P2);
+        LinkKey linkId2 = linkKey(d2P2, d1P1);
 
         putLink(linkId1, DIRECT);
         putLink(linkId2, DIRECT);
@@ -306,7 +307,7 @@
 
         final ConnectPoint d1P1 = new ConnectPoint(DID1, P1);
         final ConnectPoint d2P2 = new ConnectPoint(DID2, P2);
-        final LinkKey linkId1 = new LinkKey(d1P1, d2P2);
+        final LinkKey linkId1 = linkKey(d1P1, d2P2);
 
         final CountDownLatch addLatch = new CountDownLatch(1);
         LinkStoreDelegate checkAdd = new LinkStoreDelegate() {
diff --git a/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/LinkKeySerializer.java b/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/LinkKeySerializer.java
index bafee4f..0f07133 100644
--- a/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/LinkKeySerializer.java
+++ b/core/store/serializers/src/main/java/org/onlab/onos/store/serializers/LinkKeySerializer.java
@@ -31,6 +31,6 @@
     public LinkKey read(Kryo kryo, Input input, Class<LinkKey> type) {
         ConnectPoint src = (ConnectPoint) kryo.readClassAndObject(input);
         ConnectPoint dst = (ConnectPoint) kryo.readClassAndObject(input);
-        return new LinkKey(src, dst);
+        return LinkKey.linkKey(src, dst);
     }
 }
diff --git a/core/store/serializers/src/test/java/org/onlab/onos/store/serializers/KryoSerializerTest.java b/core/store/serializers/src/test/java/org/onlab/onos/store/serializers/KryoSerializerTest.java
index d9157b4..58956d5 100644
--- a/core/store/serializers/src/test/java/org/onlab/onos/store/serializers/KryoSerializerTest.java
+++ b/core/store/serializers/src/test/java/org/onlab/onos/store/serializers/KryoSerializerTest.java
@@ -108,7 +108,7 @@
         testSerialized(ImmutableSet.of());
         testSerialized(IpPrefix.valueOf("192.168.0.1/24"));
         testSerialized(IpAddress.valueOf("192.168.0.1"));
-        testSerialized(new LinkKey(CP1, CP2));
+        testSerialized(LinkKey.linkKey(CP1, CP2));
         testSerialized(new NodeId("SomeNodeIdentifier"));
         testSerialized(P1);
         testSerialized(PID);
diff --git a/core/store/trivial/src/main/java/org/onlab/onos/store/trivial/impl/SimpleLinkStore.java b/core/store/trivial/src/main/java/org/onlab/onos/store/trivial/impl/SimpleLinkStore.java
index daf28df..47ef6fa 100644
--- a/core/store/trivial/src/main/java/org/onlab/onos/store/trivial/impl/SimpleLinkStore.java
+++ b/core/store/trivial/src/main/java/org/onlab/onos/store/trivial/impl/SimpleLinkStore.java
@@ -42,6 +42,7 @@
 import static org.onlab.onos.net.DefaultAnnotations.merge;
 import static org.onlab.onos.net.Link.Type.DIRECT;
 import static org.onlab.onos.net.Link.Type.INDIRECT;
+import static org.onlab.onos.net.LinkKey.linkKey;
 import static org.onlab.onos.net.link.LinkEvent.Type.*;
 import static org.slf4j.LoggerFactory.getLogger;
 import static com.google.common.collect.Multimaps.synchronizedSetMultimap;
@@ -120,7 +121,7 @@
 
     @Override
     public Link getLink(ConnectPoint src, ConnectPoint dst) {
-        return links.get(new LinkKey(src, dst));
+        return links.get(linkKey(src, dst));
     }
 
     @Override
@@ -148,7 +149,7 @@
     @Override
     public LinkEvent createOrUpdateLink(ProviderId providerId,
                                         LinkDescription linkDescription) {
-        LinkKey key = new LinkKey(linkDescription.src(), linkDescription.dst());
+        LinkKey key = linkKey(linkDescription);
 
         ConcurrentMap<ProviderId, LinkDescription> descs = getLinkDescriptions(key);
         synchronized (descs) {
@@ -225,7 +226,7 @@
 
     @Override
     public LinkEvent removeLink(ConnectPoint src, ConnectPoint dst) {
-        final LinkKey key = new LinkKey(src, dst);
+        final LinkKey key = linkKey(src, dst);
         ConcurrentMap<ProviderId, LinkDescription> descs = getLinkDescriptions(key);
         synchronized (descs) {
             Link link = links.remove(key);
diff --git a/core/store/trivial/src/test/java/org/onlab/onos/store/trivial/impl/SimpleLinkStoreTest.java b/core/store/trivial/src/test/java/org/onlab/onos/store/trivial/impl/SimpleLinkStoreTest.java
index 8a16609..02cb411 100644
--- a/core/store/trivial/src/test/java/org/onlab/onos/store/trivial/impl/SimpleLinkStoreTest.java
+++ b/core/store/trivial/src/test/java/org/onlab/onos/store/trivial/impl/SimpleLinkStoreTest.java
@@ -136,8 +136,8 @@
         assertEquals("initialy empty", 0,
                 Iterables.size(linkStore.getLinks()));
 
-        LinkKey linkId1 = new LinkKey(new ConnectPoint(DID1, P1), new ConnectPoint(DID2, P2));
-        LinkKey linkId2 = new LinkKey(new ConnectPoint(DID2, P2), new ConnectPoint(DID1, P1));
+        LinkKey linkId1 = LinkKey.linkKey(new ConnectPoint(DID1, P1), new ConnectPoint(DID2, P2));
+        LinkKey linkId2 = LinkKey.linkKey(new ConnectPoint(DID2, P2), new ConnectPoint(DID1, P1));
 
         putLink(linkId1, DIRECT);
         putLink(linkId2, DIRECT);
@@ -148,7 +148,7 @@
 
         Map<LinkKey, Link> links = new HashMap<>();
         for (Link link : linkStore.getLinks()) {
-            links.put(new LinkKey(link.src(), link.dst()), link);
+            links.put(LinkKey.linkKey(link), link);
         }
 
         assertLink(linkId1, DIRECT, links.get(linkId1));
@@ -157,9 +157,9 @@
 
     @Test
     public final void testGetDeviceEgressLinks() {
-        LinkKey linkId1 = new LinkKey(new ConnectPoint(DID1, P1), new ConnectPoint(DID2, P2));
-        LinkKey linkId2 = new LinkKey(new ConnectPoint(DID2, P2), new ConnectPoint(DID1, P1));
-        LinkKey linkId3 = new LinkKey(new ConnectPoint(DID1, P2), new ConnectPoint(DID2, P3));
+        LinkKey linkId1 = LinkKey.linkKey(new ConnectPoint(DID1, P1), new ConnectPoint(DID2, P2));
+        LinkKey linkId2 = LinkKey.linkKey(new ConnectPoint(DID2, P2), new ConnectPoint(DID1, P1));
+        LinkKey linkId3 = LinkKey.linkKey(new ConnectPoint(DID1, P2), new ConnectPoint(DID2, P3));
 
         putLink(linkId1, DIRECT);
         putLink(linkId2, DIRECT);
@@ -180,9 +180,9 @@
 
     @Test
     public final void testGetDeviceIngressLinks() {
-        LinkKey linkId1 = new LinkKey(new ConnectPoint(DID1, P1), new ConnectPoint(DID2, P2));
-        LinkKey linkId2 = new LinkKey(new ConnectPoint(DID2, P2), new ConnectPoint(DID1, P1));
-        LinkKey linkId3 = new LinkKey(new ConnectPoint(DID1, P2), new ConnectPoint(DID2, P3));
+        LinkKey linkId1 = LinkKey.linkKey(new ConnectPoint(DID1, P1), new ConnectPoint(DID2, P2));
+        LinkKey linkId2 = LinkKey.linkKey(new ConnectPoint(DID2, P2), new ConnectPoint(DID1, P1));
+        LinkKey linkId3 = LinkKey.linkKey(new ConnectPoint(DID1, P2), new ConnectPoint(DID2, P3));
 
         putLink(linkId1, DIRECT);
         putLink(linkId2, DIRECT);
@@ -205,7 +205,7 @@
     public final void testGetLink() {
         ConnectPoint src = new ConnectPoint(DID1, P1);
         ConnectPoint dst = new ConnectPoint(DID2, P2);
-        LinkKey linkId1 = new LinkKey(src, dst);
+        LinkKey linkId1 = LinkKey.linkKey(src, dst);
 
         putLink(linkId1, DIRECT);
 
@@ -220,9 +220,9 @@
     public final void testGetEgressLinks() {
         final ConnectPoint d1P1 = new ConnectPoint(DID1, P1);
         final ConnectPoint d2P2 = new ConnectPoint(DID2, P2);
-        LinkKey linkId1 = new LinkKey(d1P1, d2P2);
-        LinkKey linkId2 = new LinkKey(d2P2, d1P1);
-        LinkKey linkId3 = new LinkKey(new ConnectPoint(DID1, P2), new ConnectPoint(DID2, P3));
+        LinkKey linkId1 = LinkKey.linkKey(d1P1, d2P2);
+        LinkKey linkId2 = LinkKey.linkKey(d2P2, d1P1);
+        LinkKey linkId3 = LinkKey.linkKey(new ConnectPoint(DID1, P2), new ConnectPoint(DID2, P3));
 
         putLink(linkId1, DIRECT);
         putLink(linkId2, DIRECT);
@@ -245,9 +245,9 @@
     public final void testGetIngressLinks() {
         final ConnectPoint d1P1 = new ConnectPoint(DID1, P1);
         final ConnectPoint d2P2 = new ConnectPoint(DID2, P2);
-        LinkKey linkId1 = new LinkKey(d1P1, d2P2);
-        LinkKey linkId2 = new LinkKey(d2P2, d1P1);
-        LinkKey linkId3 = new LinkKey(new ConnectPoint(DID1, P2), new ConnectPoint(DID2, P3));
+        LinkKey linkId1 = LinkKey.linkKey(d1P1, d2P2);
+        LinkKey linkId2 = LinkKey.linkKey(d2P2, d1P1);
+        LinkKey linkId3 = LinkKey.linkKey(new ConnectPoint(DID1, P2), new ConnectPoint(DID2, P3));
 
         putLink(linkId1, DIRECT);
         putLink(linkId2, DIRECT);
@@ -349,8 +349,8 @@
     public final void testRemoveLink() {
         final ConnectPoint d1P1 = new ConnectPoint(DID1, P1);
         final ConnectPoint d2P2 = new ConnectPoint(DID2, P2);
-        LinkKey linkId1 = new LinkKey(d1P1, d2P2);
-        LinkKey linkId2 = new LinkKey(d2P2, d1P1);
+        LinkKey linkId1 = LinkKey.linkKey(d1P1, d2P2);
+        LinkKey linkId2 = LinkKey.linkKey(d2P2, d1P1);
 
         putLink(linkId1, DIRECT, A1);
         putLink(linkId2, DIRECT, A2);
@@ -406,7 +406,7 @@
 
         final ConnectPoint d1P1 = new ConnectPoint(DID1, P1);
         final ConnectPoint d2P2 = new ConnectPoint(DID2, P2);
-        final LinkKey linkId1 = new LinkKey(d1P1, d2P2);
+        final LinkKey linkId1 = LinkKey.linkKey(d1P1, d2P2);
 
         final CountDownLatch addLatch = new CountDownLatch(1);
         LinkStoreDelegate checkAdd = new LinkStoreDelegate() {