
org.sfm.poi.impl.RowGetterFactory Maven / Gradle / Ivy
package org.sfm.poi.impl;
import org.apache.poi.ss.usermodel.Row;
import org.sfm.csv.CsvColumnKey;
import org.sfm.map.ColumnDefinition;
import org.sfm.map.GetterFactory;
import org.sfm.map.impl.getter.joda.JodaTimeGetterFactory;
//IFJAVA8_START
import org.sfm.map.impl.getter.time.JavaTimeGetterFactory;
import java.time.*;
//IFJAVA8_END
import org.sfm.reflect.Getter;
import org.sfm.reflect.TypeHelper;
import java.lang.reflect.Type;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@SuppressWarnings("unchecked")
public class RowGetterFactory implements GetterFactory {
private static final Map, GetterFactory> getterFactories = new HashMap, GetterFactory>();
private static final JodaTimeGetterFactory jodaTimeGetterFactory;
static {
getterFactories.put(String.class, new GetterFactory() {
@Override
public Getter newGetter(Type target, CsvColumnKey key, ColumnDefinition, ?> columnDefinition) {
return (Getter) new PoiStringGetter(key.getIndex());
}
});
getterFactories.put(Date.class, new GetterFactory() {
@Override
public Getter newGetter(Type target, CsvColumnKey key, ColumnDefinition, ?> columnDefinition) {
return (Getter) new PoiDateGetter(key.getIndex());
}
});
getterFactories.put(Byte.class, new GetterFactory() {
@Override
public Getter newGetter(Type target, CsvColumnKey key, ColumnDefinition, ?> columnDefinition) {
return (Getter) new PoiByteGetter(key.getIndex());
}
});
getterFactories.put(Character.class, new GetterFactory() {
@Override
public Getter newGetter(Type target, CsvColumnKey key, ColumnDefinition, ?> columnDefinition) {
return (Getter) new PoiCharacterGetter(key.getIndex());
}
});
getterFactories.put(Short.class, new GetterFactory() {
@Override
public Getter newGetter(Type target, CsvColumnKey key, ColumnDefinition, ?> columnDefinition) {
return (Getter) new PoiShortGetter(key.getIndex());
}
});
getterFactories.put(Integer.class, new GetterFactory() {
@Override
public Getter newGetter(Type target, CsvColumnKey key, ColumnDefinition, ?> columnDefinition) {
return (Getter) new PoiIntegerGetter(key.getIndex());
}
});
getterFactories.put(Long.class, new GetterFactory() {
@Override
public Getter newGetter(Type target, CsvColumnKey key, ColumnDefinition, ?> columnDefinition) {
return (Getter) new PoiLongGetter(key.getIndex());
}
});
getterFactories.put(Float.class, new GetterFactory() {
@Override
public Getter newGetter(Type target, CsvColumnKey key, ColumnDefinition, ?> columnDefinition) {
return (Getter) new PoiFloatGetter(key.getIndex());
}
});
getterFactories.put(Double.class, new GetterFactory() {
@Override
public Getter newGetter(Type target, CsvColumnKey key, ColumnDefinition, ?> columnDefinition) {
return (Getter) new PoiDoubleGetter(key.getIndex());
}
});
getterFactories.put(Boolean.class, new GetterFactory() {
@Override
public Getter newGetter(Type target, CsvColumnKey key, ColumnDefinition, ?> columnDefinition) {
return (Getter) new PoiBooleanGetter(key.getIndex());
}
});
getterFactories.put(byte.class, getterFactories.get(Byte.class));
getterFactories.put(char.class, getterFactories.get(Character.class));
getterFactories.put(short.class, getterFactories.get(Short.class));
getterFactories.put(int.class, getterFactories.get(Integer.class));
getterFactories.put(long.class, getterFactories.get(Long.class));
getterFactories.put(float.class, getterFactories.get(Float.class));
getterFactories.put(double.class, getterFactories.get(Double.class));
getterFactories.put(boolean.class, getterFactories.get(Boolean.class));
//IFJAVA8_START
JavaTimeGetterFactory javaTimeGetterFactory =
new JavaTimeGetterFactory(getterFactories.get(Date.class));
getterFactories.put(LocalDate.class, javaTimeGetterFactory);
getterFactories.put(LocalDateTime.class, javaTimeGetterFactory);
getterFactories.put(LocalTime.class, javaTimeGetterFactory);
getterFactories.put(OffsetDateTime.class, javaTimeGetterFactory);
getterFactories.put(OffsetTime.class, javaTimeGetterFactory);
getterFactories.put(ZonedDateTime.class, javaTimeGetterFactory);
getterFactories.put(Instant.class, javaTimeGetterFactory);
getterFactories.put(Year.class, javaTimeGetterFactory);
getterFactories.put(YearMonth.class, javaTimeGetterFactory);
//IFJAVA8_END
jodaTimeGetterFactory = new JodaTimeGetterFactory(getterFactories.get(Date.class));
}
@SuppressWarnings("unchecked")
@Override
public Getter newGetter(Type target, CsvColumnKey key, ColumnDefinition, ?> columnDefinition) {
Class> targetClass = TypeHelper.toClass(target);
final GetterFactory rowGetterFactory = getterFactories.get(targetClass);
if (rowGetterFactory != null) {
return rowGetterFactory.newGetter(target, key, columnDefinition);
} else if (TypeHelper.isEnum(target)) {
return new PoiEnumGetter(key.getIndex(), TypeHelper.toClass(target));
} else {
Getter getter = jodaTimeGetterFactory.newGetter(target, key, columnDefinition);
if (getter != null) return getter;
}
return null;
}
}