01: /*
02: * Version: MPL 1.1/GPL 2.0/LGPL 2.1
03: *
04: * "The contents of this file are subject to the Mozilla Public License
05: * Version 1.1 (the "License"); you may not use this file except in
06: * compliance with the License. You may obtain a copy of the License at
07: * http://www.mozilla.org/MPL/
08: *
09: * Software distributed under the License is distributed on an "AS IS"
10: * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
11: * License for the specific language governing rights and limitations under
12: * the License.
13: *
14: * The Original Code is ICEfaces 1.5 open source software code, released
15: * November 5, 2006. The Initial Developer of the Original Code is ICEsoft
16: * Technologies Canada, Corp. Portions created by ICEsoft are Copyright (C)
17: * 2004-2006 ICEsoft Technologies Canada, Corp. All Rights Reserved.
18: *
19: * Contributor(s): _____________________.
20: *
21: * Alternatively, the contents of this file may be used under the terms of
22: * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"
23: * License), in which case the provisions of the LGPL License are
24: * applicable instead of those above. If you wish to allow use of your
25: * version of this file only under the terms of the LGPL License and not to
26: * allow others to use your version of this file under the MPL, indicate
27: * your decision by deleting the provisions above and replace them with
28: * the notice and other provisions required by the LGPL License. If you do
29: * not delete the provisions above, a recipient may use your version of
30: * this file under either the MPL or the LGPL License."
31: *
32: */
33:
34: package com.icesoft.faces.component.tree;
35:
36: import com.icesoft.faces.component.util.CustomComponentUtils;
37: import com.icesoft.faces.context.DOMContext;
38: import com.icesoft.faces.renderkit.dom_html_basic.DomBasicRenderer;
39:
40: import javax.faces.component.UIComponent;
41: import javax.faces.context.FacesContext;
42: import java.io.IOException;
43: import java.util.Iterator;
44:
45: /**
46: * TreeNodeRenderer is an ICEfaces D2D renderer for the TreeNode component.
47: */
48: public class TreeNodeRenderer extends DomBasicRenderer {
49:
50: /* (non-Javadoc)
51: * @see com.icesoft.faces.renderkit.dom_html_basic.DomBasicRenderer#decode(javax.faces.context.FacesContext, javax.faces.component.UIComponent)
52: */
53: public void decode(FacesContext facesContext,
54: UIComponent uiComponent) {
55: }
56:
57: /* (non-Javadoc)
58: * @see com.icesoft.faces.renderkit.dom_html_basic.DomBasicRenderer#encodeEnd(javax.faces.context.FacesContext, javax.faces.component.UIComponent)
59: */
60: public void encodeEnd(FacesContext facesContext,
61: UIComponent uiComponent) throws IOException {
62:
63: DOMContext domContext = DOMContext.attachDOMContext(
64: facesContext, uiComponent);
65:
66: validateParameters(facesContext, uiComponent, TreeNode.class);
67: resetDescendentIds(uiComponent);
68: UIComponent iconFacet = ((TreeNode) uiComponent).getIcon();
69: UIComponent contentFacet = ((TreeNode) uiComponent)
70: .getContent();
71:
72: if (iconFacet != null && iconFacet.isRendered()) {
73: CustomComponentUtils.renderChild(facesContext, iconFacet);
74: }
75: if (contentFacet != null && contentFacet.isRendered()) {
76: CustomComponentUtils
77: .renderChild(facesContext, contentFacet);
78: }
79:
80: }
81:
82: /**
83: * Reset ids so the client id will be nullified and regenerated when
84: * attachDOMContext is called. This is necessary so that each child
85: * component of the TreeNode has a unique client id instead of using the
86: * cached id. If the cached id is used, the DOMContext from the previous
87: * node is reused which is totally incorrect. the same DOMContext and
88: *
89: * @param uiComponent
90: */
91: public static void resetDescendentIds(UIComponent uiComponent) {
92: uiComponent.setId(uiComponent.getId());
93: Iterator it = uiComponent.getFacetsAndChildren();
94: while (it.hasNext()) {
95: UIComponent next = (UIComponent) it.next();
96: resetDescendentIds(next);
97: }
98: }
99: }
|