All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sfm.datastax.impl.SettableDataSetterFactory Maven / Gradle / Ivy

There is a newer version: 8.2.3
Show newest version
package org.sfm.datastax.impl;

import com.datastax.driver.core.*;
import org.sfm.datastax.DatastaxColumnKey;
import org.sfm.datastax.impl.setter.*;

import org.sfm.map.Mapper;
import org.sfm.map.MapperConfig;
import org.sfm.map.column.FieldMapperColumnDefinition;
import org.sfm.map.mapper.ColumnDefinition;
import org.sfm.map.mapper.PropertyMapping;
import org.sfm.map.setter.ConvertDelegateSetter;
import org.sfm.reflect.ReflectionService;
import org.sfm.reflect.Setter;
import org.sfm.reflect.SetterFactory;
import org.sfm.reflect.TypeHelper;
import org.sfm.tuples.Tuple2;
import org.sfm.tuples.Tuples;
import org.sfm.utils.conv.Converter;
import org.sfm.utils.conv.ConverterFactory;

import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.InetAddress;
import java.util.*;


public class SettableDataSetterFactory
        implements
        SetterFactory>>

{
    private final Map, SetterFactory>>> factoryPerClass =
            new HashMap, SetterFactory>>>();
    private final MapperConfig> mapperConfig;
    private final ReflectionService reflectionService;

    {
        factoryPerClass.put(int.class, new SetterFactory>>() {
            @SuppressWarnings("unchecked")
            @Override
            public 

Setter getSetter(PropertyMapping> arg) { return (Setter) new IntSettableDataSetter(arg.getColumnKey().getIndex()); } }); factoryPerClass.put(Integer.class, factoryPerClass.get(int.class)); factoryPerClass.put(long.class, new SetterFactory>>() { @SuppressWarnings("unchecked") @Override public

Setter getSetter(PropertyMapping> arg) { return (Setter) new LongSettableDataSetter(arg.getColumnKey().getIndex()); } }); factoryPerClass.put(Long.class, factoryPerClass.get(long.class)); factoryPerClass.put(float.class, new SetterFactory>>() { @SuppressWarnings("unchecked") @Override public

Setter getSetter(PropertyMapping> arg) { return (Setter) new FloatSettableDataSetter(arg.getColumnKey().getIndex()); } }); factoryPerClass.put(Float.class, factoryPerClass.get(float.class)); factoryPerClass.put(double.class, new SetterFactory>>() { @SuppressWarnings("unchecked") @Override public

Setter getSetter(PropertyMapping> arg) { return (Setter) new DoubleSettableDataSetter(arg.getColumnKey().getIndex()); } }); factoryPerClass.put(Double.class, factoryPerClass.get(double.class)); factoryPerClass.put(String.class, new SetterFactory>>() { @SuppressWarnings("unchecked") @Override public

Setter getSetter(PropertyMapping> arg) { return (Setter) new StringSettableDataSetter(arg.getColumnKey().getIndex()); } }); factoryPerClass.put(Date.class, new SetterFactory>>() { @SuppressWarnings("unchecked") @Override public

Setter getSetter(PropertyMapping> arg) { return (Setter) new DateSettableDataSetter(arg.getColumnKey().getIndex()); } }); factoryPerClass.put(UUID.class, new SetterFactory>>() { @SuppressWarnings("unchecked") @Override public

Setter getSetter(PropertyMapping> arg) { return (Setter) new UUIDSettableDataSetter(arg.getColumnKey().getIndex()); } }); factoryPerClass.put(BigDecimal.class, new SetterFactory>>() { @SuppressWarnings("unchecked") @Override public

Setter getSetter(PropertyMapping> arg) { return (Setter) new BigDecimalSettableDataSetter(arg.getColumnKey().getIndex()); } }); factoryPerClass.put(BigInteger.class, new SetterFactory>>() { @SuppressWarnings("unchecked") @Override public

Setter getSetter(PropertyMapping> arg) { return (Setter) new BigIntegerSettableDataSetter(arg.getColumnKey().getIndex()); } }); factoryPerClass.put(InetAddress.class, new SetterFactory>>() { @SuppressWarnings("unchecked") @Override public

Setter getSetter(PropertyMapping> arg) { return (Setter) new InetAddressSettableDataSetter(arg.getColumnKey().getIndex()); } }); factoryPerClass.put(TupleValue.class, new SetterFactory>>() { @SuppressWarnings("unchecked") @Override public

Setter getSetter(PropertyMapping> arg) { return (Setter) new TupleValueSettableDataSetter(arg.getColumnKey().getIndex()); } }); } private final SetterFactory>> jodaTimeFieldMapperToSourceFactory = new SetterFactory>>() { @SuppressWarnings("unchecked") @Override public

Setter getSetter(PropertyMapping> pm) { return null; } }; //IFJAVA8_START private final SetterFactory>> javaTimeFieldMapperToSourceFactory = new SetterFactory>>() { @SuppressWarnings("unchecked") @Override public

Setter getSetter(PropertyMapping> pm) { return null; } }; //IFJAVA8_END public SettableDataSetterFactory(MapperConfig> mapperConfig, ReflectionService reflectionService) { this.mapperConfig = mapperConfig; this.reflectionService = reflectionService; } @SuppressWarnings("unchecked") @Override public

