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=24e35c3d8aa5960a89edfb049f2b241630c49323;hb=6c02ae5ce070dfeeeaae878dc5436c601d305886;hp=153b796d884e0d87161723cc0381dc048ddc37f8;hpb=0f351bbc28ddf2cddfe30c8d018646d81953fa17;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 153b796d88..24e35c3d8a 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,27 +18,33 @@ 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; private final StringValueObjectFactory address6Factory; private final StringValueObjectFactory address6NoZoneFactory; private final StringValueObjectFactory prefix6Factory; + private final Class addr4nzClass; + private final Class addr6nzClass; protected AbstractIetfInetUtil(final Class addr4Class, final Class addr4nzClass, final Class prefix4Class, final Class addr6Class, final Class addr6nzClass, final Class prefix6Class) { + this.addr4nzClass = requireNonNull(addr4nzClass); + this.addr6nzClass = requireNonNull(addr6nzClass); this.address4Factory = StringValueObjectFactory.create(addr4Class, "0.0.0.0"); this.address4NoZoneFactory = StringValueObjectFactory.create(addr4nzClass, "0.0.0.0"); this.prefix4Factory = StringValueObjectFactory.create(prefix4Class, "0.0.0.0/0"); @@ -47,22 +53,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('/'); @@ -427,7 +474,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"); } @@ -566,57 +603,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('/'); @@ -625,7 +680,7 @@ public abstract class AbstractIetfInetUtil= 0 && mask <= 32, "Invalid mask %s", mask); final StringBuilder sb = new StringBuilder(18); @@ -668,7 +735,7 @@ public abstract class AbstractIetfInetUtil