1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.custom.tree2;
20
21 import javax.faces.component.UICommand;
22 import javax.faces.component.html.HtmlCommandLink;
23 import javax.faces.context.FacesContext;
24 import javax.faces.el.MethodBinding;
25 import javax.faces.el.ValueBinding;
26
27 import org.apache.myfaces.component.LocationAware;
28
29 import java.util.Map;
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 public abstract class AbstractHtmlTree extends UITreeData
54 implements LocationAware
55 {
56 public static final String COMPONENT_TYPE = "org.apache.myfaces.HtmlTree2";
57 private static final String DEFAULT_RENDERER_TYPE = "org.apache.myfaces.HtmlTree2";
58
59 private UICommand _expandControl = null;
60
61
62
63
64 private boolean _clientSideToggle = true;
65 private boolean _clientSideToggleSet;
66
67
68
69
70
71
72
73
74 public boolean isClientSideToggle()
75 {
76 if (_clientSideToggleSet)
77 {
78 return _clientSideToggle;
79 }
80 ValueBinding expression = getValueBinding("clientSideToggle");
81 if (expression != null)
82 {
83 return ((Boolean)expression.getValue(getFacesContext())).booleanValue();
84 }
85 return true;
86 }
87
88
89
90
91
92
93 public void setClientSideToggle(boolean clientSideToggle)
94 {
95 this._clientSideToggle = clientSideToggle;
96 this._clientSideToggleSet = true;
97 }
98
99
100
101
102
103 protected void processNodes(FacesContext context, int processAction, TreeWalker walker)
104 {
105 if (isClientSideToggle()) {
106 walker.setCheckState(false);
107 }
108 super.processNodes(context, processAction, walker);
109 }
110
111
112
113
114 public void setNodeId(String nodeId)
115 {
116 super.setNodeId(nodeId);
117
118 if (_varNodeToggler != null)
119 {
120 Map requestMap = getFacesContext().getExternalContext().getRequestMap();
121 requestMap.put(_varNodeToggler, this);
122 }
123 }
124
125
126
127
128
129
130
131
132 public UICommand getExpandControl()
133 {
134 if (_expandControl == null){
135 _expandControl = new HtmlCommandLink();
136 _expandControl.setParent(this);
137 }
138 return _expandControl;
139 }
140
141
142 private String _varNodeToggler;
143
144
145
146
147
148
149
150 public String getVarNodeToggler()
151 {
152 return _varNodeToggler;
153 }
154
155 public void setVarNodeToggler(String varNodeToggler)
156 {
157 _varNodeToggler = varNodeToggler;
158
159
160 String bindingString = "#{" + varNodeToggler + ".toggleExpanded}";
161 MethodBinding actionBinding = FacesContext.getCurrentInstance().getApplication().createMethodBinding(bindingString, null);
162 getExpandControl().setAction(actionBinding);
163 }
164
165 public Object saveState(FacesContext facesContext)
166 {
167 Object[] values = new Object[4];
168 values[0] = super.saveState(facesContext);
169 values[1] = _varNodeToggler;
170 values[2] = Boolean.valueOf(_clientSideToggle);
171 values[3] = Boolean.valueOf(_clientSideToggleSet);
172
173 return values;
174 }
175
176 public void restoreState(FacesContext facesContext, Object state)
177 {
178 Object[] values = (Object[])state;
179 super.restoreState(facesContext,values[0]);
180 _varNodeToggler = (String)values[1];
181 _clientSideToggle = ((Boolean)values[2]).booleanValue();
182 _clientSideToggleSet = ((Boolean)values[3]).booleanValue();
183
184 }
185
186
187
188
189
190
191
192
193 public abstract boolean isShowNav();
194
195
196
197
198
199
200
201 public abstract boolean isShowLines();
202
203
204
205
206
207
208
209 public abstract boolean isShowRootNode();
210
211
212
213
214
215
216
217
218 public abstract boolean isPreserveToggle();
219
220 }