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