X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=model%2Fietf%2Fietf-type-util%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fmodel%2Fietf%2Futil%2FAbstractIetfYangUtil.java;h=86fa3a4efe745683e59844d46ed0974b5cfe93b1;hb=7cbd12d8894b1703b19e70b07436a937a7b8d0bf;hp=14e23dc86c908978346b332e8b0ee46906beed13;hpb=28d302faed8b6f57263991257163414ac073a37f;p=mdsal.git diff --git a/model/ietf/ietf-type-util/src/main/java/org/opendaylight/mdsal/model/ietf/util/AbstractIetfYangUtil.java b/model/ietf/ietf-type-util/src/main/java/org/opendaylight/mdsal/model/ietf/util/AbstractIetfYangUtil.java index 14e23dc86c..86fa3a4efe 100644 --- a/model/ietf/ietf-type-util/src/main/java/org/opendaylight/mdsal/model/ietf/util/AbstractIetfYangUtil.java +++ b/model/ietf/ietf-type-util/src/main/java/org/opendaylight/mdsal/model/ietf/util/AbstractIetfYangUtil.java @@ -11,6 +11,7 @@ import static com.google.common.base.Preconditions.checkArgument; import com.google.common.annotations.Beta; import java.util.Arrays; +import java.util.UUID; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.spec.reflect.StringValueObjectFactory; @@ -22,7 +23,7 @@ import org.opendaylight.mdsal.binding.spec.reflect.StringValueObjectFactory; * @param

phys-address type */ @Beta -public abstract class AbstractIetfYangUtil { +public abstract class AbstractIetfYangUtil { private static final int MAC_BYTE_LENGTH = 6; private static final char[] HEX_CHARS = "0123456789abcdef".toCharArray(); private static final byte @NonNull[] EMPTY_BYTES = new byte[0]; @@ -47,10 +48,17 @@ public abstract class AbstractIetfYangUtil { private final StringValueObjectFactory macFactory; private final StringValueObjectFactory

physFactory; + private final StringValueObjectFactory hexFactory; + private final StringValueObjectFactory quadFactory; + private final StringValueObjectFactory uuidFactory; - protected AbstractIetfYangUtil(final Class macClass, final Class

physClass) { + protected AbstractIetfYangUtil(final Class macClass, final Class

physClass, final Class hexClass, + final Class quadClass, final Class uuidClass) { this.macFactory = StringValueObjectFactory.create(macClass, "00:00:00:00:00:00"); this.physFactory = StringValueObjectFactory.create(physClass, "00:00"); + this.hexFactory = StringValueObjectFactory.create(hexClass, "00"); + this.quadFactory = StringValueObjectFactory.create(quadClass, "0.0.0.0"); + this.uuidFactory = StringValueObjectFactory.create(uuidClass, "f81d4fae-7dec-11d0-a765-00a0c91e6bf6"); } /** @@ -118,10 +126,40 @@ public abstract class AbstractIetfYangUtil { return macAddressBytes(macAddress); } + public final @NonNull H hexStringFor(final byte @NonNull[] bytes) { + checkArgument(bytes.length > 0, "Hex string should have at least one byte"); + return hexFactory.newInstance(bytesToString(bytes, bytes.length * 3 - 1)); + } + + public final byte @NonNull[] hexStringBytes(final @NonNull H hexString) { + final String str = getHexValue(hexString); + return stringToBytes(str, str.length() / 3 + 1); + } + + public final @NonNull Q dottedQuadFor(final byte @NonNull[] bytes) { + checkArgument(bytes.length == 4, "Dotted-quad should have 4 bytes"); + return quadFactory.newInstance(AbstractIetfInetUtil.addressStringV4(bytes)); + } + + public final byte @NonNull[] dottedQuadBytes(final @NonNull Q hexString) { + final String str = getQuadValue(hexString); + final byte[] bytes = new byte[4]; + Ipv4Utils.fillIpv4Bytes(bytes, 0, str, 0, str.length()); + return bytes; + } + + public final @NonNull U uuidFor(final @NonNull UUID uuid) { + return uuidFactory.newInstance(uuid.toString()); + } + protected abstract String getValue(M macAddress); protected abstract String getPhysValue(P physAddress); + protected abstract String getHexValue(H hexString); + + protected abstract String getQuadValue(Q dottedQuad); + static byte hexValue(final char ch) { byte value; try {