Add a builder for DefaultLink to hide multiplying constructors

Change-Id: Iaf073d07989c398a8f44541ffdb8dd93e5715162
diff --git a/core/store/dist/src/main/java/org/onosproject/store/link/impl/ECLinkStore.java b/core/store/dist/src/main/java/org/onosproject/store/link/impl/ECLinkStore.java
index 48851f7..8e77ac8 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/link/impl/ECLinkStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/link/impl/ECLinkStore.java
@@ -317,7 +317,15 @@
         });
 
         boolean isDurable = Objects.equals(annotations.get().value(AnnotationKeys.DURABLE), "true");
-        return new DefaultLink(baseProviderId, src, dst, type, ACTIVE, isDurable, annotations.get());
+        return DefaultLink.builder()
+                .providerId(baseProviderId)
+                .src(src)
+                .dst(dst)
+                .type(type)
+                .state(ACTIVE)
+                .isExpected(isDurable)
+                .annotations(annotations.get())
+                .build();
     }
 
     // Updates, if necessary the specified link and returns the appropriate event.
@@ -346,11 +354,15 @@
             // FIXME: this will not sync link state!!!
             return link.state() == INACTIVE ? null :
                     updateLink(linkKey(link.src(), link.dst()), link,
-                               new DefaultLink(link.providerId(),
-                                               link.src(), link.dst(),
-                                               link.type(), INACTIVE,
-                                               link.isDurable(),
-                                               link.annotations()));
+                               DefaultLink.builder()
+                                       .providerId(link.providerId())
+                                       .src(link.src())
+                                       .dst(link.dst())
+                                       .type(link.type())
+                                       .state(INACTIVE)
+                                       .isExpected(link.isExpected())
+                                       .annotations(link.annotations())
+                                       .build());
         }
         return removeLink(src, dst);
     }
diff --git a/core/store/dist/src/main/java/org/onosproject/store/link/impl/GossipLinkStore.java b/core/store/dist/src/main/java/org/onosproject/store/link/impl/GossipLinkStore.java
index f24a662..cf46b15 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/link/impl/GossipLinkStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/link/impl/GossipLinkStore.java
@@ -361,11 +361,15 @@
             // FIXME: this is not the right thing to call for the gossip store; will not sync link state!!!
             return link.state() == INACTIVE ? null :
                     updateLink(linkKey(link.src(), link.dst()), link,
-                               new DefaultLink(link.providerId(),
-                                               link.src(), link.dst(),
-                                               link.type(), INACTIVE,
-                                               link.isDurable(),
-                                               link.annotations()));
+                               DefaultLink.builder()
+                                    .providerId(link.providerId())
+                                    .src(link.src())
+                                    .dst(link.dst())
+                                    .type(link.type())
+                                    .state(INACTIVE)
+                                    .isExpected(link.isExpected())
+                                    .annotations(link.annotations())
+                                    .build());
         }
         return removeLink(src, dst);
     }
@@ -605,7 +609,15 @@
         }
 
         boolean isDurable = Objects.equals(annotations.value(AnnotationKeys.DURABLE), "true");
-        return new DefaultLink(baseProviderId, src, dst, type, ACTIVE, isDurable, annotations);
+        return DefaultLink.builder()
+                .providerId(baseProviderId)
+                .src(src)
+                .dst(dst)
+                .type(type)
+                .state(ACTIVE)
+                .isExpected(isDurable)
+                .annotations(annotations)
+                .build();
     }
 
     private Map<ProviderId, Timestamped<LinkDescription>> getOrCreateLinkDescriptions(LinkKey key) {
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/DefaultLinkSerializer.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/DefaultLinkSerializer.java
index 6cc9066..7c9231a 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/DefaultLinkSerializer.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/DefaultLinkSerializer.java
@@ -56,6 +56,13 @@
         Type linkType = (Type) kryo.readClassAndObject(input);
         State state = (State) kryo.readClassAndObject(input);
         boolean isDurable = input.readBoolean();
-        return new DefaultLink(providerId, src, dst, linkType, state, isDurable);
+        return DefaultLink.builder()
+                .providerId(providerId)
+                .src(src)
+                .dst(dst)
+                .type(linkType)
+                .state(state)
+                .isExpected(isDurable)
+                .build();
     }
 }
diff --git a/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java b/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java
index ec676bd..54690ea 100644
--- a/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java
+++ b/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java
@@ -183,8 +183,19 @@
 
     @Test
     public void testDefaultLink() {
-        testSerializedEquals(new DefaultLink(PID, CP1, CP2, Link.Type.DIRECT));
-        testSerializedEquals(new DefaultLink(PID, CP1, CP2, Link.Type.DIRECT, A1));
+        testSerializedEquals(DefaultLink.builder()
+                                     .providerId(PID)
+                                     .src(CP1)
+                                     .dst(CP2)
+                                     .type(Link.Type.DIRECT)
+                                     .build());
+        testSerializedEquals(DefaultLink.builder()
+                                     .providerId(PID)
+                                     .src(CP1)
+                                     .dst(CP2)
+                                     .type(Link.Type.DIRECT)
+                                     .annotations(A1)
+                                     .build());
     }
 
     @Test
@@ -367,7 +378,9 @@
                         .addBandwidthRequest(32.195)
                         .build();
         Map<Link, Set<ResourceAllocation>> allocations = new HashMap<>();
-        allocations.put(new DefaultLink(PID, CP1, CP2, Type.DIRECT),
+        allocations.put(DefaultLink.builder()
+                                .providerId(PID)
+                                .src(CP1).dst(CP2).type(Type.DIRECT).build(),
                         ImmutableSet.of(new BandwidthResourceAllocation(new BandwidthResource(Bandwidth.bps(10.0))),
                                         new LambdaResourceAllocation(LambdaResource.valueOf(1))));
         testSerializable(new DefaultLinkResourceAllocations(request, allocations));