X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=model%2Fietf%2Fietf-type-util%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fmodel%2Fietf%2Futil%2FAbstractIetfInetUtil.java;h=aca74d459f89f2629f3e8bb066580dd48e86dc0f;hb=2250cb68002d1c3c6a93d2786731694b6f82d510;hp=6fa7af513d32db80cd144e928a421f2c47559a2f;hpb=6704df82683a480497dc360012da79763a7649f8;p=mdsal.git diff --git a/model/ietf/ietf-type-util/src/main/java/org/opendaylight/mdsal/model/ietf/util/AbstractIetfInetUtil.java b/model/ietf/ietf-type-util/src/main/java/org/opendaylight/mdsal/model/ietf/util/AbstractIetfInetUtil.java index 6fa7af513d..aca74d459f 100644 --- a/model/ietf/ietf-type-util/src/main/java/org/opendaylight/mdsal/model/ietf/util/AbstractIetfInetUtil.java +++ b/model/ietf/ietf-type-util/src/main/java/org/opendaylight/mdsal/model/ietf/util/AbstractIetfInetUtil.java @@ -18,17 +18,19 @@ import java.net.InetAddress; import java.net.UnknownHostException; import java.util.AbstractMap.SimpleImmutableEntry; import java.util.Map.Entry; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.mdsal.binding.spec.reflect.StringValueObjectFactory; /** * A set of utility methods to efficiently instantiate various ietf-inet-types DTOs. */ @Beta +@SuppressWarnings("checkstyle:classTypeParameterName") public abstract class AbstractIetfInetUtil { private static final int INET4_LENGTH = 4; private static final int INET6_LENGTH = 16; + private final StringValueObjectFactory address4Factory; private final StringValueObjectFactory address4NoZoneFactory; private final StringValueObjectFactory prefix4Factory; @@ -47,22 +49,33 @@ public abstract class AbstractIetfInetUtil= 0 && mask <= 32, "Invalid mask %s", mask); return prefix4Factory.newInstance(addr + '/' + mask); } - @Nonnull public final Entry splitIpv4Prefix(@Nonnull final P4 prefix) { + public final @NonNull Entry splitIpv4Prefix(final @NonNull P4 prefix) { return splitPrefix(address4Factory, ipv4PrefixString(prefix)); } - @Nonnull public final Entry splitIpv4PrefixNoZone(@Nonnull final P4 prefix) { + public final @NonNull Entry splitIpv4PrefixNoZone(final @NonNull P4 prefix) { return splitPrefix(address4NoZoneFactory, ipv4PrefixString(prefix)); } - @Nonnull public final byte[] ipv4PrefixToBytes(@Nonnull final P4 prefix) { + public final byte @NonNull[] ipv4PrefixToBytes(final @NonNull P4 prefix) { final String str = ipv4PrefixString(prefix); final int slash = str.lastIndexOf('/'); @@ -447,7 +465,7 @@ public abstract class AbstractIetfInetUtil= 0 && mask <= 128, "Invalid mask %s", mask); return prefix6Factory.newInstance(addressStringV6(address) + '/' + mask); } - @Nonnull public final P6 ipv6PrefixForShort(@Nonnull final byte[] address, final int mask) { - return ipv6PrefixForShort(address, 0, mask); - } - - @Nonnull public final P6 ipv6PrefixForShort(@Nonnull final byte[] array, final int startOffset, final int mask) { - if (mask == 0) { - // Easy case, reuse the template - return prefix6Factory.getTemplate(); - } - - checkArgument(mask > 0 && mask <= 128, "Invalid mask %s", mask); - final int size = mask / Byte.SIZE + (mask % Byte.SIZE == 0 ? 0 : 1); - - // Until we can instantiate an IPv6 address for a partial array, use a temporary buffer - byte[] tmp = new byte[INET6_LENGTH]; - System.arraycopy(array, startOffset, tmp, 0, size); - return ipv6PrefixFor(tmp, mask); - } - /** - * Create a /128 Ipv6Prefix by interpreting input bytes as an IPv4 address. + * Create a /128 Ipv6Prefix by interpreting input bytes as an IPv6 address. * * @param addr an {@link Inet6Address} * @return An Ipv6Prefix object - * @throws IllegalArgumentException if addr is not an Inet6Address or if mask is not in range 0-128 + * @throws IllegalArgumentException if addr is not an Inet6Address * @throws NullPointerException if addr is null */ - @Nonnull public final P6 ipv6PrefixFor(@Nonnull final InetAddress addr) { + public final @NonNull P6 ipv6PrefixFor(final @NonNull InetAddress addr) { return prefix6Factory.newInstance(addressStringV6(addr) + "/128"); } @@ -586,57 +581,75 @@ public abstract class AbstractIetfInetUtil= 0 && mask <= 128, "Invalid mask %s", mask); return prefix6Factory.newInstance(addressStringV6(addr) + '/' + mask); } - @Nonnull public final P6 ipv6PrefixFor(@Nonnull final A6 addr) { + public final @NonNull P6 ipv6PrefixFor(final @NonNull A6 addr) { requireNonNull(addr, "Address must not be null"); return prefix6Factory.newInstance(stripZone(ipv6AddressString(addr)) + "/128"); } - @Nonnull public final P6 ipv6PrefixFor(@Nonnull final A6 addr, final int mask) { + public final @NonNull P6 ipv6PrefixFor(final @NonNull A6 addr, final int mask) { requireNonNull(addr, "Address must not be null"); return newIpv6Prefix(stripZone(ipv6AddressString(addr)), mask); } - @Nonnull public final P6 ipv6PrefixForNoZone(@Nonnull final A6NZ addr) { + public final @NonNull P6 ipv6PrefixForNoZone(final @NonNull A6NZ addr) { requireNonNull(addr, "Address must not be null"); return prefix6Factory.newInstance(ipv6AddressString(addr) + "/128"); } - @Nonnull public final P6 ipv6PrefixForNoZone(@Nonnull final A6NZ addr, final int mask) { + public final @NonNull P6 ipv6PrefixForNoZone(final @NonNull A6NZ addr, final int mask) { requireNonNull(addr, "Address must not be null"); return newIpv6Prefix(ipv6AddressString(addr), mask); } + public final @NonNull P6 ipv6PrefixForShort(final byte @NonNull[] address, final int mask) { + return ipv6PrefixForShort(address, 0, mask); + } + + public final @NonNull P6 ipv6PrefixForShort(final byte @NonNull[] array, final int startOffset, final int mask) { + if (mask == 0) { + // Easy case, reuse the template + return prefix6Factory.getTemplate(); + } + + checkArgument(mask > 0 && mask <= 128, "Invalid mask %s", mask); + final int size = mask / Byte.SIZE + (mask % Byte.SIZE == 0 ? 0 : 1); + + // Until we can instantiate an IPv6 address for a partial array, use a temporary buffer + byte[] tmp = new byte[INET6_LENGTH]; + System.arraycopy(array, startOffset, tmp, 0, size); + return ipv6PrefixFor(tmp, mask); + } + private P6 newIpv6Prefix(final String addr, final int mask) { checkArgument(mask >= 0 && mask <= 128, "Invalid mask %s", mask); return prefix6Factory.newInstance(addr + '/' + mask); } - @Nonnull public final Entry splitIpv6Prefix(@Nonnull final P6 prefix) { + public final @NonNull Entry splitIpv6Prefix(final @NonNull P6 prefix) { return splitPrefix(address6Factory, ipv6PrefixString(prefix)); } - @Nonnull public final Entry splitIpv6PrefixNoZone(@Nonnull final P6 prefix) { + public final @NonNull Entry splitIpv6PrefixNoZone(final @NonNull P6 prefix) { return splitPrefix(address6NoZoneFactory, ipv6PrefixString(prefix)); } - private static T prefixToAddress(final StringValueObjectFactory factory, final String str) { + private static @NonNull T prefixToAddress(final StringValueObjectFactory factory, final String str) { return factory.newInstance(str.substring(0, str.lastIndexOf('/'))); } - private static Entry splitPrefix(final StringValueObjectFactory factory, final String str) { + private static @NonNull Entry splitPrefix(final StringValueObjectFactory factory, + final String str) { final int slash = str.lastIndexOf('/'); return new SimpleImmutableEntry<>(factory.newInstance(str.substring(0, slash)), Integer.valueOf(str.substring(slash + 1))); } - @Nonnull public final byte[] ipv6PrefixToBytes(@Nonnull final P6 prefix) { + public final byte @NonNull[] ipv6PrefixToBytes(final @NonNull P6 prefix) { final String str = ipv6PrefixString(prefix); final byte[] bytes = new byte[INET6_LENGTH + 1]; final int slash = str.lastIndexOf('/'); @@ -645,7 +658,7 @@ public abstract class AbstractIetfInetUtil= 0 && mask <= 32, "Invalid mask %s", mask); final StringBuilder sb = new StringBuilder(18); @@ -688,7 +707,7 @@ public abstract class AbstractIetfInetUtil