1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.tags;
17
18 import static java.lang.Boolean.TRUE;
19 import static javax.servlet.jsp.PageContext.REQUEST_SCOPE;
20 import static org.seasar.cubby.CubbyConstants.ATTR_OUTPUT_VALUES;
21 import static org.seasar.cubby.CubbyConstants.ATTR_PARAMS;
22 import static org.seasar.cubby.CubbyConstants.ATTR_VALIDATION_FAIL;
23
24 import java.util.Collection;
25 import java.util.Map;
26 import java.util.Map.Entry;
27
28 import javax.servlet.jsp.JspContext;
29 import javax.servlet.jsp.PageContext;
30
31 import org.seasar.cubby.CubbyConstants;
32 import org.seasar.cubby.action.ActionErrors;
33 import org.seasar.cubby.util.CubbyUtils;
34 import org.seasar.framework.util.StringUtil;
35
36
37
38
39
40
41
42 class TagUtils {
43
44
45 private static final String ATTR_ERRORS = "errors";
46
47
48
49
50
51
52
53
54 public static ActionErrors errors(final JspContext context) {
55 return (ActionErrors) context.getAttribute(ATTR_ERRORS, REQUEST_SCOPE);
56 }
57
58
59
60
61
62
63
64
65
66
67 @SuppressWarnings("unchecked")
68 private static Object[] paramValues(final JspContext context,
69 final String name) {
70 final Map<String, Object[]> valuesMap = (Map<String, Object[]>) context
71 .getAttribute(ATTR_PARAMS, REQUEST_SCOPE);
72 final Object[] values;
73 if (valuesMap == null || !valuesMap.containsKey(name)) {
74 values = new Object[0];
75 } else {
76 values = valuesMap.get(name);
77 }
78 return values;
79 }
80
81
82
83
84
85
86
87
88
89
90 private static Object[] formValues(final Map<String, String[]> valuesMap,
91 final String name) {
92 final Object[] values;
93 if (valuesMap == null || !valuesMap.containsKey(name)) {
94 values = new Object[0];
95 } else {
96 values = valuesMap.get(name);
97 }
98 return values;
99 }
100
101
102
103
104
105
106
107
108
109
110
111
112 public static Object[] multipleFormValues(final JspContext context,
113 final Map<String, String[]> outputValuesMap, final String name) {
114 return multipleFormValues(context, outputValuesMap, name, null);
115 }
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130 public static Object[] multipleFormValues(final JspContext context,
131 final Map<String, String[]> outputValuesMap, final String name,
132 final String checkedValue) {
133 final Object[] values;
134 if (isValidationFail(context)) {
135 values = paramValues(context, name);
136 } else {
137 if (checkedValue != null) {
138 values = new Object[] { checkedValue };
139 } else {
140 values = formValues(outputValuesMap, name);
141 }
142 }
143 return values;
144 }
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161 public static Object formValue(final JspContext context,
162 final Map<String, String[]> outputValuesMap, final String name,
163 final Integer index, final Object specifiedValue) {
164 final Object value;
165
166 if (isValidationFail(context)) {
167 final Object[] values = paramValues(context, name);
168 value = value(values, index);
169 } else {
170 if (specifiedValue == null) {
171 final Object[] values = formValues(outputValuesMap, name);
172 value = value(values, index);
173 } else {
174 value = specifiedValue;
175 }
176 }
177
178 return value;
179 }
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194 private static Object value(final Object[] values, final Integer index) {
195 final Object value;
196 if (values == null) {
197 value = "";
198 } else {
199 if (index == null) {
200 value = getElement(values, 0);
201 } else {
202 value = getElement(values, index);
203 }
204 }
205 return value;
206 }
207
208
209
210
211
212
213
214
215
216
217
218
219
220 private static Object getElement(final Object[] values, final Integer index) {
221 final Object value;
222 if (values.length <= index) {
223 value = "";
224 } else {
225 value = values[index];
226 }
227 return value;
228 }
229
230
231
232
233
234
235
236
237
238
239 private static boolean isValidationFail(final JspContext context) {
240 return TRUE.equals(context.getAttribute(ATTR_VALIDATION_FAIL,
241 REQUEST_SCOPE));
242 }
243
244
245
246
247
248
249
250
251 @SuppressWarnings("unchecked")
252 public static Map<String, String[]> outputValues(final JspContext context) {
253 final Map<String, String[]> outputValues = (Map<String, String[]>) context
254 .getAttribute(ATTR_OUTPUT_VALUES, PageContext.PAGE_SCOPE);
255 return outputValues;
256 }
257
258
259
260
261
262
263
264
265 public static String toAttr(final Map<String, Object> map) {
266 final StringBuilder builder = new StringBuilder();
267 for (final Entry<String, Object> entry : map.entrySet()) {
268 final String key = entry.getKey();
269 if ("value".equals(key) || "checkedValue".equals(key)) {
270 continue;
271 }
272 builder.append(key);
273 builder.append("=\"");
274 builder.append(CubbyUtils.escapeHtml(entry.getValue()));
275 builder.append("\" ");
276 }
277 return builder.toString();
278 }
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294 public static boolean contains(final Object obj, final String str) {
295 if (obj instanceof Collection) {
296 return ((Collection<?>) obj).contains(str);
297 } else if (obj.getClass().isArray()) {
298 for (final Object value : (Object[]) obj) {
299 if (equalsAsString(value, str)) {
300 return true;
301 }
302 }
303 return false;
304 } else {
305 return equalsAsString(obj, str);
306 }
307 }
308
309
310
311
312
313
314
315
316
317
318
319 private static boolean equalsAsString(final Object obj1, final Object obj2) {
320 if (obj1 == obj2) {
321 return true;
322 } else if (obj1 == null) {
323 return false;
324 } else {
325 return obj1.toString().equals(obj2.toString());
326 }
327 }
328
329
330
331
332
333
334
335
336
337 public static void addClassName(final Map<String, Object> dyn,
338 final String className) {
339 String classValue = (String) dyn.get("class");
340 if (StringUtil.isEmpty(classValue)) {
341 classValue = className;
342 } else {
343 classValue = classValue + " " + className;
344 }
345 dyn.put("class", classValue);
346 }
347
348 }