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.commandsortheader;
35:
36: import com.icesoft.faces.component.ext.HtmlDataTable;
37: import com.icesoft.faces.component.ext.renderkit.CommandLinkRenderer;
38: import com.icesoft.faces.component.ext.taglib.Util;
39: import com.icesoft.faces.context.DOMContext;
40: import com.icesoft.faces.renderkit.dom_html_basic.HTML;
41: import org.w3c.dom.Element;
42: import org.w3c.dom.Node;
43:
44: import javax.faces.component.UIComponent;
45: import javax.faces.context.FacesContext;
46: import java.io.IOException;
47:
48: public class CommandSortHeaderRenderer extends CommandLinkRenderer {
49:
50: /*
51: * (non-Javadoc)
52: * @see javax.faces.render.Renderer#encodeEnd(javax.faces.context.FacesContext, javax.faces.component.UIComponent)
53: */
54: public void encodeEnd(FacesContext facesContext,
55: UIComponent uiComponent) throws IOException {
56: validateParameters(facesContext, uiComponent, null);
57: //Render if user is in given role
58: if (Util.isEnabledOnUserRole(uiComponent)) {
59: CommandSortHeader sortHeader = (CommandSortHeader) uiComponent;
60: HtmlDataTable dataTable = sortHeader.findParentDataTable();
61:
62: Node child = null;
63: DOMContext domContext = DOMContext.getDOMContext(
64: facesContext, uiComponent);
65: Element root = (Element) domContext.getRootNode();
66: String headerClass = sortHeader.getStyleClass();
67: if (headerClass != null) {
68: root.setAttribute(HTML.CLASS_ATTR, headerClass);
69: }
70: if (sortHeader.isArrow()
71: && sortHeader.getColumnName().equals(
72: dataTable.getSortColumn())) {
73: child = root.getFirstChild();
74: String arrow;
75: if (dataTable.isSortAscending()) {
76: arrow = "↑";
77: } else {
78: arrow = "↓";
79: }
80: if (child != null) {
81: if (child.getNodeType() == 1) { //span
82: child = child.getFirstChild();
83: }
84: child.setNodeValue(child.getNodeValue() + arrow);
85: }
86: }
87: }
88: super.encodeEnd(facesContext, uiComponent);
89: }
90: }
|