|
|
|
package com.alibaba.excel.context;
|
|
|
|
|
|
|
|
import java.io.InputStream;
|
|
|
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
|
|
import com.alibaba.excel.exception.ExcelAnalysisException;
|
|
|
|
import com.alibaba.excel.metadata.Sheet;
|
|
|
|
import com.alibaba.excel.read.metadata.ReadSheet;
|
|
|
|
import com.alibaba.excel.read.metadata.ReadWorkbook;
|
|
|
|
import com.alibaba.excel.read.metadata.holder.ReadHolder;
|
|
|
|
import com.alibaba.excel.read.metadata.holder.ReadRowHolder;
|
|
|
|
import com.alibaba.excel.read.metadata.holder.ReadSheetHolder;
|
|
|
|
import com.alibaba.excel.read.metadata.holder.ReadWorkbookHolder;
|
|
|
|
import com.alibaba.excel.read.processor.AnalysisEventProcessor;
|
|
|
|
import com.alibaba.excel.read.processor.DefalutAnalysisEventProcessor;
|
|
|
|
import com.alibaba.excel.support.ExcelTypeEnum;
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @author jipengfei
|
|
|
|
*/
|
|
|
|
public class AnalysisContextImpl implements AnalysisContext {
|
|
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(AnalysisContextImpl.class);
|
|
|
|
/**
|
|
|
|
* The Workbook currently written
|
|
|
|
*/
|
|
|
|
private ReadWorkbookHolder readWorkbookHolder;
|
|
|
|
/**
|
|
|
|
* Current sheet holder
|
|
|
|
*/
|
|
|
|
private ReadSheetHolder readSheetHolder;
|
|
|
|
/**
|
|
|
|
* Current row holder
|
|
|
|
*/
|
|
|
|
private ReadRowHolder readRowHolder;
|
|
|
|
/**
|
|
|
|
* Configuration of currently operated cell
|
|
|
|
*/
|
|
|
|
private ReadHolder currentReadHolder;
|
|
|
|
/**
|
|
|
|
* Event processor
|
|
|
|
*/
|
|
|
|
private AnalysisEventProcessor analysisEventProcessor;
|
|
|
|
|
|
|
|
public AnalysisContextImpl(ReadWorkbook readWorkbook) {
|
|
|
|
if (readWorkbook == null) {
|
|
|
|
throw new IllegalArgumentException("Workbook argument cannot be null");
|
|
|
|
}
|
|
|
|
readWorkbookHolder = new ReadWorkbookHolder(readWorkbook);
|
|
|
|
currentReadHolder = readWorkbookHolder;
|
|
|
|
analysisEventProcessor = new DefalutAnalysisEventProcessor();
|
|
|
|
if (LOGGER.isDebugEnabled()) {
|
|
|
|
LOGGER.debug("Initialization 'AnalysisContextImpl' complete");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void currentSheet(ReadSheet readSheet) {
|
|
|
|
readSheetHolder = new ReadSheetHolder(readSheet, readWorkbookHolder);
|
|
|
|
currentReadHolder = readSheetHolder;
|
|
|
|
if (readWorkbookHolder.getHasReadSheet().contains(readSheetHolder.getSheetNo())) {
|
|
|
|
throw new ExcelAnalysisException("Cannot read sheet repeatedly.");
|
|
|
|
}
|
|
|
|
readWorkbookHolder.getHasReadSheet().add(readSheetHolder.getSheetNo());
|
|
|
|
if (LOGGER.isDebugEnabled()) {
|
|
|
|
LOGGER.debug("Began to read:{}", readSheetHolder);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public ReadWorkbookHolder readWorkbookHolder() {
|
|
|
|
return readWorkbookHolder;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public ReadSheetHolder readSheetHolder() {
|
|
|
|
return readSheetHolder;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public ReadRowHolder readRowHolder() {
|
|
|
|
return readRowHolder;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void readRowHolder(ReadRowHolder readRowHolder) {
|
|
|
|
this.readRowHolder = readRowHolder;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public ReadHolder currentReadHolder() {
|
|
|
|
return currentReadHolder;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Object getCustom() {
|
|
|
|
return readWorkbookHolder.getCustomObject();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public AnalysisEventProcessor analysisEventProcessor() {
|
|
|
|
return analysisEventProcessor;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Sheet getCurrentSheet() {
|
|
|
|
Sheet sheet = new Sheet(readSheetHolder.getSheetNo() + 1);
|
|
|
|
sheet.setSheetName(readSheetHolder.getSheetName());
|
|
|
|
sheet.setHead(readSheetHolder.getHead());
|
|
|
|
sheet.setClazz(readSheetHolder.getClazz());
|
|
|
|
sheet.setHeadLineMun(readSheetHolder.getHeadRowNumber());
|
|
|
|
return sheet;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public ExcelTypeEnum getExcelType() {
|
|
|
|
return readWorkbookHolder.getExcelType();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public InputStream getInputStream() {
|
|
|
|
return readWorkbookHolder.getInputStream();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Integer getCurrentRowNum() {
|
|
|
|
return readRowHolder.getRowIndex();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Integer getTotalCount() {
|
|
|
|
return readSheetHolder.getTotal();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Object getCurrentRowAnalysisResult() {
|
|
|
|
return readRowHolder.getCurrentRowAnalysisResult();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void interrupt() {
|
|
|
|
throw new ExcelAnalysisException("interrupt error");
|
|
|
|
}
|
|
|
|
}
|