Deprecate potentially error prone constructor methods

Change-Id: I82d95c27dc7c4b1a6dcf5cc48a1c7583b5e30e2c
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java
index 213375a..9c55df3 100644
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java
@@ -120,13 +120,13 @@
             .disableInBand()
             .build();
 
-    private static final PortDescription PATCH_ROUT = new DefaultPortDescription(
-            PortNumber.portNumber(1),
-            true,
-            DefaultAnnotations.builder()
+    private static final PortDescription PATCH_ROUT = DefaultPortDescription.builder()
+            .withPortNumber(PortNumber.portNumber(1))
+            .isEnabled(true)
+            .annotations(DefaultAnnotations.builder()
                     .set(PORT_NAME, PATCH_ROUT_BRIDGE)
-                    .build()
-    );
+                    .build())
+            .build();
 
     private static final String COMPUTE_1_HOSTNAME = "compute_1";
     private static final String COMPUTE_2_HOSTNAME = "compute_2";
diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/config/OpticalPortOperator.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/config/OpticalPortOperator.java
index a6b918c..aad6d58 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/config/OpticalPortOperator.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/config/OpticalPortOperator.java
@@ -134,7 +134,7 @@
             return descr;
         }
         return DefaultPortDescription.builder(descr)
-                .withPortNumer(port)
+                .withPortNumber(port)
                 .annotations(sa)
                 .build();
     }
diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OchPortHelper.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OchPortHelper.java
index 5faa1c5..0578858 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OchPortHelper.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OchPortHelper.java
@@ -100,7 +100,9 @@
 
         DefaultAnnotations annotations = builder.build();
         long portSpeed = signalType.bitRate();
-        return new DefaultPortDescription(number, isEnabled, Port.Type.OCH, portSpeed, annotations);
+        return DefaultPortDescription.builder().withPortNumber(number).isEnabled(isEnabled)
+                .type(Port.Type.OCH).portSpeed(portSpeed).annotations(annotations)
+                .build();
     }
 
     /**
diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OduCltPortHelper.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OduCltPortHelper.java
index 51c442f..9dd48cb 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OduCltPortHelper.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OduCltPortHelper.java
@@ -82,11 +82,13 @@
         builder.set(SIGNAL_TYPE, signalType.toString());
 
         long portSpeed = signalType.bitRate();
-        return new DefaultPortDescription(number,
-                                          isEnabled,
-                                          Port.Type.ODUCLT,
-                                          portSpeed,
-                                          builder.build());
+        return DefaultPortDescription.builder()
+                .withPortNumber(number)
+                .isEnabled(isEnabled)
+                .type(Port.Type.ODUCLT)
+                .portSpeed(portSpeed)
+                .annotations(builder.build())
+                .build();
     }
 
     /**
diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OmsPortHelper.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OmsPortHelper.java
index aee89dd..7b9dcd8 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OmsPortHelper.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OmsPortHelper.java
@@ -70,7 +70,13 @@
         builder.set(OpticalAnnotations.GRID_HZ, String.valueOf(grid.asHz()));
 
         long portSpeed = 0;
-        return new DefaultPortDescription(number, isEnabled, Port.Type.OMS, portSpeed, builder.build());
+        return DefaultPortDescription.builder()
+                .withPortNumber(number)
+                .isEnabled(isEnabled)
+                .type(Port.Type.OMS)
+                .portSpeed(portSpeed)
+                .annotations(builder.build())
+                .build();
     }
 
     /**
diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OtuPortHelper.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OtuPortHelper.java
index 8043f33..60b32e2 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OtuPortHelper.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/device/OtuPortHelper.java
@@ -82,11 +82,13 @@
         builder.set(SIGNAL_TYPE, signalType.toString());
 
         long portSpeed = 0; // TODO specify appropriate value?
-        return new DefaultPortDescription(number,
-                                          isEnabled,
-                                          Port.Type.OTU,
-                                          portSpeed,
-                                          builder.build());
+        return DefaultPortDescription.builder()
+                .withPortNumber(number)
+                .isEnabled(isEnabled)
+                .type(Port.Type.OTU)
+                .portSpeed(portSpeed)
+                .annotations(builder.build())
+                .build();
     }
 
     /**
diff --git a/core/api/src/main/java/org/onosproject/net/device/DefaultPortDescription.java b/core/api/src/main/java/org/onosproject/net/device/DefaultPortDescription.java
index 2354fce..57fdbe2 100644
--- a/core/api/src/main/java/org/onosproject/net/device/DefaultPortDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/device/DefaultPortDescription.java
@@ -44,7 +44,10 @@
      * @param number      port number
      * @param isEnabled   port enabled state
      * @param annotations optional key/value annotations map
+     *
+     * @deprecated in 1.13.0 use {@link #builder()} instead
      */
