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);
}
}
}