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_PARAMS;
21 import static org.seasar.cubby.CubbyConstants.ATTR_VALIDATION_FAIL;
22
23 import java.util.Collection;
24 import java.util.Map;
25 import java.util.Map.Entry;
26
27 import javax.servlet.jsp.JspContext;
28 import javax.servlet.jsp.tagext.SimpleTag;
29 import javax.servlet.jsp.tagext.SimpleTagSupport;
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.class.cast(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
91
92 public static Object[] multipleFormValues(final JspContext context,
93 final String[] outputValues, final String name) {
94 return multipleFormValues(context, outputValues, name, null);
95 }
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110 public static Object[] multipleFormValues(final JspContext context,
111 final String[] outputValues, final String name,
112 final String checkedValue) {
113 final Object[] values;
114 if (isValidationFail(context)) {
115 values = paramValues(context, name);
116 } else {
117 if (checkedValue != null) {
118 values = new Object[] { checkedValue };
119 } else if (outputValues == null) {
120 values = paramValues(context, name);
121 } else {
122 values = outputValues;
123 }
124 }
125 return values;
126 }
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143 public static Object formValue(final JspContext context,
144 final String[] outputValues, final String name,
145 final Integer index, final Object specifiedValue) {
146 final Object value;
147
148 if (isValidationFail(context)) {
149 if (specifiedValue == null) {
150 final Object[] values = paramValues(context, name);
151 value = value(values, index);
152 } else {
153 final Object[] values = paramValues(context, name);
154 if (values.length == 0) {
155 value = specifiedValue;
156 } else {
157 value = value(values, index);
158 }
159 }
160 } else {
161 if (specifiedValue != null) {
162 value = specifiedValue;
163 } else if (outputValues == null) {
164 final Object[] values = paramValues(context, name);
165 value = value(values, index);
166 } else {
167 value = value(outputValues, index);
168 }
169 }
170
171 return value;
172 }
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187 private static Object value(final Object[] values, final Integer index) {
188 final Object value;
189 if (values == null) {
190 value = "";
191 } else {
192 if (index == null) {
193 value = getElement(values, 0);
194 } else {
195 value = getElement(values, index);
196 }
197 }
198 return value;
199 }
200
201
202
203
204
205
206
207
208
209
210
211
212
213 private static Object getElement(final Object[] values, final Integer index) {
214 final Object value;
215 if (values.length <= index) {
216 value = "";
217 } else {
218 value = values[index];
219 }
220 return value;
221 }
222
223
224
225
226
227
228
229
230
231
232 private static boolean isValidationFail(final JspContext context) {
233 return TRUE.equals(context.getAttribute(ATTR_VALIDATION_FAIL,
234 REQUEST_SCOPE));
235 }
236
237 public static final Object REMOVE_ATTRIBUTE = new Object();
238
239
240
241
242
243
244
245
246
247
248
249 public static String toAttr(final Map<String, Object> map) {
250 final StringBuilder builder = new StringBuilder();
251 for (final Entry<String, Object> entry : map.entrySet()) {
252 final String key = entry.getKey();
253 if (entry.getValue() == REMOVE_ATTRIBUTE) {
254 continue;
255 }
256 builder.append(key);
257 builder.append("=\"");
258 builder.append(CubbyUtils.escapeHtml(entry.getValue()));
259 builder.append("\" ");
260 }
261 return builder.toString();
262 }
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278 public static boolean contains(final Object obj, final String str) {
279 if (obj instanceof Collection) {
280 return ((Collection<?>) obj).contains(str);
281 } else if (obj.getClass().isArray()) {
282 for (final Object value : (Object[]) obj) {
283 if (equalsAsString(value, str)) {
284 return true;
285 }
286 }
287 return false;
288 } else {
289 return equalsAsString(obj, str);
290 }
291 }
292
293
294
295
296
297
298
299
300
301
302
303 private static boolean equalsAsString(final Object obj1, final Object obj2) {
304 if (obj1 == obj2) {
305 return true;
306 } else if (obj1 == null) {
307 return false;
308 } else {
309 return obj1.toString().equals(obj2.toString());
310 }
311 }
312
313
314
315
316
317
318
319
320
321 public static void addClassName(final Map<String, Object> dyn,
322 final String className) {
323 String classValue = (String) dyn.get("class");
324 if (StringUtil.isEmpty(classValue)) {
325 classValue = className;
326 } else {
327 classValue = classValue + " " + className;
328 }
329 dyn.put("class", classValue);
330 }
331
332
333
334
335
336
337
338
339
340
341 public static String[] getOutputValues(final SimpleTag tag,
342 final String name) {
343 final FormTag formTag = (FormTag) SimpleTagSupport
344 .findAncestorWithClass(tag, FormTag.class);
345 if (formTag == null) {
346 return null;
347 }
348 final String[] outputValues = formTag.getValues(name);
349 return outputValues;
350 }
351
352 }