1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.commons.jelly.tags.define;
17
18 import org.apache.commons.jelly.JellyTagException;
19 import org.apache.commons.jelly.TagSupport;
20 import org.apache.commons.jelly.XMLOutput;
21 import org.apache.commons.jelly.impl.DynamicTagLibrary;
22
23 /***
24 * The <taglib> tag is used to define a new tag library
25 * using a Jelly script. The tag library is identified by its
26 * {@link #getURI() URI}.
27 *
28 * The tags for a taglib are declared using the {@link TagTag}.
29 *
30 * You can 'inherit' tags from a previously defined taglib, as well,
31 * allowing runtime extension of tag libraries
32 *
33 * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
34 * @version $Revision: 155420 $
35 */
36 public class TaglibTag extends TagSupport {
37
38 /*** The namespace URI */
39 private String uri;
40 /*** The new tags being added */
41 private DynamicTagLibrary tagLibrary;
42 /*** Whether or not inheritence is enabled */
43 private boolean inherit = true;
44
45 public TaglibTag() {
46 }
47
48 public TaglibTag(String uri) {
49 this.uri = uri;
50 }
51
52
53
54 public void doTag(XMLOutput output) throws JellyTagException {
55 String uri = getUri();
56 tagLibrary = new DynamicTagLibrary( uri );
57
58
59 if ( isInherit() ) {
60 tagLibrary.setParent( context.getTagLibrary( uri ) );
61 }
62 context.registerTagLibrary( uri, tagLibrary );
63
64 invokeBody(output);
65
66 tagLibrary = null;
67 }
68
69
70
71 public String getUri() {
72 return uri;
73 }
74
75 /***
76 * Sets the namespace URI to register this new dynamic tag library with
77 */
78 public void setUri(String uri) {
79 this.uri = uri;
80 }
81
82 public DynamicTagLibrary getTagLibrary() {
83 return tagLibrary;
84 }
85
86 /***
87 * Returns the inherit.
88 * @return boolean
89 */
90 public boolean isInherit() {
91 return inherit;
92 }
93
94 /***
95 * Sets whether this dynamic tag should inherit from the current existing tag library
96 * of the same URI. This feature is enabled by default so that tags can easily be
97 * some tags can be overridden in an existing library, such as when making Mock Tags.
98 *
99 * You can disable this option if you want to disable any tags in the base library,
100 * turning them into just normal static XML.
101 *
102 * @param inherit The inherit to set
103 */
104 public void setInherit(boolean inherit) {
105 this.inherit = inherit;
106 }
107
108 }