1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package javax.servlet.jsp.tagext;
19
20 import javax.servlet.jsp.tagext.TagInfo;
21 import javax.servlet.jsp.tagext.TagFileInfo;
22
23 /**
24 * Translation-time information associated with a taglib directive, and its
25 * underlying TLD file.
26 *
27 * Most of the information is directly from the TLD, except for
28 * the prefix and the uri values used in the taglib directive
29 *
30 *
31 */
32
33 abstract public class TagLibraryInfo {
34
35 /**
36 * Constructor.
37 *
38 * This will invoke the constructors for TagInfo, and TagAttributeInfo
39 * after parsing the TLD file.
40 *
41 * @param prefix the prefix actually used by the taglib directive
42 * @param uri the URI actually used by the taglib directive
43 */
44 protected TagLibraryInfo(String prefix, String uri) {
45 this.prefix = prefix;
46 this.uri = uri;
47 }
48
49 // ==== methods accessing taglib information =======
50
51 /**
52 * The value of the uri attribute from the taglib directive for
53 * this library.
54 *
55 * @return the value of the uri attribute
56 */
57
58 public String getURI() {
59 return uri;
60 }
61
62 /**
63 * The prefix assigned to this taglib from the taglib directive
64 *
65 * @return the prefix assigned to this taglib from the taglib directive
66 */
67
68 public String getPrefixString() {
69 return prefix;
70 }
71
72 // ==== methods using the TLD data =======
73
74 /**
75 * The preferred short name (prefix) as indicated in the TLD.
76 * This may be used by authoring tools as the preferred prefix
77 * to use when creating an taglib directive for this library.
78 *
79 * @return the preferred short name for the library
80 */
81 public String getShortName() {
82 return shortname;
83 }
84
85 /**
86 * The "reliable" URN indicated in the TLD (the uri element).
87 * This may be used by authoring tools as a global identifier
88 * to use when creating a taglib directive for this library.
89 *
90 * @return a reliable URN to a TLD like this
91 */
92 public String getReliableURN() {
93 return urn;
94 }
95
96
97 /**
98 * Information (documentation) for this TLD.
99 *
100 * @return the info string for this tag lib
101 */
102
103 public String getInfoString() {
104 return info;
105 }
106
107
108 /**
109 * A string describing the required version of the JSP container.
110 *
111 * @return the (minimal) required version of the JSP container.
112 * @see javax.servlet.jsp.JspEngineInfo
113 */
114
115 public String getRequiredVersion() {
116 return jspversion;
117 }
118
119
120 /**
121 * An array describing the tags that are defined in this tag library.
122 *
123 * @return the TagInfo objects corresponding to the tags defined by this
124 * tag library, or a zero length array if this tag library
125 * defines no tags
126 */
127 public TagInfo[] getTags() {
128 return tags;
129 }
130
131 /**
132 * An array describing the tag files that are defined in this tag library.
133 *
134 * @return the TagFileInfo objects corresponding to the tag files defined
135 * by this tag library, or a zero length array if this
136 * tag library defines no tags files
137 * @since 2.0
138 */
139 public TagFileInfo[] getTagFiles() {
140 return tagFiles;
141 }
142
143
144 /**
145 * Get the TagInfo for a given tag name, looking through all the
146 * tags in this tag library.
147 *
148 * @param shortname The short name (no prefix) of the tag
149 * @return the TagInfo for the tag with the specified short name, or
150 * null if no such tag is found
151 */
152
153 public TagInfo getTag(String shortname) {
154 TagInfo tags[] = getTags();
155
156 if (tags == null || tags.length == 0) {
157 return null;
158 }
159
160 for (int i=0; i < tags.length; i++) {
161 if (tags[i].getTagName().equals(shortname)) {
162 return tags[i];
163 }
164 }
165 return null;
166 }
167
168 /**
169 * Get the TagFileInfo for a given tag name, looking through all the
170 * tag files in this tag library.
171 *
172 * @param shortname The short name (no prefix) of the tag
173 * @return the TagFileInfo for the specified Tag file, or null
174 * if no Tag file is found
175 * @since 2.0
176 */
177 public TagFileInfo getTagFile(String shortname) {
178 TagFileInfo tagFiles[] = getTagFiles();
179
180 if (tagFiles == null || tagFiles.length == 0) {
181 return null;
182 }
183
184 for (int i=0; i < tagFiles.length; i++) {
185 if (tagFiles[i].getName().equals(shortname)) {
186 return tagFiles[i];
187 }
188 }
189 return null;
190 }
191
192 /**
193 * An array describing the functions that are defined in this tag library.
194 *
195 * @return the functions defined in this tag library, or a zero
196 * length array if the tag library defines no functions.
197 * @since 2.0
198 */
199 public FunctionInfo[] getFunctions() {
200 return functions;
201 }
202
203
204 /**
205 * Get the FunctionInfo for a given function name, looking through all the
206 * functions in this tag library.
207 *
208 * @param name The name (no prefix) of the function
209 * @return the FunctionInfo for the function with the given name, or null
210 * if no such function exists
211 * @since 2.0
212 */
213 public FunctionInfo getFunction(String name) {
214
215 if (functions == null || functions.length == 0) {
216 System.err.println("No functions");
217 return null;
218 }
219
220 for (int i=0; i < functions.length; i++) {
221 if (functions[i].getName().equals(name)) {
222 return functions[i];
223 }
224 }
225 return null;
226 }
227
228
229 /**
230 * Returns an array of TagLibraryInfo objects representing the entire set
231 * of tag libraries (including this TagLibraryInfo) imported by taglib
232 * directives in the translation unit that references this TagLibraryInfo.
233 * If a tag library is imported more than once and bound to different prefices,
234 * only the TagLibraryInfo bound to the first prefix must be included
235 * in the returned array.
236 *
237 * @return Array of TagLibraryInfo objects representing the entire set
238 * of tag libraries (including this TagLibraryInfo) imported by taglib
239 * directives in the translation unit that references this TagLibraryInfo.
240 * @since 2.1
241 */
242 public abstract javax.servlet.jsp.tagext.TagLibraryInfo[] getTagLibraryInfos();
243
244
245 // Protected fields
246
247 /**
248 * The prefix assigned to this taglib from the taglib directive.
249 */
250 protected String prefix;
251
252 /**
253 * The value of the uri attribute from the taglib directive for
254 * this library.
255 */
256 protected String uri;
257
258 /**
259 * An array describing the tags that are defined in this tag library.
260 */
261 protected TagInfo[] tags;
262
263 /**
264 * An array describing the tag files that are defined in this tag library.
265 *
266 * @since 2.0
267 */
268 protected TagFileInfo[] tagFiles;
269
270 /**
271 * An array describing the functions that are defined in this tag library.
272 *
273 * @since 2.0
274 */
275 protected FunctionInfo[] functions;
276
277 // Tag Library Data
278
279 /**
280 * The version of the tag library.
281 */
282 protected String tlibversion; // required
283
284 /**
285 * The version of the JSP specification this tag library is written to.
286 */
287 protected String jspversion; // required
288
289 /**
290 * The preferred short name (prefix) as indicated in the TLD.
291 */
292 protected String shortname; // required
293
294 /**
295 * The "reliable" URN indicated in the TLD.
296 */
297 protected String urn; // required
298
299 /**
300 * Information (documentation) for this TLD.
301 */
302 protected String info; // optional
303 }