![JAR search and dependency download from the Maven repository](/logo.png)
org.simpleflatmapper.csv.mapper.CsvRowGetterFactory Maven / Gradle / Ivy
package org.simpleflatmapper.csv.mapper;
import org.simpleflatmapper.csv.CellValueReader;
import org.simpleflatmapper.csv.CsvColumnDefinition;
import org.simpleflatmapper.csv.CsvColumnKey;
import org.simpleflatmapper.csv.CsvRow;
import org.simpleflatmapper.csv.getter.CsvBigDecimalGetter;
import org.simpleflatmapper.csv.getter.CsvBigIntegerGetter;
import org.simpleflatmapper.csv.getter.CsvBooleanGetter;
import org.simpleflatmapper.csv.getter.CsvBoxedBooleanGetter;
import org.simpleflatmapper.csv.getter.CsvBoxedByteGetter;
import org.simpleflatmapper.csv.getter.CsvBoxedCharGetter;
import org.simpleflatmapper.csv.getter.CsvBoxedDoubleGetter;
import org.simpleflatmapper.csv.getter.CsvBoxedFloatGetter;
import org.simpleflatmapper.csv.getter.CsvBoxedIntegerGetter;
import org.simpleflatmapper.csv.getter.CsvBoxedLongGetter;
import org.simpleflatmapper.csv.getter.CsvBoxedShortGetter;
import org.simpleflatmapper.csv.getter.CsvByteGetter;
import org.simpleflatmapper.csv.getter.CsvCharGetter;
import org.simpleflatmapper.csv.getter.CsvCharSequenceGetter;
import org.simpleflatmapper.csv.getter.CsvDoubleGetter;
import org.simpleflatmapper.csv.getter.CsvFloatGetter;
import org.simpleflatmapper.csv.getter.CsvIntegerGetter;
import org.simpleflatmapper.csv.getter.CsvLongGetter;
import org.simpleflatmapper.csv.getter.CsvShortGetter;
import org.simpleflatmapper.csv.getter.CsvStringGetter;
import org.simpleflatmapper.csv.getter.CustomReaderGetter;
import org.simpleflatmapper.csv.property.CustomReaderFactoryProperty;
import org.simpleflatmapper.csv.property.CustomReaderProperty;
import org.simpleflatmapper.map.context.MappingContextFactoryBuilder;
import org.simpleflatmapper.map.getter.*;
import org.simpleflatmapper.util.TypeHelper;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.Map;
public class CsvRowGetterFactory implements ContextualGetterFactory {
public static final CsvRowGetterFactory INSTANCE = new CsvRowGetterFactory();
private Map, ContextualGetterFactory> getterFactory = new HashMap, ContextualGetterFactory>();
{
// primitives
getterFactory.put(boolean.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvBooleanGetter(index);
}
});
getterFactory.put(byte.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvByteGetter(index);
}
});
getterFactory.put(char.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvCharGetter(index);
}
});
getterFactory.put(short.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvShortGetter(index);
}
});
getterFactory.put(int.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvIntegerGetter(index);
}
});
getterFactory.put(long.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvLongGetter(index);
}
});
getterFactory.put(float.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvFloatGetter(index);
}
});
getterFactory.put(double.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvDoubleGetter(index);
}
});
// boxed
getterFactory.put(Boolean.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvBoxedBooleanGetter(index);
}
});
getterFactory.put(Byte.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvBoxedByteGetter(index);
}
});
getterFactory.put(Character.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvBoxedCharGetter(index);
}
});
getterFactory.put(Short.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvBoxedShortGetter(index);
}
});
getterFactory.put(Integer.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvBoxedIntegerGetter(index);
}
});
getterFactory.put(Long.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvBoxedLongGetter(index);
}
});
getterFactory.put(Float.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvBoxedFloatGetter(index);
}
});
getterFactory.put(Double.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvBoxedDoubleGetter(index);
}
});
getterFactory.put(String.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvStringGetter(index);
}
});
getterFactory.put(CharSequence.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvCharSequenceGetter(index);
}
});
getterFactory.put(BigDecimal.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvBigDecimalGetter(index);
}
});
getterFactory.put(BigInteger.class, new ContextualGetterFactory() {
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
int index = key.getIndex();
return (ContextualGetter) new CsvBigIntegerGetter(index);
}
});
}
@Override
public ContextualGetter newGetter(final Type target, CsvColumnKey key, MappingContextFactoryBuilder, CsvColumnKey> mappingContextFactoryBuilder, Object... properties) {
Class> clazz = TypeHelper.toClass(target);
CustomReaderProperty customReaderProperty = null;
CustomReaderFactoryProperty customReaderFactoryProperty = null;
for(Object o : properties) {
if (o instanceof CustomReaderProperty) {
customReaderProperty = (CustomReaderProperty) o;
} else if (o instanceof CustomReaderFactoryProperty) {
customReaderFactoryProperty = (CustomReaderFactoryProperty) o;
}
}
if (customReaderProperty != null) {
return new CustomReaderGetter(key.getIndex(), customReaderProperty.getReader());
}
if (customReaderFactoryProperty != null) {
CellValueReader> reader = customReaderFactoryProperty.getReaderFactory().getReader(target, key.getIndex(), CsvColumnDefinition.of(properties), null);
if (reader != null) {
return new CustomReaderGetter
(key.getIndex(), reader);
}
}
if (clazz.equals(Object.class)) {
clazz = String.class;
}
ContextualGetterFactory getterFactory = this.getterFactory.get(clazz);
if (getterFactory != null) {
return getterFactory.newGetter(target, key, mappingContextFactoryBuilder, properties);
}
return null;
}
}