package com.taover.easyexcel.read.metadata.holder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.taover.easyexcel.converters.Converter; import com.taover.easyexcel.converters.ConverterKeyBuild; import com.taover.easyexcel.converters.DefaultConverterLoader; import com.taover.easyexcel.enums.HolderEnum; import com.taover.easyexcel.metadata.AbstractHolder; import com.taover.easyexcel.read.listener.ModelBuildEventListener; import com.taover.easyexcel.read.listener.ReadListener; import com.taover.easyexcel.read.metadata.ReadBasicParameter; import com.taover.easyexcel.read.metadata.ReadWorkbook; import com.taover.easyexcel.read.metadata.property.ExcelReadHeadProperty; /** * Read Holder * * @author Jiaju Zhuang */ public abstract class AbstractReadHolder extends AbstractHolder implements ReadHolder { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractReadHolder.class); /** * Count the number of added heads when read sheet. * *

* 0 - This Sheet has no head ,since the first row are the data *

* 1 - This Sheet has one row head , this is the default *

* 2 - This Sheet has two row head ,since the third row is the data */ private Integer headRowNumber; /** * Excel head property */ private ExcelReadHeadProperty excelReadHeadProperty; /** * Read listener */ private List readListenerList; public AbstractReadHolder(ReadBasicParameter readBasicParameter, AbstractReadHolder parentAbstractReadHolder, Boolean convertAllFiled) { super(readBasicParameter, parentAbstractReadHolder); if (readBasicParameter.getUse1904windowing() == null && parentAbstractReadHolder != null) { getGlobalConfiguration() .setUse1904windowing(parentAbstractReadHolder.getGlobalConfiguration().getUse1904windowing()); } else { getGlobalConfiguration().setUse1904windowing(readBasicParameter.getUse1904windowing()); } if (readBasicParameter.getUseScientificFormat() == null) { if (parentAbstractReadHolder == null) { getGlobalConfiguration().setUseScientificFormat(Boolean.FALSE); } else { getGlobalConfiguration() .setUseScientificFormat(parentAbstractReadHolder.getGlobalConfiguration().getUseScientificFormat()); } } else { getGlobalConfiguration().setUseScientificFormat(readBasicParameter.getUseScientificFormat()); } // Initialization property this.excelReadHeadProperty = new ExcelReadHeadProperty(this, getClazz(), getHead(), convertAllFiled); if (readBasicParameter.getHeadRowNumber() == null) { if (parentAbstractReadHolder == null) { if (excelReadHeadProperty.hasHead()) { this.headRowNumber = excelReadHeadProperty.getHeadRowNumber(); } else { this.headRowNumber = 1; } } else { this.headRowNumber = parentAbstractReadHolder.getHeadRowNumber(); } } else { this.headRowNumber = readBasicParameter.getHeadRowNumber(); } if (parentAbstractReadHolder == null) { this.readListenerList = new ArrayList(); } else { this.readListenerList = new ArrayList(parentAbstractReadHolder.getReadListenerList()); } if (HolderEnum.WORKBOOK.equals(holderType())) { Boolean useDefaultListener = ((ReadWorkbook)readBasicParameter).getUseDefaultListener(); if (useDefaultListener == null || useDefaultListener) { readListenerList.add(new ModelBuildEventListener()); } } if (readBasicParameter.getCustomReadListenerList() != null && !readBasicParameter.getCustomReadListenerList().isEmpty()) { this.readListenerList.addAll(readBasicParameter.getCustomReadListenerList()); } if (parentAbstractReadHolder == null) { setConverterMap(DefaultConverterLoader.loadDefaultReadConverter()); } else { setConverterMap(new HashMap(parentAbstractReadHolder.getConverterMap())); } if (readBasicParameter.getCustomConverterList() != null && !readBasicParameter.getCustomConverterList().isEmpty()) { for (Converter converter : readBasicParameter.getCustomConverterList()) { getConverterMap().put( ConverterKeyBuild.buildKey(converter.supportJavaTypeKey(), converter.supportExcelTypeKey()), converter); } } } public List getReadListenerList() { return readListenerList; } public void setReadListenerList(List readListenerList) { this.readListenerList = readListenerList; } public ExcelReadHeadProperty getExcelReadHeadProperty() { return excelReadHeadProperty; } public void setExcelReadHeadProperty(ExcelReadHeadProperty excelReadHeadProperty) { this.excelReadHeadProperty = excelReadHeadProperty; } public Integer getHeadRowNumber() { return headRowNumber; } public void setHeadRowNumber(Integer headRowNumber) { this.headRowNumber = headRowNumber; } @Override public List readListenerList() { return getReadListenerList(); } @Override public ExcelReadHeadProperty excelReadHeadProperty() { return getExcelReadHeadProperty(); } }