/* * Copyright 2011 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.informer.load.spreadsheet; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; /** * Contains the data for a sheet in the workbook, split into the constituent items. * * Null/empty entries are ignored. * * @author Derek Rendall */ public class SpreadsheetData { private HashMap<String, SpreadsheetItem>data = new HashMap<String, SpreadsheetItem>(); private List<String> cellList = new ArrayList<String>(1000); private List<SpreadsheetRow> rows = new ArrayList<SpreadsheetRow>(12); private boolean processed; private SpreadsheetData parentSheet; private SpreadsheetItem firstItemOnSheet; private int keyColumn; private String sheetName; /** * Will split the sheet from the workbook up into {@link SpreadsheetRow} and {@link SpreadsheetItem} * * @param sheet */ public SpreadsheetData(HSSFSheet sheet) { super(); sheetName = sheet.getSheetName(); for (Row row : sheet) { int rowNumber = row.getRowNum(); SpreadsheetRow rowItems = new SpreadsheetRow(rowNumber); rows.add(rowItems); for (Cell cell : row) { if ((cell == null) || (cell.getCellType() == Cell.CELL_TYPE_BLANK)) { // null check is just in case - should never be! continue; } if ((keyColumn > 0) && (cell.getColumnIndex() < keyColumn)) { // comments column continue; } SpreadsheetItem item = new SpreadsheetItem(sheet.getSheetName(), cell); if (firstItemOnSheet == null) { // The first cell item must be sheet identifier/heading - previous columns will be treated as comments // and thus ignored firstItemOnSheet = item; keyColumn = cell.getColumnIndex(); } String id = item.getCellIdentifier(); //System.out.println("Sheet:" + sheet.getSheetName() + ", id=" + id + ", toString=" + item.toString()); data.put(id, item); rowItems.addRowItem(item); cellList.add(item.getCellIdentifier()); } } } public String getSheetName() { return sheetName; } public SpreadsheetItem getFirstItemOnSheet() { return firstItemOnSheet; } public SpreadsheetItem getItem(String cellReference) { return data.get(cellReference); } public List<String> getCellList() { return cellList; } public List<SpreadsheetRow> getRows() { return rows; } public boolean isProcessed() { return processed; } public void setProcessed(boolean processed) { this.processed = processed; } public SpreadsheetData getParentSheet() { return parentSheet; } public void setParentSheet(SpreadsheetData parentSheet) { this.parentSheet = parentSheet; } public int getKeyColumn() { return keyColumn; } }