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

org.simpleflatmapper.poi.impl.UnorderedJoinSheetMapper Maven / Gradle / Ivy

The newest version!
package org.simpleflatmapper.poi.impl;


import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.simpleflatmapper.map.ConsumerErrorHandler;
import org.simpleflatmapper.map.ContextualSourceFieldMapper;
import org.simpleflatmapper.map.MappingContext;
import org.simpleflatmapper.map.MappingException;
import org.simpleflatmapper.map.context.MappingContextFactory;
import org.simpleflatmapper.map.mapper.UnorderedJoinMapperEnumerable;
import org.simpleflatmapper.poi.RowMapper;
import org.simpleflatmapper.util.CheckedConsumer;
import org.simpleflatmapper.util.Enumerable;
import org.simpleflatmapper.util.EnumerableIterator;

import java.util.Iterator;
//IFJAVA8_START
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import org.simpleflatmapper.util.EnumerableSpliterator;
//IFJAVA8_END

public class UnorderedJoinSheetMapper implements RowMapper {

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

    private final ConsumerErrorHandler consumerErrorHandler;
    private final MappingContextFactory mappingContextFactory;

    public UnorderedJoinSheetMapper(ContextualSourceFieldMapper mapper, ConsumerErrorHandler consumerErrorHandler, MappingContextFactory mappingContextFactory) {
        this.mapper = mapper;
        this.consumerErrorHandler = consumerErrorHandler;
        this.mappingContextFactory = mappingContextFactory;
    }

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

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

    @Override
    public Enumerable enumerate(Sheet sheet) {
        return enumerate(startRow, sheet);
    }

    @Override
    public Enumerable enumerate(int startRow, Sheet sheet) {
        return enumerable(startRow, sheet, newMappingContext());
    }

    private Enumerable enumerable(int startRow, Sheet sheet, MappingContext mappingContext) {
        return new UnorderedJoinMapperEnumerable(mapper, mappingContext, new RowEnumerable(startRow, sheet));
    }

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

    @Override
    public > RH forEach(int startRow, Sheet sheet, RH consumer) {
        MappingContext mappingContext = newMappingContext();

        Enumerable enumarable = enumerable(startRow, sheet, mappingContext);

        while(enumarable.next()) {
            try {
                consumer.accept(enumarable.currentValue());
            } catch(Exception e) {
                consumerErrorHandler.handlerError(e, enumarable.currentValue());
            }
        }

        return consumer;
    }

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

    @Override
    public Stream stream(int startRow, Sheet sheet) {
        return StreamSupport.stream(new EnumerableSpliterator(enumerable(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);
    }


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




© 2015 - 2025 Weber Informatics LLC | Privacy Policy