[CORD-2583] Change Fpm protocol classes to use Builder pattern

Change-Id: Ia91b5c07529dabddb7d828bb0352143d4a6083a9
diff --git a/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/protocol/RouteAttributeDst.java b/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/protocol/RouteAttributeDst.java
index 2962c0b..f7e3d3b 100644
--- a/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/protocol/RouteAttributeDst.java
+++ b/apps/routing/fpm/app/src/main/java/org/onosproject/routing/fpm/protocol/RouteAttributeDst.java
@@ -38,7 +38,7 @@
      * @param type type
      * @param dstAddress destination address
      */
-    public RouteAttributeDst(int length, int type, IpAddress dstAddress) {
+    private RouteAttributeDst(int length, int type, IpAddress dstAddress) {
         super(length, type);
 
         this.dstAddress = dstAddress;
@@ -91,8 +91,7 @@
     @Override
     public void encode(ChannelBuffer cb) {
 
-        cb.writeShort(Short.reverseBytes((short) length()));
-        cb.writeShort(Short.reverseBytes((short) type()));
+        super.encode(cb);
 
         ChannelBuffer buffer =  ChannelBuffers.copiedBuffer(dstAddress.toOctets());
         if (length() == Ip6Address.BYTE_LENGTH +
@@ -105,4 +104,54 @@
             throw new IllegalArgumentException("Dst address length incorrect!");
         }
     }
+
+    /**
+     * Returns a new RouteAttributeDst builder.
+     *
+     * @return RouteAttributeDst builder
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    /**
+     * RouteAttributeDst Builder.
+     */
+    public static final class Builder extends RouteAttribute.Builder<Builder> {
+
+        private IpAddress dstAddress = null;
+
+        /**
+        * Hide class constructor.
+        */
+        private Builder() {}
+
+        /**
+         * Override abstract method.
+         */
+        @Override
+        public Builder getThis() {
+            return this;
+        }
+
+        /**
+         * Sets dstAddress for RouteAttributeDst that will be built.
+         *
+         * @param dstAddress to use for built RouteAttributeDst
+         * @return this builder
+         */
+        public Builder dstAddress(IpAddress dstAddress) {
+            this.dstAddress = dstAddress;
+            return this;
+        }
+
+        /**
+         * Builds the RouteAttributeDst.
+         *
+         * @return RouteAttributeDst reference
+         */
+        public RouteAttributeDst build() {
+            return new RouteAttributeDst(length, type, dstAddress);
+        }
+    }
 }