package org.jboss.seam.excel.ui;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.faces.model.DataModel;
import org.jboss.seam.excel.ExcelWorkbook;
import org.jboss.seam.excel.ExcelWorkbookException;
import org.jboss.seam.excel.WorksheetItem;
import org.jboss.seam.excel.ui.command.Command;
import org.jboss.seam.framework.Query;
public class UIWorksheet extends ExcelComponent
{
public static final String COMPONENT_TYPE = "org.jboss.seam.excel.ui.UIWorksheet";
private static final String HEADER_FACET_NAME = "header";
private static final String FOOTER_FACET_NAME = "footer";
private String name;
private String var;
private Object value;
private Integer startRow;
private Integer startColumn;
private Boolean automaticFormulaCalculation;
private Double bottomMargin;
private Integer copies;
private Integer defaultColumnWidth;
private Integer defaultRowHeight;
private Boolean displayZeroValues;
private Integer fitHeight;
private Boolean fitToPages;
private Integer fitWidth;
private Double footerMargin;
private Double headerMargin;
private Boolean hidden;
private Boolean horizontalCentre;
private Integer horizontalFreeze;
private Integer horizontalPrintResolution;
private Double leftMargin;
private Integer normalMagnification;
private String orientation;
private Integer pageBreakPreviewMagnification;
private Boolean pageBreakPreviewMode;
private Integer pageStart;
private String paperSize;
private String password;
private Integer passwordHash;
private Boolean printGridLines;
private Boolean printHeaders;
private Boolean sheetProtected;
private Boolean recalculateFormulasBeforeSave;
private Double rightMargin;
private Integer scaleFactor;
private Boolean selected;
private Boolean showGridLines;
private Double topMargin;
private Boolean verticalCentre;
private Integer verticalFreeze;
private Integer verticalPrintResolution;
private Integer zoomFactor;
public Boolean getAutomaticFormulaCalculation()
{
return (Boolean) valueOf("automaticFormulaCalculation", automaticFormulaCalculation);
}
public void setAutomaticFormulaCalculation(Boolean automaticFormulaCalculation)
{
this.automaticFormulaCalculation = automaticFormulaCalculation;
}
public Double getBottomMargin()
{
return (Double) valueOf("bottomMargin", bottomMargin);
}
public void setBottomMargin(Double bottomMargin)
{
this.bottomMargin = bottomMargin;
}
public Integer getCopies()
{
return (Integer) valueOf("copies", copies);
}
public void setCopies(Integer copies)
{
this.copies = copies;
}
public Integer getDefaultColumnWidth()
{
return (Integer) valueOf("defaultColumnWidth", defaultColumnWidth);
}
public void setDefaultColumnWidth(Integer defaultColumnWidth)
{
this.defaultColumnWidth = defaultColumnWidth;
}
public Integer getDefaultRowHeight()
{
return (Integer) valueOf("defaultRowHeight", defaultRowHeight);
}
public void setDefaultRowHeight(Integer defaultRowHeight)
{
this.defaultRowHeight = defaultRowHeight;
}
public Boolean getDisplayZeroValues()
{
return (Boolean) valueOf("displayZeroValues", displayZeroValues);
}
public void setDisplayZeroValues(Boolean displayZeroValues)
{
this.displayZeroValues = displayZeroValues;
}
public Integer getFitHeight()
{
return (Integer) valueOf("fitHeight", fitHeight);
}
public void setFitHeight(Integer fitHeight)
{
this.fitHeight = fitHeight;
}
public Boolean getFitToPages()
{
return (Boolean) valueOf("fitToPages", fitToPages);
}
public void setFitToPages(Boolean fitToPages)
{
this.fitToPages = fitToPages;
}
public Integer getFitWidth()
{
return (Integer) valueOf("fitWidth", fitWidth);
}
public void setFitWidth(Integer fitWidth)
{
this.fitWidth = fitWidth;
}
public Double getFooterMargin()
{
return (Double) valueOf("footerMargin", footerMargin);
}
public void setFooterMargin(Double footerMargin)
{
this.footerMargin = footerMargin;
}
public Double getHeaderMargin()
{
return (Double) valueOf("headerMargin", headerMargin);
}
public void setHeaderMargin(Double headerMargin)
{
this.headerMargin = headerMargin;
}
public Boolean getHidden()
{
return (Boolean) valueOf("hidden", hidden);
}
public void setHidden(Boolean hidden)
{
this.hidden = hidden;
}
public Boolean getHorizontalCentre()
{
return (Boolean) valueOf("horizontalCentre", horizontalCentre);
}
public void setHorizontalCentre(Boolean horizontalCentre)
{
this.horizontalCentre = horizontalCentre;
}
public Integer getHorizontalFreeze()
{
return (Integer) valueOf("horizontalFreeze", horizontalFreeze);
}
public void setHorizontalFreeze(Integer horizontalFreeze)
{
this.horizontalFreeze = horizontalFreeze;
}
public Integer getHorizontalPrintResolution()
{
return (Integer) valueOf("horizontalPrintResolution", horizontalPrintResolution);
}
public void setHorizontalPrintResolution(Integer horizontalPrintResolution)
{
this.horizontalPrintResolution = horizontalPrintResolution;
}
public Double getLeftMargin()
{
return (Double) valueOf("leftMargin", leftMargin);
}
public void setLeftMargin(Double leftMargin)
{
this.leftMargin = leftMargin;
}
public Integer getNormalMagnification()
{
return (Integer) valueOf("normalMagnification", normalMagnification);
}
public void setNormalMagnification(Integer normalMagnification)
{
this.normalMagnification = normalMagnification;
}
public String getOrientation()
{
return (String) valueOf("orientation", orientation);
}
public void setOrientation(String orientation)
{
this.orientation = orientation;
}
public Integer getPageBreakPreviewMagnification()
{
return (Integer) valueOf("pageBreakPreviewMagnification", pageBreakPreviewMagnification);
}
public void setPageBreakPreviewMagnification(Integer pageBreakPreviewMagnification)
{
this.pageBreakPreviewMagnification = pageBreakPreviewMagnification;
}
public Integer getPageStart()
{
return (Integer) valueOf("pageStart", pageStart);
}
public void setPageStart(Integer pageStart)
{
this.pageStart = pageStart;
}
public String getPaperSize()
{
return (String) valueOf("paperSize", paperSize);
}
public void setPaperSize(String paperSize)
{
this.paperSize = paperSize;
}
public String getPassword()
{
return (String) valueOf("password", password);
}
public void setPassword(String password)
{
this.password = password;
}
public Integer getPasswordHash()
{
return (Integer) valueOf("passwordHash", passwordHash);
}
public void setPasswordHash(Integer passwordHash)
{
this.passwordHash = passwordHash;
}
public Boolean getPrintGridLines()
{
return (Boolean) valueOf("printGridLines", printGridLines);
}
public void setPrintGridLines(Boolean printGridLines)
{
this.printGridLines = printGridLines;
}
public Boolean getPrintHeaders()
{
return (Boolean) valueOf("printHeaders", printHeaders);
}
public void setPrintHeaders(Boolean printHeaders)
{
this.printHeaders = printHeaders;
}
public Boolean getSheetProtected()
{
return (Boolean) valueOf("sheetProtected", sheetProtected);
}
public void setSheetProtected(Boolean sheetProtected)
{
this.sheetProtected = sheetProtected;
}
public Boolean getRecalculateFormulasBeforeSave()
{
return (Boolean) valueOf("recalculateFormulasBeforeSave", recalculateFormulasBeforeSave);
}
public void setRecalculateFormulasBeforeSave(Boolean recalculateFormulasBeforeSave)
{
this.recalculateFormulasBeforeSave = recalculateFormulasBeforeSave;
}
public Double getRightMargin()
{
return (Double) valueOf("rightMargin", rightMargin);
}
public void setRightMargin(Double rightMargin)
{
this.rightMargin = rightMargin;
}
public Boolean getSelected()
{
return (Boolean) valueOf("selected", selected);
}
public void setSelected(Boolean selected)
{
this.selected = selected;
}
public Boolean getShowGridLines()
{
return (Boolean) valueOf("showGridLines", showGridLines);
}
public void setShowGridLines(Boolean showGridLines)
{
this.showGridLines = showGridLines;
}
public Double getTopMargin()
{
return (Double) valueOf("topMargin", topMargin);
}
public void setTopMargin(Double topMargin)
{
this.topMargin = topMargin;
}
public Boolean getVerticalCentre()
{
return (Boolean) valueOf("verticalCentre", verticalCentre);
}
public void setVerticalCentre(Boolean verticalCentre)
{
this.verticalCentre = verticalCentre;
}
public Integer getVerticalFreeze()
{
return (Integer) valueOf("verticalFreeze", verticalFreeze);
}
public void setVerticalFreeze(Integer verticalFreeze)
{
this.verticalFreeze = verticalFreeze;
}
public Integer getVerticalPrintResolution()
{
return (Integer) valueOf("verticalPrintResolution", verticalPrintResolution);
}
public void setVerticalPrintResolution(Integer verticalPrintResolution)
{
this.verticalPrintResolution = verticalPrintResolution;
}
public Integer getZoomFactor()
{
return (Integer) valueOf("zoomFactor", zoomFactor);
}
public void setZoomFactor(Integer zoomFactor)
{
this.zoomFactor = zoomFactor;
}
public Boolean getPageBreakPreviewMode()
{
return (Boolean) valueOf("pageBreakPreviewMode", pageBreakPreviewMode);
}
public void setPageBreakPreviewMode(Boolean pageBreakPreviewMode)
{
this.pageBreakPreviewMode = pageBreakPreviewMode;
}
public Integer getScaleFactor()
{
return (Integer) valueOf("scaleFactor", scaleFactor);
}
public void setScaleFactor(Integer scaleFactor)
{
this.scaleFactor = scaleFactor;
}
public Integer getStartRow()
{
return (Integer) valueOf("startRow", startRow);
}
public void setStartRow(Integer startRow)
{
this.startRow = startRow;
}
public Integer getStartColumn()
{
return (Integer) valueOf("startColumn", startColumn);
}
public void setStartColumn(Integer startColumn)
{
this.startColumn = startColumn;
}
@Override
public String getFamily()
{
return COMPONENT_TYPE;
}
public String getName()
{
return (String) valueOf("name", name);
}
public void setName(String name)
{
this.name = name;
}
public String getVar()
{
return (String) valueOf("var", var);
}
public void setVar(String var)
{
this.var = var;
}
public Object getValue()
{
return valueOf("value", value);
}
public void setValue(Object value)
{
this.value = value;
}
@Override
public void encodeBegin(javax.faces.context.FacesContext facesContext) throws java.io.IOException
{
// Get workbook
ExcelWorkbook excelWorkbook = getWorkbook(getParent());
if (excelWorkbook == null)
{
throw new ExcelWorkbookException("Could not find excel workbook");
}
// Create new worksheet (or select an existing one) and apply settings (if
// any)
excelWorkbook.createOrSelectWorksheet(this);
WorksheetItem headerItem = (WorksheetItem) getFacet(HEADER_FACET_NAME);
if (headerItem != null)
{
int colspan = getChildrenOfType(getChildren(), UIColumn.class).size();
excelWorkbook.addWorksheetHeader(headerItem, colspan);
}
// Add worksheet level items
List<WorksheetItem> items = getItems(getChildren());
for (WorksheetItem item : items)
{
excelWorkbook.addItem(item);
}
// Execute worksheet level commands
List<Command> commands = getCommands(getChildren());
for (Command command : commands)
{
excelWorkbook.executeCommand(command);
}
}
@Override
public void encodeEnd(javax.faces.context.FacesContext facesContext) throws java.io.IOException
{
ExcelWorkbook excelWorkbook = getWorkbook(getParent());
if (excelWorkbook == null)
{
throw new ExcelWorkbookException("Could not find excel workbook");
}
WorksheetItem footerItem = (WorksheetItem) getFacet(FOOTER_FACET_NAME);
if (footerItem != null)
{
int colspan = getChildrenOfType(getChildren(), UIColumn.class).size();
excelWorkbook.addWorksheetFooter(footerItem, colspan);
}
}
@SuppressWarnings("unchecked")
public static Iterator unwrapIterator(Object value)
{
if (value instanceof Iterable)
{
return ((Iterable) value).iterator();
}
else if (value instanceof DataModel && ((DataModel) value).getWrappedData() instanceof Iterable)
{
return ((Iterable) ((DataModel) value).getWrappedData()).iterator();
}
else if (value instanceof Map) {
return ((Map) value).entrySet().iterator();
}
else if (value instanceof Query)
{
return (((Query) value).getResultList()).iterator();
}
else if (value != null && value.getClass().isArray())
{
return arrayAsList(value).iterator();
}
else
{
throw new ExcelWorkbookException("A worksheet's value must be an Iterable, DataModel or Query");
}
}
/**
* Returns an iterator over objects passed to the worksheet
*
* @return Iterator for values passed to the sheet
*/
@SuppressWarnings("unchecked")
public Iterator getDataIterator()
{
return unwrapIterator(getValue());
}
@SuppressWarnings("unchecked")
private static List arrayAsList(Object array)
{
if (array.getClass().getComponentType().isPrimitive())
{
List list = new ArrayList();
for (int i = 0; i < Array.getLength(array); i++)
{
list.add(Array.get(array, i));
}
return list;
}
else
{
return Arrays.asList((Object[]) array);
}
}
}