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

com.poiji.bind.mapping.XSSFPoijiHandler Maven / Gradle / Ivy

package com.poiji.bind.mapping;

import com.poiji.option.PoijiOptions;

import java.util.function.Consumer;
import org.apache.poi.ss.util.CellAddress;
import org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler.SheetContentsHandler;
import org.apache.poi.xssf.usermodel.XSSFComment;

/**
 * This class handles the processing of a .xlsx file,
 * and generates a list of instances of a given type
 * 

* Created by hakan on 22/10/2017 */ class XSSFPoijiHandler implements SheetContentsHandler { private Data data; protected Consumer consumer; private int internalRow; private int internalCount; private final PoijiOptions options; private final ReadMappedFields mappedFields; XSSFPoijiHandler( PoijiOptions options, Consumer consumer, final ReadMappedFields mappedFields ) { this.options = options; this.consumer = consumer; this.mappedFields = mappedFields; } XSSFPoijiHandler( PoijiOptions options, final ReadMappedFields mappedFields ) { this.options = options; this.mappedFields = mappedFields; } @Override public void startRow(int rowNum) { if (isContentRow(rowNum)) { internalCount += 1; data = mappedFields.createInstanceData(); } } @Override public void endRow(int rowNum) { if (internalRow != rowNum || isHeaderRow(rowNum)) return; if (isContentRow(rowNum)) { consumer.accept((T) mappedFields.createNewInstance(data)); } if (rowNum <= options.getHeaderStart() + options.getHeaderCount()) { mappedFields.validateMandatoryNameColumns(); } } @Override public void cell(String cellReference, String formattedValue, XSSFComment comment) { CellAddress cellAddress = new CellAddress(cellReference); int row = cellAddress.getRow(); int column = cellAddress.getColumn(); if (isHeaderRow(row)) { mappedFields.parseColumnName(column, formattedValue); return; } if (isContentRow(row)){ internalRow = row; mappedFields.setCellInData(internalRow, column, formattedValue, data); } } private boolean isContentRow(final int rowNum) { return rowNum > options.skip() + options.getHeaderStart() + options.getHeaderCount() - 1 && (options.getLimit() == 0 || internalCount <= options.getLimit()); } private boolean isHeaderRow(final int row) { int headerStart = options.getHeaderStart(); int headerCount = options.getHeaderCount(); return row >= headerStart && row < headerStart + headerCount; } @Override public void headerFooter(String text, boolean isHeader, String tagName) { //no-op } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy