1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.commons.jelly.impl;
17
18 import org.apache.commons.jelly.DynaTagSupport;
19 import org.apache.commons.jelly.JellyTagException;
20 import org.apache.commons.jelly.XMLOutput;
21
22 import org.xml.sax.SAXException;
23 import org.xml.sax.helpers.AttributesImpl;
24
25 /***
26 * <p><code>StaticTag</code> represents a static XML element
27 * which echos itself to XMLOutput when it is invoked.</p>
28 *
29 * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
30 * @version $Revision: 1.19 $
31 */
32
33 public class StaticTag extends DynaTagSupport {
34
35 /*** The namespace URI */
36 private String uri;
37
38 /*** The qualified name */
39 private String qname;
40
41 /*** The local name */
42 private String localName;
43
44 /*** The XML Attributes */
45 private AttributesImpl attributes = new AttributesImpl();
46
47 public StaticTag() {
48 }
49
50 public StaticTag(String uri, String localName, String qname) {
51 this.uri = uri;
52 this.localName = localName;
53 this.qname = qname;
54 }
55
56 public String toString() {
57 return super.toString() + "[qname=" + qname + ";attributes=" + attributes + "]";
58 }
59
60
61
62 public void doTag(XMLOutput output) throws JellyTagException {
63 try {
64 output.startElement(uri, localName, qname, attributes);
65 invokeBody(output);
66 output.endElement(uri, localName, qname);
67 } catch (SAXException e) {
68 throw new JellyTagException(e);
69 }
70 }
71
72
73
74 public void setAttribute(String name, Object value) throws JellyTagException {
75
76
77
78 int index = attributes.getIndex("", name);
79 if (index >= 0) {
80 attributes.removeAttribute(index);
81 }
82
83 if (value != null) {
84 attributes.addAttribute("", name, name, "CDATA", value.toString());
85 }
86 }
87
88
89
90 public String getUri() {
91 return uri;
92 }
93
94 public void setUri(String uri) {
95 this.uri = uri;
96 }
97
98 public String getQName() {
99 return qname;
100 }
101
102 public void setQName(String qname) {
103 this.qname = qname;
104 int idx = qname.indexOf(':');
105 if (idx >= 0) {
106 this.localName = qname.substring(idx + 1);
107 }
108 else {
109 this.localName = qname;
110 }
111 }
112
113 public String getLocalName() {
114 return localName;
115 }
116
117 public void setLocalName(String localName) {
118 this.localName = localName;
119
120 if (qname == null || !qname.endsWith(localName)) {
121 localName = qname;
122 }
123 }
124 }