// Path: src/main/java/org/embulk/parser/poi_excel/PoiExcelParserPlugin.java
// public interface PluginTask extends Task, TimestampParser.Task, SheetCommonOptionTask {
// 	@Config("sheet")
// 	@ConfigDefault("null")
// 	public Optional<String> getSheet();
// 
// 	@Config("sheets")
// 	@ConfigDefault("[]")
// 	public List<String> getSheets();
// 
// 	@Config("ignore_sheet_not_found")
// 	@ConfigDefault("false")
// 	public boolean getIgnoreSheetNotFound();
// 
// 	@Config("sheet_options")
// 	@ConfigDefault("{}")
// 	public Map<String, SheetOptionTask> getSheetOptions();
// 
// 	@Config("columns")
// 	public SchemaConfig getColumns();
// 
// 	@Config("flush_count")
// 	@ConfigDefault("100")
// 	public int getFlushCount();
// }
// 
// Path: src/main/java/org/embulk/parser/poi_excel/visitor/PoiExcelVisitorValue.java
// public class PoiExcelVisitorValue {
// 	private final PluginTask task;
// 	private final Sheet sheet;
// 	private final PageBuilder pageBuilder;
// 	private final PoiExcelSheetBean sheetBean;
// 	private PoiExcelVisitorFactory factory;
// 
// 	public PoiExcelVisitorValue(PluginTask task, Schema schema, Sheet sheet, PageBuilder pageBuilder) {
// 		this.task = task;
// 		this.sheet = sheet;
// 		this.pageBuilder = pageBuilder;
// 		this.sheetBean = new PoiExcelSheetBean(task, schema, sheet);
// 	}
// 
// 	public PluginTask getPluginTask() {
// 		return task;
// 	}
// 
// 	public Sheet getSheet() {
// 		return sheet;
// 	}
// 
// 	public PageBuilder getPageBuilder() {
// 		return pageBuilder;
// 	}
// 
// 	public void setVisitorFactory(PoiExcelVisitorFactory factory) {
// 		this.factory = factory;
// 	}
// 
// 	public PoiExcelVisitorFactory getVisitorFactory() {
// 		return factory;
// 	}
// 
// 	public PoiExcelSheetBean getSheetBean() {
// 		return sheetBean;
// 	}
// 
// 	public PoiExcelColumnBean getColumnBean(Column column) {
// 		return sheetBean.getColumnBean(column);
// 	}
// }


