##### Coverage Report - org.apache.turbine.util.template.SelectorBox

Classes in this File | Line Coverage | Branch Coverage | Complexity
SelectorBox |
0% | 0/63
0% | 0/24
| 1.8571428571428572;1,857

1 |  |
     package org.apache.turbine.util.template;
2 |  |
3 |  |
4 |  |
     /*
5 |  |
      * Licensed to the Apache Software Foundation (ASF) under one
6 |  |
      * or more contributor license agreements.  See the NOTICE file
7 |  |
      * distributed with this work for additional information
8 |  |
      * regarding copyright ownership.  The ASF licenses this file
9 |  |
      * to you under the Apache License, Version 2.0 (the
10 |  |
      * "License"); you may not use this file except in compliance
11 |  |
      * with the License.  You may obtain a copy of the License at
12 |  |
      *
13 |  |
      *   http://www.apache.org/licenses/LICENSE-2.0
14 |  |
      *
15 |  |
      * Unless required by applicable law or agreed to in writing,
16 |  |
      * software distributed under the License is distributed on an
17 |  |
      * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
18 |  |
      * KIND, either express or implied.  See the License for the
19 |  |
      * specific language governing permissions and limitations
20 |  |
      * under the License.
21 |  |
      */
22 |  |
23 |  |
24 |  |
     import org.apache.ecs.html.Option;
25 |  |
     import org.apache.ecs.html.Select;
26 |  |
27 |  |
     /**
28 |  |
      * This class is for generating a SelectorBox. It is good when used
29 |  |
      * with WM because you can stuff it into the context and then just
30 |  |
      * call it to generate the HTML.  It can be used in other cases as
31 |  |
      * well, but WM is the best case for it right now.
32 |  |
      *
33 |  |
      * <p>For example code showing the usage for this module, please see
34 |  |
      * the toString() method below to see how it would be refered to from
35 |  |
      * WM.
36 |  |
      *
37 |  |
      * <pre>
38 |  |
      * // get the roles for a user
39 |  |
      * RoleSet userRoles = new DefaultAccessControl().getRoles(loginid, null);
40 |  |
      * if ( userRoles != null )
41 |  |
      * {
42 |  |
      *     context.put("hasRoleSet", Boolean.TRUE);
43 |  |
      *
44 |  |
      *     // get an array of the users roles
45 |  |
      *     Role[] usersRoles = userRoles.getRolesArray();
46 |  |
      *     // get an array of all the roles in the system
47 |  |
      *     Role[] allRoles = ((RoleSet)RolePeer.retrieveSet()).getRolesArray();
48 |  |
      *
49 |  |
      *     Object[] names = new Object[allRoles.length];
50 |  |
      *     Object[] values = new Object[allRoles.length];
51 |  |
      *     for ( int i=0;i&lt;allRoles.length; i++ )
52 |  |
      *     {
53 |  |
      *         names[i] = new Integer(allRoles[i].getPrimaryKey()).toString();
54 |  |
      *         values[i] = allRoles[i].getName();
55 |  |
      *     }
56 |  |
      *
57 |  |
      *     SelectorBox sb = new SelectorBox("roleSetBox", names, values);
58 |  |
      *     sb.buildBooleans(usersRoles, allRoles);
59 |  |
      *     context.put("roleSetBox", sb);
60 |  |
      * }
61 |  |
      * else
62 |  |
      * {
63 |  |
      *     context.put("hasRoleSet", Boolean.FALSE);
64 |  |
      * }
65 |  |
      * </pre>
66 |  |
      *
67 |  |
      * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
68 |  |
      * @version $Id: SelectorBox.java 615328 2008-01-25 20:25:05Z tv $
69 |  |
      */
70 |  |
     public class SelectorBox
