KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > icesoft > faces > component > ext > renderkit > RowSelectorRenderer


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.component.ext.renderkit;
35
36 import com.icesoft.faces.component.ext.HtmlDataTable;
37 import com.icesoft.faces.component.ext.RowSelector;
38 import com.icesoft.faces.component.ext.RowSelectorEvent;
39 import com.icesoft.faces.context.DOMContext;
40 import com.icesoft.faces.renderkit.dom_html_basic.DomBasicRenderer;
41 import com.icesoft.faces.renderkit.dom_html_basic.HTML;
42 import org.w3c.dom.Element JavaDoc;
43
44 import javax.faces.component.UIComponent;
45 import javax.faces.context.FacesContext;
46 import javax.faces.event.PhaseId;
47 import java.io.IOException JavaDoc;
48 import java.util.StringTokenizer JavaDoc;
49
50 /**
51  * Created by IntelliJ IDEA. User: rmayhew Date: Aug 28, 2006 Time: 12:48:09 PM
52  * To change this template use File | Settings | File Templates.
53  */

54 public class RowSelectorRenderer extends DomBasicRenderer {
55
56     // Decode Method
57
public void decode(FacesContext facesContext, UIComponent uiComponent) {
58         //super.decode(facesContext, uiComponent);
59

60         // Check for row selection in its parent table hidden field
61
HtmlDataTable dataTable = getParentDataTable(uiComponent);
62
63         String JavaDoc dataTableId = dataTable.getClientId(facesContext);
64         String JavaDoc selectedRowsParameter =
65                 TableRenderer.getSelectedRowParameterName(dataTableId);
66         String JavaDoc selectedRows = (String JavaDoc) facesContext.getExternalContext()
67                 .getRequestParameterMap().get(selectedRowsParameter);
68
69
70         if (selectedRows == null || selectedRows.trim().length() == 0) {
71             selectedRows = (String JavaDoc)facesContext.getExternalContext().getRequestMap().get(RowSelectorRenderer.class.getName());
72             if(selectedRows == null || selectedRows.trim().length() == 0)
73                 return;
74         }else{
75             //Myfaces 1.1.0 Work around
76
facesContext.getExternalContext().getRequestMap().put(RowSelectorRenderer.class.getName(), selectedRows);
77         }
78         // What row number am I, was I clicked?
79
int rowIndex = dataTable.getRowIndex();
80         StringTokenizer JavaDoc st = new StringTokenizer JavaDoc(selectedRows, ",");
81         boolean rowClicked = false;
82         while (st.hasMoreTokens()) {
83             int row = Integer.parseInt(st.nextToken());
84             if (row == rowIndex) {
85                 rowClicked = true;
86                 break;
87             }
88         }
89         RowSelector rowSelector = (RowSelector) uiComponent;
90
91         try {
92             if (rowClicked) {
93                 // Toggle the row selection if multiple
94
boolean b = rowSelector.getValue().booleanValue();
95                 b = !b;
96                 rowSelector.setValue(new Boolean JavaDoc(b));
97
98                 if (rowSelector.getSelectionListener() != null) {
99                     RowSelectorEvent evt =
100                             new RowSelectorEvent(rowSelector, rowIndex, b);
101                     evt.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
102
103                     rowSelector.queueEvent(evt);
104                 }
105
106             } else {
107                 if (Boolean.FALSE.equals(rowSelector.getMultiple())) {
108                     // Clear all other selections
109
rowSelector.setValue(Boolean.FALSE);
110                 }
111             }
112         } catch (Exception JavaDoc e) {
113             e.printStackTrace();
114         }
115     }
116
117
118
119     public void encodeEnd(FacesContext facesContext, UIComponent uiComponent)
120             throws IOException JavaDoc {
121
122         //super.encodeEnd(facesContext, uiComponent);
123

124         // Nothing is rendered
125
}
126
127     public void encodeBegin(FacesContext facesContext, UIComponent uiComponent)
128             throws IOException JavaDoc {
129         //super.encodeBegin(facesContext, uiComponent);
130
//uiComponent.setRendered(true);
131
// Mothing is rendered
132
}
133
134     private static HtmlDataTable getParentDataTable(UIComponent uiComponenent) {
135         UIComponent parentComp = uiComponenent.getParent();
136         if (parentComp == null) {
137             throw new RuntimeException JavaDoc(
138                     "RowSelectorRenderer: decode. Could not find an Ice:dataTable as a parent componenent");
139         }
140         if (parentComp instanceof com.icesoft.faces.component.ext.HtmlDataTable) {
141             return (HtmlDataTable) parentComp;
142         }
143         return getParentDataTable(parentComp);
144     }
145
146 }
147
Popular Tags