+    @Deprecated
     public DefaultPortDescription(PortNumber number, boolean isEnabled,
                                   SparseAnnotations... annotations) {
         this(number, isEnabled, Type.COPPER, DEFAULT_SPEED, annotations);
@@ -58,7 +61,9 @@
      * @param type        port type
      * @param portSpeed   port speed in Mbps
      * @param annotations optional key/value annotations map
+     * @deprecated in 1.13.0 use {@link #builder()} instead
      */
+    @Deprecated
     public DefaultPortDescription(PortNumber number, boolean isEnabled,
                                   Type type, long portSpeed,
                                   SparseAnnotations...annotations) {
@@ -74,7 +79,9 @@
      * @param type        port type
      * @param portSpeed   port speed in Mbps
      * @param annotations optional key/value annotations map
+     * @deprecated in 1.13.0 use {@link #builder()} instead
      */
+    @Deprecated // to be made non-public
     public DefaultPortDescription(PortNumber number, boolean isEnabled, boolean isRemoved,
                                   Type type, long portSpeed,
                                   SparseAnnotations...annotations) {
@@ -100,7 +107,10 @@
      *
      * @param base        PortDescription to get basic information from
      * @param annotations optional key/value annotations map
+     *
+     * @deprecated in 1.13.0 use {@link #builder(PortDescription)} instead.
      */
+    @Deprecated
     public DefaultPortDescription(PortDescription base,
                                   SparseAnnotations annotations) {
         this(base.portNumber(), base.isEnabled(), base.isRemoved(), base.type(), base.portSpeed(),
@@ -114,10 +124,15 @@
      * @param annotations to be used in the copied description.
      *        Note: Annotations on {@code base} will be ignored.
      * @return copied port description
+     *
+     * @deprecated in 1.13.0 use {@link #builder(PortDescription)} instead.
      */
+    @Deprecated
     public static DefaultPortDescription copyReplacingAnnotation(PortDescription base,
                                                                  SparseAnnotations annotations) {
-        return new DefaultPortDescription(base, annotations);
+        return DefaultPortDescription.builder(base)
+                .annotations(annotations)
+                .build();
     }
 
     @Override
@@ -222,8 +237,22 @@
          *
          * @param number to set
          * @return self
+         *
+         * @deprecated in 1.13.0 use withPortNumber() instead.
          */
+
+        @Deprecated
         public Builder withPortNumer(PortNumber number) {
+            return withPortNumber(number);
+        }
+
+        /**
+         * Sets mandatory field PortNumber.
+         *
+         * @param number to set
+         * @return self
+         */
+        public Builder withPortNumber(PortNumber number) {
             this.number = checkNotNull(number);
             return this;
         }
diff --git a/core/api/src/test/java/org/onosproject/net/device/DefaultPortDescriptionTest.java b/core/api/src/test/java/org/onosproject/net/device/DefaultPortDescriptionTest.java
index 1d15b20..9fa3893 100644
--- a/core/api/src/test/java/org/onosproject/net/device/DefaultPortDescriptionTest.java
+++ b/core/api/src/test/java/org/onosproject/net/device/DefaultPortDescriptionTest.java
@@ -33,15 +33,17 @@
     private static PortNumber port1 = PortNumber.portNumber(1);
     private static long portSpeed1 = 111L;
     private static DefaultPortDescription portDescription1 =
-            new DefaultPortDescription(port1, true, COPPER, portSpeed1);
+            DefaultPortDescription.builder().withPortNumber(port1).isEnabled(true)
+                    .type(COPPER).portSpeed(portSpeed1).build();
 
     private static DefaultPortDescription sameAsPortDescription1 =
-            new DefaultPortDescription(portDescription1,
-                                       portDescription1.annotations());
+            DefaultPortDescription.builder(portDescription1)
+                            .annotations(portDescription1.annotations())
+                            .build();
 
     private static PortNumber port2 = PortNumber.portNumber(2);
     private static DefaultPortDescription portDescription2 =
-            new DefaultPortDescription(port2, true);
+            DefaultPortDescription.builder().withPortNumber(port2).isEnabled(true).build();
 
     private static DefaultPortDescription portDescription3 =
             new DefaultPortDescription();
diff --git a/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java b/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java
index 5a41057..f4a7836 100644
--- a/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java
+++ b/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStore.java
@@ -725,7 +725,9 @@
             if (oldOne != null) {
                 SparseAnnotations merged = union(oldOne.annotations(),
                                                  newDesc.annotations());
-                newOne = new DefaultPortDescription(newOne, merged);
+                newOne = DefaultPortDescription.builder(newOne)
+                            .annotations(merged)
+                            .build();
             }
             return portDescs.put(newOne.portNumber(), newOne);
         }
diff --git a/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStoreTest.java b/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStoreTest.java
index 595280a..719307f 100644
--- a/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStoreTest.java
+++ b/core/common/src/test/java/org/onosproject/store/trivial/SimpleDeviceStoreTest.java
@@ -282,8 +282,8 @@
     public final void testUpdatePorts() {
         putDevice(DID1, SW1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true),
-                new DefaultPortDescription(P2, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build()
                 );
 
         List<DeviceEvent> events = deviceStore.updatePorts(PID, DID1, pds);
@@ -300,9 +300,9 @@
 
 
         List<PortDescription> pds2 = Arrays.asList(
-                new DefaultPortDescription(P1, false),
-                new DefaultPortDescription(P2, true),
-                new DefaultPortDescription(P3, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(false).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build(),
+                DefaultPortDescription.builder().withPortNumber(P3).isEnabled(true).build()
                 );
 
         events = deviceStore.updatePorts(PID, DID1, pds2);
@@ -325,8 +325,8 @@
         }
 
         List<PortDescription> pds3 = Arrays.asList(
-                new DefaultPortDescription(P1, false),
-                new DefaultPortDescription(P2, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(false).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build()
                 );
         events = deviceStore.updatePorts(PID, DID1, pds3);
         assertFalse("event should be triggered", events.isEmpty());
@@ -351,12 +351,12 @@
     public final void testUpdatePortStatus() {
         putDevice(DID1, SW1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
 
         DeviceEvent event = deviceStore.updatePortStatus(PID, DID1,
-                new DefaultPortDescription(P1, false));
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(false).build());
         assertEquals(PORT_UPDATED, event.type());
         assertDevice(DID1, SW1, event.subject());
         assertEquals(P1, event.port().number());
@@ -369,12 +369,12 @@
         putDeviceAncillary(DID1, SW1);
         putDevice(DID1, SW1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true, A1)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).annotations(A1).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
 
         DeviceEvent event = deviceStore.updatePortStatus(PID, DID1,
-                new DefaultPortDescription(P1, false, A1_2));
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(false).annotations(A1_2).build());
         assertEquals(PORT_UPDATED, event.type());
         assertDevice(DID1, SW1, event.subject());
         assertEquals(P1, event.port().number());
@@ -382,12 +382,12 @@
         assertFalse("Port is disabled", event.port().isEnabled());
 
         DeviceEvent event2 = deviceStore.updatePortStatus(PIDA, DID1,
-                new DefaultPortDescription(P1, true));
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build());
         assertNull("Ancillary is ignored if primary exists", event2);
 
         // but, Ancillary annotation update will be notified
         DeviceEvent event3 = deviceStore.updatePortStatus(PIDA, DID1,
-                new DefaultPortDescription(P1, true, A2));
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).annotations(A2).build());
         assertEquals(PORT_UPDATED, event3.type());
         assertDevice(DID1, SW1, event3.subject());
         assertEquals(P1, event3.port().number());
@@ -396,7 +396,7 @@
 
         // port only reported from Ancillary will be notified as down
         DeviceEvent event4 = deviceStore.updatePortStatus(PIDA, DID1,
-                new DefaultPortDescription(P2, true));
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build());
         assertEquals(PORT_ADDED, event4.type());
         assertDevice(DID1, SW1, event4.subject());
         assertEquals(P2, event4.port().number());
@@ -410,8 +410,8 @@
         putDevice(DID1, SW1);
         putDevice(DID2, SW1);
         List<PortDescription> pds = Arrays.<PortDescription>asList(
-                new DefaultPortDescription(P1, true),
-                new DefaultPortDescription(P2, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
 
@@ -433,8 +433,8 @@
         putDevice(DID1, SW1);
         putDevice(DID2, SW1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true),
-                new DefaultPortDescription(P2, false)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(false).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
 
@@ -454,7 +454,7 @@
     public final void testRemoveDevice() {
         putDevice(DID1, SW1, A1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true, A2)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).annotations(A2).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
         putDevice(DID2, SW1);
@@ -474,7 +474,7 @@
         // putBack Device, Port w/o annotation
         putDevice(DID1, SW1);
         List<PortDescription> pds2 = Arrays.asList(
-                new DefaultPortDescription(P1, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds2);
 
diff --git a/core/net/src/main/java/org/onosproject/net/config/impl/DeviceInjectionConfigMonitor.java b/core/net/src/main/java/org/onosproject/net/config/impl/DeviceInjectionConfigMonitor.java
index 78b6c9e..5277075 100644
--- a/core/net/src/main/java/org/onosproject/net/config/impl/DeviceInjectionConfigMonitor.java
+++ b/core/net/src/main/java/org/onosproject/net/config/impl/DeviceInjectionConfigMonitor.java
@@ -189,7 +189,7 @@
                 // TODO inject port details if something like BasicPortConfig was created
                 PortNumber number = portNumber(i);
                 boolean isEnabled = true;
-                portDescs.add(new DefaultPortDescription(number, isEnabled));
+                portDescs.add(DefaultPortDescription.builder().withPortNumber(number) .isEnabled(isEnabled).build());
             }
             providerService.updatePorts(did, portDescs);
         }
diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
index 37fc2cd..c82c1f5 100644
--- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
+++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
@@ -716,12 +716,10 @@
                 log.trace("Device not found: {}", deviceId);
             }
 
-            PortDescription newPortDescription = new DefaultPortDescription(basePortDescription.portNumber(),
-                                                                            basePortDescription.isEnabled(),
-                                                                            true,
-                                                                            basePortDescription.type(),
-                                                                            basePortDescription.portSpeed(),
-                                                                            basePortDescription.annotations());
+            PortDescription newPortDescription = DefaultPortDescription.builder(basePortDescription)
+                .isRemoved(true)
+                .build();
+
             final DeviceEvent event = store.updatePortStatus(this.provider().id(),
                                                              deviceId,
                                                              newPortDescription);
diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/PortAnnotationOperator.java b/core/net/src/main/java/org/onosproject/net/device/impl/PortAnnotationOperator.java
index 2489f79..ac9ea84 100644
--- a/core/net/src/main/java/org/onosproject/net/device/impl/PortAnnotationOperator.java
+++ b/core/net/src/main/java/org/onosproject/net/device/impl/PortAnnotationOperator.java
@@ -71,7 +71,9 @@
         builder.putAll(descr.annotations());
         builder.putAll(annotations);
 
-        return DefaultPortDescription.copyReplacingAnnotation(descr, builder.build());
+        return DefaultPortDescription.builder(descr)
+                    .annotations(builder.build())
+                    .build();
     }
 
 }
diff --git a/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java b/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java
index 975c90a..601e6c3 100644
--- a/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/device/impl/DeviceManagerTest.java
@@ -190,15 +190,15 @@
     public void updatePorts() {
         connectDevice(DID1, SW1);
         List<PortDescription> pds = new ArrayList<>();
-        pds.add(new DefaultPortDescription(P1, true));
-        pds.add(new DefaultPortDescription(P2, true));
-        pds.add(new DefaultPortDescription(P3, true));
+        pds.add(DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build());
+        pds.add(DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build());
+        pds.add(DefaultPortDescription.builder().withPortNumber(P3).isEnabled(true).build());
         providerService.updatePorts(DID1, pds);
         validateEvents(DEVICE_ADDED, PORT_ADDED, PORT_ADDED, PORT_ADDED);
         pds.clear();
 
-        pds.add(new DefaultPortDescription(P1, false));
-        pds.add(new DefaultPortDescription(P3, true));
+        pds.add(DefaultPortDescription.builder().withPortNumber(P1).isEnabled(false).build());
+        pds.add(DefaultPortDescription.builder().withPortNumber(P3).isEnabled(true).build());
         providerService.updatePorts(DID1, pds);
         validateEvents(PORT_UPDATED, PORT_REMOVED);
     }
@@ -207,14 +207,16 @@
     public void updatePortStatus() {
         connectDevice(DID1, SW1);
         List<PortDescription> pds = new ArrayList<>();
-        pds.add(new DefaultPortDescription(P1, true));
-        pds.add(new DefaultPortDescription(P2, true));
+        pds.add(DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build());
+        pds.add(DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build());
         providerService.updatePorts(DID1, pds);
         validateEvents(DEVICE_ADDED, PORT_ADDED, PORT_ADDED);
 
-        providerService.portStatusChanged(DID1, new DefaultPortDescription(P1, false));
+        providerService.portStatusChanged(DID1, DefaultPortDescription.builder()
+                .withPortNumber(P1).isEnabled(false).build());
         validateEvents(PORT_UPDATED);
-        providerService.portStatusChanged(DID1, new DefaultPortDescription(P1, false));
+        providerService.portStatusChanged(DID1, DefaultPortDescription.builder()
+                .withPortNumber(P1).isEnabled(false).build());
         assertTrue("no events expected", listener.events.isEmpty());
     }
 
@@ -222,8 +224,8 @@
     public void getPorts() {
         connectDevice(DID1, SW1);
         List<PortDescription> pds = new ArrayList<>();
-        pds.add(new DefaultPortDescription(P1, true));
-        pds.add(new DefaultPortDescription(P2, true));
+        pds.add(DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build());
+        pds.add(DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build());
         providerService.updatePorts(DID1, pds);
         validateEvents(DEVICE_ADDED, PORT_ADDED, PORT_ADDED);
         assertEquals("wrong port count", 2, service.getPorts(DID1).size());
diff --git a/core/store/dist/src/main/java/org/onosproject/store/device/impl/DeviceDescriptions.java b/core/store/dist/src/main/java/org/onosproject/store/device/impl/DeviceDescriptions.java
index 301767d..f14b062 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/device/impl/DeviceDescriptions.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/device/impl/DeviceDescriptions.java
@@ -97,7 +97,9 @@
             SparseAnnotations merged = union(oldOne.value().annotations(),
                                              newDesc.value().annotations());
             newOne = new Timestamped<>(
-                            new DefaultPortDescription(newDesc.value(), merged),
+                            DefaultPortDescription.builder(newDesc.value())
+                                .annotations(merged)
+                                .build(),
                             newDesc.timestamp());
         }
         portDescs.put(newOne.value().portNumber(), newOne);
diff --git a/core/store/dist/src/test/java/org/onosproject/store/device/impl/GossipDeviceStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/device/impl/GossipDeviceStoreTest.java
index 370c1d5..8a31446 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/device/impl/GossipDeviceStoreTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/device/impl/GossipDeviceStoreTest.java
@@ -522,8 +522,8 @@
     public final void testUpdatePorts() {
         putDevice(DID1, SW1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true),
-                new DefaultPortDescription(P2, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build()
                 );
         Capture<InternalDeviceEvent> message = new Capture<>();
         Capture<MessageSubject> subject = new Capture<>();
@@ -547,9 +547,9 @@
 
 
         List<PortDescription> pds2 = Arrays.asList(
-                new DefaultPortDescription(P1, false),
-                new DefaultPortDescription(P2, true),
-                new DefaultPortDescription(P3, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(false).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build(),
+                DefaultPortDescription.builder().withPortNumber(P3).isEnabled(true).build()
                 );
 
         resetCommunicatorExpectingSingleBroadcast(message, subject, encoder);
@@ -577,8 +577,8 @@
         }
 
         List<PortDescription> pds3 = Arrays.asList(
-                new DefaultPortDescription(P1, false),
-                new DefaultPortDescription(P2, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(false).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build()
                 );
         resetCommunicatorExpectingSingleBroadcast(message, subject, encoder);
         events = deviceStore.updatePorts(PID, DID1, pds3);
@@ -607,7 +607,7 @@
     public final void testUpdatePortStatus() {
         putDevice(DID1, SW1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
 
@@ -616,7 +616,8 @@
         Capture<Function<InternalPortStatusEvent, byte[]>> encoder = new Capture<>();
 
         resetCommunicatorExpectingSingleBroadcast(message, subject, encoder);
-        final DefaultPortDescription desc = new DefaultPortDescription(P1, false);
+        final DefaultPortDescription desc = DefaultPortDescription.builder().withPortNumber(P1)
+                .isEnabled(false).build();
         DeviceEvent event = deviceStore.updatePortStatus(PID, DID1, desc);
         assertEquals(PORT_UPDATED, event.type());
         assertDevice(DID1, SW1, event.subject());
@@ -632,7 +633,7 @@
         putDeviceAncillary(DID1, SW1);
         putDevice(DID1, SW1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true, A1)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).annotations(A1).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
 
@@ -643,7 +644,9 @@
         // update port from primary
         resetCommunicatorExpectingSingleBroadcast(message, subject, encoder);
 
-        final DefaultPortDescription desc1 = new DefaultPortDescription(P1, false, A1_2);
+        final DefaultPortDescription desc1 = DefaultPortDescription.builder().withPortNumber(P1).isEnabled(false)
+                .annotations(A1_2).build();
+
         DeviceEvent event = deviceStore.updatePortStatus(PID, DID1, desc1);
         assertEquals(PORT_UPDATED, event.type());
         assertDevice(DID1, SW1, event.subject());
@@ -656,7 +659,8 @@
 
         // update port from ancillary with no attributes
         resetCommunicatorExpectingNoBroadcast(message, subject, encoder);
-        final DefaultPortDescription desc2 = new DefaultPortDescription(P1, true);
+        final DefaultPortDescription desc2 = DefaultPortDescription.builder()
+                .withPortNumber(P1).isEnabled(true).build();
         DeviceEvent event2 = deviceStore.updatePortStatus(PIDA, DID1, desc2);
         assertNull("Ancillary is ignored if primary exists", event2);
         verify(clusterCommunicator);
@@ -664,7 +668,8 @@
 
         // but, Ancillary annotation update will be notified
         resetCommunicatorExpectingSingleBroadcast(message, subject, encoder);
-        final DefaultPortDescription desc3 = new DefaultPortDescription(P1, true, A2);
+        final DefaultPortDescription desc3 = DefaultPortDescription.builder().withPortNumber(P1)
+                .isEnabled(true).annotations(A2).build();
         DeviceEvent event3 = deviceStore.updatePortStatus(PIDA, DID1, desc3);
         assertEquals(PORT_UPDATED, event3.type());
         assertDevice(DID1, SW1, event3.subject());
@@ -677,7 +682,8 @@
 
         // port only reported from Ancillary will be notified as down
         resetCommunicatorExpectingSingleBroadcast(message, subject, encoder);
-        final DefaultPortDescription desc4 = new DefaultPortDescription(P2, true);
+        final DefaultPortDescription desc4 = DefaultPortDescription.builder()
+                .withPortNumber(P2).isEnabled(true).build();
         DeviceEvent event4 = deviceStore.updatePortStatus(PIDA, DID1, desc4);
         assertEquals(PORT_ADDED, event4.type());
         assertDevice(DID1, SW1, event4.subject());
@@ -757,8 +763,8 @@
         putDevice(DID1, SW1);
         putDevice(DID2, SW1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true),
-                new DefaultPortDescription(P2, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(true).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
 
@@ -780,8 +786,8 @@
         putDevice(DID1, SW1);
         putDevice(DID2, SW1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true),
-                new DefaultPortDescription(P2, false)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build(),
+                DefaultPortDescription.builder().withPortNumber(P2).isEnabled(false).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
 
@@ -801,7 +807,7 @@
     public final void testRemoveDevice() {
         putDevice(DID1, SW1, A1);
         List<PortDescription> pds = Arrays.asList(
-                new DefaultPortDescription(P1, true, A2)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).annotations(A2).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds);
         putDevice(DID2, SW1);
@@ -830,7 +836,7 @@
         // putBack Device, Port w/o annotation
         putDevice(DID1, SW1);
         List<PortDescription> pds2 = Arrays.asList(
-                new DefaultPortDescription(P1, true)
+                DefaultPortDescription.builder().withPortNumber(P1).isEnabled(true).build()
                 );
         deviceStore.updatePorts(PID, DID1, pds2);
 
diff --git a/drivers/arista/src/main/java/org/onosproject/drivers/arista/DeviceDescriptionDiscoveryAristaImpl.java b/drivers/arista/src/main/java/org/onosproject/drivers/arista/DeviceDescriptionDiscoveryAristaImpl.java
index 5a21de0..5b0b257 100644
--- a/drivers/arista/src/main/java/org/onosproject/drivers/arista/DeviceDescriptionDiscoveryAristaImpl.java
+++ b/drivers/arista/src/main/java/org/onosproject/drivers/arista/DeviceDescriptionDiscoveryAristaImpl.java
@@ -128,9 +128,13 @@
                         .set(INTERFACE_TYPE, interfaceNode.path(INTERFACE_TYPE).asText())
                         .build();
 
-                PortDescription portDescription = new DefaultPortDescription(PortNumber
-                        .portNumber(getPortNumber(name)),
-                        true, Port.Type.FIBER, bandwidth, annotations);
+                PortDescription portDescription = DefaultPortDescription.builder()
+                        .withPortNumber(PortNumber.portNumber(getPortNumber(name)))
+                        .isEnabled(true)
+                        .type(Port.Type.FIBER)
+                        .portSpeed(bandwidth)
+                        .annotations(annotations)
+                        .build();
                 ports.add(portDescription);
 
             });
diff --git a/drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/TextBlockParserCisco.java b/drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/TextBlockParserCisco.java
index a4a68ec..1da7ad0 100644
--- a/drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/TextBlockParserCisco.java
+++ b/drivers/cisco/netconf/src/main/java/org/onosproject/drivers/cisco/TextBlockParserCisco.java
@@ -185,8 +185,13 @@
         long portSpeed = getPortSpeed(textStr);
         DefaultAnnotations.Builder annotations = DefaultAnnotations.builder()
                 .set(AnnotationKeys.PORT_NAME, firstWord);
-        return "-1".equals(port) ? null : new DefaultPortDescription(PortNumber.portNumber(port),
-                                                                     isEnabled, type, portSpeed, annotations.build());
+        return "-1".equals(port) ? null : DefaultPortDescription.builder()
+                .withPortNumber(PortNumber.portNumber(port))
+                .isEnabled(isEnabled)
+                .type(type)
+                .portSpeed(portSpeed)
+                .annotations(annotations.build())
+                .build();
     }
 
     /**
@@ -295,4 +300,4 @@
         return portSpeed;
     }
 
-}
\ No newline at end of file
+}
diff --git a/drivers/cisco/netconf/src/test/java/org/onosproject/drivers/cisco/TextBlockParserCiscoTest.java b/drivers/cisco/netconf/src/test/java/org/onosproject/drivers/cisco/TextBlockParserCiscoTest.java
index 39bd2e9..5b9bf92 100644
--- a/drivers/cisco/netconf/src/test/java/org/onosproject/drivers/cisco/TextBlockParserCiscoTest.java
+++ b/drivers/cisco/netconf/src/test/java/org/onosproject/drivers/cisco/TextBlockParserCiscoTest.java
@@ -118,18 +118,24 @@
                 .set(AnnotationKeys.PORT_NAME, INTF6_NAME);
 
         List<PortDescription> intfs = new ArrayList<>();
-        intfs.add(new DefaultPortDescription(INTF1_PORT, IS_ENABLED, COPPER, CONNECTION_SPEED_ETHERNET,
-                                             int1Annotations.build()));
-        intfs.add(new DefaultPortDescription(INTF2_PORT, IS_NOT_ENABLED, COPPER, CONNECTION_SPEED_ETHERNET,
-                                             int2Annotations.build()));
-        intfs.add(new DefaultPortDescription(INTF3_PORT, IS_NOT_ENABLED, COPPER, CONNECTION_SPEED_ETHERNET,
-                                             int3Annotations.build()));
-        intfs.add(new DefaultPortDescription(INTF4_PORT, IS_ENABLED, COPPER, CONNECTION_SPEED_SERIAL,
-                                             int4Annotations.build()));
-        intfs.add(new DefaultPortDescription(INTF5_PORT, IS_ENABLED, FIBER, CONNECTION_SPEED_POS,
-                                             int5Annotations.build()));
-        intfs.add(new DefaultPortDescription(INTF6_PORT, IS_ENABLED, FIBER, CONNECTION_SPEED_FDDI,
-                                             int6Annotations.build()));
+        intfs.add(DefaultPortDescription.builder().withPortNumber(INTF1_PORT).isEnabled(IS_ENABLED)
+                .type(COPPER).portSpeed(CONNECTION_SPEED_ETHERNET)
+                .annotations(int1Annotations.build()).build());
+        intfs.add(DefaultPortDescription.builder().withPortNumber(INTF2_PORT).isEnabled(IS_NOT_ENABLED)
+                .type(COPPER).portSpeed(CONNECTION_SPEED_ETHERNET)
+                .annotations(int2Annotations.build()).build());
+        intfs.add(DefaultPortDescription.builder().withPortNumber(INTF3_PORT).isEnabled(IS_NOT_ENABLED)
+                .type(COPPER).portSpeed(CONNECTION_SPEED_ETHERNET)
+                .annotations(int3Annotations.build()).build());
+        intfs.add(DefaultPortDescription.builder().withPortNumber(INTF4_PORT).isEnabled(IS_ENABLED)
+                .type(COPPER).portSpeed(CONNECTION_SPEED_SERIAL)
+                .annotations(int4Annotations.build()).build());
+        intfs.add(DefaultPortDescription.builder().withPortNumber(INTF5_PORT).isEnabled(IS_ENABLED)
+                .type(FIBER).portSpeed(CONNECTION_SPEED_POS)
+                .annotations(int5Annotations.build()).build());
+        intfs.add(DefaultPortDescription.builder().withPortNumber(INTF6_PORT).isEnabled(IS_ENABLED)
+                .type(FIBER).portSpeed(CONNECTION_SPEED_FDDI)
+                .annotations(int6Annotations.build()).build());
         return intfs;
     }
 
diff --git a/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/CiscoNxosDeviceDescription.java b/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/CiscoNxosDeviceDescription.java
index 04a7132..63cd839 100644
--- a/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/CiscoNxosDeviceDescription.java
+++ b/drivers/cisco/rest/src/main/java/org/onosproject/drivers/cisco/rest/CiscoNxosDeviceDescription.java
@@ -136,8 +136,11 @@
                         long portSpeed = itf.get(ETH_BW).asLong() / ONE_THOUSAND; //in Mbps
                         DefaultAnnotations.Builder annotations = DefaultAnnotations.builder()
                                 .set(AnnotationKeys.PORT_NAME, ifName);
-                        PortDescription desc = new DefaultPortDescription(PortNumber.portNumber(ifNum), state,
-                                Port.Type.FIBER, portSpeed, annotations.build());
+                        PortDescription desc = DefaultPortDescription.builder()
+                                .withPortNumber(PortNumber.portNumber(ifNum))
+                                .isEnabled(state)
+                                .type(Port.Type.FIBER).portSpeed(portSpeed).annotations(annotations.build())
+                                .build();
                         ports.add(desc);
                     }
                 });
diff --git a/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/GnmiDeviceDescriptionDiscovery.java b/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/GnmiDeviceDescriptionDiscovery.java
index eeaf2ab..93083c5 100644
--- a/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/GnmiDeviceDescriptionDiscovery.java
+++ b/drivers/gnmi/src/main/java/org/onosproject/drivers/gnmi/GnmiDeviceDescriptionDiscovery.java
@@ -257,7 +257,7 @@
                 int number = Character.getNumericValue(portId.charAt(portId.length() - 1));
                 PortNumber portNumber = PortNumber.portNumber(number, portId);
                 ports.put(portId, DefaultPortDescription.builder()
-                        .withPortNumer(portNumber));
+                        .withPortNumber(portNumber));
             }
             if (name.equals("enabled")) {
                 DefaultPortDescription.Builder builder = ports.get(portId);
diff --git a/drivers/huawei/src/main/java/org/onosproject/drivers/huawei/HuaweiXmlParser.java b/drivers/huawei/src/main/java/org/onosproject/drivers/huawei/HuaweiXmlParser.java
index 111d1a9..fba0f75 100644
--- a/drivers/huawei/src/main/java/org/onosproject/drivers/huawei/HuaweiXmlParser.java
+++ b/drivers/huawei/src/main/java/org/onosproject/drivers/huawei/HuaweiXmlParser.java
@@ -182,9 +182,13 @@
 
             DefaultAnnotations annotations = DefaultAnnotations.builder()
                     .set(PORT_NAME, ifName).build();
-            ports.add(new DefaultPortDescription(portNumber(port), isEnabled,
-                                                 COPPER, portSpeed,
-                                                 annotations));
+            ports.add(DefaultPortDescription.builder()
+                      .withPortNumber(portNumber(port))
+                      .isEnabled(isEnabled)
+                      .type(COPPER)
+                      .portSpeed(portSpeed)
+                      .annotations(annotations)
+                      .build());
         }
     }
 
diff --git a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java
index d4c709e..4dae93b 100644
--- a/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java
+++ b/drivers/juniper/src/main/java/org/onosproject/drivers/juniper/JuniperUtils.java
@@ -347,11 +347,12 @@
 
         long portSpeed = toMbps(phyIntf.getString(SPEED));
 
-        portDescriptions.add(new DefaultPortDescription(portNumber,
-                                                        admUp && opUp,
-                                                        Type.COPPER,
-                                                        portSpeed,
-                                                        annotations.build()));
+        portDescriptions.add(DefaultPortDescription.builder()
+                .withPortNumber(portNumber)
+                .isEnabled(admUp && opUp)
+                .type(Type.COPPER)
+                .portSpeed(portSpeed)
+                .annotations(annotations.build()).build());
 
         // parse each logical Interface
         for (HierarchicalConfiguration logIntf : phyIntf.configurationsAt("logical-interface")) {
@@ -394,11 +395,12 @@
             // it seemed all logical loop-back interfaces were down
             boolean lEnabled = logIntf.getString("if-config-flags.iff-up") != null;
 
-            portDescriptions.add(new DefaultPortDescription(lPortNumber,
-                                                            admUp && opUp && lEnabled,
-                                                            Type.COPPER,
-                                                            portSpeed,
-                                                            lannotations.build()));
+            portDescriptions.add(DefaultPortDescription.builder()
+                    .withPortNumber(lPortNumber)
+                    .isEnabled(admUp && opUp && lEnabled)
+                    .type(Type.COPPER)
+                    .portSpeed(portSpeed).annotations(lannotations.build())
+                    .build());
         }
     }
 
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/Ea1000DeviceDescription.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/Ea1000DeviceDescription.java
index faf2007..31a9480 100644
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/Ea1000DeviceDescription.java
+++ b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/Ea1000DeviceDescription.java
@@ -134,13 +134,23 @@
 
         DefaultAnnotations annotationOptics = DefaultAnnotations.builder().set(AnnotationKeys.PORT_NAME, "Optics")
                 .build();
-        PortDescription optics = new DefaultPortDescription(PortNumber.portNumber(0), true, Port.Type.FIBER, 1000,
-                annotationOptics);
+        PortDescription optics = DefaultPortDescription.builder()
+                .withPortNumber(PortNumber.portNumber(0))
+                .isEnabled(true)
+                .type(Port.Type.FIBER)
+                .portSpeed(1000)
+                .annotations(annotationOptics)
+                .build();
         ports.add(optics);
 
         DefaultAnnotations annotationHost = DefaultAnnotations.builder().set(AnnotationKeys.PORT_NAME, "Host").build();
-        PortDescription host = new DefaultPortDescription(PortNumber.portNumber(1), true, Port.Type.COPPER, 1000,
-                annotationHost);
+        PortDescription host = DefaultPortDescription.builder()
+                .withPortNumber(PortNumber.portNumber(1))
+                .isEnabled(true)
+                .type(Port.Type.COPPER)
+                .portSpeed(1000)
+                .annotations(annotationHost)
+                .build();
         ports.add(host);
 
         return ports;
diff --git a/drivers/optical/src/main/java/org/onosproject/driver/optical/config/ConfigOpticalDeviceDiscovery.java b/drivers/optical/src/main/java/org/onosproject/driver/optical/config/ConfigOpticalDeviceDiscovery.java
index 5d09100..a38ea02 100644
--- a/drivers/optical/src/main/java/org/onosproject/driver/optical/config/ConfigOpticalDeviceDiscovery.java
+++ b/drivers/optical/src/main/java/org/onosproject/driver/optical/config/ConfigOpticalDeviceDiscovery.java
@@ -198,7 +198,12 @@
             long portSpeed = port.flatMap(OpticalPortConfig::speed).orElse(speedFallback);
             Port.Type type = port.map(OpticalPortConfig::type).orElse(Port.Type.COPPER);
 
-            portDescs.add(new DefaultPortDescription(number, isEnabled, type, portSpeed));
+            portDescs.add(DefaultPortDescription.builder()
+                    .withPortNumber(number)
+                    .isEnabled(isEnabled)
+                    .type(type)
+                    .portSpeed(portSpeed)
+                    .build());
         }
 
         return portDescs;
diff --git a/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkHandshakerUtil.java b/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkHandshakerUtil.java
index 2dd6edd..b0107e2 100644
--- a/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkHandshakerUtil.java
+++ b/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkHandshakerUtil.java
@@ -139,8 +139,13 @@
                 // power value is actually signed-short value, down casting to recover sign bit.
                 builder.set(OpticalAnnotations.CURRENT_POWER, Short.toString((short) power.getPowerValue()));
             }
-            portDescs.add(new DefaultPortDescription(port.number(), port.isEnabled(),
-                    port.type(), port.portSpeed(), builder.build()));
+            portDescs.add(DefaultPortDescription.builder()
+                    .withPortNumber(port.number())
+                    .isEnabled(port.isEnabled())
+                    .type(port.type())
+                    .portSpeed(port.portSpeed())
+                    .annotations(builder.build())
+                    .build());
         }
         return portDescs;
     }
@@ -181,8 +186,13 @@
                 }
                 addLink(port.number(), neighbor);
             }
-            portDescs.add(new DefaultPortDescription(port.number(), port.isEnabled(),
-                                                     port.type(), port.portSpeed(), builder.build()));
+            portDescs.add(DefaultPortDescription.builder()
+                    .withPortNumber(port.number())
+                    .isEnabled(port.isEnabled())
+                    .type(port.type())
+                    .portSpeed(port.portSpeed())
+                    .annotations(builder.build())
+                    .build());
         }
         return portDescs;
     }
diff --git a/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkSwitchHandshaker.java b/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkSwitchHandshaker.java
index 6e315cb..0a2a537 100644
--- a/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkSwitchHandshaker.java
+++ b/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/OplinkSwitchHandshaker.java
@@ -245,8 +245,13 @@
             } else {
                 builder.set(OUTPUT_PORT_STATUS, STATUS_OUT_SERVICE);
             }
-            portDescs.add(new DefaultPortDescription(port.number(), port.isEnabled(),
-                    port.type(), port.portSpeed(), builder.build()));
+            portDescs.add(DefaultPortDescription.builder()
+                    .withPortNumber(port.number())
+                    .isEnabled(port.isEnabled())
+                    .type(port.type())
+                    .portSpeed(port.portSpeed())
+                    .annotations(builder.build())
+                    .build());
         }
         return portDescs;
     }
diff --git a/drivers/ovsdb/src/main/java/org/onosproject/drivers/ovsdb/OvsdbBridgeConfig.java b/drivers/ovsdb/src/main/java/org/onosproject/drivers/ovsdb/OvsdbBridgeConfig.java
index 89eb22b..cba5c87 100644
--- a/drivers/ovsdb/src/main/java/org/onosproject/drivers/ovsdb/OvsdbBridgeConfig.java
+++ b/drivers/ovsdb/src/main/java/org/onosproject/drivers/ovsdb/OvsdbBridgeConfig.java
@@ -116,12 +116,12 @@
         Set<OvsdbPort> ports = client.getPorts();
 
         return ports.stream()
-                .map(x -> new DefaultPortDescription(
-                                PortNumber.portNumber(x.portNumber().value()),
-                                true,
-                                DefaultAnnotations.builder()
-                                        .set("portName", x.portName().value())
-                                        .build()))
+                .map(x -> DefaultPortDescription.builder()
+                        .withPortNumber(PortNumber.portNumber(x.portNumber().value()))
+                        .isEnabled(true)
+                        .annotations(DefaultAnnotations.builder()
+                                .set("portName", x.portName().value())
+                                .build()).build())
                 .collect(Collectors.toSet());
     }
 
diff --git a/drivers/server/src/main/java/org/onosproject/drivers/server/ServerDevicesDiscovery.java b/drivers/server/src/main/java/org/onosproject/drivers/server/ServerDevicesDiscovery.java
index 694320d..8d08585 100644
--- a/drivers/server/src/main/java/org/onosproject/drivers/server/ServerDevicesDiscovery.java
+++ b/drivers/server/src/main/java/org/onosproject/drivers/server/ServerDevicesDiscovery.java
@@ -446,12 +446,13 @@
 
             // Create a port description and add it to the list
             portDescriptions.add(
-                new DefaultPortDescription(
-                    portNumber, nic.status(),
-                    nic.portType(), nic.speed(),
-                    annotations.build()
-                )
-            );
+                    DefaultPortDescription.builder()
+                            .withPortNumber(portNumber)
+                            .isEnabled(nic.status())
+                            .type(nic.portType())
+                            .portSpeed(nic.speed())
+                            .annotations(annotations.build())
+                            .build());
 
             log.info(
                 "Port discovery on device {}: NIC {} is {} at {} Mbps",
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/PortDescriptionsConfig.java b/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/PortDescriptionsConfig.java
index a387810..d7d5e53 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/PortDescriptionsConfig.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/config/basics/PortDescriptionsConfig.java
@@ -97,7 +97,7 @@
                 PortNumber portNumber = createPortNumber(number, name);
 
                 DefaultPortDescription.Builder builder = DefaultPortDescription.builder()
-                        .withPortNumer(portNumber);
+                        .withPortNumber(portNumber);
                 if (portNode.has(ENABLED)) {
                     builder.isEnabled(portNode.path(ENABLED).asBoolean());
                 }
diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/device/PortProtoTranslator.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/device/PortProtoTranslator.java
index 0d0e0fa..046cedf 100644
--- a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/device/PortProtoTranslator.java
+++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/net/device/PortProtoTranslator.java
@@ -50,7 +50,9 @@
         long portSpeed = portDescription.getPortSpeed();
         SparseAnnotations annotations = AnnotationsTranslator.asAnnotations(portDescription.getAnnotationsMap());
         // TODO How to deal with more specific Port...
-        return new DefaultPortDescription(number, isEnabled, type, portSpeed, annotations);
+        return DefaultPortDescription.builder().withPortNumber(number).isEnabled(isEnabled)
+                .type(type).portSpeed(portSpeed).annotations(annotations)
+                .build();
     }
 
     /**
diff --git a/incubator/rpc-grpc/src/test/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceTest.java b/incubator/rpc-grpc/src/test/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceTest.java
index af01f05..8990b6e 100644
--- a/incubator/rpc-grpc/src/test/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceTest.java
+++ b/incubator/rpc-grpc/src/test/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceTest.java
@@ -160,7 +160,8 @@
         assertEqualsButNotSame(DEVICE_ID, svDeviceProviderService.deviceConnectedDid);
         assertEqualsButNotSame(DDESC, svDeviceProviderService.deviceConnectedDesc);
 
-        PortDescription portDescription = new DefaultPortDescription(PORT, true, ANON);
+        PortDescription portDescription = DefaultPortDescription.builder().withPortNumber(PORT)
+                .isEnabled(true).annotations(ANON).build();
         List<PortDescription> portDescriptions = ImmutableList.of(portDescription);
         clDeviceProviderService.updatePorts(DEVICE_ID, portDescriptions);
         assertTrue(svDeviceProviderService.updatePorts.await(10, TimeUnit.SECONDS));
diff --git a/providers/bgp/topology/src/main/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProvider.java b/providers/bgp/topology/src/main/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProvider.java
index 7200c5c..806c961 100644
--- a/providers/bgp/topology/src/main/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProvider.java
+++ b/providers/bgp/topology/src/main/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProvider.java
@@ -299,7 +299,8 @@
                 portList = new ArrayList<>();
             }
             if (portNumber != null) {
-                PortDescription portDescriptions = new DefaultPortDescription(portNumber, true);
+                PortDescription portDescriptions = DefaultPortDescription.builder().withPortNumber(portNumber)
+                        .isEnabled(true).build();
                 portList.add(portDescriptions);
             }
 
diff --git a/providers/isis/topology/src/main/java/org/onosproject/provider/isis/topology/impl/IsisTopologyProvider.java b/providers/isis/topology/src/main/java/org/onosproject/provider/isis/topology/impl/IsisTopologyProvider.java
index 06c7eb1..05f87bb 100644
--- a/providers/isis/topology/src/main/java/org/onosproject/provider/isis/topology/impl/IsisTopologyProvider.java
+++ b/providers/isis/topology/src/main/java/org/onosproject/provider/isis/topology/impl/IsisTopologyProvider.java
@@ -231,7 +231,8 @@
             portList = new ArrayList<>();
         }
         if (portNumber != null) {
-            PortDescription portDescriptions = new DefaultPortDescription(portNumber, true);
+            PortDescription portDescriptions = DefaultPortDescription.builder()
+                    .withPortNumber(portNumber).isEnabled(true).build();
             portList.add(portDescriptions);
         }
         portMap.put(deviceId, portList);
diff --git a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
index 9cf81d0..f675dbc 100644
--- a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
+++ b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
@@ -356,9 +356,14 @@
                         Port port = deviceService.getPort(deviceId, portNumber);
                         //rebuilding port description with admin state changed.
                         providerService.portStatusChanged(deviceId,
-                                new DefaultPortDescription(portNumber, enable, false,
-                                        port.type(), port.portSpeed(),
-                                        (SparseAnnotations) port.annotations()));
+                                DefaultPortDescription.builder()
+                                        .withPortNumber(portNumber)
+                                        .isEnabled(enable)
+                                        .isRemoved(false)
+                                        .type(port.type())
+                                        .portSpeed(port.portSpeed())
+                                        .annotations((SparseAnnotations) port.annotations())
+                                        .build());
                     } else {
                         log.warn("Your device {} port {} status can't be changed to {}",
                                 deviceId, portNumber, enable);
diff --git a/providers/netconf/device/src/test/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProviderTest.java b/providers/netconf/device/src/test/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProviderTest.java
index c16de45..29d16ba 100644
--- a/providers/netconf/device/src/test/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProviderTest.java
+++ b/providers/netconf/device/src/test/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProviderTest.java
@@ -286,7 +286,8 @@
 
     private void prepareMocks(int count) {
         for (int i = 1; i <= count; i++) {
-            deviceDescription.portDescriptions.add(new DefaultPortDescription(PortNumber.portNumber(i), true));
+            deviceDescription.portDescriptions.add(DefaultPortDescription.builder()
+                    .withPortNumber(PortNumber.portNumber(i)).isEnabled(true).build());
         }
     }
 
diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java b/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java
index 98efd7c..775a2d7 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/TopologySimulator.java
@@ -396,8 +396,12 @@
     protected List<PortDescription> buildPorts(int portCount) {
         List<PortDescription> ports = Lists.newArrayList();
         for (int i = 1; i <= portCount; i++) {
-            ports.add(new DefaultPortDescription(PortNumber.portNumber(i), true,
-                                                 Port.Type.COPPER, 0));
+            ports.add(DefaultPortDescription.builder()
+                    .withPortNumber(PortNumber.portNumber(i))
+                    .isEnabled(true)
+                    .type(Port.Type.COPPER)
+                    .portSpeed(0)
+                    .build());
         }
         return ports;
     }
diff --git a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
index cfaf107..fad323e 100644
--- a/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
+++ b/providers/openflow/device/src/main/java/org/onosproject/provider/of/device/impl/OpenFlowDeviceProvider.java
@@ -1163,11 +1163,13 @@
             if (ether.isPresent()) {
                 // ethernet port
                 // TODO parse other part of OFPortDescPropEthernet if necessary
-                return new DefaultPortDescription(portNo,
-                                                  enabled,
-                                                  COPPER,
-                                                  portSpeed(port),
-                                                  annotations.build());
+                return DefaultPortDescription.builder()
+                        .withPortNumber(portNo)
+                        .isEnabled(enabled)
+                        .type(COPPER)
+                        .portSpeed(portSpeed(port))
+                        .annotations(annotations.build())
+                        .build();
             }
 
             Optional<OFPortDescPropOptical> optical = port.getProperties().stream()
@@ -1237,19 +1239,23 @@
 
                 // TODO How to determine appropriate port type?
 
-                return new DefaultPortDescription(portNo,
-                                                  enabled,
-                                                  FIBER,
-                                                  portSpeed(port),
-                                                  annotations.build());
+                return DefaultPortDescription.builder()
+                        .withPortNumber(portNo)
+                        .isEnabled(enabled)
+                        .type(FIBER)
+                        .portSpeed(portSpeed(port))
+                        .annotations(annotations.build())
+                        .build();
             }
 
             // fall back default
-            return new DefaultPortDescription(portNo,
-                                              enabled,
-                                              COPPER,
-                                              portSpeed(port),
-                                              annotations.build());
+            return DefaultPortDescription.builder()
+                    .withPortNumber(portNo)
+                    .isEnabled(enabled)
+                    .type(COPPER)
+                    .portSpeed(portSpeed(port))
+                    .annotations(annotations.build())
+                    .build();
 
         }
 
@@ -1272,8 +1278,13 @@
             SparseAnnotations annotations = makePortAnnotation(port.getName(),
                                                                port.getHwAddr().toString(),
                                                                adminDown).build();
-            return new DefaultPortDescription(portNo, enabled, type,
-                                              portSpeed(port), annotations);
+            return DefaultPortDescription.builder()
+                    .withPortNumber(portNo)
+                    .isEnabled(enabled)
+                    .type(type)
+                    .portSpeed(portSpeed(port))
+                    .annotations(annotations)
+                    .build();
         }
 
         /**
@@ -1349,7 +1360,13 @@
                     break;
             }
 
-            return new DefaultPortDescription(portNo, enabled, FIBER, 0, annotations);
+            return DefaultPortDescription.builder()
+                    .withPortNumber(portNo)
+                    .isEnabled(enabled)
+                    .type(FIBER)
+                    .portSpeed(0)
+                    .annotations(annotations)
+                    .build();
         }
 
         /**
diff --git a/providers/ospf/topology/src/main/java/org/onosproject/provider/ospf/topology/impl/OspfTopologyProvider.java b/providers/ospf/topology/src/main/java/org/onosproject/provider/ospf/topology/impl/OspfTopologyProvider.java
index 9555f99..f77cb3e 100644
--- a/providers/ospf/topology/src/main/java/org/onosproject/provider/ospf/topology/impl/OspfTopologyProvider.java
+++ b/providers/ospf/topology/src/main/java/org/onosproject/provider/ospf/topology/impl/OspfTopologyProvider.java
@@ -211,11 +211,13 @@
             }
             //Updating ports of the link
             List<PortDescription> srcPortDescriptions = new LinkedList<>();
-            srcPortDescriptions.add(new DefaultPortDescription(linkDes.src().port(), true));
+            srcPortDescriptions.add(DefaultPortDescription.builder()
+                    .withPortNumber(linkDes.src().port()).isEnabled(true).build());
             deviceProviderService.updatePorts(linkDes.src().deviceId(), srcPortDescriptions);
 
             List<PortDescription> dstPortDescriptions = new LinkedList<>();
-            dstPortDescriptions.add(new DefaultPortDescription(linkDes.dst().port(), true));
+            dstPortDescriptions.add(DefaultPortDescription.builder()
+                    .withPortNumber(linkDes.dst().port()).isEnabled(true).build());
             deviceProviderService.updatePorts(linkDes.dst().deviceId(), dstPortDescriptions);
             linkProviderService.linkDetected(linkDes);
         }
@@ -229,11 +231,13 @@
             LinkDescription linkDes = buildLinkDes(ospfRouter, ospfLinkTed);
             //Updating ports of the link
             List<PortDescription> srcPortDescriptions = new LinkedList<>();
-            srcPortDescriptions.add(new DefaultPortDescription(linkDes.src().port(), true));
+            srcPortDescriptions.add(DefaultPortDescription.builder()
+                    .withPortNumber(linkDes.src().port()).isEnabled(true).build());
             deviceProviderService.updatePorts(linkDes.src().deviceId(), srcPortDescriptions);
 
             List<PortDescription> dstPortDescriptions = new LinkedList<>();
-            dstPortDescriptions.add(new DefaultPortDescription(linkDes.dst().port(), true));
+            dstPortDescriptions.add(DefaultPortDescription.builder()
+                    .withPortNumber(linkDes.dst().port()).isEnabled(true).build());
             deviceProviderService.updatePorts(linkDes.dst().deviceId(), dstPortDescriptions);
             linkProviderService.linkVanished(linkDes);
         }
@@ -243,4 +247,4 @@
             log.info("Router changed is not supported currently");
         }
     }
-}
\ No newline at end of file
+}
diff --git a/providers/ovsdb/device/src/test/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProviderTest.java b/providers/ovsdb/device/src/test/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProviderTest.java
index ad37efc..ec0bba6 100644
--- a/providers/ovsdb/device/src/test/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProviderTest.java
+++ b/providers/ovsdb/device/src/test/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProviderTest.java
@@ -139,7 +139,8 @@
 
     private void prepareMocks(int count) {
         for (int i = 1; i <= count; i++) {
-            deviceDescription.portDescriptions.add(new DefaultPortDescription(PortNumber.portNumber(i), true));
+            deviceDescription.portDescriptions.add(DefaultPortDescription.builder()
+                    .withPortNumber(PortNumber.portNumber(i)).isEnabled(true).build());
         }
     }
 
diff --git a/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProvider.java b/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProvider.java
index 02d5664..c4f6a50 100644
--- a/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProvider.java
+++ b/providers/pcep/topology/src/main/java/org/onosproject/provider/pcep/topology/impl/PcepTopologyProvider.java
@@ -163,9 +163,13 @@
         if (port != null) {
             SparseAnnotations annotations = DefaultAnnotations.builder()
                     .putAll(port.annotations()).build();
-            portList.add(new DefaultPortDescription(port.number(), port.isEnabled(),
-                                                    port.type(), port.portSpeed(),
-                                                    annotations));
+            portList.add(DefaultPortDescription.builder()
+                    .withPortNumber(port.number())
+                    .isEnabled(port.isEnabled())
+                    .type(port.type())
+                    .portSpeed(port.portSpeed())
+                    .annotations(annotations)
+                    .build());
         }
 
         portMap.put(dpid.value(), portList);