View Javadoc

1   /*
2    * $Id: DefaultTreeRendererProcessor.java,v 1.5 2009/03/04 13:45:17 oeuillot Exp $
3    */
4   package org.rcfaces.core.internal.renderkit.tools;
5   
6   import java.io.IOException;
7   import java.io.Writer;
8   
9   import javax.faces.FacesException;
10  import javax.faces.component.UIComponent;
11  import javax.faces.context.FacesContext;
12  
13  import org.apache.commons.logging.Log;
14  import org.apache.commons.logging.LogFactory;
15  import org.rcfaces.core.internal.renderkit.WriterException;
16  import org.rcfaces.core.internal.tools.ComponentTools;
17  import org.rcfaces.core.internal.tools.StateFieldMarkerTools;
18  
19  /**
20   * 
21   * @author Olivier Oeuillot (latest modification by $Author: oeuillot $)
22   * @version $Revision: 1.5 $ $Date: 2009/03/04 13:45:17 $
23   */
24  public class DefaultTreeRendererProcessor extends AbstractTreeRendererProcessor {
25  
26      private static final String REVISION = "$Revision: 1.5 $";
27  
28      private static final Log LOG = LogFactory
29              .getLog(DefaultTreeRendererProcessor.class);
30  
31      public DefaultTreeRendererProcessor(FacesContext facesContext) {
32          super(facesContext);
33      }
34  
35      public boolean hasSaveStateFieldMarker(String content) {
36  
37          String saveStateFieldMarker = StateFieldMarkerTools
38                  .getStateFieldMarker(facesContext);
39          if (saveStateFieldMarker == null || saveStateFieldMarker.length() < 1) {
40              return false;
41          }
42  
43          if (content.indexOf(saveStateFieldMarker) < 0) {
44              return false;
45          }
46  
47          return true;
48      }
49  
50      public void writeFilteredContent(Writer writer, String content)
51              throws IOException {
52  
53          String saveStateFieldMarker = StateFieldMarkerTools
54                  .getStateFieldMarker(facesContext);
55          if (saveStateFieldMarker == null) {
56              throw new FacesException("Save state field marker is null !");
57          }
58  
59          String saveValue = StateFieldMarkerTools.getStateValue(facesContext);
60  
61          if (LOG.isDebugEnabled()) {
62              LOG.debug("Save value=" + saveValue);
63          }
64  
65          for (int start = 0;;) {
66              int offset = content.indexOf(saveStateFieldMarker, start);
67              if (offset < 0) {
68                  if (start < content.length()) {
69                      writer.write(content.substring(start));
70                  }
71                  break;
72              }
73              if (offset > start) {
74                  writer.write(content.substring(start, offset));
75              }
76              writer.write(saveValue);
77              start = offset + saveStateFieldMarker.length();
78          }
79      }
80  
81      public void encodeChildrenRecursive(UIComponent component,
82              String componentId) throws WriterException {
83  
84          ComponentTools.encodeChildrenRecursive(facesContext, component);
85      }
86  
87  }