Merge "Introduced skeletons of Contributor and User guide."
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / codec / TypeDefinitionAwareCodec.java
index 914ffa7c68f55ad595404766fea53a1e7d5dbabf..e735b28d61ec1192ad8383430dc21b3d0a06d337 100644 (file)
@@ -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<J, T extends TypeDefinition<T>> implements DataStringCodec<J> {
 
     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<T> typeDefinition;
     private final Class<J> inputClass;
 
@@ -91,11 +94,11 @@ public abstract class TypeDefinitionAwareCodec<J, T extends TypeDefinition<T>> 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<J, T extends TypeDefinition<T>> 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<J, T extends TypeDefinition<T>> 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<J, T extends TypeDefinition<T>> i
 
         @Override
         public byte[] deserialize(final String stringRepresentation) {
-            return stringRepresentation == null ? null :
-                                         BaseEncoding.base64().decode(stringRepresentation);
+            return stringRepresentation == null ? null : DatatypeConverter.parseBase64Binary(stringRepresentation);
         }
     };