KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > icesoft > faces > component > panelcollapsible > PanelCollapsibleRenderer


1 package com.icesoft.faces.component.panelcollapsible;
2
3 import java.io.IOException JavaDoc;
4 import java.util.Iterator JavaDoc;
5 import java.util.Map JavaDoc;
6
7 import javax.faces.component.UIComponent;
8 import javax.faces.context.FacesContext;
9 import javax.faces.event.ActionEvent;
10
11 import org.apache.commons.logging.Log;
12 import org.apache.commons.logging.LogFactory;
13 import org.w3c.dom.Element JavaDoc;
14
15 import com.icesoft.faces.component.util.CustomComponentUtils;
16 import com.icesoft.faces.context.DOMContext;
17 import com.icesoft.faces.renderkit.dom_html_basic.DomBasicRenderer;
18 import com.icesoft.faces.renderkit.dom_html_basic.FormRenderer;
19 import com.icesoft.faces.renderkit.dom_html_basic.HTML;
20
21 public class PanelCollapsibleRenderer extends DomBasicRenderer {
22
23     private static Log log = LogFactory.getLog(PanelCollapsibleRenderer.class);
24
25
26     public boolean getRendersChildren() {
27         return true;
28     }
29
30     public void decode(FacesContext context, UIComponent component) {
31         super.decode(context, component);
32         PanelCollapsibleState state = PanelCollapsibleState.getState(context, component);
33         state.setChangedViaDecode(false);
34         try {
35             PanelCollapsible panelCollapsible = (PanelCollapsible) component;
36
37             Map JavaDoc map =
38                 context.getExternalContext().getRequestParameterMap();
39             String JavaDoc baseId =component.getClientId(context)+ "Expanded";
40             if (map.containsKey(baseId) && (map.get(baseId) != null && !map.get(baseId).equals(""))) {
41                 if ("true".equals(map.get(baseId).toString().trim())) {
42                     panelCollapsible.setExpanded(Boolean.FALSE);
43                     
44                 } else {
45                     panelCollapsible.setExpanded(Boolean.TRUE);
46                 }
47                 ActionEvent ae = new ActionEvent(component);
48                 component.queueEvent(ae);
49                 
50  
51             }
52         } catch (Exception JavaDoc e) {
53             e.printStackTrace();
54             throw new RuntimeException JavaDoc(e);
55         }
56     }
57
58     public void encodeBegin(FacesContext facesContext, UIComponent uiComponent) throws IOException JavaDoc {
59         PanelCollapsible panelCollapsible = (PanelCollapsible) uiComponent;
60         PanelCollapsibleState state = PanelCollapsibleState.getState(facesContext, uiComponent);
61         String JavaDoc base = panelCollapsible.getStyleClass();
62         boolean open = panelCollapsible.getExpanded().booleanValue();
63         boolean disabled = panelCollapsible.isDisabled();
64         StringBuffer JavaDoc classModeSuffix = new StringBuffer JavaDoc(16);
65         String JavaDoc style = panelCollapsible.getStyle();
66         
67         boolean fireEffect = false;
68
69
70         String JavaDoc baseID = uiComponent.getClientId(facesContext);
71         if( !state.isFirstTime() &&
72             !state.isChangedViaDecode() &&
73             state.isLastExpandedValue() != open){
74             fireEffect = true;
75         }
76
77
78         DOMContext domContext = DOMContext.attachDOMContext(facesContext, uiComponent);
79         if (!domContext.isInitialized()) {
80             Element JavaDoc rootSpan = domContext.createElement(HTML.DIV_ELEM);
81             domContext.setRootNode(rootSpan);
82             setRootElementId(facesContext, rootSpan, uiComponent);
83         }
84         Element JavaDoc root = (Element JavaDoc) domContext.getRootNode();
85         root.setAttribute(HTML.CLASS_ATTR, panelCollapsible.getStyleClass());
86         root.setAttribute(HTML.STYLE_ATTR, style);
87
88         Element JavaDoc header = domContext.createElement(HTML.DIV_ELEM);
89
90         header.setAttribute(HTML.CLASS_ATTR, panelCollapsible.getHeaderClass());
91         
92         UIComponent form = findForm(uiComponent);
93
94         if(panelCollapsible.getToggleOnClick().equals(Boolean.TRUE)){
95           if(!disabled)
96               FormRenderer.addHiddenField(facesContext, uiComponent.getClientId(facesContext)+ "Expanded");
97               
98               header.setAttribute(HTML.ONCLICK_ATTR,
99                   "document.forms['"+ form.getClientId(facesContext) +"']" +
100                         "['"+ uiComponent.getClientId(facesContext)+ "Expanded"+"'].value='"+
101                         panelCollapsible.getExpanded()+"'; " +
102                                 "iceSubmit(document.forms['"+ form.getClientId(facesContext) +"'],this,event); return false;");
103             
104 // if(!disabled)
105
// header.setAttribute(HTML.ONCLICK_ATTR, "Ice.PanelCollapsible." +
106
// "fire('" + baseID + "_content', " +
107
// "'"+ baseID +"_header', "+ panelCollapsible.getStyleClassForJs()+");");
108
}
109         String JavaDoc script = "Ice.PanelCollapsible.collapse('" + baseID + "_content');";
110         if(panelCollapsible.getExpanded().booleanValue()){
111 // script = "Ice.PanelCollapsible.expand('" + baseID + "_content');";
112
}
113
114 // if(!disabled)
115
// JavascriptContext.addJavascriptCall(facesContext, script);
116

117         header.setAttribute(HTML.ID_ATTR, baseID + "_header");
118
119         root.appendChild(header);
120         UIComponent headerFacet = uiComponent.getFacet("header");
121         if(headerFacet != null){
122             try{
123
124             //UIComponent headerComp = (UIComponent)headerFacet.getChildren().get(0);
125
domContext.setCursorParent(header);
126           
127             domContext.streamWrite(facesContext, uiComponent,
128                                    domContext.getRootNode(),header);
129
130             CustomComponentUtils.renderChild(facesContext,headerFacet);
131                 //System.err.println("Header Renader Done");
132
}catch(Exception JavaDoc e){
133                 e.printStackTrace();
134             }
135         }else{
136             log.error("No Header facet found in Panel collapsible");
137         }
138         //Text script = domContext.createTextNode(SCRIPT);
139
//Element scriptEle = domContext.createElement(SCRIPT);
140
//scriptEle.setAttribute(HTML.LANG_ATTR, "javascript");
141
//scriptEle.appendChild(script);
142
//header.appendChild(scriptEle);
143

144         Element JavaDoc container = domContext.createElement(HTML.DIV_ELEM);
145         container.setAttribute(HTML.ID_ATTR, baseID + "_content");
146         root.appendChild(container);
147         container.setAttribute(HTML.CLASS_ATTR, panelCollapsible.getContentClass());
148
149
150 // if(fireEffect){
151
// if(!state.isLastExpandedValue()){
152
// container.setAttribute(HTML.STYLE_ATTR, "display:none;");
153
// }
154
// }else{
155
// if (!open) {
156
// container.setAttribute(HTML.STYLE_ATTR, "display:none;");
157
// }
158
// }
159
state.setLastExpandedValue(open);
160         state.setChangedViaDecode(false);
161         state.setFirstTime(false);
162         domContext.setCursorParent(container);
163
164     }
165
166
167     public void encodeEnd(FacesContext facesContext, UIComponent uiComponenet) throws IOException JavaDoc {
168
169         DOMContext.getDOMContext(facesContext, uiComponenet).stepOver();
170
171     }
172
173     public void encodeChildren(FacesContext facesContext, UIComponent uiComponent)
174             throws IOException JavaDoc {
175         validateParameters(facesContext, uiComponent, null);
176         PanelCollapsible panelCollapsible = (PanelCollapsible) uiComponent;
177         DOMContext domContext =
178                 DOMContext.getDOMContext(facesContext, uiComponent);
179         if(panelCollapsible.getExpanded().booleanValue()){
180             Iterator JavaDoc children = uiComponent.getChildren().iterator();
181             while (children.hasNext()) {
182                 UIComponent nextChild = (UIComponent) children.next();
183                 if (nextChild.isRendered()) {
184                     encodeParentAndChildren(facesContext, nextChild);
185                 }
186             }
187         }
188         // set the cursor here since nothing happens in encodeEnd
189
domContext.stepOver();
190         domContext.streamWrite(facesContext, uiComponent);
191
192     }
193
194 }
195
196
Popular Tags