71 |  |
     {
72 |  |
         /** This is the Select ECS element. */
73 | 0 |
         private Select sel = null;
74 |  |
75 |  |
         /** This is the size of the Select statement. */
76 | 0 |
         private int size = 1;
77 |  |
78 |  |
         /** This is the name= value. */
79 | 0 |
         private String name = null;
80 |  |
81 |  |
         /** This is the value= portion of the option element. */
82 | 0 |
         private Object[] names = null;
83 |  |
84 |  |
         /** This is the data after the option element. */
85 | 0 |
         private Object[] values = null;
86 |  |
87 |  |
         /** This is an array of which items are selected. */
88 | 0 |
         private boolean[] selected = null;
89 |  |
90 |  |
         /**
91 |  |
          * Generic constructor, builds a select box with a default size of
92 |  |
          * 1 and no selected items.
93 |  |
          *
94 |  |
          * @param name A String with the name for the select box.
95 |  |
          * @param names An Object[] with the names.
96 |  |
          * @param values An Object[] with the values.
97 |  |
          */
98 |  |
         public SelectorBox(String name, Object[] names, Object[] values)
99 |  |
         {
100 | 0 |
             this(name, names, values, 1, null);
101 | 0 |
         }
102 |  |
103 |  |
         /**
104 |  |
          * Generic constructor builds a select box.
105 |  |
          *
106 |  |
          * @param name A String with the name for the select box.
107 |  |
          * @param names An Object[] with the names.
108 |  |
          * @param values An Object[] with the values.
109 |  |
          * @param size An int specifying the size.
110 |  |
          */
111 |  |
         public SelectorBox(String name, Object[] names, Object[] values, int size)
112 |  |
         {
113 | 0 |
             this(name, names, values, size, null);
114 | 0 |
         }
115 |  |
116 |  |
         /**
117 |  |
          * Generic constructor builds a select box.
118 |  |
          *
119 |  |
          * @param name A String with the name for the select box.
120 |  |
          * @param names An Object[] with the names.
121 |  |
          * @param values An Object[] with the values.
122 |  |
          * @param selected A boolean[] with the selected items.
123 |  |
          */
124 |  |
         public SelectorBox(String name, Object[] names, Object[] values,
125 |  |
                            boolean[] selected)
126 |  |
         {
127 | 0 |
             this(name, names, values, 1, selected);
128 | 0 |
         }
129 |  |
130 |  |
         /**
131 |  |
          * Primary constructor for everything.
132 |  |
          *
133 |  |
          * @param name A String with the name for the select box.
134 |  |
          * @param names An Object[] with the names.
135 |  |
          * @param values An Object[] with the values.
136 |  |
          * @param size An int specifying the size.
137 |  |
          * @param selected A boolean[] with the selected items.
138 |  |
          */
139 |  |
         public SelectorBox(String name, Object[] names, Object[] values, int size,
140 |  |
                            boolean[] selected)
141 | 0 |
         {
142 | 0 |
             this.name = name;
143 | 0 |
             this.names = names;
144 | 0 |
             this.values = values;
145 | 0 |
             this.size = size;
146 | 0 |
             this.selected = selected;
147 |  |
148 | 0 |
             sel = new Select(name, size);
149 | 0 |
             sel.setName(name);
150 | 0 |
             sel.setSize(size);
151 | 0 |
         }
152 |  |
153 |  |
         /**
154 |  |
          * Pass in an array of selected items and the entire set of items
155 |  |
          * and it will determine which items in the selected set are also
156 |  |
          * in the entireset and then build a boolean[] up that is the same
157 |  |
          * size as the entireSet with markings to tell whether or not the
158 |  |
          * items are marked or not.  It uses toString().equalsIgnoreCase()
159 |  |
          * on the Object in the Object[] to determine if the items are
160 |  |
          * equal.
161 |  |
          *
162 |  |
          * @param selectedSet An Object[].
163 |  |
          * @param entireSet An Object[].
164 |  |
          */
165 |  |
         public void buildBooleans(Object[] selectedSet, Object[] entireSet)
166 |  |
         {
167 | 0 |
             selected = new boolean[entireSet.length];
168 | 0 |
             for (int j = 0; j < entireSet.length; j++)
169 |  |
             {
170 | 0 |
                 Object r2 = entireSet[j];
171 | 0 |
                 for (int i = 0; i < selectedSet.length; i++)
172 |  |
                 {
173 | 0 |
                     Object r1 = selectedSet[i];
174 | 0 |
                     if (r1 != null && r2 != null &&
175 |  |
                             r1.toString().equalsIgnoreCase(r2.toString()))
176 |  |
                     {
177 | 0 |
                         selected[j] = true;
178 |  |
                     }
179 |  |
                 }
180 |  |
             }
181 | 0 |
         }
182 |  |
183 |  |
         /**
184 |  |
          * This builds out the select box at a certain size.  To use this
185 |  |
          * element in WM, you simply build this object in your java code,
186 |  |
          * put it into the context and then call $selectBox.toString(5).
187 |  |
          *
188 |  |
          * @param size An int with the size.
189 |  |
          * @return A String with the HTML code.
190 |  |
          */
191 |  |
         public String toString(int size)
192 |  |
         {
193 | 0 |
             sel.setSize(size);
194 | 0 |
             sel.setName(name);
195 | 0 |
             for (int f = 0; f < values.length; f++)
196 |  |
             {
197 | 0 |
                 Option opt = new Option((String) values[f]);
198 | 0 |
                 opt.addElement((String) names[f]);
199 | 0 |
                 if (selected != null && selected[f] == true)
200 |  |
                 {
201 | 0 |
                     opt.setSelected(true);
202 |  |
                 }
203 | 0 |
                 sel.addElement(opt);
204 |  |
             }
205 | 0 |
             String output = sel.toString();
206 | 0 |
             reset();
207 | 0 |
             return output;
208 |  |
         }
209 |  |
210 |  |
         /**
211 |  |
          * Resets the internal state of the SelectorBox.
212 |  |
          */
213 |  |
         public void reset()
214 |  |
         {
215 | 0 |
             sel = new Select(name, size);
216 | 0 |
         }
217 |  |
218 |  |
         /**
219 |  |
          * This builds out the select box at a certain size.  To use this
220 |  |
          * element in WM, you simply build this object in your java code,
221 |  |
          * put it into the context and then call $selectBox and it will
222 |  |
          * build it with the default size of 1.
223 |  |
          *
224 |  |
          * @return A String with the HTML code.
225 |  |
          */
226 |  |
         public String toString()
227 |  |
         {
228 | 0 |
             return this.toString(size);
229 |  |
         }
230 |  |
231 |  |
         /**
232 |  |
          * This allows you to set the multiple attribute to the select
233 |  |
          * element.  Example usage from within WM is like this:
234 |  |
          *
235 |  |
          * <p>
236 |  |
          * $selectBox.setMultiple(true).toString(4)
237 |  |
          *
238 |  |
          * @param val True if multiple selection should be allowed.
239 |  |
          * @return A SelectorBox (self).
240 |  |
          */
241 |  |
         public SelectorBox setMultiple(boolean val)
242 |  |
         {
243 | 0 |
             sel.setMultiple(val);
244 | 0 |
             return this;
245 |  |
         }
246 |  |
247 |  |
         /**
248 |  |
          * This allows one to set the name= attribute to the select
249 |  |
          * element.
250 |  |
          *
251 |  |
          * @param name A String with the name.
252 |  |
          * @return A SelectorBox (self).
253 |  |
          */
254 |  |
         public SelectorBox setName(String name)
255 |  |
         {
256 | 0 |
             this.name = name;
257 | 0 |
             sel.setName(name);
258 | 0 |
             return this;
259 |  |
         }
260 |  |
261 |  |
         /**
262 |  |
          * This allows one to set the size of the select element.
263 |  |
          *
264 |  |
          * @param size An int with the size.
265 |  |
          * @return A SelectorBox (self).
266 |  |
          */
267 |  |
         public SelectorBox setSize(int size)
268 |  |
         {
269 | 0 |
             this.size = size;
270 | 0 |
             sel.setSize(size);
271 | 0 |
             return this;
272 |  |
         }
273 |  |
274 |  |
         /**
275 |  |
          * This allows one to set an onChange attribute on the select tag
276 |  |
          *
277 |  |
          * @param script A string with the script to put in onChange
278 |  |
          * @return A SelectorBox (self).
279 |  |
          */
280 |  |
         public SelectorBox setOnChange(String script)
281 |  |
         {
282 | 0 |
             sel.setOnChange(script);
283 | 0 |
             return this;
284 |  |
         }
285 |  |
286 |  |
         /**
287 |  |
          * This allows one to set the array of selected booleans.
288 |  |
          *
289 |  |
          * @param an array of booleans
290 |  |
          * @return A SelectorBox (self).
291 |  |
          */
292 |  |
         public SelectorBox setSelected(boolean[] bools)
293 |  |
         {
294 | 0 |
             this.selected = bools;
295 | 0 |
             return this;
296 |  |
         }
297 |  |
298 |  |
         /**
299 |  |
          * This will set all elements as unselected, except for the
300 |  |
          * element(s) with the given name.
301 |  |
          *
302 |  |
          * @param name The name to appear as selected.
303 |  |
          * @return A SelectorBox (self).
304 |  |
          */
305 |  |
         public SelectorBox setSelected(Object name)
306 |  |
         {
307 | 0 |
             if (name != null)
308 |  |
             {
309 | 0 |
                 selected = new boolean[names.length];
310 | 0 |
                 for (int i = 0; i < names.length; i++)
311 |  |
                 {
312 | 0 |
                     Object o = names[i];
313 | 0 |
                     if (o != null && o.toString().equalsIgnoreCase(name.toString()))
314 |  |
                     {
315 | 0 |
                         selected[i] = true;
316 |  |
                     }
317 |  |
                 }
318 |  |
             }
319 | 0 |
             return this;
320 |  |
         }
321 |  |
     }