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

org.simpleflatmapper.poi.SheetMapperBuilder Maven / Gradle / Ivy

The newest version!
package org.simpleflatmapper.poi;


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.SetRowMapper;
import org.simpleflatmapper.map.context.MappingContextFactory;
import org.simpleflatmapper.map.getter.ContextualGetterFactory;
import org.simpleflatmapper.map.getter.ContextualGetterFactoryAdapter;
import org.simpleflatmapper.map.mapper.ColumnDefinition;
import org.simpleflatmapper.map.mapper.MapperBuilder;
import org.simpleflatmapper.map.mapper.SetRowMapperBuilderImpl;
import org.simpleflatmapper.map.property.FieldMapperColumnDefinition;
import org.simpleflatmapper.poi.impl.JoinSheetMapper;
import org.simpleflatmapper.poi.impl.StaticSheetMapper;
import org.simpleflatmapper.poi.impl.TransformRowMapper;
import org.simpleflatmapper.poi.impl.UnorderedJoinSheetMapper;
import org.simpleflatmapper.reflect.getter.GetterFactory;
import org.simpleflatmapper.csv.CsvColumnKey;
import org.simpleflatmapper.map.MapperConfig;
import org.simpleflatmapper.map.context.MappingContextFactoryBuilder;
import org.simpleflatmapper.map.mapper.KeyFactory;
import org.simpleflatmapper.map.mapper.MapperSourceImpl;
import org.simpleflatmapper.poi.impl.CsvColumnKeyRowKeySourceGetter;
import org.simpleflatmapper.poi.impl.RowGetterFactory;
import org.simpleflatmapper.reflect.meta.ClassMeta;
import org.simpleflatmapper.util.BiFunction;
import org.simpleflatmapper.util.Enumerable;
import org.simpleflatmapper.util.Function;
import org.simpleflatmapper.util.UnaryFactory;

import java.util.List;

public class SheetMapperBuilder extends MapperBuilder, RowMapper, SheetMapperBuilder> {

    public static final MapperSourceImpl FIELD_MAPPER_SOURCE =
            new MapperSourceImpl(Row.class, new ContextualGetterFactoryAdapter(new RowGetterFactory()));
    private static final KeyFactory KEY_FACTORY = new KeyFactory() {
        @Override
        public CsvColumnKey newKey(String name, int i) {
            return new CsvColumnKey(name, i);
        }
    };
    public static final Function> COLUMN_DEFINITION_FACTORY = FieldMapperColumnDefinition.factory();


    public SheetMapperBuilder(ClassMeta classMeta,
                              MapperConfig mapperConfig,
                              GetterFactory getterFactory) {
        this(classMeta, mapperConfig, new ContextualGetterFactoryAdapter(getterFactory));
    }
    public SheetMapperBuilder(ClassMeta classMeta,
                MapperConfig mapperConfig,
                ContextualGetterFactory getterFactory) {        super(KEY_FACTORY,
                new SetRowMapperBuilderImpl , Row, Sheet, T, CsvColumnKey, RuntimeException>(
                        classMeta,
                        new MappingContextFactoryBuilder(CsvColumnKeyRowKeySourceGetter.INSTANCE, !mapperConfig.unorderedJoin()),
                        mapperConfig,
                        FIELD_MAPPER_SOURCE.getterFactory(getterFactory),
                        KEY_FACTORY,
                        new UnaryFactory>() {
                            @Override
                            public Enumerable newInstance(Sheet rows) {
                                throw new UnsupportedOperationException();
                            }
                        },
                        new RowMapperFactory(),
                        CsvColumnKeyRowKeySourceGetter.INSTANCE),  new BiFunction, List, RowMapper>() {
                    @Override
                    public RowMapper apply(RowMapper setRowMapper, List keys) {
                        return setRowMapper;
                    }
                }, COLUMN_DEFINITION_FACTORY, 0
                
        );
    }

    private static class RowMapperFactory implements SetRowMapperBuilderImpl.SetRowMapperFactory, Row, Sheet, T, RuntimeException> {
        @Override
        public RowMapper newJoinMapper(ContextualSourceFieldMapper mapper, ConsumerErrorHandler consumerErrorHandler, MappingContextFactory mappingContextFactory, UnaryFactory> enumerableFactory) {
            return new JoinSheetMapper(mapper, consumerErrorHandler, mappingContextFactory);
        }

        @Override
        public RowMapper newUnorderedJoinMapper(ContextualSourceFieldMapper mapper, ConsumerErrorHandler consumerErrorHandler, MappingContextFactory mappingContextFactory, UnaryFactory> enumerableFactory) {
            return new UnorderedJoinSheetMapper(mapper, consumerErrorHandler, mappingContextFactory);
        }

        @Override
        public RowMapper newStaticMapper(ContextualSourceFieldMapper mapper, ConsumerErrorHandler consumerErrorHandler, MappingContextFactory mappingContextFactory, UnaryFactory> enumerableFactory) {
            return new StaticSheetMapper(mapper, consumerErrorHandler, mappingContextFactory);
        }

        @Override
        public  RowMapper newTransformer(SetRowMapper setRowMapper, Function transform) {
            return new TransformRowMapper((RowMapper)setRowMapper, transform);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy