1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.struts.taglib.logic;
22
23 import org.apache.struts.taglib.TagUtils;
24
25 import javax.servlet.jsp.JspException;
26
27 import java.lang.reflect.Array;
28
29 import java.util.Collection;
30 import java.util.Map;
31
32 /**
33 * Evalute the nested body content of this tag if the specified value is empty
34 * for this request.
35 *
36 * @version $Rev: 471754 $ $Date: 2004-10-16 12:38:42 -0400 (Sat, 16 Oct 2004)
37 * $
38 * @since Struts 1.1
39 */
40 public class EmptyTag extends ConditionalTagBase {
41
42
43 /**
44 * Evaluate the condition that is being tested by this particular tag, and
45 * return <code>true</code> if the nested body content of this tag should
46 * be evaluated, or <code>false</code> if it should be skipped. This
47 * method must be implemented by concrete subclasses.
48 *
49 * @throws JspException if a JSP exception occurs
50 */
51 protected boolean condition()
52 throws JspException {
53 return (condition(true));
54 }
55
56 /**
57 * Evaluate the condition that is being tested by this particular tag, and
58 * return <code>true</code> if the nested body content of this tag should
59 * be evaluated, or <code>false</code> if it should be skipped. This
60 * method must be implemented by concrete subclasses.
61 *
62 * @param desired Desired outcome for a true result
63 * @throws JspException if a JSP exception occurs
64 */
65 protected boolean condition(boolean desired)
66 throws JspException {
67 if (this.name == null) {
68 JspException e =
69 new JspException(messages.getMessage("empty.noNameAttribute"));
70
71 TagUtils.getInstance().saveException(pageContext, e);
72 throw e;
73 }
74
75 Object value = null;
76
77 if (this.property == null) {
78 value = TagUtils.getInstance().lookup(pageContext, name, scope);
79 } else {
80 value =
81 TagUtils.getInstance().lookup(pageContext, name, property, scope);
82 }
83
84 boolean empty = true;
85
86 if (value == null) {
87 empty = true;
88 } else if (value instanceof String) {
89 String strValue = (String) value;
90
91 empty = (strValue.length() < 1);
92 } else if (value instanceof Collection) {
93 Collection collValue = (Collection) value;
94
95 empty = collValue.isEmpty();
96 } else if (value instanceof Map) {
97 Map mapValue = (Map) value;
98
99 empty = mapValue.isEmpty();
100 } else if (value.getClass().isArray()) {
101 empty = Array.getLength(value) == 0;
102 } else {
103 empty = false;
104 }
105
106 return (empty == desired);
107 }
108 }