[jboss-cvs] jboss-seam/src/pdf/org/jboss/seam/pdf/ui ...

Norman Richards norman.richards at jboss.com
Tue Dec 11 22:31:29 EST 2007


  User: nrichards
  Date: 07/12/11 22:31:29

  Added:       src/pdf/org/jboss/seam/pdf/ui  UIHtmlText.java
  Log:
  JBSEAM-1252
  
  Revision  Changes    Path
  1.1      date: 2007/12/12 03:31:29;  author: nrichards;  state: Exp;jboss-seam/src/pdf/org/jboss/seam/pdf/ui/UIHtmlText.java
  
  Index: UIHtmlText.java
  ===================================================================
  package org.jboss.seam.pdf.ui;
  
  import java.io.IOException;
  import java.io.StringReader;
  import java.io.StringWriter;
  import java.util.List;
  
  import javax.faces.FacesException;
  import javax.faces.component.ValueHolder;
  import javax.faces.context.FacesContext;
  import javax.faces.context.ResponseWriter;
  import javax.faces.convert.Converter;
  
  import org.jboss.seam.ui.util.JSF;
  
  import com.lowagie.text.Element;
  import com.lowagie.text.Paragraph;
  import com.lowagie.text.html.simpleparser.HTMLWorker;
  import com.lowagie.text.html.simpleparser.StyleSheet;
  
  public class UIHtmlText 
      extends ITextComponent
      implements ValueHolder
  {
  
      private Converter converter;
      private Object localValue;
      private Paragraph paragraph;
  
      @Override
      public boolean getRendersChildren() {
          return true;
      }
      
      @Override
      public void encodeChildren(FacesContext context) 
          throws IOException 
      {
          ResponseWriter writer = context.getResponseWriter();
          
          StringWriter stringWriter = new StringWriter();
          ResponseWriter cachingResponseWriter = writer.cloneWithWriter(stringWriter);
          context.setResponseWriter(cachingResponseWriter);
          JSF.renderChildren(context, this);
          context.setResponseWriter(writer);
                  
          
          String output = stringWriter.getBuffer().toString();        
          System.out.println("** BODY: " + output);
          addFromHtml(output);            
      }    
      
      @Override
      public void encodeEnd(FacesContext context) 
          throws IOException 
      {
          Object value = getValue();        
          if (value!=null) {
              System.out.println("** VAL: " + value);
              addFromHtml(convert(context,value));
          }
        
          super.encodeEnd(context);
      }
  
  
      private void addFromHtml(String html)
          throws IOException 
      {
          paragraph.addAll(HTMLWorker.parseToList(new StringReader(html), getStyle()));
      }
  
      /**
       * XXX - this needs some work
       */
      private StyleSheet getStyle() {
          StyleSheet styles = new StyleSheet();
          styles.loadTagStyle("body", "leading", "16,0");
          return styles;
      }
      
      
      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) {
              paragraph = new Paragraph("");
          } else {
              paragraph = new Paragraph("", getFont());
          }
      }
  
      @Override
      public Object getITextObject() {
          return paragraph;
      }
  
      @Override
      public void removeITextObject() {
          paragraph = null;
      }
      
      @Override   
      public void handleAdd(Object other) 
      {
          throw new RuntimeException("illegal child element");
      }
      
      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;
      }
  
  }
  
  
  



More information about the jboss-cvs-commits mailing list