import java.util.Date;
import java.util.TimeZone;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Sheet;
import org.embulk.parser.poi_excel.PoiExcelParserPlugin.PluginTask;
import org.embulk.parser.poi_excel.visitor.PoiExcelVisitorValue;
import org.embulk.spi.Column;
import org.embulk.spi.time.Timestamp;
import org.embulk.spi.time.TimestampParseException;
import org.embulk.spi.time.TimestampParser;
import org.embulk.spi.util.Timestamps;

	}

	@Override
	public void visitSheetName(Column column, Sheet sheet) {
		doConvertError(column, sheet.getSheetName(), new UnsupportedOperationException(
				"unsupported conversion sheet_name to Embulk timestamp"));
	}

	@Override
	public void visitRowNumber(Column column, int index1) {
		doConvertError(column, index1, new UnsupportedOperationException(
				"unsupported conversion row_number to Embulk timestamp"));
	}

	@Override
	public void visitColumnNumber(Column column, int index1) {
		doConvertError(column, index1, new UnsupportedOperationException(
				"unsupported conversion column_number to Embulk timestamp"));
	}

	@Override
	protected void doConvertErrorConstant(Column column, String value) throws Exception {
		TimestampParser parser = getTimestampParser(column);
		pageBuilder.setTimestamp(column, parser.parse(value));
	}

	private TimestampParser[] timestampParsers;

	protected final TimestampParser getTimestampParser(Column column) {
		if (timestampParsers == null) {

// Path: src/main/java/org/embulk/parser/poi_excel/PoiExcelParserPlugin.java
// public interface PluginTask extends Task, TimestampParser.Task, SheetCommonOptionTask {
// 	@Config("sheet")
// 	@ConfigDefault("null")
// 	public Optional<String> getSheet();
// 
// 	@Config("sheets")
// 	@ConfigDefault("[]")
// 	public List<String> getSheets();
// 
// 	@Config("ignore_sheet_not_found")
// 	@ConfigDefault("false")
// 	public boolean getIgnoreSheetNotFound();
// 
// 	@Config("sheet_options")
// 	@ConfigDefault("{}")
// 	public Map<String, SheetOptionTask> getSheetOptions();
// 
// 	@Config("columns")
// 	public SchemaConfig getColumns();
// 
// 	@Config("flush_count")
// 	@ConfigDefault("100")
// 	public int getFlushCount();
// }
// 
// Path: src/main/java/org/embulk/parser/poi_excel/visitor/PoiExcelVisitorValue.java
// public class PoiExcelVisitorValue {
// 	private final PluginTask task;
// 	private final Sheet sheet;
// 	private final PageBuilder pageBuilder;
// 	private final PoiExcelSheetBean sheetBean;
// 	private PoiExcelVisitorFactory factory;
// 
// 	public PoiExcelVisitorValue(PluginTask task, Schema schema, Sheet sheet, PageBuilder pageBuilder) {
// 		this.task = task;
// 		this.sheet = sheet;
// 		this.pageBuilder = pageBuilder;
// 		this.sheetBean = new PoiExcelSheetBean(task, schema, sheet);
// 	}
// 
// 	public PluginTask getPluginTask() {
// 		return task;
// 	}
// 
// 	public Sheet getSheet() {
// 		return sheet;
// 	}
// 
// 	public PageBuilder getPageBuilder() {
// 		return pageBuilder;
// 	}
// 
// 	public void setVisitorFactory(PoiExcelVisitorFactory factory) {
// 		this.factory = factory;
// 	}
// 
// 	public PoiExcelVisitorFactory getVisitorFactory() {
// 		return factory;
// 	}
// 
// 	public PoiExcelSheetBean getSheetBean() {
// 		return sheetBean;
// 	}
// 
// 	public PoiExcelColumnBean getColumnBean(Column column) {
// 		return sheetBean.getColumnBean(column);
// 	}
// }


// Path: src/main/java/org/embulk/parser/poi_excel/visitor/embulk/TimestampCellVisitor.java
import java.util.Date;
import java.util.TimeZone;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Sheet;
import org.embulk.parser.poi_excel.PoiExcelParserPlugin.PluginTask;
import org.embulk.parser.poi_excel.visitor.PoiExcelVisitorValue;
import org.embulk.spi.Column;
import org.embulk.spi.time.Timestamp;
import org.embulk.spi.time.TimestampParseException;
import org.embulk.spi.time.TimestampParser;
import org.embulk.spi.util.Timestamps;

	}

	@Override
	public void visitSheetName(Column column, Sheet sheet) {
		doConvertError(column, sheet.getSheetName(), new UnsupportedOperationException(
				"unsupported conversion sheet_name to Embulk timestamp"));
	}

	@Override
	public void visitRowNumber(Column column, int index1) {
		doConvertError(column, index1, new UnsupportedOperationException(
				"unsupported conversion row_number to Embulk timestamp"));
	}

	@Override
	public void visitColumnNumber(Column column, int index1) {
		doConvertError(column, index1, new UnsupportedOperationException(
				"unsupported conversion column_number to Embulk timestamp"));
	}

	@Override
	protected void doConvertErrorConstant(Column column, String value) throws Exception {
		TimestampParser parser = getTimestampParser(column);
		pageBuilder.setTimestamp(column, parser.parse(value));
	}

	private TimestampParser[] timestampParsers;

	protected final TimestampParser getTimestampParser(Column column) {
		if (timestampParsers == null) {

			PluginTask task = visitorValue.getPluginTask();
