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

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

package org.sfm.csv.impl;


import org.sfm.csv.CsvColumnKey;
import org.sfm.map.FieldMapperErrorHandler;
import org.sfm.reflect.Instantiator;

public final class CsvMapperCellHandlerImpl extends CsvMapperCellHandler {

    /**
     * mapping information
     */
    protected final DelayedCellSetter[] delayedCellSetters;
    protected final CellSetter[] setters;


    public CsvMapperCellHandlerImpl(Instantiator, T> instantiator, DelayedCellSetter[] delayedCellSetters,
                                    CellSetter[] setters, CsvColumnKey[] columns,
                                    ParsingContext parsingContext, FieldMapperErrorHandler fieldErrorHandler) {
        super(instantiator, columns, delayedCellSetters.length, setters.length, parsingContext, fieldErrorHandler);
        this.delayedCellSetters = delayedCellSetters;
        this.setters = setters;
    }

    @Override
    public void delayedCellValue(char[] chars, int offset, int length, int cellIndex) {
        try {
            DelayedCellSetter delayedCellSetter = delayedCellSetters[cellIndex];
            if (delayedCellSetter != null) {
                delayedCellSetter.set(chars, offset, length, parsingContext);
            }
        } catch (Exception e) {
            fieldError(cellIndex, e);
        }
    }

    @Override
    public void cellValue(char[] chars, int offset, int length, int cellIndex) {
        try {
            CellSetter cellSetter = getCellSetter(cellIndex);
            if (cellSetter != null) {
                cellSetter.set(currentInstance, chars, offset, length, parsingContext);
            }
        } catch (Exception e) {
            fieldError(cellIndex, e);
        }
    }

    @Override
    public void applyDelayedSetters() {
        for (int i = 0; i < delayedCellSetters.length; i++) {
            DelayedCellSetter delayedSetter = delayedCellSetters[i];
            if (delayedSetter != null && delayedSetter.isSettable()) {
                try {
                    delayedSetter.set(currentInstance);
                } catch (Exception e) {
                    fieldError(i, e);
                }
            }
        }

    }

    @Override
    public DelayedCellSetter getDelayedCellSetter(int index) {
        return delayedCellSetters[index];
    }

    @Override
    public final Object peekDelayedCellSetterValue(CsvColumnKey key) {
        return delayedCellSetters[key.getIndex()].peekValue();
    }

    private CellSetter getCellSetter(int cellIndex) {
        final int i = cellIndex - delayedCellSetters.length;
        if (i < setters.length) {
            return setters[i];
        } else {
            return null;
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy