Search in sources :

Example 1 with DatastaxBooleanGetter

use of org.simpleflatmapper.datastax.impl.getter.DatastaxBooleanGetter in project SimpleFlatMapper by arnaudroger.

the class RowGetterFactory method newGetter.

@SuppressWarnings("unchecked")
@Override
public <P> Getter<GettableByIndexData, P> newGetter(Type target, DatastaxColumnKey key, Object... properties) {
    Class<?> targetClass = TypeHelper.toClass(target);
    if (Date.class.equals(targetClass)) {
        return (Getter<GettableByIndexData, P>) new DatastaxTimestampGetter(key.getIndex());
    }
    if (boolean.class.equals(targetClass) || Boolean.class.equals(targetClass)) {
        return (Getter<GettableByIndexData, P>) new DatastaxBooleanGetter(key.getIndex());
    }
    if (InetAddress.class.equals(targetClass)) {
        return (Getter<GettableByIndexData, P>) new DatastaxInetAddressGetter(key.getIndex());
    }
    if (TupleValue.class.equals(targetClass)) {
        return (Getter<GettableByIndexData, P>) new DatastaxTupleValueGetter(key.getIndex());
    }
    if (Collection.class.isAssignableFrom(targetClass)) {
        Type elementType = TypeHelper.getComponentTypeOfListOrArray(target);
        Class<?> dataTypeClass = Object.class;
        Class<?> dataTypeElt = null;
        DataType dtElt = null;
        if (key.getDataType() != null) {
            DataType dataType = key.getDataType();
            dataTypeClass = DataTypeHelper.asJavaClass(dataType);
            if (dataType.isCollection()) {
                dtElt = key.getDataType().getTypeArguments().get(0);
                dataTypeElt = DataTypeHelper.asJavaClass(dtElt);
            }
        } else {
            dataTypeElt = TypeHelper.toClass(elementType);
        }
        if (dataTypeElt != null) {
            if (TypeHelper.areEquals(elementType, dataTypeElt)) {
                if (Set.class.equals(dataTypeClass)) {
                    if (targetClass.isAssignableFrom(dataTypeClass)) {
                        return new DatastaxSetGetter(key.getIndex(), TypeHelper.toClass(elementType));
                    }
                }
                if (List.class.equals(dataTypeClass)) {
                    if (targetClass.isAssignableFrom(dataTypeClass)) {
                        return new DatastaxListGetter(key.getIndex(), TypeHelper.toClass(elementType));
                    }
                }
            } else {
                Converter<?, ?> converter = getConverter(elementType, dataTypeElt, dtElt);
                if (converter != null) {
                    if (Set.class.equals(dataTypeClass)) {
                        if (targetClass.isAssignableFrom(dataTypeClass)) {
                            return new DatastaxSetWithConverterGetter(key.getIndex(), dataTypeElt, converter);
                        }
                    }
                    if (List.class.equals(dataTypeClass)) {
                        if (targetClass.isAssignableFrom(dataTypeClass)) {
                            return new DatastaxListWithConverterGetter(key.getIndex(), dataTypeElt, converter);
                        }
                    }
                }
            }
        }
    }
    if (Map.class.equals(targetClass)) {
        TypeHelper.MapEntryTypes keyValueTypeOfMap = TypeHelper.getKeyValueTypeOfMap(target);
        Class<?> dtKeyType = null;
        Class<?> dtValueType = null;
        DataType dtKey = null;
        DataType dtValue = null;
        if (key.getDataType() != null) {
            List<DataType> typeArguments = key.getDataType().getTypeArguments();
            if (typeArguments.size() == 2) {
                dtKey = typeArguments.get(0);
                dtKeyType = DataTypeHelper.asJavaClass(dtKey);
                dtValue = typeArguments.get(1);
                dtValueType = DataTypeHelper.asJavaClass(dtValue);
            }
        } else {
            dtKeyType = TypeHelper.toClass(keyValueTypeOfMap.getKeyType());
            dtValueType = TypeHelper.toClass(keyValueTypeOfMap.getValueType());
        }
        if (dtKeyType != null && dtValueType != null) {
            if (TypeHelper.areEquals(keyValueTypeOfMap.getKeyType(), dtKeyType) && TypeHelper.areEquals(keyValueTypeOfMap.getValueType(), dtValueType)) {
                return new DatastaxMapGetter(key.getIndex(), TypeHelper.toClass(keyValueTypeOfMap.getKeyType()), TypeHelper.toClass(keyValueTypeOfMap.getValueType()));
            } else {
                Converter<?, ?> keyConverter = getConverter(keyValueTypeOfMap.getKeyType(), dtKeyType, dtKey);
                Converter<?, ?> valueConverter = getConverter(keyValueTypeOfMap.getValueType(), dtValueType, dtValue);
                if (keyConverter != null && valueConverter != null) {
                    return new DatastaxMapWithConverterGetter(key.getIndex(), dtKeyType, dtValueType, keyConverter, valueConverter);
                }
            }
        }
    }
    if (TupleHelper.isTuple(target)) {
        if (key.getDataType() != null && key.getDataType() instanceof TupleType) {
            TupleType tt = (TupleType) key.getDataType();
            List<DataType> typeArguments = tt.getTypeArguments();
            TypeVariable<? extends Class<?>>[] typeParameters = targetClass.getTypeParameters();
            if (typeArguments.size() <= typeParameters.length) {
                return (Getter<GettableByIndexData, P>) DatastaxTupleGetter.newInstance(datastaxMapperFactory, target, tt, key.getIndex());
            }
        }
    }
    if (TypeHelper.isEnum(target)) {
        final Getter<GettableByIndexData, ? extends Enum> getter = enumGetter(key, TypeHelper.toClass(target));
        if (getter != null) {
            return (Getter<GettableByIndexData, P>) getter;
        }
    }
    if (key.getDataType() != null && key.getDataType() instanceof UserType) {
        UserType ut = (UserType) key.getDataType();
        return (Getter<GettableByIndexData, P>) DatastaxUDTGetter.newInstance(datastaxMapperFactory, target, ut, key.getIndex());
    }
    Getter<GettableByIndexData, P> getter = getterFromFactories(target, key, properties);
    if (getter != null)
        return getter;
    return null;
}
Also used : DatastaxBooleanGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxBooleanGetter) DataTypeHelper(org.simpleflatmapper.datastax.DataTypeHelper) TypeHelper(org.simpleflatmapper.util.TypeHelper) DatastaxShortGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxShortGetter) DatastaxGenericFloatGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxGenericFloatGetter) DatastaxListWithConverterGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxListWithConverterGetter) DatastaxTupleValueGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxTupleValueGetter) DatastaxUDTGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxUDTGetter) DatastaxListGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxListGetter) Getter(org.simpleflatmapper.reflect.Getter) DatastaxMapWithConverterGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxMapWithConverterGetter) DatastaxByteGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxByteGetter) DatastaxTimestampGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxTimestampGetter) DatastaxBigIntegerGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxBigIntegerGetter) DatastaxIntegerGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxIntegerGetter) EnumUnspecifiedTypeGetter(org.simpleflatmapper.reflect.getter.EnumUnspecifiedTypeGetter) DatastaxToStringGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxToStringGetter) DatastaxUUIDGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxUUIDGetter) DatastaxLongGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxLongGetter) DatastaxDoubleGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxDoubleGetter) DatastaxBooleanGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxBooleanGetter) DatastaxGenericShortGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxGenericShortGetter) DatastaxObjectGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxObjectGetter) DatastaxMapGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxMapGetter) DatastaxFloatGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxFloatGetter) DatastaxGenericBigIntegerGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxGenericBigIntegerGetter) DatastaxTupleGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxTupleGetter) DatastaxGenericBigDecimalGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxGenericBigDecimalGetter) DatastaxInetAddressGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxInetAddressGetter) DatastaxGenericByteGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxGenericByteGetter) DatastaxSetWithConverterGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxSetWithConverterGetter) DatastaxTimeGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxTimeGetter) DatastaxGenericIntegerGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxGenericIntegerGetter) DatastaxBigDecimalGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxBigDecimalGetter) DatastaxGenericLongGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxGenericLongGetter) DatastaxDateGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxDateGetter) DatastaxStringGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxStringGetter) DatastaxSetGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxSetGetter) DatastaxUUIDFromStringGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxUUIDFromStringGetter) DatastaxGenericDoubleGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxGenericDoubleGetter) OrdinalEnumGetter(org.simpleflatmapper.reflect.getter.OrdinalEnumGetter) StringEnumGetter(org.simpleflatmapper.reflect.getter.StringEnumGetter) DatastaxInetAddressGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxInetAddressGetter) DatastaxMapWithConverterGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxMapWithConverterGetter) DatastaxSetWithConverterGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxSetWithConverterGetter) DatastaxListWithConverterGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxListWithConverterGetter) DatastaxTimestampGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxTimestampGetter) TypeVariable(java.lang.reflect.TypeVariable) DatastaxSetGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxSetGetter) DatastaxMapGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxMapGetter) DatastaxListGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxListGetter) Type(java.lang.reflect.Type) DatastaxTupleValueGetter(org.simpleflatmapper.datastax.impl.getter.DatastaxTupleValueGetter)

