/*
* org.openmicroscopy.shoola.util.file.SheetInfo
*
*------------------------------------------------------------------------------
* Copyright (C) 2006-2007 University of Dundee. All rights reserved.
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
*------------------------------------------------------------------------------
*/
package org.openmicroscopy.shoola.util.file;
//Java imports
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
//Third-party libraries
//Application-internal dependencies
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
/**
* A sheet of an Excel document.
*
* @author Jean-Marie Burel
* <a href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a>
* @author Donald MacDonald
* <a href="mailto:donald@lifesci.dundee.ac.uk">donald@lifesci.dundee.ac.uk</a>
* @version 3.0
* <small>
* (<b>Internal version:</b> $Revision: $Date: $)
* </small>
* @since OME3.0
*/
class SheetInfo
{
/** The sheet this info relates to. */
private HSSFSheet sheet;
/** The name of the sheet. */
private String name;
/** The current position in workbook. */
private int index;
/** The current row in the spreadsheet. */
private int currentRow;
/** The current drawing context of the sheet. */
private HSSFPatriarch drawingPatriarch;
/**
* Creates a new instance.
*
* @param name The name of the sheet.
* @param sheetIndex The current position in workbook.
* @param sheet The sheet this object is related to.
*/
SheetInfo(String name, int sheetIndex, HSSFSheet sheet)
{
this.sheet = sheet;
this.name = name;
this.index = sheetIndex;
currentRow = 0;
}
/**
* Returns the cell corresponding to the row and column
*
* @param rowIndex The selected row.
* @param columnIndex The selected column.
* @return See above.
*/
HSSFCell getCell(int rowIndex, int columnIndex)
{
HSSFRow row = sheet.getRow(rowIndex);
if (row == null) {
row = sheet.createRow(rowIndex);
return row.createCell(columnIndex);
}
HSSFCell cell = row.getCell(columnIndex);
if (cell == null) return row.createCell(columnIndex);
return cell;
}
/**
* Auto-sizes a column.
*
* @param columnIndex The index of the column.
*/
void sizeColumnToFit(int columnIndex)
{
sheet.autoSizeColumn((short) columnIndex);
}
/** Auto-sizes all columns to fit contents. */
void sizeAllColumnsToFit()
{
Map<Integer, Integer> colMap = new HashMap<Integer,Integer>();
Iterator rowIterator = sheet.iterator();//sheet.rowIterator();
HSSFCell cell;
HSSFRow row;
Iterator k;
while (rowIterator.hasNext())
{
row = (HSSFRow) rowIterator.next();
k = row.cellIterator();
while (k.hasNext())
{
cell = (HSSFCell) k.next();
colMap.put(cell.getColumnIndex(), cell.getRowIndex());
}
}
Iterator<Integer> colIterator = colMap.keySet().iterator();
int col;
while (colIterator.hasNext())
{
col = colIterator.next();
sizeColumnToFit(col);
}
}
/**
* Sets the height of the rows [rowStart, rowEnd] to rowHeight in pixels.
*
* @param rowStart see above.
* @param rowEnd see above.
* @param rowHeight see above.
*/
void setRowHeight(int rowStart, int rowEnd, int rowHeight)
{
for (int index = rowStart ; index <= rowEnd ; index++)
setRowHeight(index, rowHeight);
}
/**
* Sets the height of the row rowIndex to rowHeight in pixels.
*
* @param rowIndex The index of the row.
* @param rowHeight The height of the row.
*/
void setRowHeight(int rowIndex, int rowHeight)
{
HSSFRow row = sheet.getRow(rowIndex);
if (row == null) row = sheet.createRow(rowIndex);
row.setHeight((short) rowHeight);
}
/**
* Returns the last cell column written to in row rowIndex.
*
* @param rowIndex The index of the row.
* @return See above.
*/
int getMaxColumn(int rowIndex)
{
HSSFRow row = sheet.getRow(rowIndex);
if (row == null) return 0;
return row.getLastCellNum();
}
/**
* Returns the current position in workbook.
*
* @return See above.
*/
int getIndex() { return index; }
/**
* Returns the current row.
*
* @return See above.
*/
int getCurrentRow() { return currentRow; }
/**
* Sets the current row.
*
* @param row The value to set.
*/
void setCurrentRow(int row) { currentRow = row; }
/**
* Returns the current drawing context of the sheet.
*
* @return See above.
*/
HSSFPatriarch getDrawingPatriarch()
{
if (drawingPatriarch == null)
drawingPatriarch = sheet.createDrawingPatriarch();
return drawingPatriarch;
}
/**
* Returns the name of the sheet.
*
* @return See above.
*/
String getName() { return name; }
/**
* Sets the name of the sheet.
*
* @param name The name of the sheet.
*/
void setName(String name) { this.name = name; }
}