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