Setter getSetter(PropertyMapping> arg) { Setter setter = null; Type propertyType = arg.getPropertyMeta().getPropertyType(); Type type = arg.getColumnKey().getDataType().asJavaClass(); if (type == null) { type = propertyType; } if (TypeHelper.isEnum(propertyType)) { if (TypeHelper.isClass(type, String.class)) { return (Setter) new StringEnumSettableDataSetter(arg.getColumnKey().getIndex()); } else { return (Setter) new OrdinalEnumSettableDataSetter(arg.getColumnKey().getIndex()); } } SetterFactory>> setterFactory = this.factoryPerClass.get(TypeHelper.toClass(type)); if (setterFactory != null) { setter = setterFactory.getSetter(arg); if (!TypeHelper.areEquals(TypeHelper.toBoxedClass(type), TypeHelper.toBoxedClass(propertyType))) { Converter converter = getConverter(propertyType, TypeHelper.toClass(type), arg.getColumnKey().getDataType()); if (converter != null) { setter = (Setter) new ConvertDelegateSetter(setter, (Converter) converter); } else { setter = null; } } } if (setter == null) { if (Tuples.isTuple(propertyType) && TypeHelper.areEquals(type, TupleValue.class)) { setter = (Setter) TupleSettableDataSetter.newInstance(propertyType, (TupleType)arg.getColumnKey().getDataType(), arg.getColumnKey().getIndex(), mapperConfig, reflectionService); } else if (arg.getColumnKey().getDataType() instanceof UserType) { if (propertyType.equals(UDTValue.class)) { setter = (Setter) new UDTValueSettableDataSetter(arg.getColumnKey().getIndex()); } else { setter = (Setter) UDTObjectSettableDataSetter.newInstance(propertyType, (UserType)arg.getColumnKey().getDataType(), arg.getColumnKey().getIndex(), mapperConfig, reflectionService); } } else if (TypeHelper.isAssignable(List.class, type) && TypeHelper.isAssignable(List.class, propertyType)) { DataType dataTypeElt = arg.getColumnKey().getDataType().getTypeArguments().get(0); Class dEltType = dataTypeElt.asJavaClass(); Type lEltType = TypeHelper.getComponentTypeOfListOrArray(propertyType); if (TypeHelper.areEquals(lEltType, dEltType)) { setter = new ListSettableDataSetter(arg.getColumnKey().getIndex()); } else { Converter converter = getConverter(lEltType, dEltType, dataTypeElt); if (converter != null) { setter = new ListWithConverterSettableDataSetter(arg.getColumnKey().getIndex(), converter); } } } else if (TypeHelper.isAssignable(Set.class, type) && TypeHelper.isAssignable(Set.class, propertyType)) { DataType dataTypeElt = arg.getColumnKey().getDataType().getTypeArguments().get(0); Class dEltType = dataTypeElt.asJavaClass(); Type lEltType = TypeHelper.getComponentTypeOfListOrArray(propertyType); if (TypeHelper.areEquals(lEltType, dEltType)) { setter = new SetSettableDataSetter(arg.getColumnKey().getIndex()); } else { Converter converter = getConverter(lEltType, dEltType, dataTypeElt); if (converter != null) { setter = new SetWithConverterSettableDataSetter(arg.getColumnKey().getIndex(), converter); } } } else if (TypeHelper.isAssignable(Map.class, type) && TypeHelper.isAssignable(Map.class, propertyType)) { DataType dtKeyType = arg.getColumnKey().getDataType().getTypeArguments().get(0); DataType dtValueType = arg.getColumnKey().getDataType().getTypeArguments().get(1); Tuple2 keyValueTypeOfMap = TypeHelper.getKeyValueTypeOfMap(propertyType); if (areSame(dtKeyType, keyValueTypeOfMap.getElement0()) && areSame(dtValueType, keyValueTypeOfMap.getElement1())) { setter = new MapSettableDataSetter(arg.getColumnKey().getIndex()); } else { setter = new MapWithConverterSettableDataSetter(arg.getColumnKey().getIndex(), getConverter(keyValueTypeOfMap.getElement0(), dtKeyType.asJavaClass(), dtKeyType), getConverter(keyValueTypeOfMap.getElement1(), dtValueType.asJavaClass(), dtValueType) ); } } } if (setter == null) { setter = jodaTimeFieldMapperToSourceFactory.getSetter(arg); } //IFJAVA8_START if (setter == null) { setter = javaTimeFieldMapperToSourceFactory.getSetter(arg); } //IFJAVA8_END return setter; } private boolean areSame(DataType dtKeyType, Type element0) { return TypeHelper.areEquals(element0, dtKeyType.asJavaClass()); } @SuppressWarnings("unchecked") private Converter getConverter(Type elementType, Class dataTypeElt, DataType dtElt) { if (dtElt != null) { if (UDTValue.class.equals(dataTypeElt)) { Mapper mapper = UDTObjectSettableDataSetter.newUDTMapper(elementType, (UserType) dtElt, mapperConfig, reflectionService); return new ConverterToUDTValueMapper(mapper, (UserType) dtElt); } if (TupleValue.class.equals(dataTypeElt)) { Mapper mapper = TupleSettableDataSetter.newTupleMapper(elementType, (TupleType) dtElt, mapperConfig, reflectionService); return new ConverterToTupleValueMapper(mapper, (TupleType) dtElt); } } return ConverterFactory.getConverter(TypeHelper.toClass(elementType), dataTypeElt); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy