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=7321274ec4eba3dc6a00b40af81c6c4f896fcd22;hpb=e3233ae5c3fb026f17f7d4fcb44326b7c0233cff;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 7321274ec4..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 @@ -26,19 +26,25 @@ 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"); @@ -48,20 +54,31 @@ public abstract class AbstractIetfInetUtil 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 */ public final @NonNull P6 ipv6PrefixFor(final @NonNull InetAddress addr) { @@ -567,8 +604,6 @@ public abstract class AbstractIetfInetUtil= 0 && mask <= 128, "Invalid mask %s", mask); return prefix6Factory.newInstance(addressStringV6(addr) + '/' + mask); } @@ -593,6 +628,25 @@ public abstract class AbstractIetfInetUtil 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); @@ -635,23 +689,35 @@ public abstract class AbstractIetfInetUtil