X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-data-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fimpl%2Fcodec%2FTypeDefinitionAwareCodec.java;h=e735b28d61ec1192ad8383430dc21b3d0a06d337;hb=9e5540fb30986583d69e51f9290dbb651338f4b0;hp=914ffa7c68f55ad595404766fea53a1e7d5dbabf;hpb=4f9e3a9bf3c5e0430696e9fd99e62c5f83c97f9a;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/TypeDefinitionAwareCodec.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/TypeDefinitionAwareCodec.java index 914ffa7c68..e735b28d61 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/TypeDefinitionAwareCodec.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/TypeDefinitionAwareCodec.java @@ -16,12 +16,21 @@ import static org.opendaylight.yangtools.yang.model.util.BaseTypes.UINT32_QNAME; import static org.opendaylight.yangtools.yang.model.util.BaseTypes.UINT64_QNAME; import static org.opendaylight.yangtools.yang.model.util.BaseTypes.UINT8_QNAME; +import com.google.common.base.CharMatcher; +import com.google.common.base.Joiner; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.base.Splitter; +import com.google.common.base.Strings; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; +import com.google.common.io.BaseEncoding; import java.math.BigDecimal; import java.math.BigInteger; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; - +import javax.xml.bind.DatatypeConverter; import org.opendaylight.yangtools.yang.data.api.codec.BinaryCodec; import org.opendaylight.yangtools.yang.data.api.codec.BitsCodec; import org.opendaylight.yangtools.yang.data.api.codec.BooleanCodec; @@ -51,21 +60,15 @@ import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.UnsignedIntegerTypeDefinition; -import com.google.common.base.Joiner; -import com.google.common.base.Optional; -import com.google.common.base.Preconditions; -import com.google.common.base.Splitter; -import com.google.common.base.Strings; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Sets; -import com.google.common.io.BaseEncoding; - public abstract class TypeDefinitionAwareCodec> implements DataStringCodec { private static final Pattern intPattern = Pattern.compile("[+-]?[1-9][0-9]*$"); private static final Pattern hexPattern = Pattern.compile("[+-]?0[xX][0-9a-fA-F]+"); private static final Pattern octalPattern = Pattern.compile("[+-]?0[1-7][0-7]*$"); + // For up to two characters, this is very fast + private static final CharMatcher X_MATCHER = CharMatcher.anyOf("xX"); + private final Optional typeDefinition; private final Class inputClass; @@ -91,11 +94,11 @@ public abstract class TypeDefinitionAwareCodec> i return 8; } else { String formatedMessage = String.format("Incorrect lexical representation of integer value: %s." - + "\nAn integer value can be defined as: " - + "\n - a decimal number," - + "\n - a hexadecimal number (prefix 0x)," - + "\n - an octal number (prefix 0)." - + "\nSigned values are allowed. Spaces between digits are NOT allowed.", integer); + + "%nAn integer value can be defined as: " + + "%n - a decimal number," + + "%n - a hexadecimal number (prefix 0x)," + + "%n - an octal number (prefix 0)." + + "%nSigned values are allowed. Spaces between digits are NOT allowed.", integer); throw new NumberFormatException(formatedMessage); } } @@ -107,15 +110,8 @@ public abstract class TypeDefinitionAwareCodec> i throw new IllegalArgumentException( "String representing integer number in Hexadecimal format cannot be NULL!"); } - final String normalizedString; - if (hexInt.contains("x")) { - normalizedString = hexInt.replace("x", ""); - } else if (hexInt.contains("X")) { - normalizedString = hexInt.replace("X", ""); - } else { - normalizedString = hexInt; - } - return normalizedString; + + return X_MATCHER.removeFrom(hexInt); } private static final BinaryCodecStringImpl BINARY_DEFAULT_CODEC = new BinaryCodecStringImpl( @@ -345,12 +341,12 @@ public abstract class TypeDefinitionAwareCodec> i @Override public String deserialize(final String stringRepresentation) { - return stringRepresentation == null ? "" :stringRepresentation; + return stringRepresentation == null ? "" : stringRepresentation; } @Override public String serialize(final String data) { - return data == null ? "" : data.toString(); + return data == null ? "" : data; } }; @@ -476,8 +472,7 @@ public abstract class TypeDefinitionAwareCodec> i @Override public byte[] deserialize(final String stringRepresentation) { - return stringRepresentation == null ? null : - BaseEncoding.base64().decode(stringRepresentation); + return stringRepresentation == null ? null : DatatypeConverter.parseBase64Binary(stringRepresentation); } };