Add odl-guava dependency
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / codec / TypeDefinitionAwareCodec.java
index 578b50891bf2fff614265b294662374ff040c5c9..b563bff000df4d720b0586ed984715f7ddd97887 100644 (file)
@@ -7,8 +7,11 @@
  */
 package org.opendaylight.yangtools.yang.data.impl.codec;
 
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
+import static java.util.Objects.requireNonNull;
+
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 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;
@@ -16,63 +19,77 @@ 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.Int16TypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.Int32TypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.Int64TypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.Int8TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.Uint16TypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.Uint32TypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.Uint64TypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.Uint8TypeDefinition;
 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;
+public abstract class TypeDefinitionAwareCodec<J, T extends TypeDefinition<T>> extends AbstractDataStringCodec<J> {
+    private final @NonNull Class<J> inputClass;
+    private final @Nullable T typeDefinition;
+
+    // FIXME: reverse arguments
+    protected TypeDefinitionAwareCodec(final @Nullable T typeDefinition, final Class<J> outputClass) {
+        this.typeDefinition = typeDefinition;
+        this.inputClass = requireNonNull(outputClass);
+    }
 
     @Override
     public Class<J> getInputClass() {
         return inputClass;
     }
 
-    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 Optional<T> getTypeDefinition() {
-        return typeDefinition;
-    }
-
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    public static TypeDefinitionAwareCodec<Object, ? extends TypeDefinition<?>> from(final TypeDefinition typeDefinition) {
-        return (TypeDefinitionAwareCodec)fromType(typeDefinition);
+        return Optional.ofNullable(typeDefinition);
     }
 
     @SuppressWarnings("unchecked")
-    public static <T extends TypeDefinition<T>> TypeDefinitionAwareCodec<?, T> fromType(final T typeDefinition) {
-        @SuppressWarnings("rawtypes")
-        final TypeDefinitionAwareCodec codec;
+    public static TypeDefinitionAwareCodec<Object, ?> from(final TypeDefinition<?> typeDefinition) {
+        return (TypeDefinitionAwareCodec<Object, ?>) fromType(typeDefinition);
+    }
 
+    // FIXME: do we want an Optional or a throws instead of @Nullable here?
+    public static @Nullable TypeDefinitionAwareCodec<?, ?> fromType(final TypeDefinition<?> typeDefinition) {
         if (typeDefinition instanceof BinaryTypeDefinition) {
-            codec = BinaryStringCodec.from((BinaryTypeDefinition)typeDefinition);
+            return BinaryStringCodec.from((BinaryTypeDefinition)typeDefinition);
         } else if (typeDefinition instanceof BitsTypeDefinition) {
-            codec = BitsStringCodec.from((BitsTypeDefinition)typeDefinition);
+            return BitsStringCodec.from((BitsTypeDefinition)typeDefinition);
         } else if (typeDefinition instanceof BooleanTypeDefinition) {
-            codec = BooleanStringCodec.from((BooleanTypeDefinition)typeDefinition);
+            return BooleanStringCodec.from((BooleanTypeDefinition)typeDefinition);
         } else if (typeDefinition instanceof DecimalTypeDefinition) {
-            codec = DecimalStringCodec.from((DecimalTypeDefinition)typeDefinition);
+            return  DecimalStringCodec.from((DecimalTypeDefinition)typeDefinition);
         } else if (typeDefinition instanceof EmptyTypeDefinition) {
-            codec = EmptyStringCodec.INSTANCE;
+            return EmptyStringCodec.INSTANCE;
         } else if (typeDefinition instanceof EnumTypeDefinition) {
-            codec = EnumStringCodec.from((EnumTypeDefinition)typeDefinition);
-        } else if (typeDefinition instanceof IntegerTypeDefinition) {
-            codec = AbstractIntegerStringCodec.from((IntegerTypeDefinition) typeDefinition);
+            return EnumStringCodec.from((EnumTypeDefinition)typeDefinition);
+        } else if (typeDefinition instanceof Int8TypeDefinition) {
+            return AbstractIntegerStringCodec.from((Int8TypeDefinition) typeDefinition);
+        } else if (typeDefinition instanceof Int16TypeDefinition) {
+            return AbstractIntegerStringCodec.from((Int16TypeDefinition) typeDefinition);
+        } else if (typeDefinition instanceof Int32TypeDefinition) {
+            return AbstractIntegerStringCodec.from((Int32TypeDefinition) typeDefinition);
+        } else if (typeDefinition instanceof Int64TypeDefinition) {
+            return AbstractIntegerStringCodec.from((Int64TypeDefinition) typeDefinition);
         } else if (typeDefinition instanceof StringTypeDefinition) {
-            codec = StringStringCodec.from((StringTypeDefinition)typeDefinition);
+            return StringStringCodec.from((StringTypeDefinition)typeDefinition);
         } else if (typeDefinition instanceof UnionTypeDefinition) {
-            codec = UnionStringCodec.from((UnionTypeDefinition)typeDefinition);
-        } else if (typeDefinition instanceof UnsignedIntegerTypeDefinition) {
-            codec = AbstractIntegerStringCodec.from((UnsignedIntegerTypeDefinition) typeDefinition);
+            return UnionStringCodec.from((UnionTypeDefinition)typeDefinition);
+        } else if (typeDefinition instanceof Uint8TypeDefinition) {
+            return AbstractIntegerStringCodec.from((Uint8TypeDefinition) typeDefinition);
+        } else if (typeDefinition instanceof Uint16TypeDefinition) {
+            return AbstractIntegerStringCodec.from((Uint16TypeDefinition) typeDefinition);
+        } else if (typeDefinition instanceof Uint32TypeDefinition) {
+            return AbstractIntegerStringCodec.from((Uint32TypeDefinition) typeDefinition);
+        } else if (typeDefinition instanceof Uint64TypeDefinition) {
+            return AbstractIntegerStringCodec.from((Uint64TypeDefinition) typeDefinition);
         } else {
-            codec = null;
+            return null;
         }
-        return codec;
     }
 }