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"); } }