1
2
3
4
5
6
7
8
9
10 package org.dom4j.tree;
11
12 import java.io.IOException;
13 import java.io.Writer;
14 import java.util.Iterator;
15 import java.util.List;
16
17 import org.dom4j.DocumentType;
18 import org.dom4j.Element;
19 import org.dom4j.Visitor;
20
21 /*** <p><code>AbstractDocumentType</code> is an abstract base class for
22 * tree implementors to use for implementation inheritence.</p>
23 *
24 * @author <a href="mailto:james.strachan@metastuff.com">James Strachan</a>
25 * @version $Revision: 1.15 $
26 */
27 public abstract class AbstractDocumentType extends AbstractNode implements DocumentType {
28
29 public AbstractDocumentType() {
30 }
31
32 public short getNodeType() {
33 return DOCUMENT_TYPE_NODE;
34 }
35
36 public String getName() {
37 return getElementName();
38 }
39
40 public void setName(String name) {
41 setElementName(name);
42 }
43
44 public String getPath(Element context) {
45
46 return "";
47 }
48
49 public String getUniquePath(Element context) {
50
51 return "";
52 }
53
54 /*** Returns the text format of the declarations if applicable, or the empty String */
55 public String getText() {
56 List list = getInternalDeclarations();
57 if ( list != null && list.size() > 0 ) {
58 StringBuffer buffer = new StringBuffer();
59 Iterator iter = list.iterator();
60 if ( iter.hasNext() ) {
61 Object decl = iter.next();
62 buffer.append( decl.toString() );
63 while ( iter.hasNext() ) {
64 decl = iter.next();
65 buffer.append( "\n" );
66 buffer.append( decl.toString() );
67 }
68 }
69 return buffer.toString();
70 }
71 return "";
72 }
73 public String toString() {
74 return super.toString() + " [DocumentType: " + asXML() + "]";
75 }
76
77 public String asXML() {
78 StringBuffer buffer = new StringBuffer( "<!DOCTYPE " );
79 buffer.append( getElementName() );
80
81 boolean hasPublicID = false;
82 String publicID = getPublicID();
83
84 if ( publicID != null && publicID.length() > 0 ) {
85 buffer.append( " PUBLIC \"" );
86 buffer.append( publicID );
87 buffer.append( "\"" );
88 hasPublicID = true;
89 }
90
91 String systemID = getSystemID();
92 if ( systemID != null && systemID.length() > 0 ) {
93 if (!hasPublicID) {
94 buffer.append(" SYSTEM");
95 }
96 buffer.append( " \"" );
97 buffer.append( systemID );
98 buffer.append( "\"" );
99 }
100 buffer.append(">");
101 return buffer.toString();
102 }
103
104 public void write(Writer writer) throws IOException {
105 writer.write( "<!DOCTYPE " );
106 writer.write( getElementName() );
107
108 boolean hasPublicID = false;
109 String publicID = getPublicID();
110
111 if ( publicID != null && publicID.length() > 0 ) {
112 writer.write( " PUBLIC \"" );
113 writer.write( publicID );
114 writer.write( "\"" );
115 hasPublicID = true;
116 }
117
118 String systemID = getSystemID();
119 if ( systemID != null && systemID.length() > 0 ) {
120 if (!hasPublicID) {
121 writer.write(" SYSTEM");
122 }
123 writer.write( " \"" );
124 writer.write( systemID );
125 writer.write( "\"" );
126 }
127 List list = getInternalDeclarations();
128 if ( list != null && list.size() > 0 ) {
129 writer.write( " [" );
130 for ( Iterator iter = list.iterator(); iter.hasNext(); ) {
131 Object decl = iter.next();
132 writer.write( "\n " );
133 writer.write( decl.toString() );
134 }
135 writer.write( "\n]" );
136 }
137 writer.write(">");
138 }
139
140 public void accept(Visitor visitor) {
141 visitor.visit(this);
142 }
143 }
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193