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: {
71: namespaceURI = XMLConstants.NULL_NS_URI;
72: }
73: if (localPart == null)
74: {
75: throw new IllegalArgumentException();
76: }
77: if (prefix == null)
78: {
79: prefix = XMLConstants.DEFAULT_NS_PREFIX;
80: }
81: this.namespaceURI = namespaceURI;
82: this.localPart = localPart;
83: this.prefix = prefix;
84: }
85:
86: public QName(String localPart)
87: {
88: this(null, localPart, null);
89: }
90:
91: public String getNamespaceURI()
92: {
93: return namespaceURI;
94: }
95:
96: public String getLocalPart()
97: {
98: return localPart;
99: }
100:
101: public String getPrefix()
102: {
103: return prefix;
104: }
105:
106: public final boolean equals(Object obj)
107: {
108: if (obj instanceof QName)
109: {
110: QName qname = (QName) obj;
111: return qname.getLocalPart().equals(localPart) &&
112: qname.getNamespaceURI().equals(namespaceURI);
113: }
114: return false;
115: }
116:
117: public final int hashCode()
118: {
119: if (hashCode == -1)
120: hashCode = localPart.hashCode() ^ namespaceURI.hashCode();
121: return hashCode;
122: }
123:
124: public synchronized String toString()
125: {
126: if (qName == null)
127: {
128: StringBuffer buf = new StringBuffer();
129: if (namespaceURI.length() > 0)
130: {
131: buf.append('{');
132: buf.append(namespaceURI);
133: buf.append('}');
134: }
135: if (prefix.length() > 0)
136: {
137: buf.append(prefix);
138: buf.append(':');
139: }
140: buf.append(localPart);
141: qName = buf.toString();
142: }
143: return qName;
144: }
145:
146: public static QName valueOf(String qNameAsString)
147: {
148: String namespaceUri = "", prefix = null;
149: int start = qNameAsString.indexOf('{');
150: int end = qNameAsString.indexOf('}');
151: if (start != -1)
152: {
153: if (end < start)
154: {
155: throw new IllegalArgumentException(qNameAsString);
156: }
157: namespaceUri = qNameAsString.substring(start + 1, end);
158: qNameAsString = qNameAsString.substring(end + 1);
159: }
160: start = qNameAsString.indexOf(':');
161: if (start != -1)
162: {
163: prefix = qNameAsString.substring(0, start);
164: qNameAsString = qNameAsString.substring(start + 1);
165: }
166: return new QName(namespaceUri, qNameAsString, prefix);
167: }
168:
169: }