![JAR search and dependency download from the Maven repository](/logo.png)
org.sfm.csv.impl.DynamicCsvMapper Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of simpleFlatMapper Show documentation
Show all versions of simpleFlatMapper Show documentation
Java library to map flat record - ResultSet, csv - to java object with minimum configuration and low footprint.
package org.sfm.csv.impl;
import org.sfm.csv.*;
import org.sfm.csv.parser.CellConsumer;
import org.sfm.map.*;
import org.sfm.map.impl.*;
import org.sfm.reflect.meta.ClassMeta;
import org.sfm.reflect.meta.PropertyNameMatcherFactory;
import org.sfm.utils.RowHandler;
import java.io.IOException;
import java.io.Reader;
import java.lang.reflect.Type;
import java.util.Iterator;
//IFJAVA8_START
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
//IFJAVA8_END
public final class DynamicCsvMapper implements CsvMapper {
private final ClassMeta classMeta;
private final Type target;
private final FieldMapperErrorHandler fieldMapperErrorHandler;
private final MapperBuilderErrorHandler mapperBuilderErrorHandler;
private final RowHandlerErrorHandler rowHandlerErrorHandler;
private final String defaultDateFormat;
private final PropertyNameMatcherFactory propertyNameMatcherFactory;
private final MapperCache> mapperCache = new MapperCache>();
private final ColumnDefinitionProvider columnDefinitions;
private final CellValueReaderFactory cellValueReaderFactory;
private final boolean failOnAsm;
private final int asmMapperNbFieldsLimit;
private final int maxMethodSize;
public DynamicCsvMapper(final Type target, final ClassMeta classMeta,
final FieldMapperErrorHandler fieldMapperErrorHandler,
final MapperBuilderErrorHandler mapperBuilderErrorHandler, RowHandlerErrorHandler rowHandlerErrorHandler, String defaultDateFormat,
ColumnDefinitionProvider columnDefinitions,
PropertyNameMatcherFactory propertyNameMatcherFactory, CellValueReaderFactory cellValueReaderFactory,
boolean failOnAsm, int asmMapperNbFieldsLimit, int maxMethodSize
) {
if (classMeta == null) {
throw new NullPointerException("classMeta is null");
}
if (target == null) {
throw new NullPointerException("classMeta is null");
}
this.classMeta = classMeta;
this.target = target;
this.fieldMapperErrorHandler = fieldMapperErrorHandler;
this.mapperBuilderErrorHandler = mapperBuilderErrorHandler;
this.rowHandlerErrorHandler = rowHandlerErrorHandler;
this.defaultDateFormat = defaultDateFormat;
this.columnDefinitions = columnDefinitions;
this.propertyNameMatcherFactory = propertyNameMatcherFactory;
this.cellValueReaderFactory = cellValueReaderFactory;
this.asmMapperNbFieldsLimit = asmMapperNbFieldsLimit;
this.failOnAsm = failOnAsm;
this.maxMethodSize = maxMethodSize;
}
public DynamicCsvMapper(Type target, ClassMeta classMeta, ColumnDefinitionProvider columnDefinitionProvider) {
this(target, classMeta, new RethrowFieldMapperErrorHandler(), new RethrowMapperBuilderErrorHandler(), new RethrowRowHandlerErrorHandler(), "yyyy-MM-dd HH:mm:ss",
columnDefinitionProvider, new DefaultPropertyNameMatcherFactory(), new CellValueReaderFactoryImpl(), false, CsvMapperBuilder.NO_ASM_CSV_HANDLER_THRESHOLD, CsvMapperBuilder.CSV_MAX_METHOD_SIZE);
}
@Override
public > H forEach(Reader reader, H handle) throws IOException, MappingException {
return forEach(CsvParser.reader(reader), handle);
}
@Override
public > H forEach(CsvReader csvReader, H handle) throws IOException {
CellConsumer mapperCellConsumer = getDelegateMapper(csvReader).newCellConsumer(handle);
csvReader.parseAll(mapperCellConsumer);
return handle;
}
@Override
public > H forEach(Reader reader, H handle, int skip) throws IOException, MappingException {
return forEach(CsvParser.skip(skip).reader(reader), handle);
}
@Override
public > H forEach(CsvReader csvReader, H handle, int limit) throws IOException {
CellConsumer mapperCellConsumer = getDelegateMapper(csvReader).newCellConsumer(handle);
csvReader.parseRows(mapperCellConsumer, limit);
return handle;
}
@Override
public > H forEach(Reader reader, H handle, int skip, int limit) throws IOException, MappingException {
return forEach(CsvParser.skip(skip).reader(reader), handle, limit);
}
@Override
@Deprecated
@SuppressWarnings("deprecation")
public Iterator iterate(Reader reader) throws IOException {
CsvReader csvReader = CsvParser.reader(reader);
return iterate(csvReader);
}
@Override
@Deprecated
@SuppressWarnings("deprecation")
public Iterator iterate(CsvReader csvReader) throws IOException {
CsvMapperImpl mapper = getDelegateMapper(csvReader);
return new CsvMapperIterator(csvReader, mapper);
}
@Override
@Deprecated
@SuppressWarnings("deprecation")
public Iterator iterate(Reader reader, int skip) throws IOException {
return iterate(CsvParser.skip(skip).reader(reader));
}
@SuppressWarnings("deprecation")
@Override
public Iterator iterator(Reader reader) throws IOException {
return iterate(reader);
}
@SuppressWarnings("deprecation")
@Override
public Iterator iterator(CsvReader csvReader) throws IOException {
return iterate(csvReader);
}
@SuppressWarnings("deprecation")
@Override
public Iterator iterator(Reader reader, int skip) throws IOException {
return iterate(reader, skip);
}
private CsvMapperImpl getDelegateMapper(CsvReader reader) throws IOException {
ColumnsMapperKeyBuilderCellConsumer keyBuilderCellConsumer = new ColumnsMapperKeyBuilderCellConsumer();
reader.parseRow(keyBuilderCellConsumer);
return getCsvMapper(keyBuilderCellConsumer.getKey());
}
//IFJAVA8_START
@Override
public Stream stream(Reader reader) throws IOException {
CsvReader csvReader = CsvParser.reader(reader);
return stream(csvReader);
}
@Override
public Stream stream(CsvReader csvReader) throws IOException {
CsvMapperImpl mapper = getDelegateMapper(csvReader);
return StreamSupport.stream(mapper.new CsvSpliterator(csvReader), false);
}
@Override
public Stream stream(Reader reader, int skip) throws IOException {
return stream(CsvParser.skip(skip).reader(reader));
}
//IFJAVA8_END
protected CsvMapperImpl getCsvMapper(ColumnsMapperKey key) {
CsvMapperImpl csvMapperImpl = mapperCache.get(key);
if (csvMapperImpl == null) {
csvMapperImpl = buildMapper(key);
mapperCache.add(key, csvMapperImpl);
}
return csvMapperImpl;
}
private CsvMapperImpl buildMapper(ColumnsMapperKey key) {
CsvMapperBuilder builder = new CsvMapperBuilder(target, classMeta, mapperBuilderErrorHandler,
columnDefinitions, propertyNameMatcherFactory, cellValueReaderFactory, 0,
failOnAsm, asmMapperNbFieldsLimit, maxMethodSize);
builder.fieldMapperErrorHandler(fieldMapperErrorHandler);
builder.setDefaultDateFormat(defaultDateFormat);
builder.rowHandlerErrorHandler(rowHandlerErrorHandler);
for(String col : key.getColumns()) {
builder.addMapping(col);
}
return (CsvMapperImpl)builder.mapper();
}
@Override
public String toString() {
return "DynamicCsvMapper{" +
"target=" + target +
", mapperCache=" + mapperCache +
'}';
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy