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

org.sfm.poi.impl.StaticSheetMapper Maven / Gradle / Ivy

package org.sfm.poi.impl;


import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.sfm.map.*;
import org.sfm.map.context.MappingContextFactory;
import org.sfm.poi.RowMapper;
import org.sfm.utils.RowHandler;

import java.util.Iterator;

//IFJAVA8_START
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
//IFJAVA8_END

public class StaticSheetMapper implements RowMapper {

    private final Mapper mapper;
    private final int startRow = 0;

    private final RowHandlerErrorHandler rowHandlerErrorHandler;
    private final MappingContextFactory mappingContextFactory;

    public StaticSheetMapper(Mapper mapper, RowHandlerErrorHandler rowHandlerErrorHandler, MappingContextFactory mappingContextFactory) {
        this.mapper = mapper;
        this.rowHandlerErrorHandler = rowHandlerErrorHandler;
        this.mappingContextFactory = mappingContextFactory;
    }

    @Override
    public Iterator iterator(Sheet sheet) {
        return iterator(startRow, sheet);
    }

    @Override
    public Iterator iterator(int startRow, Sheet sheet) {
        return new SheetIterator(this, startRow, sheet, newMappingContext());
    }

    @Override
    public > RH forEach(Sheet sheet, RH rowHandler) {
        return forEach(startRow, sheet, rowHandler);
    }

    @Override
    public > RH forEach(int startRow, Sheet sheet, RH rowHandler) {
        MappingContext mappingContext = newMappingContext();
        Mapper lMapper = this.mapper;
        for(int rowNum = startRow; rowNum <= sheet.getLastRowNum(); rowNum++) {
            T object = lMapper.map(sheet.getRow(rowNum), mappingContext);
            try {
                rowHandler.handle(object);
            } catch(Exception e) {
                rowHandlerErrorHandler.handlerError(e, object);
            }
        }
        return rowHandler;
    }

    //IFJAVA8_START
    @Override
    public Stream stream(Sheet sheet) {
        return stream(startRow, sheet);
    }

    @Override
    public Stream stream(int startRow, Sheet sheet) {
        return StreamSupport.stream(new SheetSpliterator(this, startRow, sheet, newMappingContext()), false);
    }
    //IFJAVA8_END


    @Override
    public T map(Row source) throws MappingException {
        return mapper.map(source);
    }

    @Override
    public T map(Row source, MappingContext context) throws MappingException {
        return mapper.map(source, context);
    }

    @Override
    public void mapTo(Row source, T target, MappingContext context) throws Exception {
        mapper.mapTo(source, target, context);
    }

    private MappingContext newMappingContext() {
        return mappingContextFactory.newContext();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy