Add IpAddress->InetAddress conversion utilities 93/35493/1
authorRobert Varga <rovarga@cisco.com>
Fri, 26 Feb 2016 21:34:09 +0000 (22:34 +0100)
committerRobert Varga <rovarga@cisco.com>
Fri, 26 Feb 2016 21:34:09 +0000 (22:34 +0100)
These seem to be handy, so provide them out-of-box.

Change-Id: I4f203c713e2b802f16529e51916a9d4340bf809f
Signed-off-by: Robert Varga <rovarga@cisco.com>
model/ietf/ietf-inet-types-2013-07-15/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/inet/types/rev130715/IetfInetUtil.java
model/ietf/ietf-inet-types/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/inet/types/rev100924/IetfInetUtil.java
model/ietf/ietf-type-util/src/main/java/org/opendaylight/mdsal/model/ietf/util/AbstractIetfInetUtil.java
model/ietf/ietf-type-util/src/test/java/org/opendaylight/mdsal/model/ietf/util/IpUtil.java

index fa2291f89adca8034cda8dba464dc8c2a3ed49e6..5d79b229cfee4710f0a4663d644a539e3f128309 100644 (file)
@@ -50,4 +50,14 @@ public final class IetfInetUtil extends AbstractIetfInetUtil<Ipv4Address, Ipv4Pr
     protected String ipv6PrefixString(final Ipv6Prefix prefix) {
         return prefix.getValue();
     }
+
+    @Override
+    protected Ipv4Address maybeIpv4Address(final IpAddress addr) {
+        return addr.getIpv4Address();
+    }
+
+    @Override
+    protected Ipv6Address maybeIpv6Address(final IpAddress addr) {
+        return addr.getIpv6Address();
+    }
 }
index ac146883e2b1a46eb1d6d51d071ad0a0e337ca5e..e5447a42d75001ca937ec6a5af548fe243df1873 100644 (file)
@@ -50,4 +50,14 @@ public final class IetfInetUtil extends AbstractIetfInetUtil<Ipv4Address, Ipv4Pr
     protected String ipv6PrefixString(final Ipv6Prefix prefix) {
         return prefix.getValue();
     }
+
+    @Override
+    protected Ipv4Address maybeIpv4Address(final IpAddress addr) {
+        return addr.getIpv4Address();
+    }
+
+    @Override
+    protected Ipv6Address maybeIpv6Address(final IpAddress addr) {
+        return addr.getIpv6Address();
+    }
 }
index fa76dc97154e38549794362022106a083b680d1e..ac10c27220d63a75112830050fa0e452a445b0cc 100644 (file)
@@ -17,6 +17,7 @@ import java.net.UnknownHostException;
 import java.util.AbstractMap.SimpleImmutableEntry;
 import java.util.Map.Entry;
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import org.opendaylight.yangtools.yang.binding.util.StringValueObjectFactory;
 
 /**
@@ -39,12 +40,14 @@ public abstract class AbstractIetfInetUtil<A4, P4, A6, P6, A> {
         this.prefix6Factory = StringValueObjectFactory.create(prefix6Class, "::0/0");
     }
 
-    protected abstract A ipv4Address(A4 addr);
-    protected abstract A ipv6Address(A6 addr);
-    protected abstract String ipv4AddressString(A4 addr);
-    protected abstract String ipv6AddressString(A6 addr);
-    protected abstract String ipv4PrefixString(P4 prefix);
-    protected abstract String ipv6PrefixString(P6 prefix);
+    @Nonnull protected abstract A ipv4Address(@Nonnull A4 addr);
+    @Nonnull protected abstract A ipv6Address(@Nonnull A6 addr);
+    @Nullable protected abstract A4 maybeIpv4Address(@Nonnull A addr);
+    @Nullable protected abstract A6 maybeIpv6Address(@Nonnull A addr);
+    @Nonnull protected abstract String ipv4AddressString(@Nonnull A4 addr);
+    @Nonnull protected abstract String ipv6AddressString(@Nonnull A6 addr);
+    @Nonnull protected abstract String ipv4PrefixString(@Nonnull P4 prefix);
+    @Nonnull protected abstract String ipv6PrefixString(@Nonnull P6 prefix);
 
     @Nonnull public final A ipAddressFor(@Nonnull final byte[] bytes) {
         switch (bytes.length) {
@@ -68,6 +71,32 @@ public abstract class AbstractIetfInetUtil<A4, P4, A6, P6, A> {
         }
     }
 
+    @Nonnull public final InetAddress inetAddressFor(@Nonnull final A addr) {
+        final A4 v4 = maybeIpv4Address(addr);
+        if (v4 != null) {
+            return inet4AddressFor(v4);
+        }
+        final A6 v6 = maybeIpv6Address(addr);
+        Preconditions.checkArgument(v6 != null, "Address %s is neither IPv4 nor IPv6", addr);
+        return inet6AddressFor(v6);
+    }
+
+    @Nonnull public final Inet4Address inet4AddressFor(@Nonnull final A4 addr) {
+        try {
+            return (Inet4Address) InetAddress.getByAddress(ipv4AddressBytes(addr));
+        } catch (UnknownHostException e) {
+            throw new IllegalArgumentException("Invalid address " + addr, e);
+        }
+    }
+
+    @Nonnull public final Inet6Address inet6AddressFor(@Nonnull final A6 addr) {
+        try {
+            return (Inet6Address) InetAddress.getByAddress(ipv6AddressBytes(addr));
+        } catch (UnknownHostException e) {
+            throw new IllegalArgumentException("Invalid address " + addr, e);
+        }
+    }
+
     /**
      * Create an Ipv4Address by interpreting input bytes as an IPv4 address.
      *
index 90f0ab4f88dd736a5ef568c74b0be41e2a2a3eb4..1e1cd9d35059b85ffc14001d4803a7e5559a3e35 100644 (file)
@@ -42,4 +42,14 @@ final class IpUtil extends AbstractIetfInetUtil<IpClass, IpClass, IpClass, IpCla
     protected String ipv6PrefixString(final IpClass prefix) {
         return prefix._value;
     }
-}
\ No newline at end of file
+
+    @Override
+    protected IpClass maybeIpv4Address(IpClass addr) {
+        return addr;
+    }
+
+    @Override
+    protected IpClass maybeIpv6Address(IpClass addr) {
+        return addr;
+    }
+}