public void addColumnDefinition(Predicate<? super K> predicate, ColumnDefinition<K, ?> definition) { for(Object prop : definition.properties()) { addColumnProperty(predicate, newFactory(prop)); } } public void addColumnDefinition(String name, ColumnDefinition<K, ?> definition) {
public void addColumnDefinition(Predicate<? super K> predicate, ColumnDefinition<K, ?> definition) { for(Object prop : definition.properties()) { addColumnProperty(predicate, newFactory(prop)); } } public void addColumnDefinition(String name, ColumnDefinition<K, ?> definition) {
public void addColumnDefinition(String name, ColumnDefinition<K, ?> definition) { Predicate<? super K> predicate = newPredicate(name); for(Object prop : definition.properties()) { addColumnProperty(predicate, newFactory(prop)); } }
public void addColumnDefinition(String name, ColumnDefinition<K, ?> definition) { Predicate<? super K> predicate = newPredicate(name); for(Object prop : definition.properties()) { addColumnProperty(predicate, newFactory(prop)); } }
@SuppressWarnings("unchecked") private ContextualConverter<?, ?> getConverter(Type elementType, Class<?> dataTypeElt, DataType dtElt, ColumnDefinition<DatastaxColumnKey, ?> columnDefinition, ContextFactoryBuilder contextFactoryBuilder) { if (dtElt != null) { if (UDTValue.class.equals(dataTypeElt)) { FieldMapper mapper = UDTObjectSettableDataSetter.newUDTMapper(elementType, (UserType) dtElt, mapperConfig, reflectionService); return new ConverterToUDTValueMapper(mapper, (UserType) dtElt); } if (TupleValue.class.equals(dataTypeElt)) { FieldMapper mapper = TupleValueSettableDataSetter.newTupleMapper(elementType, (TupleType) dtElt, mapperConfig, reflectionService); return new ConverterToTupleValueMapper(mapper, (TupleType) dtElt); } } return ConverterService.getInstance().findConverter(TypeHelper.toClass(elementType), dataTypeElt,contextFactoryBuilder, columnDefinition.properties()); } }
@SuppressWarnings("unchecked") private <P, I> ContextualIndexedSetter<PreparedStatement, P> getSetterWithConvertion(Class<P> pclazz, Class<I> iclass, ContextFactoryBuilder contextFactoryBuilder, PropertyMapping<?, ?, JdbcColumnKey> pm) { ContextualConverter<? super P, ? extends I> converter = ConverterService.getInstance().findConverter(pclazz, iclass, contextFactoryBuilder, pm.getColumnDefinition().properties()); if (converter != null) { ContextualIndexedSetter<PreparedStatement, I> indexedSetter = getIndexedSetter(iclass, pm, contextFactoryBuilder); if (indexedSetter != null) { return new ConvertDelegateIndexSetter<P, I>(indexedSetter, converter); } } return null; }
@Override public void handle(PropertyMapping<T, ?, K> propertyMapping) { getter = getterFactory.newGetter(propertyMapping.getPropertyMeta().getPropertyType(), propertyMapping.getColumnKey(), mappingContextFactoryBuilder, propertyMapping.getColumnDefinition().properties()); } }).getter;
@Override public void handle(PropertyMapping<T, ?, K> propertyMapping) { getter = getterFactory.newGetter(propertyMapping.getPropertyMeta().getPropertyType(), propertyMapping.getColumnKey(), mappingContextFactoryBuilder, propertyMapping.getColumnDefinition().properties()); } }).getter;
@SuppressWarnings("unchecked") private <P, I> ContextualIndexedSetter<PreparedStatement, P> getSetterWithConvertion(Class<P> pclazz, Class<I> iclass, ContextFactoryBuilder contextFactoryBuilder, PropertyMapping<?, ?, JdbcColumnKey> pm) { ContextualConverter<? super P, ? extends I> converter = ConverterService.getInstance().findConverter(pclazz, iclass, contextFactoryBuilder, pm.getColumnDefinition().properties()); if (converter != null) { ContextualIndexedSetter<PreparedStatement, I> indexedSetter = getIndexedSetter(iclass, pm, contextFactoryBuilder); if (indexedSetter != null) { return new ConvertDelegateIndexSetter<P, I>(indexedSetter, converter); } } return null; }
private <P, J> ContextualGetter<? super S, ? extends P> lookForAlternativeGetter(ClassMeta<P> classMeta, K key, ColumnDefinition<K, ?> columnDefinition, Collection<Type> types, MappingContextFactoryBuilder<?, K> mappingContextFactoryBuilder) { // look for converter Type propertyType = classMeta.getType(); Type sourceType = key.getType(propertyType); Object[] properties = columnDefinition.properties(); ContextualConverter<? super J, ? extends P> converter = converterService.findConverter(sourceType, propertyType, mappingContextFactoryBuilder, properties); if (converter != null) { ContextualGetter<? super S, ? extends J> getter = getterFactory.newGetter(sourceType, key, mappingContextFactoryBuilder, properties); return new FieldMapperGetterWithConverter<S, J, P>(converter, getter); } return lookForInstantiatorGetter(classMeta, key, columnDefinition, types, mappingContextFactoryBuilder); }
private <P, J> ContextualGetter<? super S, ? extends P> lookForAlternativeGetter(ClassMeta<P> classMeta, K key, ColumnDefinition<K, ?> columnDefinition, Collection<Type> types, MappingContextFactoryBuilder<?, K> mappingContextFactoryBuilder) { // look for converter Type propertyType = classMeta.getType(); Type sourceType = key.getType(propertyType); Object[] properties = columnDefinition.properties(); ContextualConverter<? super J, ? extends P> converter = converterService.findConverter(sourceType, propertyType, mappingContextFactoryBuilder, properties); if (converter != null) { ContextualGetter<? super S, ? extends J> getter = getterFactory.newGetter(sourceType, key, mappingContextFactoryBuilder, properties); return new FieldMapperGetterWithConverter<S, J, P>(converter, getter); } return lookForInstantiatorGetter(classMeta, key, columnDefinition, types, mappingContextFactoryBuilder); }
private <T, P> FieldMapper<Object, T> createFieldMapper( Class<T> target, String property, Getter<Object, P> getter) { PropertyMapping<T, P, SampleFieldKey> pm = createPropertyMapping(target, property); when(getterFactory.<P>newGetter(pm.getPropertyMeta().getPropertyType(), pm.getColumnKey(), pm.getColumnDefinition().properties())).thenReturn(getter); return constantSourceFieldMapperFactory.newFieldMapper(pm, mappingContextFactoryBuilder, MAPPING_ERROR_HANDLER); } public static <T, P> PropertyMapping<T, P, SampleFieldKey> createPropertyMapping(
@Test public void testKeys() { MapperFactory mapperFactory = new MapperFactory(); mapperFactory.addKeys("a", "b"); Assert.assertArrayEquals(new Object[] {KeyProperty.DEFAULT}, mapperFactory.columnDefinitions().getColumnDefinition(new SampleFieldKey("a", 0)).properties()); Assert.assertArrayEquals(new Object[] {KeyProperty.DEFAULT}, mapperFactory.columnDefinitions().getColumnDefinition(new SampleFieldKey("b", 0)).properties()); Assert.assertArrayEquals(new Object[] {}, mapperFactory.columnDefinitions().getColumnDefinition(new SampleFieldKey("c", 0)).properties()); }
private <T, P> ContextualGetter<? super S, ? extends P> getGetterInstantiator( ClassMeta<P> classMeta, InstantiatorDefinition id, K key, ColumnDefinition<K, ?> columnDefinition, Collection<Type> types, MappingContextFactoryBuilder<?, K> mappingContextFactoryBuilder) { Instantiator<? super T, ? extends P> instantiator = classMeta.getReflectionService().getInstantiatorFactory().getOneArgIdentityInstantiator(id, classMeta.getReflectionService().builderIgnoresNullValues()); final Type paramType = id.getParameters()[0].getGenericType(); ContextualGetter<? super S, ? extends T> subGetter = getterFactory.newGetter(paramType, key, mappingContextFactoryBuilder, columnDefinition ); if (subGetter == null) { if (types.contains(paramType)) { // loop circuit cutter return null; } types.add(paramType); // converter? Type sourceType = key.getType(paramType); ContextualConverter converter = converterService.findConverter(sourceType, paramType, mappingContextFactoryBuilder, columnDefinition.properties()); if (converter != null) { ContextualGetter sourceTypeGetter = getterFactory.newGetter(sourceType, key, mappingContextFactoryBuilder, columnDefinition); subGetter = new FieldMapperGetterWithConverter(converter, sourceTypeGetter); } else { subGetter = lookForInstantiatorGetter(classMeta.getReflectionService().<T>getClassMeta(paramType), key, columnDefinition, types, mappingContextFactoryBuilder); } } if (subGetter != null) { return new InstantiatorContextualGetter<T, S, P>(instantiator, subGetter); } else return null; }
private <T, P> ContextualGetter<? super S, ? extends P> getGetterInstantiator( ClassMeta<P> classMeta, InstantiatorDefinition id, K key, ColumnDefinition<K, ?> columnDefinition, Collection<Type> types, MappingContextFactoryBuilder<?, K> mappingContextFactoryBuilder) { Instantiator<? super T, ? extends P> instantiator = classMeta.getReflectionService().getInstantiatorFactory().getOneArgIdentityInstantiator(id, classMeta.getReflectionService().builderIgnoresNullValues()); final Type paramType = id.getParameters()[0].getGenericType(); ContextualGetter<? super S, ? extends T> subGetter = getterFactory.newGetter(paramType, key, mappingContextFactoryBuilder, columnDefinition ); if (subGetter == null) { if (types.contains(paramType)) { // loop circuit cutter return null; } types.add(paramType); // converter? Type sourceType = key.getType(paramType); ContextualConverter converter = converterService.findConverter(sourceType, paramType, mappingContextFactoryBuilder, columnDefinition.properties()); if (converter != null) { ContextualGetter sourceTypeGetter = getterFactory.newGetter(sourceType, key, mappingContextFactoryBuilder, columnDefinition); subGetter = new FieldMapperGetterWithConverter(converter, sourceTypeGetter); } else { subGetter = lookForInstantiatorGetter(classMeta.getReflectionService().<T>getClassMeta(paramType), key, columnDefinition, types, mappingContextFactoryBuilder); } } if (subGetter != null) { return new InstantiatorContextualGetter<T, S, P>(instantiator, subGetter); } else return null; }
@Test public void testColumnDefinition() { MapperFactory mapperFactory = new MapperFactory(); Object prop1 = new Object(); Object prop2 = new Object(); mapperFactory.addColumnDefinition("mykey", FieldMapperColumnDefinition.<SampleFieldKey>identity().add(prop1)); Assert.assertArrayEquals(new Object[] {prop1}, mapperFactory.columnDefinitions().getColumnDefinition(new SampleFieldKey("mykey", 0)).properties()); mapperFactory.addColumnDefinition(new Predicate<SampleFieldKey>() { @Override public boolean test(SampleFieldKey sampleFieldKey) { return sampleFieldKey.getIndex() < 1; } }, FieldMapperColumnDefinition.<SampleFieldKey>identity().add(prop2)); Assert.assertArrayEquals(new Object[] {prop2, prop1}, mapperFactory.columnDefinitions().getColumnDefinition(new SampleFieldKey("mykey", 0)).properties()); Assert.assertArrayEquals(new Object[] {prop1}, mapperFactory.columnDefinitions().getColumnDefinition(new SampleFieldKey("mykey", 1)).properties()); }
@Test public void testColumnProperty() { MapperFactory mapperFactory = new MapperFactory(); Object prop1 = new Object(); Object prop2 = new Object(); final Object prop3 = new Object(); mapperFactory.addColumnProperty("mykey", prop1); mapperFactory.addColumnProperty(new Predicate<SampleFieldKey>() { @Override public boolean test(SampleFieldKey sampleFieldKey) { return sampleFieldKey.getIndex() < 1; } }, prop2); mapperFactory.addColumnProperty(new Predicate<SampleFieldKey>() { @Override public boolean test(SampleFieldKey sampleFieldKey) { return sampleFieldKey.getIndex() < 1; } }, new UnaryFactory<SampleFieldKey, Object>() { @Override public Object newInstance(SampleFieldKey sampleFieldKey) { return prop3; } }); Assert.assertArrayEquals(new Object[] {prop3, prop2, prop1}, mapperFactory.columnDefinitions().getColumnDefinition(new SampleFieldKey("mykey", 0)).properties()); Assert.assertArrayEquals(new Object[] {prop1}, mapperFactory.columnDefinitions().getColumnDefinition(new SampleFieldKey("mykey", 1)).properties()); }
@Test public void testAliases() { MapperFactory mapperFactory = new MapperFactory(); mapperFactory.addAlias("a", "aa"); mapperFactory.addAliases(new HashMap<String, String>() {{ put("b", "bb"); put("c", "cc"); }}); Assert.assertArrayEquals(new Object[] {new RenameProperty("aa")}, mapperFactory.columnDefinitions().getColumnDefinition(new SampleFieldKey("a", 0)).properties()); Assert.assertArrayEquals(new Object[] {new RenameProperty("bb")}, mapperFactory.columnDefinitions().getColumnDefinition(new SampleFieldKey("b", 0)).properties()); Assert.assertArrayEquals(new Object[] {new RenameProperty("cc")}, mapperFactory.columnDefinitions().getColumnDefinition(new SampleFieldKey("c", 0)).properties()); Assert.assertArrayEquals(new Object[] {}, mapperFactory.columnDefinitions().getColumnDefinition(new SampleFieldKey("d", 0)).properties()); }
private <P, C> MultiIndexFieldMapper<T> newCollectionFieldMapper(PropertyMapping<T, P, JdbcColumnKey> pm) { PropertyMeta<T, ?> propertyMeta = pm.getPropertyMeta(); IndexedGetter<C, P> indexedGetter; IntGetter<? super C> sizeGetter; Getter<T, C> collectionGetter = (Getter<T, C>) propertyMeta.getGetter(); if (TypeHelper.isAssignable(List.class, propertyMeta.getPropertyType())) { indexedGetter = (IndexedGetter<C, P>) new ListIndexedGetter<P>(); sizeGetter = (IntGetter<C>) new ListSizeGetter(); } else if (TypeHelper.isArray(propertyMeta.getPropertyType())) { indexedGetter = (IndexedGetter<C, P>) new ArrayIndexedGetter<P>(); sizeGetter = new ArraySizeGetter(); } else { throw new IllegalArgumentException("Unexpected elementMeta" + propertyMeta); } PropertyMeta<C, P> childProperty = (PropertyMeta<C, P>) pm.getPropertyMeta().getPropertyClassMeta().newPropertyFinder().findProperty(DefaultPropertyNameMatcher.of("0"), pm.getColumnDefinition().properties(), pm.getColumnKey(), ConstantPredicate.<PropertyMeta<?, ?>>truePredicate()); final PropertyMapping<C, P, JdbcColumnKey> pmchildProperttMeta = pm.propertyMeta(childProperty); ContextualIndexedSetter<PreparedStatement, P> setter = getSetter(pmchildProperttMeta); return new CollectionIndexFieldMapper<T, C, P>(setter, collectionGetter, sizeGetter, indexedGetter); }
private <P, C> MultiIndexFieldMapper<T> newCollectionFieldMapper(PropertyMapping<T, P, JdbcColumnKey> pm) { PropertyMeta<T, ?> propertyMeta = pm.getPropertyMeta(); IndexedGetter<C, P> indexedGetter; IntGetter<? super C> sizeGetter; Getter<T, C> collectionGetter = (Getter<T, C>) propertyMeta.getGetter(); if (TypeHelper.isAssignable(List.class, propertyMeta.getPropertyType())) { indexedGetter = (IndexedGetter<C, P>) new ListIndexedGetter<P>(); sizeGetter = (IntGetter<C>) new ListSizeGetter(); } else if (TypeHelper.isArray(propertyMeta.getPropertyType())) { indexedGetter = (IndexedGetter<C, P>) new ArrayIndexedGetter<P>(); sizeGetter = new ArraySizeGetter(); } else { throw new IllegalArgumentException("Unexpected elementMeta" + propertyMeta); } PropertyMeta<C, P> childProperty = (PropertyMeta<C, P>) pm.getPropertyMeta().getPropertyClassMeta().newPropertyFinder().findProperty(DefaultPropertyNameMatcher.of("0"), pm.getColumnDefinition().properties(), pm.getColumnKey(), ConstantPredicate.<PropertyMeta<?, ?>>truePredicate()); final PropertyMapping<C, P, JdbcColumnKey> pmchildProperttMeta = pm.propertyMeta(childProperty); ContextualIndexedSetter<PreparedStatement, P> setter = getSetter(pmchildProperttMeta); return new CollectionIndexFieldMapper<T, C, P>(setter, collectionGetter, sizeGetter, indexedGetter); }