package org.jboss.seam.pdf.ui;
import javax.faces.context.FacesContext;
import org.jboss.seam.pdf.ITextUtils;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Image;
import com.lowagie.text.Phrase;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
public class UITable extends ITextComponent
{
public static final String COMPONENT_TYPE = "org.jboss.seam.pdf.ui.UITable";
PdfPTable table;
String widths;
int columns = 1;
Integer headerRows = 0;
Integer footerRows = 0;
Float widthPercentage;
Integer horizontalAlignment;
Boolean skipFirstHeader;
Integer runDirection;
Boolean lockedWidth;
Boolean splitRows;
Float spacingBefore;
Float spacingAfter;
Boolean extendLastRow;
Boolean headersInEvent;
Boolean splitLate;
Boolean keepTogether;
public void setWidths(String widths)
{
this.widths = widths;
}
public void setColumns(int columns)
{
this.columns = columns;
}
public void setHeaderRows(Integer headerRows)
{
this.headerRows = headerRows;
}
public void setFooterRows(Integer footerRows)
{
this.footerRows = footerRows;
}
public void setExtendLastRow(Boolean extendLastRow)
{
this.extendLastRow = extendLastRow;
}
public void setHeadersInEvent(Boolean headersInEvent)
{
this.headersInEvent = headersInEvent;
}
public void setHorizontalAlignment(String horizontalAlignment)
{
this.horizontalAlignment = ITextUtils.alignmentValue(horizontalAlignment);
}
public void setKeepTogether(Boolean keepTogether)
{
this.keepTogether = keepTogether;
}
public void setLockedWidth(Boolean lockedWidth)
{
this.lockedWidth = lockedWidth;
}
public void setRunDirection(Integer runDirection)
{
this.runDirection = runDirection;
}
public void setSkipFirstHeader(Boolean skipFirstHeader)
{
this.skipFirstHeader = skipFirstHeader;
}
public void setSpacingAfter(Float spacingAfter)
{
this.spacingAfter = spacingAfter;
}
public void setSpacingBefore(Float spacingBefore)
{
this.spacingBefore = spacingBefore;
}
public void setSplitLate(Boolean splitLate)
{
this.splitLate = splitLate;
}
public void setSplitRows(Boolean splitRows)
{
this.splitRows = splitRows;
}
public void setTable(PdfPTable table)
{
this.table = table;
}
public void setWidthPercentage(Float widthPercentage)
{
this.widthPercentage = widthPercentage;
}
@Override
public Object getITextObject()
{
return table;
}
@Override
public void removeITextObject()
{
table = null;
}
@Override
public void createITextObject(FacesContext context)
{
columns = (Integer) valueBinding(context, "columns", columns);
table = new PdfPTable(columns);
widths = (String) valueBinding(context, "widths", widths);
if (widths != null)
{
try
{
table.setWidths(ITextUtils.stringToFloatArray(widths));
}
catch (DocumentException e)
{
throw new RuntimeException(e);
}
}
headerRows = (Integer) valueBinding(context, "headerRows", headerRows);
if (headerRows != null)
{
table.setHeaderRows(headerRows);
}
footerRows = (Integer) valueBinding(context, "footerRows", footerRows);
if (footerRows != null)
{
table.setFooterRows(footerRows);
}
widthPercentage = (Float) valueBinding(context, "widthPercentage", widthPercentage);
if (widthPercentage != null)
{
table.setWidthPercentage(widthPercentage);
}
horizontalAlignment = (Integer) valueBinding(context, "horizontalAlignment", horizontalAlignment);
if (horizontalAlignment != null)
{
table.setHorizontalAlignment(horizontalAlignment);
}
runDirection = (Integer) valueBinding(context, "runDirection", runDirection);
if (runDirection != null)
{
table.setRunDirection(runDirection);
}
lockedWidth = (Boolean) valueBinding(context, "lockedWidth", lockedWidth);
if (lockedWidth != null)
{
table.setLockedWidth(lockedWidth);
}
splitRows = (Boolean) valueBinding(context, "splitRows", splitRows);
if (splitRows != null)
{
table.setSplitRows(splitRows);
}
spacingBefore = (Float) valueBinding(context, "spacingBefore", spacingBefore);
if (spacingBefore != null)
{
table.setSpacingBefore(spacingBefore);
}
spacingAfter = (Float) valueBinding(context, "spacingAfter", spacingAfter);
if (spacingAfter != null)
{
table.setSpacingAfter(spacingAfter);
}
extendLastRow = (Boolean) valueBinding(context, "extendLastRow", extendLastRow);
if (extendLastRow != null)
{
table.setExtendLastRow(extendLastRow);
}
headersInEvent = (Boolean) valueBinding(context, "headersInEvent", headersInEvent);
if (headersInEvent != null)
{
table.setHeadersInEvent(headersInEvent);
}
splitLate = (Boolean) valueBinding(context, "splitLate", splitLate);
if (splitLate != null)
{
table.setSplitLate(splitLate);
}
keepTogether = (Boolean) valueBinding(context, "keepTogether", keepTogether);
if (keepTogether != null)
{
table.setKeepTogether(keepTogether);
}
}
@Override
public void handleAdd(Object o) {
if (o instanceof PdfPCell) {
table.addCell((PdfPCell) o);
} else if (o instanceof PdfPTable) {
table.addCell((PdfPTable) o);
} else if (o instanceof Phrase) {
table.addCell((Phrase) o);
} else if (o instanceof Image) {
table.addCell((Image) o);
} else {
throw new RuntimeException("Can't add " + o.getClass().getName()
+ " to table");
}
}
public PdfPCell getDefaultCellFacet()
{
Object facet = processFacet("defaultCell");
if (facet != null)
{
if (!(facet instanceof PdfPCell))
{
throw new RuntimeException("UITable defaultCell facet must be a PdfPCell - found " + facet.getClass());
}
return (PdfPCell) facet;
}
return null;
}
}