View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package javax.faces.render;
20  
21  import java.io.IOException;
22  
23  import javax.faces.component.UIComponent;
24  import javax.faces.context.FacesContext;
25  import javax.faces.convert.ConverterException;
26  
27  /**
28   * see Javadoc of <a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/index.html">JSF Specification</a>
29   * 
30   * @author Manfred Geiler (latest modification by $Author: struberg $)
31   * @version $Revision: 1188235 $ $Date: 2011-10-24 12:09:33 -0500 (Mon, 24 Oct 2011) $
32   */
33  public abstract class Renderer
34  {
35      public void decode(FacesContext context, UIComponent component)
36      {
37          if (context == null)
38          {
39              throw new NullPointerException("context");
40          }
41          if (component == null)
42          {
43              throw new NullPointerException("component");
44          }
45      }
46  
47      /**
48       * @throws IOException if an input/output error occurs while rendering 
49       */
50      public void encodeBegin(FacesContext context, UIComponent component) throws IOException
51      {
52          if (context == null)
53          {
54              throw new NullPointerException("context");
55          }
56          if (component == null)
57          {
58              throw new NullPointerException("component");
59          }
60      }
61  
62      /**
63       * Render all children if there are any.
64       * 
65       * Note: this will only be called if getRendersChildren() returns true. A component which has a renderer with
66       * getRendersChildren() set to true will typically contain the rendering logic for its children in this method.
67       * 
68       * @param context
69       * @param component
70       * @throws IOException
71       */
72      public void encodeChildren(FacesContext context, UIComponent component) throws IOException
73      {
74          if (context == null)
75          {
76              throw new NullPointerException("context");
77          }
78          if (component == null)
79          {
80              throw new NullPointerException("component");
81          }
82  
83          if (component.getChildCount() > 0)
84          {
85              for (int i = 0, childCount = component.getChildCount(); i < childCount; i++)
86              {
87                  UIComponent child = component.getChildren().get(i);
88                  if (!child.isRendered())
89                  {
90                      continue;
91                  }
92  
93                  child.encodeAll(context);
94              }
95          }
96      }
97  
98      /**
99       * @throws IOException if an input/output error occurs while rendering 
100      */
101     public void encodeEnd(FacesContext context, UIComponent component) throws IOException
102     {
103         if (context == null)
104         {
105             throw new NullPointerException("context");
106         }
107         if (component == null)
108         {
109             throw new NullPointerException("component");
110         }
111     }
112 
113     public String convertClientId(FacesContext context, String clientId)
114     {
115         if (context == null)
116         {
117             throw new NullPointerException("context");
118         }
119         if (clientId == null)
120         {
121             throw new NullPointerException("clientId");
122         }
123         return clientId;
124     }
125 
126     /**
127      * Switch for deciding who renders the children.
128      * 
129      * @return <b>true</b> - if the component takes care of rendering its children. In this case, encodeChildren() ought
130      *         to be called by the rendering controller (e.g., the rendering controller could be the method encodeAll()
131      *         in UIComponent). In the method encodeChildren(), the component should therefore provide all children
132      *         encode logic. <br/> <b>false</b> - if the component does not take care of rendering its children. In this
133      *         case, encodeChildren() should not be called by the rendering controller. Instead, the children-list
134      *         should be retrieved and the children should directly be rendered by the rendering controller one by one.
135      */
136     public boolean getRendersChildren()
137     {
138         return false;
139     }
140 
141     public Object getConvertedValue(FacesContext context, UIComponent component, Object submittedValue)
142         throws ConverterException
143     {
144         if (context == null)
145         {
146             throw new NullPointerException("context");
147         }
148         if (component == null)
149         {
150             throw new NullPointerException("component");
151         }
152         return submittedValue;
153     }
154 
155 }