1:
37:
38:
39: package ;
40:
41: import ;
42:
43: import ;
44:
45:
52: public class QName implements Serializable
53: {
54: private static final long serialVersionUID = 4418622981026545151L;
55:
56: private final String namespaceURI;
57: private final String localPart;
58: private final String prefix;
59: private transient String qName;
60: transient int hashCode = -1;
61:
62: public QName(String namespaceURI, String localPart)
63: {
64: this(namespaceURI, localPart, null);
65: }
66:
67: public QName(String namespaceURI, String localPart, String prefix)
68: {
69: if (namespaceURI == null)
70: namespaceURI = XMLConstants.NULL_NS_URI;
71: if (localPart == null)
72: throw new IllegalArgumentException();
73: if (prefix == null)
74: prefix = XMLConstants.DEFAULT_NS_PREFIX;
75: else
76: {
77: if (XMLConstants.XML_NS_PREFIX.equals(prefix))
78: namespaceURI = XMLConstants.XML_NS_URI;
79: else if (XMLConstants.XMLNS_ATTRIBUTE.equals(prefix))
80: namespaceURI = XMLConstants.XMLNS_ATTRIBUTE_NS_URI;
81: }
82: this.namespaceURI = namespaceURI;
83: this.localPart = localPart;
84: this.prefix = prefix;
85: }
86:
87: public QName(String localPart)
88: {
89: this(null, localPart, null);
90: }
91:
92: public String getNamespaceURI()
93: {
94: return namespaceURI;
95: }
96:
97: public String getLocalPart()
98: {
99: return localPart;
100: }
101:
102: public String getPrefix()
103: {
104: return prefix;
105: }
106:
107: public final boolean equals(Object obj)
108: {
109: if (obj instanceof QName)
110: {
111: QName qname = (QName) obj;
112: return qname.getLocalPart().equals(localPart) &&
113: qname.getNamespaceURI().equals(namespaceURI);
114: }
115: return false;
116: }
117:
118: public final int hashCode()
119: {
120: if (hashCode == -1)
121: hashCode = localPart.hashCode() ^ namespaceURI.hashCode();
122: return hashCode;
123: }
124:
125: public synchronized String toString()
126: {
127: if (qName == null)
128: {
129: StringBuffer buf = new StringBuffer();
130: if (namespaceURI.length() > 0)
131: {
132: buf.append('{');
133: buf.append(namespaceURI);
134: buf.append('}');
135: }
136: if (prefix.length() > 0)
137: {
138: buf.append(prefix);
139: buf.append(':');
140: }
141: buf.append(localPart);
142: qName = buf.toString();
143: }
144: return qName;
145: }
146:
147: public static QName valueOf(String qNameAsString)
148: {
149: String namespaceUri = "", prefix = null;
150: int start = qNameAsString.indexOf('{');
151: int end = qNameAsString.indexOf('}');
152: if (start != -1)
153: {
154: if (end < start)
155: throw new IllegalArgumentException(qNameAsString);
156: namespaceUri = qNameAsString.substring(start + 1, end);
157: qNameAsString = qNameAsString.substring(end + 1);
158: }
159: start = qNameAsString.indexOf(':');
160: if (start != -1)
161: {
162: prefix = qNameAsString.substring(0, start);
163: qNameAsString = qNameAsString.substring(start + 1);
164: }
165: return new QName(namespaceUri, qNameAsString, prefix);
166: }
167:
168: }