package org.jboss.seam.pdf.ui; import java.io.IOException; import javax.faces.context.FacesContext; import org.jboss.seam.pdf.ITextUtils; import com.lowagie.text.Font; import com.lowagie.text.HeaderFooter; import com.lowagie.text.Phrase; public abstract class UIHeaderFooter extends UIRectangle { HeaderFooter header; Phrase before; Phrase after; String alignment; public UIHeaderFooter() { super(); } public void setAlignment(String alignment) { this.alignment = alignment; } @Override public void createITextObject(FacesContext context) { before = defaultPhrase(); after = null; } @Override public Object getITextObject() { return null; } @Override public void handleAdd(Object other) { if (after == null) { before.add(other); } else { after.add(other); } } @Override public void removeITextObject() { before = null; after = null; } public void markPage() { after = defaultPhrase(); } @Override public void encodeEnd(FacesContext context) throws IOException { HeaderFooter header; if (after == null) { header = new HeaderFooter(before, false); } else { header = new HeaderFooter(before, after); } alignment = (String) valueBinding(context, "alignment", alignment); if (alignment != null) { header.setAlignment(ITextUtils.alignmentValue(alignment)); } applyRectangleProperties(context, header); super.encodeEnd(context); handleHeaderFooter(header); } public abstract void handleHeaderFooter(HeaderFooter item); /** * HeaderFooter derives the font for the number from the font of the before * phrase. Worse still, there is no way to set the font after the phrase is * created. The best we can do is get the surrounding font context and hope * for the best. */ private Phrase defaultPhrase() { Font font = getFont(); if (font == null) { return new Phrase(); } else { return new Phrase("", font); } } }