package org.jboss.seam.excel.ui;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
import javax.faces.context.FacesContext;
import org.jboss.seam.core.Interpolator;
import org.jboss.seam.excel.ExcelWorkbookException;
import org.jboss.seam.excel.WorksheetItem;
public class UICell extends UICellBase implements WorksheetItem
{
public static final String COMPONENT_TYPE = "org.jboss.seam.excel.ui.UICell";
public enum CellType
{
general, number, text, date, formula, bool
}
private Object value;
private Integer column;
private Integer row;
public Integer getColumn()
{
return (Integer) valueOf("column", column);
}
public void setColumn(Integer column)
{
this.column = column;
}
public Integer getRow()
{
return (Integer) valueOf("row", row);
}
public void setRow(Integer row)
{
this.row = row;
}
public Object getValue()
{
Object theValue = valueOf("value", value);
if (theValue == null) {
try {
theValue = cmp2String(FacesContext.getCurrentInstance(), this);
} catch (IOException e) {
String message = Interpolator.instance().interpolate("Could not render cell #0", getId());
throw new ExcelWorkbookException(message, e);
}
}
return theValue;
}
public void setValue(Object value)
{
this.value = value;
}
@Override
public String getFamily()
{
return COMPONENT_TYPE;
}
/**
* Checks the data type of the contents to determine what kind of cell to
* create
*
* @return the data type of the cell (or forumula if this is such a subclass)
*/
public CellType getDataType()
{
// FIXME: Consider if formula should be considered an item instead as a
// subtype of formula
if (this instanceof UIFormula)
{
return CellType.formula;
}
Object value = getValue();
if (value instanceof Integer || value instanceof Long || value instanceof Double || value instanceof Short || value instanceof BigDecimal || value instanceof BigInteger || value instanceof Byte || value instanceof Float)
{
return CellType.number;
}
else if (value instanceof String || value instanceof Character)
{
return CellType.text;
}
else if (value instanceof Date || value instanceof java.sql.Date)
{
return CellType.date;
}
else if (value instanceof Boolean)
{
return CellType.bool;
}
return CellType.general;
}
public ItemType getItemType()
{
return ItemType.cell;
}
}