1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.struts2.components;
22
23 import java.util.LinkedHashMap;
24 import java.util.Map;
25
26 import javax.servlet.http.HttpServletRequest;
27 import javax.servlet.http.HttpServletResponse;
28
29 import org.apache.commons.logging.Log;
30 import org.apache.commons.logging.LogFactory;
31 import org.apache.struts2.views.annotations.StrutsTag;
32 import org.apache.struts2.views.annotations.StrutsTagAttribute;
33
34 import com.opensymphony.xwork2.util.ValueStack;
35
36 /***
37 * <!-- START SNIPPET: javadoc -->
38 *
39 * Create a option transfer select component which is basically two <select ...>
40 * tag with buttons in the middle of them allowing options in each of the
41 * <select ...> to be moved between themselves. Will auto-select all its
42 * elements upon its containing form submision.
43 *
44 * <!-- END SNIPPET: javadoc -->
45 *
46 * <p/>
47 *
48 *
49 * <!-- START SNIPPET: notice -->
50 *
51 * NOTE: The id and doubleId need not be supplied as they will generated provided
52 * that the optiontransferselect tag is being used in a form tag. The generated id
53 * and doubleId will be <form_id>_<optiontransferselect_doubleName> and
54 * <form_id>_<optiontransferselect_doubleName> respectively.
55 *
56 * <!-- END SNIPPET: notice -->
57 *
58 * <p/>
59 *
60 * <pre>
61 * <!-- START SNIPPET: example -->
62 *
63 * <-- minimum configuration -->
64 * <s:optiontransferselect
65 * label="Favourite Cartoons Characters"
66 * name="leftSideCartoonCharacters"
67 * list="{'Popeye', 'He-Man', 'Spiderman'}"
68 * doubleName="rightSideCartoonCharacters"
69 * doubleList="{'Superman', 'Mickey Mouse', 'Donald Duck'}"
70 * />
71 *
72 * <-- possible configuration -->
73 * <s:optiontransferselect
74 * label="Favourite Cartoons Characters"
75 * name="leftSideCartoonCharacters"
76 * leftTitle="Left Title"
77 * rightTitle="Right Title"
78 * list="{'Popeye', 'He-Man', 'Spiderman'}"
79 * multiple="true"
80 * headerKey="headerKey"
81 * headerValue="--- Please Select ---"
82 * emptyOption="true"
83 * doubleList="{'Superman', 'Mickey Mouse', 'Donald Duck'}"
84 * doubleName="rightSideCartoonCharacters"
85 * doubleHeaderKey="doubleHeaderKey"
86 * doubleHeaderValue="--- Please Select ---"
87 * doubleEmptyOption="true"
88 * doubleMultiple="true"
89 * />
90 *
91 * <!-- END SNIPPET: example -->
92 * </pre>
93 *
94 */
95 @StrutsTag(name="optiontransferselect", tldTagClass="org.apache.struts2.views.jsp.ui.OptionTransferSelectTag", description="Renders an input form")
96 public class OptionTransferSelect extends DoubleListUIBean {
97
98 private static final Log _log = LogFactory.getLog(OptionTransferSelect.class);
99
100 private static final String TEMPLATE = "optiontransferselect";
101
102 protected String allowAddToLeft;
103 protected String allowAddToRight;
104 protected String allowAddAllToLeft;
105 protected String allowAddAllToRight;
106 protected String allowSelectAll;
107 protected String allowUpDownOnLeft;
108 protected String allowUpDownOnRight;
109
110 protected String leftTitle;
111 protected String rightTitle;
112
113 protected String buttonCssClass;
114 protected String buttonCssStyle;
115
116 protected String addToLeftLabel;
117 protected String addToRightLabel;
118 protected String addAllToLeftLabel;
119 protected String addAllToRightLabel;
120 protected String selectAllLabel;
121 protected String leftUpLabel;
122 protected String leftDownlabel;
123 protected String rightUpLabel;
124 protected String rightDownLabel;
125
126
127 public OptionTransferSelect(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
128 super(stack, request, response);
129 }
130
131 protected String getDefaultTemplate() {
132 return TEMPLATE;
133 }
134
135
136 public void evaluateExtraParams() {
137 super.evaluateExtraParams();
138
139 Object doubleValue = null;
140
141
142 if (doubleList != null) {
143 doubleValue = findValue(doubleList);
144 addParameter("doubleList", doubleValue);
145 }
146 if (size == null || size.trim().length() <= 0) {
147 addParameter("size", "15");
148 }
149 if (doubleSize == null || doubleSize.trim().length() <= 0) {
150 addParameter("doubleSize", "15");
151 }
152 if (multiple == null || multiple.trim().length() <= 0) {
153 addParameter("multiple", Boolean.TRUE);
154 }
155 if (doubleMultiple == null || doubleMultiple.trim().length() <= 0) {
156 addParameter("doubleMultiple", Boolean.TRUE);
157 }
158
159
160
161
162
163
164 if (buttonCssClass != null && buttonCssClass.trim().length() > 0) {
165 addParameter("buttonCssClass", buttonCssClass);
166 }
167
168
169 if (buttonCssStyle != null && buttonCssStyle.trim().length() > 0) {
170 addParameter("buttonCssStyle", buttonCssStyle);
171 }
172
173
174
175
176 addParameter("allowSelectAll",
177 allowSelectAll != null ? findValue(allowSelectAll, Boolean.class) : Boolean.TRUE);
178
179
180 addParameter("allowAddToLeft",
181 allowAddToLeft != null ? findValue(allowAddToLeft, Boolean.class) : Boolean.TRUE);
182
183
184 addParameter("allowAddToRight",
185 allowAddToRight != null ? findValue(allowAddToRight, Boolean.class) : Boolean.TRUE);
186
187
188 addParameter("allowAddAllToLeft",
189 allowAddAllToLeft != null ? findValue(allowAddAllToLeft, Boolean.class) : Boolean.TRUE);
190
191
192 addParameter("allowAddAllToRight",
193 allowAddAllToRight != null ? findValue(allowAddAllToRight, Boolean.class) : Boolean.TRUE);
194
195
196 addParameter("allowUpDownOnLeft",
197 allowUpDownOnLeft != null ? findValue(allowUpDownOnLeft, Boolean.class) : Boolean.TRUE);
198
199
200 addParameter("allowUpDownOnRight",
201 allowUpDownOnRight != null ? findValue(allowUpDownOnRight, Boolean.class) : Boolean.TRUE);
202
203
204
205 if (leftTitle != null) {
206 addParameter("leftTitle", findValue(leftTitle, String.class));
207 }
208
209
210 if (rightTitle != null) {
211 addParameter("rightTitle", findValue(rightTitle, String.class));
212 }
213
214
215
216 addParameter("addToLeftLabel",
217 addToLeftLabel != null ? findValue(addToLeftLabel, String.class) : "<-" );
218
219
220 addParameter("addToRightLabel",
221 addToRightLabel != null ? findValue(addToRightLabel, String.class) : "->");
222
223
224 addParameter("addAllToLeftLabel",
225 addAllToLeftLabel != null ? findValue(addAllToLeftLabel, String.class) : "<<--");
226
227
228 addParameter("addAllToRightLabel",
229 addAllToRightLabel != null ? findValue(addAllToRightLabel, String.class) : "-->>");
230
231
232 addParameter("selectAllLabel",
233 selectAllLabel != null ? findValue(selectAllLabel, String.class) : "<*>");
234
235
236 addParameter("leftUpLabel",
237 leftUpLabel != null ? findValue(leftUpLabel, String.class) : "^");
238
239
240
241 addParameter("leftDownLabel",
242 leftDownlabel != null ? findValue(leftDownlabel, String.class) : "v");
243
244
245
246 addParameter("rightUpLabel",
247 rightUpLabel != null ? findValue(rightUpLabel, String.class) : "^");
248
249
250
251 addParameter("rightDownLabel",
252 rightDownLabel != null ? findValue(rightDownLabel, String.class) : "v");
253
254
255
256
257
258 Form formAncestor = (Form) findAncestor(Form.class);
259 if (formAncestor != null) {
260
261
262 enableAncestorFormCustomOnsubmit();
263
264
265
266 Map formOptiontransferselectIds = (Map) formAncestor.getParameters().get("optiontransferselectIds");
267 Map formOptiontransferselectDoubleIds = (Map) formAncestor.getParameters().get("optiontransferselectDoubleIds");
268
269
270 if (formOptiontransferselectIds == null) {
271 formOptiontransferselectIds = new LinkedHashMap();
272 }
273 if (formOptiontransferselectDoubleIds == null) {
274 formOptiontransferselectDoubleIds = new LinkedHashMap();
275 }
276
277
278
279 String tmpId = (String) getParameters().get("id");
280 String tmpHeaderKey = (String) getParameters().get("headerKey");
281 if (tmpId != null && (! formOptiontransferselectIds.containsKey(tmpId))) {
282 formOptiontransferselectIds.put(tmpId, tmpHeaderKey);
283 }
284
285
286 String tmpDoubleId = (String) getParameters().get("doubleId");
287 String tmpDoubleHeaderKey = (String) getParameters().get("doubleHeaderKey");
288 if (tmpDoubleId != null && (! formOptiontransferselectDoubleIds.containsKey(tmpDoubleId))) {
289 formOptiontransferselectDoubleIds.put(tmpDoubleId, tmpDoubleHeaderKey);
290 }
291
292 formAncestor.getParameters().put("optiontransferselectIds", formOptiontransferselectIds);
293 formAncestor.getParameters().put("optiontransferselectDoubleIds", formOptiontransferselectDoubleIds);
294
295 }
296 else {
297 _log.warn("form enclosing optiontransferselect "+this+" not found, auto select upon form submit of optiontransferselect will not work");
298 }
299 }
300
301
302
303 public String getAddAllToLeftLabel() {
304 return addAllToLeftLabel;
305 }
306
307 @StrutsTagAttribute(description="Set Add To Left button label")
308 public void setAddAllToLeftLabel(String addAllToLeftLabel) {
309 this.addAllToLeftLabel = addAllToLeftLabel;
310 }
311
312 public String getAddAllToRightLabel() {
313 return addAllToRightLabel;
314 }
315
316 @StrutsTagAttribute(description="Set Add All To Right button label")
317 public void setAddAllToRightLabel(String addAllToRightLabel) {
318 this.addAllToRightLabel = addAllToRightLabel;
319 }
320
321 public String getAddToLeftLabel() {
322 return addToLeftLabel;
323 }
324
325 @StrutsTagAttribute(description="Set Add To Left button label")
326 public void setAddToLeftLabel(String addToLeftLabel) {
327 this.addToLeftLabel = addToLeftLabel;
328 }
329
330 public String getAddToRightLabel() {
331 return addToRightLabel;
332 }
333
334 @StrutsTagAttribute(description="Set Add To Right button label")
335 public void setAddToRightLabel(String addToRightLabel) {
336 this.addToRightLabel = addToRightLabel;
337 }
338
339 public String getAllowAddAllToLeft() {
340 return allowAddAllToLeft;
341 }
342
343 @StrutsTagAttribute(description="Enable Add All To Left button")
344 public void setAllowAddAllToLeft(String allowAddAllToLeft) {
345 this.allowAddAllToLeft = allowAddAllToLeft;
346 }
347
348 public String getAllowAddAllToRight() {
349 return allowAddAllToRight;
350 }
351
352 @StrutsTagAttribute(description="Enable Add All To Right button")
353 public void setAllowAddAllToRight(String allowAddAllToRight) {
354 this.allowAddAllToRight = allowAddAllToRight;
355 }
356
357 public String getAllowAddToLeft() {
358 return allowAddToLeft;
359 }
360
361 @StrutsTagAttribute(description="Enable Add To Left button")
362 public void setAllowAddToLeft(String allowAddToLeft) {
363 this.allowAddToLeft = allowAddToLeft;
364 }
365
366 public String getAllowAddToRight() {
367 return allowAddToRight;
368 }
369
370 @StrutsTagAttribute(description="Enable Add To Right button")
371 public void setAllowAddToRight(String allowAddToRight) {
372 this.allowAddToRight = allowAddToRight;
373 }
374
375 public String getLeftTitle() {
376 return leftTitle;
377 }
378
379 @StrutsTagAttribute(description="Enable up / down on the left side")
380 public void setAllowUpDownOnLeft(String allowUpDownOnLeft) {
381 this.allowUpDownOnLeft = allowUpDownOnLeft;
382 }
383
384 public String getAllowUpDownOnLeft() {
385 return this.allowUpDownOnLeft;
386 }
387
388 @StrutsTagAttribute(description="Enable up / down on the right side")
389 public void setAllowUpDownOnRight(String allowUpDownOnRight) {
390 this.allowUpDownOnRight = allowUpDownOnRight;
391 }
392
393 public String getAllowUpDownOnRight() {
394 return this.allowUpDownOnRight;
395 }
396
397 @StrutsTagAttribute(description="Set Left title")
398 public void setLeftTitle(String leftTitle) {
399 this.leftTitle = leftTitle;
400 }
401
402 public String getRightTitle() {
403 return rightTitle;
404 }
405
406 @StrutsTagAttribute(description="Set Right title")
407 public void setRightTitle(String rightTitle) {
408 this.rightTitle = rightTitle;
409 }
410
411 @StrutsTagAttribute(description="Enable Select All button")
412 public void setAllowSelectAll(String allowSelectAll) {
413 this.allowSelectAll = allowSelectAll;
414 }
415
416 public String getAllowSelectAll() {
417 return this.allowSelectAll;
418 }
419
420 @StrutsTagAttribute(description="Set Select All button label")
421 public void setSelectAllLabel(String selectAllLabel) {
422 this.selectAllLabel = selectAllLabel;
423 }
424
425 public String getSelectAllLabel() {
426 return this.selectAllLabel;
427 }
428
429 @StrutsTagAttribute(description="Set buttons css class")
430 public void setButtonCssClass(String buttonCssClass) {
431 this.buttonCssClass = buttonCssClass;
432 }
433
434 public String getButtonCssClass() {
435 return buttonCssClass;
436 }
437
438 @StrutsTagAttribute(description="Set button css style")
439 public void setButtonCssStyle(String buttonCssStyle) {
440 this.buttonCssStyle = buttonCssStyle;
441 }
442
443 public String getButtonCssStyle() {
444 return this.buttonCssStyle;
445 }
446
447 @StrutsTagAttribute(description="Up label for the left side")
448 public void setLeftUpLabel(String leftUpLabel) {
449 this.leftUpLabel = leftUpLabel;
450 }
451 public String getLeftUpLabel() {
452 return this.leftUpLabel;
453 }
454
455 @StrutsTagAttribute(description="Down label for the left side.")
456 public void setLeftDownLabel(String leftDownLabel) {
457 this.leftDownlabel = leftDownLabel;
458 }
459 public String getLeftDownLabel() {
460 return this.leftDownlabel;
461 }
462
463 @StrutsTagAttribute(description="Up label for the right side.")
464 public void setRightUpLabel(String rightUpLabel) {
465 this.rightUpLabel = rightUpLabel;
466 }
467 public String getRightUpLabel() {
468 return this.rightUpLabel;
469 }
470
471 @StrutsTagAttribute(description="Down label for the left side.")
472 public void setRightDownLabel(String rightDownlabel) {
473 this.rightDownLabel = rightDownlabel;
474 }
475 public String getRightDownLabel() {
476 return rightDownLabel;
477 }
478
479
480 }