package org.jboss.seam.pdf.ui; import java.io.IOException; import javax.faces.FacesException; import javax.faces.component.ValueHolder; import javax.faces.context.FacesContext; import javax.faces.convert.Converter; import com.lowagie.text.Chunk; public class UIOutputText extends ITextComponent implements ValueHolder { Chunk chunk; Converter converter; Object value; Object localValue; // -- ITextComponent methods @Override public void encodeEnd(FacesContext context) throws IOException { chunk.append(convert(context, getValue())); super.encodeEnd(context); } protected String convert(FacesContext context, Object value) { Converter myConverter = converterForValue(context, value); if (myConverter != null) { return myConverter.getAsString(context, this, value); } else if (value != null) { return value.toString(); } else { return ""; } } protected Converter converterForValue(FacesContext ctx, Object value) { if (converter != null) { return converter; } if (value != null) { try { return ctx.getApplication().createConverter(value.getClass()); } catch (FacesException e) { // no converter defined - no problem } } return null; } @Override public void createITextObject(FacesContext context) { com.lowagie.text.Font font = getFont(); if (font == null) { chunk = new Chunk(""); } else { chunk = new Chunk("", getFont()); } } @Override public Object getITextObject() { return chunk; } @Override public void handleAdd(Object other) { throw new RuntimeException("illegal child element"); } @Override public void removeITextObject() { chunk = null; } // -- ValueHolder methods public Converter getConverter() { return converter; } public void setConverter(Converter converter) { this.converter = converter; } public Object getValue() { return valueBinding(FacesContext.getCurrentInstance(), "value", localValue); } public void setValue(Object value) { this.localValue = value; } public Object getLocalValue() { return localValue; } }