*/
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;
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;
-import org.opendaylight.yangtools.yang.model.util.DerivedType;
-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 final TypeDefinitionAwareCodec<Object, ? extends TypeDefinition<?>> from(final TypeDefinition typeDefinition) {
- return fromType(typeDefinition);
+ return Optional.ofNullable(typeDefinition);
}
@SuppressWarnings("unchecked")
- public static final <T extends TypeDefinition<T>> TypeDefinitionAwareCodec<?, T> fromType(final T typeDefinition) {
- // FIXME: this is not necessary with yang.model.util.type
- final T normalizedType = (T) DerivedType.from(typeDefinition);
- @SuppressWarnings("rawtypes")
- final TypeDefinitionAwareCodec codec;
+ public static TypeDefinitionAwareCodec<Object, ?> from(final TypeDefinition<?> typeDefinition) {
+ return (TypeDefinitionAwareCodec<Object, ?>) fromType(typeDefinition);
+ }
- if (normalizedType instanceof BinaryTypeDefinition) {
- codec = BinaryStringCodec.from((BinaryTypeDefinition)normalizedType);
- } else if (normalizedType instanceof BitsTypeDefinition) {
- codec = BitsStringCodec.from((BitsTypeDefinition)normalizedType);
- } else if (normalizedType instanceof BooleanTypeDefinition) {
- codec = BooleanStringCodec.from((BooleanTypeDefinition)normalizedType);
- } else if (normalizedType instanceof DecimalTypeDefinition) {
- codec = DecimalStringCodec.from((DecimalTypeDefinition)normalizedType);
- } else if (normalizedType instanceof EmptyTypeDefinition) {
- codec = EmptyStringCodec.INSTANCE;
- } else if (normalizedType instanceof EnumTypeDefinition) {
- codec = EnumStringCodec.from((EnumTypeDefinition)normalizedType);
- } else if (normalizedType instanceof IntegerTypeDefinition) {
- codec = AbstractIntegerStringCodec.from((IntegerTypeDefinition) normalizedType);
- } else if (normalizedType instanceof StringTypeDefinition) {
- codec = StringStringCodec.from((StringTypeDefinition)normalizedType);
- } else if (normalizedType instanceof UnionTypeDefinition) {
- codec = UnionStringCodec.from((UnionTypeDefinition)normalizedType);
- } else if (normalizedType instanceof UnsignedIntegerTypeDefinition) {
- codec = AbstractIntegerStringCodec.from((UnsignedIntegerTypeDefinition) normalizedType);
+ // 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) {
+ return BinaryStringCodec.from((BinaryTypeDefinition)typeDefinition);
+ } else if (typeDefinition instanceof BitsTypeDefinition) {
+ return BitsStringCodec.from((BitsTypeDefinition)typeDefinition);
+ } else if (typeDefinition instanceof BooleanTypeDefinition) {
+ return BooleanStringCodec.from((BooleanTypeDefinition)typeDefinition);
+ } else if (typeDefinition instanceof DecimalTypeDefinition) {
+ return DecimalStringCodec.from((DecimalTypeDefinition)typeDefinition);
+ } else if (typeDefinition instanceof EmptyTypeDefinition) {
+ return EmptyStringCodec.INSTANCE;
+ } else if (typeDefinition instanceof EnumTypeDefinition) {
+ 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) {
+ return StringStringCodec.from((StringTypeDefinition)typeDefinition);
+ } else if (typeDefinition instanceof UnionTypeDefinition) {
+ 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;
}
}