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

org.sfm.csv.impl.CellSetterFactory Maven / Gradle / Ivy

Go to download

Java library to map flat record - ResultSet, csv - to java object with minimum configuration and low footprint.

There is a newer version: 1.10.3
Show newest version
package org.sfm.csv.impl;

import org.sfm.csv.CellValueReader;
import org.sfm.csv.CellValueReaderFactory;
import org.sfm.csv.CsvColumnDefinition;
import org.sfm.csv.CsvColumnKey;
import org.sfm.csv.impl.cellreader.*;
import org.sfm.csv.impl.primitive.*;
import org.sfm.csv.ParsingContextFactoryBuilder;
import org.sfm.reflect.Getter;
import org.sfm.reflect.Setter;
import org.sfm.reflect.SetterFactory;
import org.sfm.reflect.TypeHelper;

import java.lang.reflect.Constructor;
import java.lang.reflect.Type;

public final class CellSetterFactory {

	private final CellValueReaderFactory cellValueReaderFactory;

	public CellSetterFactory(CellValueReaderFactory cellValueReaderFactory) {
		this.cellValueReaderFactory = cellValueReaderFactory;
	}
	
	public  CellSetter getPrimitiveCellSetter(Class clazz, CellValueReader

reader, Setter setter) { if (boolean.class.equals(clazz)) { return new BooleanCellSetter(SetterFactory.toBooleanSetter(setter), booleanReader(reader)); } else if (byte.class.equals(clazz)) { return new ByteCellSetter(SetterFactory.toByteSetter(setter), byteReader(reader)); } else if (char.class.equals(clazz)) { return new CharCellSetter(SetterFactory.toCharacterSetter(setter), charReader(reader)); } else if (short.class.equals(clazz)) { return new ShortCellSetter(SetterFactory.toShortSetter(setter), shortReader(reader)); } else if (int.class.equals(clazz)) { return new IntCellSetter(SetterFactory.toIntSetter(setter), intReader(reader)); } else if (long.class.equals(clazz)) { return new LongCellSetter(SetterFactory.toLongSetter(setter), longReader(reader)); } else if (float.class.equals(clazz)) { return new FloatCellSetter(SetterFactory.toFloatSetter(setter), floatReader(reader)); } else if (double.class.equals(clazz)) { return new DoubleCellSetter(SetterFactory.toDoubleSetter(setter), doubleReader(reader)); } throw new IllegalArgumentException("Invalid primitive type " + clazz); } @SuppressWarnings("unchecked") private DoubleCellValueReader doubleReader(CellValueReader reader) { if (reader instanceof DoubleCellValueReader) { return (DoubleCellValueReader) reader; } else { return new DoubleCellValueReaderUnbox((CellValueReader) reader); } } @SuppressWarnings("unchecked") private FloatCellValueReader floatReader(CellValueReader reader) { if (reader instanceof FloatCellValueReader) { return (FloatCellValueReader) reader; } else { return new FloatCellValueReaderUnbox((CellValueReader) reader); } } @SuppressWarnings("unchecked") private LongCellValueReader longReader(CellValueReader reader) { if (reader instanceof LongCellValueReader) { return (LongCellValueReader) reader; } else { return new LongCellValueReaderUnbox((CellValueReader) reader); } } @SuppressWarnings("unchecked") private IntegerCellValueReader intReader(CellValueReader reader) { if (reader instanceof IntegerCellValueReader) { return (IntegerCellValueReader) reader; } else { return new IntegerCellValueReaderUnbox((CellValueReader) reader); } } @SuppressWarnings("unchecked") private ShortCellValueReader shortReader(CellValueReader reader) { if (reader instanceof ShortCellValueReader) { return (ShortCellValueReader) reader; } else { return new ShortCellValueReaderUnbox((CellValueReader) reader); } } @SuppressWarnings("unchecked") private CharCellValueReader charReader(CellValueReader reader) { if (reader instanceof CharCellValueReader) { return (CharCellValueReader) reader; } else { return new CharCellValueReaderUnbox((CellValueReader) reader); } } @SuppressWarnings("unchecked") private ByteCellValueReader byteReader(CellValueReader reader) { if (reader instanceof ByteCellValueReader) { return (ByteCellValueReader) reader; } else { return new ByteCellValueReaderUnbox((CellValueReader) reader); } } @SuppressWarnings("unchecked") private BooleanCellValueReader booleanReader(CellValueReader reader) { if (reader instanceof BooleanCellValueReader) { return (BooleanCellValueReader) reader; } else { return new BooleanCellValueReaderUnbox((CellValueReader) reader); } } @SuppressWarnings("unchecked") public DelayedCellSetterFactory getPrimitiveDelayedCellSetter(Class clazz, CellValueReader

reader, Setter setter) { if (boolean.class.equals(clazz)) { return (DelayedCellSetterFactory) new BooleanDelayedCellSetterFactory(SetterFactory.toBooleanSetter(setter), booleanReader(reader)); } else if (byte.class.equals(clazz)) { return (DelayedCellSetterFactory) new ByteDelayedCellSetterFactory(SetterFactory.toByteSetter(setter), byteReader(reader)); } else if (char.class.equals(clazz)) { return (DelayedCellSetterFactory) new CharDelayedCellSetterFactory(SetterFactory.toCharacterSetter(setter), charReader(reader)); } else if (short.class.equals(clazz)) { return (DelayedCellSetterFactory) new ShortDelayedCellSetterFactory(SetterFactory.toShortSetter(setter), shortReader(reader)); } else if (int.class.equals(clazz)) { return (DelayedCellSetterFactory) new IntDelayedCellSetterFactory(SetterFactory.toIntSetter(setter), intReader(reader)); } else if (long.class.equals(clazz)) { return (DelayedCellSetterFactory) new LongDelayedCellSetterFactory(SetterFactory.toLongSetter(setter), longReader(reader)); } else if (float.class.equals(clazz)) { return (DelayedCellSetterFactory) new FloatDelayedCellSetterFactory(SetterFactory.toFloatSetter(setter), floatReader(reader)); } else if (double.class.equals(clazz)) { return (DelayedCellSetterFactory) new DoubleDelayedCellSetterFactory(SetterFactory.toDoubleSetter(setter), doubleReader(reader)); } throw new IllegalArgumentException("Invalid primitive type " + clazz); } public Getter[], ?> newDelayedGetter(CsvColumnKey key, Type type) { Class clazz = TypeHelper.toClass(type); Getter[], ?> getter; int columnIndex = key.getIndex(); if (clazz.isPrimitive()) { if (boolean.class.equals(clazz)) { getter = new BooleanDelayedGetter(columnIndex); } else if (byte.class.equals(clazz)) { getter = new ByteDelayedGetter(columnIndex); } else if (char.class.equals(clazz)) { getter = new CharDelayedGetter(columnIndex); } else if (short.class.equals(clazz)) { getter = new ShortDelayedGetter(columnIndex); } else if (int.class.equals(clazz)) { getter = new IntDelayedGetter(columnIndex); } else if (long.class.equals(clazz)) { getter = new LongDelayedGetter(columnIndex); } else if (float.class.equals(clazz)) { getter = new FloatDelayedGetter(columnIndex); } else if (double.class.equals(clazz)) { getter = new DoubleDelayedGetter(columnIndex); } else { throw new IllegalArgumentException("Unexpected primitive " + clazz); } } else { getter = new DelayedGetter(columnIndex); } return getter; } @SuppressWarnings({"unchecked" }) private

CellValueReader

getReader(Class propertyType, int index, CsvColumnDefinition columnDefinition, ParsingContextFactoryBuilder parsingContextFactoryBuilder) { CellValueReader

reader = null; if (columnDefinition.hasCustomSource()) { reader = (CellValueReader

) columnDefinition.getCustomReader(); } CellValueReaderFactory factory = cellValueReaderFactory; if (columnDefinition.hasCustomReaderFactory()) { factory = columnDefinition.getCustomCellValueReaderFactory(); } if (reader == null) { reader = factory.

getReader(propertyType, index, columnDefinition, parsingContextFactoryBuilder); } if (reader == null) { // check if has a one arg construct final Constructor[] constructors = propertyType.getConstructors(); if (constructors != null && constructors.length == 1 && constructors[0].getParameterTypes().length == 1) { final Constructor

constructor = (Constructor

) constructors[0]; CellValueReader innerReader = factory.

getReader(constructor.getParameterTypes()[0], index, columnDefinition, parsingContextFactoryBuilder); if (innerReader != null) { reader = new ConstructorOnReader

(constructor, innerReader); } } } if (reader == null) { throw new ParsingException("No cell reader for " + propertyType); } return reader; } @SuppressWarnings("unchecked") public CellSetter getCellSetter(Type propertyType, Setter setter, int index, CsvColumnDefinition columnDefinition, ParsingContextFactoryBuilder parsingContextFactoryBuilder) { Class propertyClass = (Class) TypeHelper.toClass(propertyType); CellValueReader

reader = getReader(propertyClass, index, columnDefinition, parsingContextFactoryBuilder); if (propertyClass.isPrimitive()) { return getPrimitiveCellSetter(propertyClass, reader, setter); } else { return new CellSetterImpl(reader, setter); } } public DelayedCellSetterFactory getDelayedCellSetter(Type propertyType, Setter setter, int index, CsvColumnDefinition columnDefinition, ParsingContextFactoryBuilder parsingContextFactoryBuilder) { Class propertyClass = TypeHelper.toClass(propertyType); CellValueReader

reader = getReader(propertyClass, index, columnDefinition, parsingContextFactoryBuilder); if (propertyClass.isPrimitive()) { return getPrimitiveDelayedCellSetter(propertyClass, reader, setter); } else { return new DelayedCellSetterFactoryImpl(reader, setter); } } @SuppressWarnings("unchecked") public DelayedCellSetterFactory getDelayedCellSetter(Type type, int index, CsvColumnDefinition columnDefinition, ParsingContextFactoryBuilder parsingContextFactoryBuilder) { Class propertyClass = TypeHelper.toClass(type); CellValueReader

reader = getReader((Class

) TypeHelper.toClass(type), index, columnDefinition, parsingContextFactoryBuilder); if (propertyClass.isPrimitive()) { return getPrimitiveDelayedCellSetter(propertyClass, reader, null); } else { return new DelayedCellSetterFactoryImpl(reader, null); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy