Address trivial eclipse warnings
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / codec / TypeDefinitionAwareCodec.java
index 0939f5281acbc25551b855d9882b4f91df775b34..578b50891bf2fff614265b294662374ff040c5c9 100644 (file)
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
 package org.opendaylight.yangtools.yang.data.impl.codec;
 
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Set;
-
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.IntegerTypeDefinition;
+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;
+
+public abstract class TypeDefinitionAwareCodec<J, T extends TypeDefinition<T>> implements DataStringCodec<J> {
+    private final Optional<T> typeDefinition;
+    private final Class<J> inputClass;
 
-import com.google.common.base.Joiner;
-import com.google.common.collect.ImmutableSet;
-
-import static org.opendaylight.yangtools.yang.model.util.BaseTypes.*;
-
-public abstract class TypeDefinitionAwareCodec<T> implements StringCodec<T> {
-
-    private final TypeDefinition<?> typeDefinition;
-    private final Class<T> inputClass;
-
-    public Class<T> getInputClass() {
+    @Override
+    public Class<J> getInputClass() {
         return inputClass;
     }
 
-    protected TypeDefinitionAwareCodec(TypeDefinition<?> typeDefinition, Class<T> outputClass) {
+    protected TypeDefinitionAwareCodec(final Optional<T> typeDefinition, final Class<J> outputClass) {
+        Preconditions.checkArgument(outputClass != null, "Output class must be specified.");
         this.typeDefinition = typeDefinition;
         this.inputClass = outputClass;
     }
 
-    public TypeDefinition<?> getTypeDefinition() {
+    public Optional<T> getTypeDefinition() {
         return typeDefinition;
     }
 
-    @Override
-    public String serialize(T data) {
-        return data.toString();
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    public static TypeDefinitionAwareCodec<Object, ? extends TypeDefinition<?>> from(final TypeDefinition typeDefinition) {
+        return (TypeDefinitionAwareCodec)fromType(typeDefinition);
     }
 
-    public static final TypeDefinitionAwareCodec<?> from(TypeDefinition<?> typeDefinition) {
-        while(typeDefinition.getBaseType() != null) {
-            typeDefinition = typeDefinition.getBaseType();
-        }
-        
-        if (BINARY_QNAME.equals(typeDefinition.getQName())) {
-            return new BinaryCodec(typeDefinition);
-        }
-        if (BITS_QNAME.equals(typeDefinition.getQName())) {
-            return new BitsCodec(typeDefinition);
-        }
-        if (BOOLEAN_QNAME.equals(typeDefinition.getQName())) {
-            return new BooleanCodec(typeDefinition);
-        }
-        if (DECIMAL64_QNAME.equals(typeDefinition.getQName())) {
-            return new DecimalCodec(typeDefinition);
-        }
-        if (EMPTY_QNAME.equals(typeDefinition.getQName())) {
-            return new EmptyCodec(typeDefinition);
-        }
-        if (ENUMERATION_QNAME.equals(typeDefinition.getQName())) {
-            return new EnumCodec(typeDefinition);
-        }
-        if (INT8_QNAME.equals(typeDefinition.getQName())) {
-            return new Int8Codec(typeDefinition);
-        }
-        if (INT16_QNAME.equals(typeDefinition.getQName())) {
-            return new Int16Codec(typeDefinition);
-        }
-        if (INT32_QNAME.equals(typeDefinition.getQName())) {
-            return new Int32Codec(typeDefinition);
-        }
-        if (INT64_QNAME.equals(typeDefinition.getQName())) {
-            return new Int64Codec(typeDefinition);
-        }
-        if (STRING_QNAME.equals(typeDefinition.getQName())) {
-            return new StringCodec(typeDefinition);
-        }
-        if (UINT8_QNAME.equals(typeDefinition.getQName())) {
-            return new Uint8Codec(typeDefinition);
-        }
-        if (UINT16_QNAME.equals(typeDefinition.getQName())) {
-            return new Uint16Codec(typeDefinition);
-        }
-        if (UINT32_QNAME.equals(typeDefinition.getQName())) {
-            return new Uint32Codec(typeDefinition);
-        }
-        if (UINT64_QNAME.equals(typeDefinition.getQName())) {
-            return new Uint64Codec(typeDefinition);
-        }
-        return null;
+    @SuppressWarnings("unchecked")
+    public static <T extends TypeDefinition<T>> TypeDefinitionAwareCodec<?, T> fromType(final T typeDefinition) {
+        @SuppressWarnings("rawtypes")
+        final TypeDefinitionAwareCodec codec;
+
+        if (typeDefinition instanceof BinaryTypeDefinition) {
+            codec = BinaryStringCodec.from((BinaryTypeDefinition)typeDefinition);
+        } else if (typeDefinition instanceof BitsTypeDefinition) {
+            codec = BitsStringCodec.from((BitsTypeDefinition)typeDefinition);
+        } else if (typeDefinition instanceof BooleanTypeDefinition) {
+            codec = BooleanStringCodec.from((BooleanTypeDefinition)typeDefinition);
+        } else if (typeDefinition instanceof DecimalTypeDefinition) {
+            codec = DecimalStringCodec.from((DecimalTypeDefinition)typeDefinition);
+        } else if (typeDefinition instanceof EmptyTypeDefinition) {
+            codec = EmptyStringCodec.INSTANCE;
+        } else if (typeDefinition instanceof EnumTypeDefinition) {
+            codec = EnumStringCodec.from((EnumTypeDefinition)typeDefinition);
+        } else if (typeDefinition instanceof IntegerTypeDefinition) {
+            codec = AbstractIntegerStringCodec.from((IntegerTypeDefinition) typeDefinition);
+        } else if (typeDefinition instanceof StringTypeDefinition) {
+            codec = StringStringCodec.from((StringTypeDefinition)typeDefinition);
+        } else if (typeDefinition instanceof UnionTypeDefinition) {
+            codec = UnionStringCodec.from((UnionTypeDefinition)typeDefinition);
+        } else if (typeDefinition instanceof UnsignedIntegerTypeDefinition) {
+            codec = AbstractIntegerStringCodec.from((UnsignedIntegerTypeDefinition) typeDefinition);
+        } else {
+            codec = null;
+        }
+        return codec;
     }
-
-    public static class BooleanCodec extends TypeDefinitionAwareCodec<Boolean> {
-
-        protected BooleanCodec(TypeDefinition<?> typeDefinition) {
-            super(typeDefinition, Boolean.class);
-        }
-
-        @Override
-        public String serialize(Boolean data) {
-            return data.toString();
-        }
-
-        @Override
-        public Boolean deserialize(String stringRepresentation) {
-            return Boolean.parseBoolean(stringRepresentation);
-        }
-    };
-
-    public static class Uint8Codec extends TypeDefinitionAwareCodec<Short> {
-
-        protected Uint8Codec(TypeDefinition<?> typeDefinition) {
-            super(typeDefinition, Short.class);
-        }
-
-        @Override
-        public String serialize(Short data) {
-            return data.toString();
-        }
-
-        @Override
-        public Short deserialize(String stringRepresentation) {
-            return Short.parseShort(stringRepresentation);
-        }
-    };
-
-    public static class Uint16Codec extends TypeDefinitionAwareCodec<Integer> {
-        protected Uint16Codec(TypeDefinition<?> typeDefinition) {
-            super(typeDefinition, Integer.class);
-        }
-
-        @Override
-        public Integer deserialize(String stringRepresentation) {
-            return Integer.parseInt(stringRepresentation);
-        }
-    };
-
-    public static class Uint32Codec extends TypeDefinitionAwareCodec<Long> {
-
-        protected Uint32Codec(TypeDefinition<?> typeDefinition) {
-            super(typeDefinition, Long.class);
-        }
-
-        @Override
-        public Long deserialize(String stringRepresentation) {
-            return Long.parseLong(stringRepresentation);
-        }
-    };
-
-    public static class Uint64Codec extends TypeDefinitionAwareCodec<BigInteger> {
-
-        protected Uint64Codec(TypeDefinition<?> typeDefinition) {
-            super(typeDefinition, BigInteger.class);
-        }
-
-        @Override
-        public BigInteger deserialize(String stringRepresentation) {
-            // FIXME: Implement codec correctly
-            return BigInteger.valueOf(Long.valueOf(stringRepresentation));
-        }
-    };
-
-    public static class StringCodec extends TypeDefinitionAwareCodec<String> {
-
-        protected StringCodec(TypeDefinition<?> typeDefinition) {
-            super(typeDefinition, String.class);
-        }
-
-        @Override
-        public String deserialize(String stringRepresentation) {
-            return stringRepresentation;
-        }
-    };
-
-    public static class Int16Codec extends TypeDefinitionAwareCodec<Short> {
-
-        protected Int16Codec(TypeDefinition<?> typeDefinition) {
-            super(typeDefinition, Short.class);
-        }
-
-        @Override
-        public Short deserialize(String stringRepresentation) {
-            return Short.valueOf(stringRepresentation);
-        }
-    };
-
-    public static class Int32Codec extends TypeDefinitionAwareCodec<Integer> {
-
-        protected Int32Codec(TypeDefinition<?> typeDefinition) {
-            super(typeDefinition, Integer.class);
-        }
-
-        @Override
-        public Integer deserialize(String stringRepresentation) {
-            return Integer.valueOf(stringRepresentation);
-        }
-    };
-
-    public static class Int64Codec extends TypeDefinitionAwareCodec<Long> {
-
-        protected Int64Codec(TypeDefinition<?> typeDefinition) {
-            super(typeDefinition, Long.class);
-        }
-
-        @Override
-        public Long deserialize(String stringRepresentation) {
-            return Long.parseLong(stringRepresentation);
-        }
-    };
-
-    public static class Int8Codec extends TypeDefinitionAwareCodec<Byte> {
-
-        protected Int8Codec(TypeDefinition<?> typeDefinition) {
-            super(typeDefinition, Byte.class);
-        }
-
-        @Override
-        public Byte deserialize(String stringRepresentation) {
-            return Byte.parseByte(stringRepresentation);
-        }
-    };
-
-    public static class EmptyCodec extends TypeDefinitionAwareCodec<Void> {
-
-        protected EmptyCodec(TypeDefinition<?> typeDefinition) {
-            super(typeDefinition, Void.class);
-        }
-
-        @Override
-        public String serialize(Void data) {
-            return "";
-        }
-
-        @Override
-        public Void deserialize(String stringRepresentation) {
-            return null;
-        }
-    };
-
-    public static final class BinaryCodec extends TypeDefinitionAwareCodec<byte[]> {
-
-        protected BinaryCodec(TypeDefinition<?> typeDefinition) {
-            super(typeDefinition, byte[].class);
-        }
-
-        @Override
-        public String serialize(byte[] data) {
-            // FIXME By YANG Spec
-            return null;
-        }
-
-        @Override
-        public byte[] deserialize(String stringRepresentation) {
-            // FIXME By YANG Spec
-            return null;
-        }
-    };
-
-    public static final class BitsCodec extends TypeDefinitionAwareCodec<Set<String>> {
-
-        @SuppressWarnings("unchecked")
-        protected BitsCodec(TypeDefinition<?> typeDefinition) {
-            super(typeDefinition, (Class<Set<String>>) ((Class<?>) Set.class));
-        }
-
-        @Override
-        public String serialize(Set<String> data) {
-            return Joiner.on(" ").join(data).toString();
-        }
-
-        @Override
-        public Set<String> deserialize(String stringRepresentation) {
-            String[] strings = stringRepresentation.split(" ");
-            return ImmutableSet.copyOf(strings);
-        }
-    };
-
-    public static class EnumCodec extends TypeDefinitionAwareCodec<String> {
-
-        protected EnumCodec(TypeDefinition<?> typeDefinition) {
-            super(typeDefinition, String.class);
-        }
-
-        @Override
-        public String deserialize(String stringRepresentation) {
-            return stringRepresentation;
-        }
-    };
-
-    public static class DecimalCodec extends TypeDefinitionAwareCodec<BigDecimal> {
-
-        protected DecimalCodec(TypeDefinition<?> typeDefinition) {
-            super(typeDefinition, BigDecimal.class);
-        }
-
-        @Override
-        public String serialize(BigDecimal data) {
-            return data.toString();
-        }
-
-        @Override
-        public BigDecimal deserialize(String stringRepresentation) {
-            return new BigDecimal(stringRepresentation);
-        }
-    };
 }