KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > commons > jelly > tags > core > GetStaticTag


1 /*
2  * Copyright 2002,2004 The Apache Software Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package org.apache.commons.jelly.tags.core;
17
18 import org.apache.commons.jelly.JellyContext;
19 import org.apache.commons.jelly.JellyTagException;
20 import org.apache.commons.jelly.MissingAttributeException;
21 import org.apache.commons.jelly.TagSupport;
22 import org.apache.commons.jelly.XMLOutput;
23 import org.apache.commons.jelly.util.ClassLoaderUtils;
24
25
26 /**
27  * A tag which can retrieve the value of a static field of a given class.
28  * The following attributes are required:<br />
29  * <ul>
30  * <li>var - The variable to which to assign the resulting value.</li>
31  * <li>field - The name of the static field to retrieve.</li>
32  * <li>className - The name of the class containing the static field.</li>
33  * </ul>
34  *
35  * Example usage:
36  * <pre>
37  * &lt;j:getStatic var="closeOperation" className="javax.swing.JFrame"
38  * field="EXIT_ON_CLOSE"/&gt;
39  * </pre>
40  *
41  * @version $Revision: 155420 $
42  */

43
44 public class GetStaticTag extends TagSupport {
45
46     /** The variable to which to assign the resulting value. */
47     private String JavaDoc var;
48
49     /** The name of the static field to retrieve. */
50     private String JavaDoc field;
51
52     /** The name of the class containing the static field. */
53     private String JavaDoc className;
54
55
56     /**
57      * Sets the name of the variable exported by this tag.
58      *
59      * @param var The variable name.
60      */

61
62     public void setVar(String JavaDoc var) {
63         this.var = var;
64     }
65
66
67     /**
68      * Sets the name of the field to retrieve.
69      *
70      * @param method The method name
71      */

72
73     public void setField(String JavaDoc field) {
74         this.field = field;
75     }
76
77
78     /**
79      * Sets the fully qualified name of the class containing the static field.
80      *
81      * @param className The name of the class.
82      */

83
84     public void setClassName(String JavaDoc className) {
85         this.className = className;
86     }
87
88
89     // Tag interface
90
//------------------------------------------------------------------------
91

92     public void doTag(XMLOutput output) throws JellyTagException {
93         String JavaDoc message = null;
94
95         if(var == null)
96             message = "var";
97         else if(field == null)
98             message = "field";
99         else if(className == null)
100             message = "className";
101
102         if(message != null)
103             throw new MissingAttributeException(message);
104
105         try {
106             Class JavaDoc type = ClassLoaderUtils.getClassLoader(getClass()).loadClass(className);
107             Object JavaDoc result = type.getField(field).get(null);
108             JellyContext context = getContext();
109
110             context.setVariable(var, result);
111
112         } catch(Throwable JavaDoc t) {
113             throw
114                 new JellyTagException("Could not access " + className + "." +
115                                       var + ". Original exception message: " +
116                                       t.getMessage(), t);
117         }
118     }
119
120 }
121
122
123 /* Emacs configuration
124  * Local variables: **
125  * mode: java **
126  * c-basic-offset: 4 **
127  * indent-tabs-mode: nil **
128  * End: **
129  */

130
Popular Tags