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

spreadsheet.mapper.w2o.process.DefaultSheetProcessHelper Maven / Gradle / Ivy

The newest version!
package spreadsheet.mapper.w2o.process;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import spreadsheet.mapper.model.core.Cell;
import spreadsheet.mapper.model.core.Row;
import spreadsheet.mapper.model.core.Sheet;
import spreadsheet.mapper.model.meta.FieldMeta;
import spreadsheet.mapper.model.meta.SheetMeta;
import spreadsheet.mapper.w2o.process.listener.*;
import spreadsheet.mapper.w2o.process.setter.FieldSetter;
import spreadsheet.mapper.w2o.process.setter.Setter;
import spreadsheet.mapper.w2o.process.setter.buildin.BeanUtilsSetter;

import java.util.*;

/**
 * sheet to objects processor
 * 

* Created by hanwen on 15-12-16. */ public class DefaultSheetProcessHelper implements SheetProcessHelper { private static final Logger LOGGER = LoggerFactory.getLogger(DefaultSheetProcessHelper.class); private ObjectFactory objectFactory; private SheetProcessListener sheetProcessListener = new NoopSheetProcessListener<>(); private RowProcessListener rowProcessListener = new NoopRowProcessListener<>(); private CellProcessListener cellProcessListener = new NoopCellProcessListener<>(); private LinkedHashMap> field2setter = new LinkedHashMap<>(); private Setter defaultSetter = new BeanUtilsSetter<>(); @Override public SheetProcessHelper addFieldSetter(FieldSetter fieldSetter) { if (fieldSetter == null) { throw new IllegalArgumentException("field setter can not be null"); } String matchField = fieldSetter.getMatchField(); if (StringUtils.isBlank(matchField)) { throw new IllegalArgumentException("field value setter match field can not be null"); } if (field2setter.containsKey(matchField)) { throw new IllegalArgumentException("sheet process helper contains multi field setter at field[" + matchField + "]"); } field2setter.put(matchField, fieldSetter); return this; } @Override public SheetProcessHelper setObjectFactory(ObjectFactory objectFactory) { if (objectFactory == null) { throw new IllegalArgumentException("object factory can not be null"); } this.objectFactory = objectFactory; return this; } @Override public SheetProcessHelper setSheetProcessorListener(SheetProcessListener sheetProcessListener) { if (sheetProcessListener == null) { throw new IllegalArgumentException("sheet process listener can not be null"); } this.sheetProcessListener = sheetProcessListener; return this; } @Override public SheetProcessHelper setRowProcessorListener(RowProcessListener rowProcessListener) { if (rowProcessListener == null) { throw new IllegalArgumentException("row process listener can not be null"); } this.rowProcessListener = rowProcessListener; return this; } @Override public SheetProcessHelper setCellProcessorListener(CellProcessListener cellProcessListener) { if (cellProcessListener == null) { throw new IllegalArgumentException("cell process listener can not be null"); } this.cellProcessListener = cellProcessListener; return this; } @Override public List process(Sheet sheet, SheetMeta sheetMeta) { if (objectFactory == null) { throw new WorkbookProcessException("set object factory first"); } List fieldMetas = sheetMeta.getFieldMetas(); Map columnIndex2fieldMeta = buildFieldMetaMap(fieldMetas); List dataOfSheet = new ArrayList<>(); sheetProcessListener.before(sheet, sheetMeta); for (int i = sheetMeta.getDataStartRowIndex(); i <= sheet.sizeOfRows(); i++) { Row row = sheet.getRow(i); T object = objectFactory.create(row, sheetMeta); rowProcessListener.before(object, row, sheetMeta); for (Cell cell : row.getCells()) { FieldMeta fieldMeta = columnIndex2fieldMeta.get(cell.getIndex()); if (fieldMeta == null) { // if missing field meta skip the cell(same column index with field meta) LOGGER.debug("no field meta at row index:[" + cell.getIndex() + "], cell value:[" + cell.getValue() + "] ignored"); continue; } cellProcessListener.before(object, cell, fieldMeta); // use default setter first defaultSetter.set(object, cell, fieldMeta); FieldSetter fieldSetter = field2setter.get(fieldMeta.getName()); if (fieldSetter != null) { fieldSetter.set(object, cell, fieldMeta); } cellProcessListener.after(object, cell, fieldMeta); } rowProcessListener.after(object, row, sheetMeta); dataOfSheet.add(object); } sheetProcessListener.after(dataOfSheet, sheet, sheetMeta); return dataOfSheet; } private Map buildFieldMetaMap(List fieldMetas) { Map columnIndex2fieldMeta = new HashMap<>(); for (FieldMeta fieldMeta : fieldMetas) { columnIndex2fieldMeta.put(fieldMeta.getColumnIndex(), fieldMeta); } return columnIndex2fieldMeta; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy