package org.jboss.seam.pdf.ui;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import org.jboss.seam.pdf.ITextUtils;
import org.jboss.seam.ui.graphicImage.ImageTransform;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Image;
public class UIImage extends UIRectangle {
public static final String COMPONENT_TYPE = "org.jboss.seam.pdf.ui.UIImage";
Image image;
Object value;
float rotation;
float height;
float width;
String alignment;
String alt;
Float indentationLeft;
Float indentationRight;
Float spacingBefore;
Float spacingAfter;
Float widthPercentage;
Float initialRotation;
String dpi;
String scalePercent;
String scaleToFit;
Boolean wrap;
Boolean underlying;
java.awt.Image imageData;
public void setValue(Object value) {
this.value = value;
}
public void setRotation(float rotation) {
this.rotation = rotation;
}
public void setHeight(float height) {
this.height = height;
}
public void setWidth(float width) {
this.width = width;
}
public void setAlignment(String alignment) {
this.alignment = alignment;
}
public void setAlt(String alt) {
this.alt = alt;
}
public void setWrap(Boolean wrap) {
this.wrap = wrap;
}
public void setUnderlying(Boolean underlying) {
this.underlying = underlying;
}
public void setDpi(String dpi) {
this.dpi = dpi;
}
public void setIndentationLeft(Float indentationLeft) {
this.indentationLeft = indentationLeft;
}
public void setIndentationRight(Float indentationRight) {
this.indentationRight = indentationRight;
}
public void setInitialRotation(Float initialRotation) {
this.initialRotation = initialRotation;
}
public void setSpacingAfter(Float spacingAfter) {
this.spacingAfter = spacingAfter;
}
public void setSpacingBefore(Float spacingBefore) {
this.spacingBefore = spacingBefore;
}
public void setWidthPercentage(Float widthPercentage) {
this.widthPercentage = widthPercentage;
}
public void setScalePercent(String scalePercent) {
this.scalePercent = scalePercent;
}
public void setScaleToFit(String scaleToFit) {
this.scaleToFit = scaleToFit;
}
@Override
public Object getITextObject() {
return image;
}
@Override
public void removeITextObject() {
image = null;
}
@SuppressWarnings("unchecked")
@Override
public void createITextObject(FacesContext context) throws IOException,
DocumentException {
value = valueBinding(context, "value", value);
// instance() doesn't work here - we need a new instance
org.jboss.seam.ui.graphicImage.Image seamImage = new org.jboss.seam.ui.graphicImage.Image();
if (value instanceof BufferedImage) {
seamImage.setBufferedImage((BufferedImage) value);
} else {
seamImage.setInput(value);
}
for (UIComponent cmp : this.getChildren()) {
if (cmp instanceof ImageTransform) {
ImageTransform imageTransform = (ImageTransform) cmp;
imageTransform.applyTransform(seamImage);
}
}
byte[] data = seamImage.getImage();
image = Image.getInstance(data);
rotation = (Float) valueBinding(context, "rotation", rotation);
if (rotation != 0) {
image.setRotationDegrees(rotation);
}
height = (Float) valueBinding(context, "height", height);
width = (Float) valueBinding(context, "width", width);
if (height > 0 || width > 0) {
image.scaleAbsolute(width, height);
}
int alignmentValue = 0;
alignment = (String) valueBinding(context, "alignment", alignment);
if (alignment != null) {
alignmentValue = (ITextUtils.alignmentValue(alignment));
}
wrap = (Boolean) valueBinding(context, "wrap", wrap);
if (wrap != null && wrap.booleanValue()) {
alignmentValue |= Image.TEXTWRAP;
}
underlying = (Boolean) valueBinding(context, "underlying", underlying);
if (underlying != null && underlying.booleanValue()) {
alignmentValue |= Image.UNDERLYING;
}
image.setAlignment(alignmentValue);
alt = (String) valueBinding(context, "alt", alt);
if (alt != null) {
image.setAlt(alt);
}
indentationLeft = (Float) valueBinding(context, "indentationLeft",
indentationLeft);
if (indentationLeft != null) {
image.setIndentationLeft(indentationLeft);
}
indentationRight = (Float) valueBinding(context, "indentationRight",
indentationRight);
if (indentationRight != null) {
image.setIndentationRight(indentationRight);
}
spacingBefore = (Float) valueBinding(context, "spacingBefore",
spacingBefore);
if (spacingBefore != null) {
image.setSpacingBefore(spacingBefore);
}
spacingAfter = (Float) valueBinding(context, "spacingAfter",
spacingAfter);
if (spacingAfter != null) {
image.setSpacingAfter(spacingAfter);
}
widthPercentage = (Float) valueBinding(context, "widthPercentage",
widthPercentage);
if (widthPercentage != null) {
image.setWidthPercentage(widthPercentage);
}
initialRotation = (Float) valueBinding(context, "initialRotation",
initialRotation);
if (initialRotation != null) {
image.setInitialRotation(initialRotation);
}
dpi = (String) valueBinding(context, "dpi", dpi);
if (dpi != null) {
int[] dpiValues = ITextUtils.stringToIntArray(dpi);
image.setDpi(dpiValues[0], dpiValues[1]);
}
applyRectangleProperties(context, image);
scaleToFit = (String) valueBinding(context, "scaleToFit", scaleToFit);
if (scaleToFit != null) {
float[] scale = ITextUtils.stringToFloatArray(scaleToFit);
if (scale.length == 2) {
image.scaleToFit(scale[0],scale[1]);
} else {
throw new RuntimeException("scaleToFit must contain two dimensions");
}
}
scalePercent = (String) valueBinding(context, "scalePercent", scalePercent);
if (scalePercent != null) {
float[] scale = ITextUtils.stringToFloatArray(scalePercent);
if (scale.length == 1) {
image.scalePercent(scale[0]);
} else if (scale.length == 2) {
image.scalePercent(scale[0], scale[1]);
} else {
throw new RuntimeException(
"scalePercent must contain one or two scale percentages");
}
}
}
@Override
public void handleAdd(Object o) {
throw new RuntimeException("can't add " + o.getClass().getName()
+ " to image");
}
}