Sha256: 972bf6fbaf16b366368471350e1a3cf62797d99fe98e94126ad7e82648b954b7
Contents?: true
Size: 1.65 KB
Versions: 3
Compression:
Stored size: 1.65 KB
Contents
package org.embulk.parser.poi_excel.visitor.util; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.CellRangeAddress; public abstract class MergedRegionMap implements MergedRegionFinder { private final Map<Sheet, Map<Integer, Map<Integer, CellRangeAddress>>> sheetMap = new ConcurrentHashMap<>(); @Override public CellRangeAddress get(Sheet sheet, int rowIndex, int columnIndex) { Map<Integer, Map<Integer, CellRangeAddress>> rowMap = sheetMap.get(sheet); if (rowMap == null) { synchronized (sheet) { rowMap = createRowMap(sheet); sheetMap.put(sheet, rowMap); } } Map<Integer, CellRangeAddress> columnMap = rowMap.get(rowIndex); if (columnMap == null) { return null; } return columnMap.get(columnIndex); } protected Map<Integer, Map<Integer, CellRangeAddress>> createRowMap(Sheet sheet) { Map<Integer, Map<Integer, CellRangeAddress>> rowMap = newRowMap(); for (int i = sheet.getNumMergedRegions() - 1; i >= 0; i--) { CellRangeAddress region = sheet.getMergedRegion(i); for (int r = region.getFirstRow(); r <= region.getLastRow(); r++) { Map<Integer, CellRangeAddress> columnMap = rowMap.get(r); if (columnMap == null) { columnMap = newColumnMap(); rowMap.put(r, columnMap); } for (int c = region.getFirstColumn(); c <= region.getLastColumn(); c++) { columnMap.put(c, region); } } } return rowMap; } protected abstract Map<Integer, Map<Integer, CellRangeAddress>> newRowMap(); protected abstract Map<Integer, CellRangeAddress> newColumnMap(); }
Version data entries
3 entries across 3 versions & 1 rubygems