1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.apache.struts2.components;
23
24 import java.util.LinkedHashMap;
25 import java.util.Map;
26
27 import javax.servlet.http.HttpServletRequest;
28 import javax.servlet.http.HttpServletResponse;
29
30 import org.apache.struts2.views.annotations.StrutsTag;
31 import org.apache.struts2.views.annotations.StrutsTagAttribute;
32
33 import com.opensymphony.xwork2.util.ValueStack;
34 import com.opensymphony.xwork2.util.logging.Logger;
35 import com.opensymphony.xwork2.util.logging.LoggerFactory;
36
37 /***
38 * <!-- START SNIPPET: javadoc -->
39 *
40 * Create a Select component with buttons to move the elements in the select component
41 * up and down. When the containing form is submited, its elements will be submitted in
42 * the order they are arranged (top to bottom).
43 *
44 * <!-- END SNIPPET: javadoc -->
45 *
46 * <p/>
47 *
48 * <pre>
49 * <!-- START SNIPPET: example -->
50 *
51 * <!-- Example 1: simple example -->
52 * <s:updownselect
53 * list="#{'england':'England', 'america':'America', 'germany':'Germany'}"
54 * name="prioritisedFavouriteCountries"
55 * headerKey="-1"
56 * headerValue="--- Please Order Them Accordingly ---"
57 * emptyOption="true" />
58 *
59 * <!-- Example 2: more complex example -->
60 * <s:updownselect
61 * list="defaultFavouriteCartoonCharacters"
62 * name="prioritisedFavouriteCartoonCharacters"
63 * headerKey="-1"
64 * headerValue="--- Please Order ---"
65 * emptyOption="true"
66 * allowMoveUp="true"
67 * allowMoveDown="true"
68 * allowSelectAll="true"
69 * moveUpLabel="Move Up"
70 * moveDownLabel="Move Down"
71 * selectAllLabel="Select All" />
72 *
73 * <!-- END SNIPPET: example -->
74 * </pre>
75 *
76 * @version $Date: 2008-04-27 13:41:38 +0000 (Sun, 27 Apr 2008) $ $Id: UpDownSelect.java 651946 2008-04-27 13:41:38Z apetrelli $
77 *
78 * @s.tag name="updownselect" tld-body-content="JSP" tld-tag-class="org.apache.struts2.views.jsp.ui.UpDownSelectTag"
79 * description="Render a up down select element"
80 */
81 @StrutsTag(name="updownselect", tldTagClass="org.apache.struts2.views.jsp.ui.UpDownSelectTag",
82 description="Create a Select component with buttons to move the elements in the select component up and down")
83 public class UpDownSelect extends Select {
84
85 private static final Logger LOG = LoggerFactory.getLogger(UpDownSelect.class);
86
87
88 final public static String TEMPLATE = "updownselect";
89
90 protected String allowMoveUp;
91 protected String allowMoveDown;
92 protected String allowSelectAll;
93
94 protected String moveUpLabel;
95 protected String moveDownLabel;
96 protected String selectAllLabel;
97
98
99 public String getDefaultTemplate() {
100 return TEMPLATE;
101 }
102
103 public UpDownSelect(ValueStack stack, HttpServletRequest request, HttpServletResponse response) {
104 super(stack, request, response);
105 }
106
107 public void evaluateParams() {
108 super.evaluateParams();
109
110
111
112 if (size == null || size.trim().length() <= 0) {
113 addParameter("size", "5");
114 }
115 if (multiple == null || multiple.trim().length() <= 0) {
116 addParameter("multiple", Boolean.TRUE);
117 }
118
119
120
121 if (allowMoveUp != null) {
122 addParameter("allowMoveUp", findValue(allowMoveUp, Boolean.class));
123 }
124 if (allowMoveDown != null) {
125 addParameter("allowMoveDown", findValue(allowMoveDown, Boolean.class));
126 }
127 if (allowSelectAll != null) {
128 addParameter("allowSelectAll", findValue(allowSelectAll, Boolean.class));
129 }
130
131 if (moveUpLabel != null) {
132 addParameter("moveUpLabel", findString(moveUpLabel));
133 }
134 if (moveDownLabel != null) {
135 addParameter("moveDownLabel", findString(moveDownLabel));
136 }
137 if (selectAllLabel != null) {
138 addParameter("selectAllLabel", findString(selectAllLabel));
139 }
140
141
142
143
144 Form ancestorForm = (Form) findAncestor(Form.class);
145 if (ancestorForm != null) {
146
147
148 enableAncestorFormCustomOnsubmit();
149
150 Map m = (Map) ancestorForm.getParameters().get("updownselectIds");
151 if (m == null) {
152
153 m = new LinkedHashMap();
154 }
155 m.put(getParameters().get("id"), getParameters().get("headerKey"));
156 ancestorForm.getParameters().put("updownselectIds", m);
157 }
158 else {
159 LOG.warn("no ancestor form found for updownselect "+this+", therefore autoselect of all elements upon form submission will not work ");
160 }
161 }
162
163
164 public String getAllowMoveUp() {
165 return allowMoveUp;
166 }
167
168 @StrutsTagAttribute(description="Whether move up button should be displayed", type="Boolean", defaultValue="true")
169 public void setAllowMoveUp(String allowMoveUp) {
170 this.allowMoveUp = allowMoveUp;
171 }
172
173
174
175 public String getAllowMoveDown() {
176 return allowMoveDown;
177 }
178
179 @StrutsTagAttribute(description="Whether move down button should be displayed", type="Boolean", defaultValue="true")
180 public void setAllowMoveDown(String allowMoveDown) {
181 this.allowMoveDown = allowMoveDown;
182 }
183
184
185
186 public String getAllowSelectAll() {
187 return allowSelectAll;
188 }
189
190 @StrutsTagAttribute(description="Whether or not select all button should be displayed", type="Boolean", defaultValue="true")
191 public void setAllowSelectAll(String allowSelectAll) {
192 this.allowSelectAll = allowSelectAll;
193 }
194
195
196 public String getMoveUpLabel() {
197 return moveUpLabel;
198 }
199
200 @StrutsTagAttribute(description="Text to display on the move up button", defaultValue="^")
201 public void setMoveUpLabel(String moveUpLabel) {
202 this.moveUpLabel = moveUpLabel;
203 }
204
205
206
207 public String getMoveDownLabel() {
208 return moveDownLabel;
209 }
210
211 @StrutsTagAttribute(description="Text to display on the move down button", defaultValue="v")
212 public void setMoveDownLabel(String moveDownLabel) {
213 this.moveDownLabel = moveDownLabel;
214 }
215
216
217
218 public String getSelectAllLabel() {
219 return selectAllLabel;
220 }
221
222 @StrutsTagAttribute(description="Text to display on the select all button", defaultValue="*")
223 public void setSelectAllLabel(String selectAllLabel) {
224 this.selectAllLabel = selectAllLabel;
225 }
226 }