Aggregations

Type (java.lang.reflect.Type)1 TypeVariable (java.lang.reflect.TypeVariable)1 DataTypeHelper (org.simpleflatmapper.datastax.DataTypeHelper)1 DatastaxBigDecimalGetter (org.simpleflatmapper.datastax.impl.getter.DatastaxBigDecimalGetter)1 DatastaxBigIntegerGetter (org.simpleflatmapper.datastax.impl.getter.DatastaxBigIntegerGetter)1 DatastaxBooleanGetter (org.simpleflatmapper.datastax.impl.getter.DatastaxBooleanGetter)1 DatastaxByteGetter (org.simpleflatmapper.datastax.impl.getter.DatastaxByteGetter)1 DatastaxDateGetter (org.simpleflatmapper.datastax.impl.getter.DatastaxDateGetter)1 DatastaxDoubleGetter (org.simpleflatmapper.datastax.impl.getter.DatastaxDoubleGetter)1 DatastaxFloatGetter (org.simpleflatmapper.datastax.impl.getter.DatastaxFloatGetter)1 DatastaxGenericBigDecimalGetter (org.simpleflatmapper.datastax.impl.getter.DatastaxGenericBigDecimalGetter)1 DatastaxGenericBigIntegerGetter (org.simpleflatmapper.datastax.impl.getter.DatastaxGenericBigIntegerGetter)1 DatastaxGenericByteGetter (org.simpleflatmapper.datastax.impl.getter.DatastaxGenericByteGetter)1 DatastaxGenericDoubleGetter (org.simpleflatmapper.datastax.impl.getter.DatastaxGenericDoubleGetter)1 DatastaxGenericFloatGetter (org.simpleflatmapper.datastax.impl.getter.DatastaxGenericFloatGetter)1 DatastaxGenericIntegerGetter (org.simpleflatmapper.datastax.impl.getter.DatastaxGenericIntegerGetter)1 DatastaxGenericLongGetter (org.simpleflatmapper.datastax.impl.getter.DatastaxGenericLongGetter)1 DatastaxGenericShortGetter (org.simpleflatmapper.datastax.impl.getter.DatastaxGenericShortGetter)1 DatastaxInetAddressGetter (org.simpleflatmapper.datastax.impl.getter.DatastaxInetAddressGetter)1 DatastaxIntegerGetter (org.simpleflatmapper.datastax.impl.getter.DatastaxIntegerGetter)1