package org.jboss.seam.pdf.ui;
import org.jboss.seam.pdf.ITextUtils;
import com.lowagie.text.*;
import com.lowagie.text.pdf.*;
import javax.faces.context.FacesContext;
public class UICell extends UIRectangle {
public static final String COMPONENT_TYPE = "org.jboss.seam.pdf.ui.UICell";
PdfPCell cell;
String horizontalAlignment;
String verticalAlignment;
Float padding;
Float paddingLeft;
Float paddingRight;
Float paddingTop;
Float paddingBottom;
Boolean useBorderPadding;
Float leading;
Float multipliedLeading;
Float indent;
Float extraParagraphSpace;
Float fixedHeight;
Boolean noWrap;
Float minimumHeight;
Integer colspan;
Float followingIndent;
Float rightIndent;
Integer spaceCharRatio;
Integer runDirection;
Integer arabicOptions;
Boolean useAscender;
Float grayFill;
Integer rotation;
boolean hasContent = false;
public void setGrayFill(Float grayFill) {
this.grayFill = grayFill;
}
public void setHorizontalAlignment(String horizontalAlignment) {
this.horizontalAlignment = horizontalAlignment;
}
public void setVerticalAlignment(String verticalAlignment) {
this.verticalAlignment = verticalAlignment;
}
public void setPadding(Float padding) {
this.padding = padding;
}
public void setPaddingLeft(Float paddingLeft) {
this.paddingLeft = paddingLeft;
}
public void setPaddingRight(Float paddingRight) {
this.paddingRight = paddingRight;
}
public void setPaddingTop(Float paddingTop) {
this.paddingTop = paddingTop;
}
public void setPaddingBottom(Float paddingBottom) {
this.paddingBottom = paddingBottom;
}
public void setUseBorderPadding(Boolean useBorderPadding) {
this.useBorderPadding = useBorderPadding;
}
public void setLeading(Float leading) {
this.leading = leading;
}
public void setMultipliedLeading(Float multipliedLeading) {
this.multipliedLeading = multipliedLeading;
}
public void setIndent(Float indent) {
this.indent = indent;
}
public void setExtraParagraphSpace(Float extraParagraphSpace) {
this.extraParagraphSpace = extraParagraphSpace;
}
public void setFixedHeight(Float fixedHeight) {
this.fixedHeight = fixedHeight;
}
public void setNoWrap(Boolean noWrap) {
this.noWrap = noWrap;
}
public void setMinimumHeight(Float minimumHeight) {
this.minimumHeight = minimumHeight;
}
public void setColspan(Integer colspan) {
this.colspan = colspan;
}
public void setFollowingIndent(Float followingIndent) {
this.followingIndent = followingIndent;
}
public void setRightIndent(Float rightIndent) {
this.rightIndent = rightIndent;
}
public void setSpaceCharRatio(Integer spaceCharRatio) {
this.spaceCharRatio = spaceCharRatio;
}
public void setRunDirection(Integer runDirection) {
this.runDirection = runDirection;
}
public void setArabicOptions(Integer arabicOptions) {
this.arabicOptions = arabicOptions;
}
public void setUseAscender(Boolean useAscender) {
this.useAscender = useAscender;
}
public void setRotation(Integer rotation) {
this.rotation = rotation;
}
@Override
public Object getITextObject() {
return cell;
}
@Override
public void removeITextObject() {
cell = null;
}
@Override
public void createITextObject(FacesContext context) {
hasContent = false;
PdfPCell defaultCell = getDefaultCellFromTable();
if (defaultCell != null) {
cell = new PdfPCell(defaultCell);
} else {
cell = new PdfPCell();
}
horizontalAlignment = (String) valueBinding(context,
"horizontalAlignment", horizontalAlignment);
if (horizontalAlignment != null) {
cell.setHorizontalAlignment(ITextUtils
.alignmentValue(horizontalAlignment));
}
verticalAlignment = (String) valueBinding(context, "verticalAlignment",
verticalAlignment);
if (verticalAlignment != null) {
cell.setVerticalAlignment(ITextUtils
.alignmentValue(verticalAlignment));
}
padding = (Float) valueBinding(context, "padding", padding);
if (padding != null) {
cell.setPadding(padding);
}
paddingLeft = (Float) valueBinding(context, "paddingLeft", paddingLeft);
if (paddingLeft != null) {
cell.setPaddingLeft(paddingLeft);
}
paddingRight = (Float) valueBinding(context, "paddingRight",
paddingRight);
if (paddingRight != null) {
cell.setPaddingRight(paddingRight);
}
paddingTop = (Float) valueBinding(context, "paddingTop", paddingTop);
if (paddingTop != null) {
cell.setPaddingTop(paddingTop);
}
paddingBottom = (Float) valueBinding(context, "paddingBottom",
paddingBottom);
if (paddingBottom != null) {
cell.setPaddingBottom(paddingBottom);
}
useBorderPadding = (Boolean) valueBinding(context, "useBorderPadding",
useBorderPadding);
if (useBorderPadding != null) {
cell.setUseBorderPadding(useBorderPadding);
}
leading = (Float) valueBinding(context, "leading", leading);
multipliedLeading = (Float) valueBinding(context, "multipliedLeading",
multipliedLeading);
if (leading != null || multipliedLeading != null) {
cell.setLeading(leading == null ? 0 : leading.floatValue(),
multipliedLeading == null ? 0 : multipliedLeading
.floatValue());
}
indent = (Float) valueBinding(context, "indent", indent);
if (indent != null) {
cell.setIndent(indent);
}
extraParagraphSpace = (Float) valueBinding(context,
"extraParagraphSpace", extraParagraphSpace);
if (extraParagraphSpace != null) {
cell.setExtraParagraphSpace(extraParagraphSpace);
}
fixedHeight = (Float) valueBinding(context, "fixedHeight", fixedHeight);
if (fixedHeight != null) {
cell.setFixedHeight(fixedHeight);
}
noWrap = (Boolean) valueBinding(context, "noWrap", noWrap);
if (noWrap != null) {
cell.setNoWrap(noWrap);
}
minimumHeight = (Float) valueBinding(context, "minimumHeight",
minimumHeight);
if (minimumHeight != null) {
cell.setMinimumHeight(minimumHeight);
}
colspan = (Integer) valueBinding(context, "colspan", colspan);
if (colspan != null) {
cell.setColspan(colspan);
}
followingIndent = (Float) valueBinding(context, "followingIndent",
followingIndent);
if (followingIndent != null) {
cell.setFollowingIndent(followingIndent);
}
rightIndent = (Float) valueBinding(context, "rightIndent", rightIndent);
if (rightIndent != null) {
cell.setRightIndent(rightIndent);
}
spaceCharRatio = (Integer) valueBinding(context, "spaceCharRatio",
spaceCharRatio);
if (spaceCharRatio != null) {
cell.setSpaceCharRatio(spaceCharRatio);
}
runDirection = (Integer) valueBinding(context, "runDirection",
runDirection);
if (runDirection != null) {
cell.setRunDirection(runDirection);
}
arabicOptions = (Integer) valueBinding(context, "arabicOptions",
arabicOptions);
if (arabicOptions != null) {
cell.setArabicOptions(arabicOptions);
}
useAscender = (Boolean) valueBinding(context, "useAscender",
useAscender);
if (useAscender != null) {
cell.setUseAscender(useAscender);
}
grayFill = (Float) valueBinding(context, "grayFill", grayFill);
if (grayFill != null) {
cell.setGrayFill(grayFill);
}
rotation = (Integer) valueBinding(context, "rotation", rotation);
if (rotation != null) {
cell.setRotation(rotation);
}
applyRectangleProperties(context, cell);
}
private PdfPCell getDefaultCellFromTable() {
UITable parentTable = (UITable) findITextParent(this, UITable.class);
if (parentTable != null) {
return parentTable.getDefaultCellFacet();
}
return null;
}
@Override
public void handleAdd(Object o) {
if (!hasContent) {
if (o instanceof Image) {
// added by user request, but it mages the logic here rather
// ugly.
cell.setImage((Image) o);
} else if (o instanceof Phrase) {
cell.setPhrase((Phrase) o);
} else if (o instanceof Element) {
cell.addElement((Element) o);
} else {
throw new RuntimeException("Can't add "
+ o.getClass().getName() + " to cell");
}
hasContent = true;
} else if (o instanceof Element) {
if (cell.getImage() != null) {
Image image = cell.getImage();
cell.setImage(null);
cell.addElement(image);
}
if (cell.getPhrase() != null) {
Phrase p = cell.getPhrase();
cell.setPhrase(null);
cell.addElement(p);
}
cell.addElement((Element) o);
} else {
throw new RuntimeException("Can't add " + o.getClass().getName()
+ " to cell");
}
}
}