KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > icesoft > faces > renderkit > dom_html_basic > SelectManyCheckboxListRenderer


1 /*
2  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3  *
4  * "The contents of this file are subject to the Mozilla Public License
5  * Version 1.1 (the "License"); you may not use this file except in
6  * compliance with the License. You may obtain a copy of the License at
7  * http://www.mozilla.org/MPL/
8  *
9  * 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.renderkit.dom_html_basic;
35
36 import com.icesoft.faces.context.DOMContext;
37 import org.w3c.dom.Element JavaDoc;
38 import org.w3c.dom.Text JavaDoc;
39
40 import javax.faces.component.UIComponent;
41 import javax.faces.component.UIInput;
42 import javax.faces.context.FacesContext;
43 import javax.faces.context.ResponseWriter;
44 import javax.faces.model.SelectItem;
45 import javax.faces.model.SelectItemGroup;
46 import java.io.IOException JavaDoc;
47 import java.util.HashSet JavaDoc;
48 import java.util.Iterator JavaDoc;
49 import java.util.Set JavaDoc;
50
51
52 public class SelectManyCheckboxListRenderer extends MenuRenderer {
53
54     public void encodeEnd(FacesContext facesContext, UIComponent uiComponent)
55             throws IOException JavaDoc {
56
57         validateParameters(facesContext, uiComponent, null);
58
59         int counter = 0;
60
61         boolean renderVertically = false;
62         String JavaDoc layout = (String JavaDoc) uiComponent.getAttributes().get("layout");
63         if (layout != null) {
64             renderVertically =
65                     layout.equalsIgnoreCase("pageDirection") ? true : false;
66         }
67
68         int border = getBorderSize(uiComponent);
69
70         DOMContext domContext =
71                 DOMContext.attachDOMContext(facesContext, uiComponent);
72
73         Element JavaDoc rootTR = null;
74
75         // remove all existing table rows from the root table
76
if (domContext.isInitialized()) {
77             DOMContext.removeChildrenByTagName(
78                     (Element JavaDoc) domContext.getRootNode(), "tr");
79         } else {
80             Element JavaDoc root = domContext.createElement("table");
81             domContext.setRootNode(root);
82             if (idNotNull(uiComponent)) {
83                 setRootElementId(facesContext, root, uiComponent);
84             }
85         }
86
87         Element JavaDoc rootTable = (Element JavaDoc) domContext.getRootNode();
88         String JavaDoc styleClass =
89                 (String JavaDoc) uiComponent.getAttributes().get("styleClass");
90         if (styleClass != null) {
91             rootTable.setAttribute("class", styleClass);
92         }
93         String JavaDoc style = (String JavaDoc) uiComponent.getAttributes().get("style");
94         if (style != null && style.length() > 0) {
95             rootTable.setAttribute("style", style);
96         }
97         else {
98             rootTable.removeAttribute("style");
99         }
100         rootTable.setAttribute("border", new Integer JavaDoc(border).toString());
101
102         if (!renderVertically) {
103             rootTR = domContext.createElement("tr");
104             rootTable.appendChild(rootTR);
105         }
106
107         Iterator JavaDoc options = getSelectItems(uiComponent);
108
109         //We should call uiComponent.getValue() only once, becase if it binded with the bean,
110
//The bean method would be called as many time as this method call.
111
Object JavaDoc componentValue = ((UIInput) uiComponent).getValue();
112
113         while (options.hasNext()) {
114             SelectItem nextSelectItem = (SelectItem) options.next();
115
116             counter++;
117
118             // render a SelectItemGroup in a nested table
119
if (nextSelectItem instanceof SelectItemGroup) {
120
121                 Element JavaDoc nextTR = null;
122                 Element JavaDoc nextTD = null;
123
124                 if (nextSelectItem.getLabel() != null) {
125                     if (renderVertically) {
126                         nextTR = domContext.createElement("tr");
127                         rootTable.appendChild(nextTR);
128                     }
129                     nextTD = domContext.createElement("td");
130                     nextTR.appendChild(nextTD);
131                     Text JavaDoc label = domContext.getDocument()
132                             .createTextNode(nextSelectItem.getLabel());
133                     nextTD.appendChild(label);
134                 }
135                 if (renderVertically) {
136                     nextTR = domContext.createElement("tr");
137                     rootTable.appendChild(nextTR);
138                 }
139                 nextTD = domContext.createElement("td");
140                 nextTR.appendChild(nextTD);
141
142                 SelectItem[] selectItemsArray =
143                         ((SelectItemGroup) nextSelectItem).getSelectItems();
144                 for (int i = 0; i < selectItemsArray.length; ++i) {
145                     renderOption(facesContext, uiComponent, selectItemsArray[i],
146                                  renderVertically, nextTR, counter,
147                                  componentValue);
148                 }
149             } else {
150                 renderOption(facesContext, uiComponent, nextSelectItem,
151                              renderVertically, rootTR, counter,
152                              componentValue);
153             }
154         }
155
156         domContext.stepOver();
157         domContext.streamWrite(facesContext, uiComponent);
158     }
159
160     private int getBorderSize(UIComponent uiComponent) {
161         int border = 0;
162         Object JavaDoc borderAttribute = uiComponent.getAttributes().get("border");
163         if (borderAttribute instanceof Integer JavaDoc) {
164             if (((Integer JavaDoc) borderAttribute).intValue() != Integer.MIN_VALUE) {
165                 border = ((Integer JavaDoc) borderAttribute).intValue();
166             }
167         } else {
168             try {
169                 border = Integer.valueOf(borderAttribute.toString()).intValue();
170             } catch (NumberFormatException JavaDoc nfe) {
171                 // couldn't parse it; stick with the default (initial) value of 0
172
}
173         }
174         return border;
175     }
176
177     protected void renderOption(FacesContext facesContext,
178                                 UIComponent uiComponent,
179                                 SelectItem selectItem, boolean renderVertically,
180                                 Element JavaDoc rootTR, int counter,
181                                 Object JavaDoc componentValue)
182             throws IOException JavaDoc {
183
184         DOMContext domContext =
185                 DOMContext.attachDOMContext(facesContext, uiComponent);
186         Element JavaDoc rootTable = (Element JavaDoc) domContext.getRootNode();
187
188         boolean disabled = false;
189         if (uiComponent.getAttributes().get("disabled") != null) {
190             if ((uiComponent.getAttributes().get("disabled"))
191                     .equals(Boolean.TRUE)) {
192                 disabled = true;
193             }
194         }
195         if (selectItem.isDisabled()) {
196             disabled = true;
197         }
198
199         if (renderVertically) {
200             rootTR = domContext.createElement("tr");
201             rootTable.appendChild(rootTR);
202         }
203         Element JavaDoc td = domContext.createElement("td");
204         rootTR.appendChild(td);
205
206         Element JavaDoc label = domContext.createElement("label");
207         td.appendChild(label);
208         
209         Element JavaDoc inputElement = domContext.createElement("input");
210         inputElement
211                 .setAttribute("name", uiComponent.getClientId(facesContext));
212         inputElement.setAttribute("id",
213                                   uiComponent.getClientId(facesContext) + ":_" +
214                                   counter);
215         label.appendChild(inputElement);
216         HashSet JavaDoc excludes = new HashSet JavaDoc();
217         String JavaDoc accesskey =
218                 (String JavaDoc) uiComponent.getAttributes().get("accesskey");
219         if (accesskey != null) {
220             inputElement.setAttribute("accesskey", accesskey);
221             excludes.add("accesskey");
222         }
223
224         String JavaDoc formattedOptionValue = formatComponentValue(
225                 facesContext,
226                 uiComponent,
227                 selectItem.getValue());
228         inputElement.setAttribute("value", formattedOptionValue);
229         inputElement.setAttribute("type", "checkbox");
230
231         boolean isSelected;
232         Object JavaDoc submittedValues[] =
233                 getSubmittedSelectedValues(uiComponent);
234         if (submittedValues != null) {
235             isSelected = isSelected(formattedOptionValue, submittedValues);
236         } else {
237             Object JavaDoc selectedValues =
238                     getCurrentSelectedValues(uiComponent);
239             isSelected = isSelected(selectItem.getValue(), selectedValues);
240         }
241
242         if (isSelected) {
243             inputElement.setAttribute("checked", Boolean.TRUE.toString());
244         }
245         if (disabled) {
246             inputElement.setAttribute("disabled", "disabled");
247         }
248
249
250         String JavaDoc selectItemLabel = selectItem.getLabel();
251         if (selectItemLabel != null) {
252             Text JavaDoc textNode =
253                     domContext.getDocument().createTextNode(selectItemLabel);
254             inputElement.appendChild(textNode);
255         }
256         addJavaScript(facesContext, uiComponent, inputElement, excludes);
257         excludes.add("style");
258         excludes.add("border");
259         excludes.add("readonly");
260         String JavaDoc[] excludesStringArray = new String JavaDoc[excludes.size()];
261         excludesStringArray = (String JavaDoc[]) excludes.toArray(excludesStringArray);
262         PassThruAttributeRenderer.renderAttributes(
263                 facesContext, uiComponent,
264                 inputElement, rootTable,
265                 excludesStringArray);
266     }
267
268     protected void addJavaScript(FacesContext facesContext,
269                                  UIComponent uiComponent, Element JavaDoc root,
270                                  Set JavaDoc excludes) {
271     }
272 }
Popular Tags