Checkstyle: fix issues and enforce on lisp-proto
[lispflowmapping.git] / mappingservice / lisp-proto / src / main / java / org / opendaylight / lispflowmapping / lisp / util / LispAddressStringifier.java
index 1d191849ed9937a88e32ec82b0d8b64ccb00b4e5..5e5ad815b5c821cc8f7c135892643b0dd23312a8 100644 (file)
@@ -7,11 +7,13 @@
  */
 package org.opendaylight.lispflowmapping.lisp.util;
 
+import com.google.common.base.Preconditions;
+import com.google.common.io.BaseEncoding;
+import com.google.common.net.InetAddresses;
 import java.net.Inet4Address;
 import java.net.Inet6Address;
 import java.net.UnknownHostException;
 import java.util.List;
-
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address;
@@ -28,20 +30,18 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.addres
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Mac;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.NoAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ServicePath;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.SourceDestKey;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.Hop;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.Hop.LrsBits;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ServicePath;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4Binary;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4PrefixBinary;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6Binary;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6PrefixBinary;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Preconditions;
-import com.google.common.io.BaseEncoding;
-import com.google.common.net.InetAddresses;
-
 /**
  * Utility class with static methods returning string representations of
  * supported LISP address types, both for use in URLs and for user friendly
@@ -54,11 +54,13 @@ public class LispAddressStringifier {
     protected static final Logger LOG = LoggerFactory.getLogger(LispAddressStringifier.class);
 
     private static final String PREFIX_SEPARATOR = ":";
+
     /*
      * In the unlikely event that a AFI 0 address is used a key, we use a
      * sequence number to ensure uniqueness
      */
     protected static int noAddrSeq = 0;
+
     /*
      * There are three possible destinations for rendering an address as a
      * string:
@@ -80,20 +82,20 @@ public class LispAddressStringifier {
         return getAddrString(Destination.USER, lispAddress);
     }
 
-    public static String getURIString(LispAddress lispAddress) {
-        return getAddrString(Destination.URI, lispAddress);
+    public static String getString(XtrId xtrId) {
+        return getXtrIdString(xtrId);
     }
 
-    public static String getURLString(LispAddress lispAddress) {
-        return getAddrString(Destination.URL, lispAddress);
+    public static String getURIString(LispAddress lispAddress) {
+        return getAddrString(Destination.URI, lispAddress);
     }
 
-    public static String getString(XtrId xtrId) {
+    public static String getURIString(XtrId xtrId) {
         return getXtrIdString(xtrId);
     }
 
-    public static String getURIString(XtrId xtrId) {
-        return getXtrIdString(xtrId);
+    public static String getURLString(LispAddress lispAddress) {
+        return getAddrString(Destination.URL, lispAddress);
     }
 
     public static String getURLString(XtrId xtrId) {
@@ -124,6 +126,9 @@ public class LispAddressStringifier {
         } else if (addr instanceof Ipv4Prefix) {
             prefix = "ipv4" + PREFIX_SEPARATOR;
             address = getStringFromIpv4Prefix(dst, (Ipv4Prefix) addr);
+        } else if (addr instanceof Ipv4PrefixBinary) {
+            prefix = "ipv4" + PREFIX_SEPARATOR;
+            address = getStringFromIpv4PrefixBinary(dst, (Ipv4PrefixBinary) addr);
         } else if (addr instanceof Ipv6) {
             prefix = "ipv6" + PREFIX_SEPARATOR;
             address = getStringFromIpv6(dst, (Ipv6) addr);
@@ -133,6 +138,9 @@ public class LispAddressStringifier {
         } else if (addr instanceof Ipv6Prefix) {
             prefix = "ipv6" + PREFIX_SEPARATOR;
             address = getStringFromIpv6Prefix(dst, (Ipv6Prefix) addr);
+        } else if (addr instanceof Ipv6PrefixBinary) {
+            prefix = "ipv6" + PREFIX_SEPARATOR;
+            address = getStringFromIpv6PrefixBinary(dst, (Ipv6PrefixBinary) addr);
         } else if (addr instanceof Mac) {
             prefix = "mac" + PREFIX_SEPARATOR;
             address = getStringFromMac(dst, (Mac) addr);
@@ -218,6 +226,20 @@ public class LispAddressStringifier {
         return getPrefixString(dst, prefix);
     }
 
+    protected static String getStringFromIpv4PrefixBinary(Destination dst, Ipv4PrefixBinary addr) {
+        // AFI = 1; IPv4
+        try {
+            StringBuilder prefixBuilder = new StringBuilder(InetAddresses.toAddrString(
+                    Inet4Address.getByAddress(addr.getIpv4AddressBinary().getValue())));
+            prefixBuilder.append('/');
+            prefixBuilder.append(addr.getIpv4MaskLength().toString());
+            return getPrefixString(dst, prefixBuilder.toString());
+        } catch (UnknownHostException e) {
+            LOG.debug("Cannot convert binary IPv4 prefix to string", e);
+        }
+        return null;
+    }
+
     protected static String getStringFromIpv6(Destination dst, Ipv6 addr) {
         // AFI = 2; IPv6
         return addr.getIpv6().getValue();
@@ -238,6 +260,20 @@ public class LispAddressStringifier {
         return addr.getIpv6Prefix().getValue();
     }
 
+    protected static String getStringFromIpv6PrefixBinary(Destination dst, Ipv6PrefixBinary addr) {
+        // AFI = 2; IPv5
+        try {
+            StringBuilder prefixBuilder = new StringBuilder(InetAddresses.toAddrString(
+                    Inet6Address.getByAddress(addr.getIpv6AddressBinary().getValue())));
+            prefixBuilder.append('/');
+            prefixBuilder.append(addr.getIpv6MaskLength().toString());
+            return getPrefixString(dst, prefixBuilder.toString());
+        } catch (UnknownHostException e) {
+            LOG.debug("Cannot convert binary IPv6 prefix to string", e);
+        }
+        return null;
+    }
+
     protected static String getStringFromDistinguishedName(Destination dst, DistinguishedName addr) {
         // AFI = 17; Distinguished Name
         return addr.getDistinguishedName().getValue();
@@ -247,6 +283,7 @@ public class LispAddressStringifier {
         // AFI = 18; Autonomous System Number
         return "AS" + addr.getAsNumber().getValue();
     }
+
     protected static String getStringFromAfiList(Destination dst, AfiList addr) {
         // AFI 16387, LCAF Type 1; Address List
         // Example rendering: