package javax.xml.namespace;
import javax.xml.XMLConstants;
public class QName
{
private final String namespaceURI;
private final String localPart;
private final String prefix;
private final String qName;
public QName(String namespaceURI, String localPart)
{
this(namespaceURI, localPart, null);
}
public QName(String namespaceURI, String localPart, String prefix)
{
if (namespaceURI == null)
{
namespaceURI = XMLConstants.NULL_NS_URI;
}
if (localPart == null)
{
throw new IllegalArgumentException();
}
if (prefix == null)
{
prefix = XMLConstants.DEFAULT_NS_PREFIX;
}
this.namespaceURI = namespaceURI;
this.localPart = localPart;
this.prefix = prefix;
StringBuffer buf = new StringBuffer();
if (namespaceURI != null && namespaceURI.length() > 0)
{
buf.append('{');
buf.append(namespaceURI);
buf.append('}');
}
if (prefix != null && prefix.length() > 0)
{
buf.append(prefix);
buf.append(':');
}
buf.append(localPart);
qName = buf.toString();
}
public QName(String localPart)
{
this(null, localPart, null);
}
public String getNamespaceURI()
{
return namespaceURI;
}
public String getLocalPart()
{
return localPart;
}
public String getPrefix()
{
return prefix;
}
public boolean equals(Object obj)
{
if (obj instanceof QName)
{
QName qname = (QName) obj;
return qname.getLocalPart().equals(localPart) &&
qname.getNamespaceURI().equals(namespaceURI);
}
return false;
}
public final int hashCode()
{
return qName.hashCode();
}
public String toString()
{
return qName;
}
public static QName valueOf(String qNameAsString)
{
String namespaceUri = "", prefix = null;
int start = qNameAsString.indexOf('{');
int end = qNameAsString.indexOf('}');
if (start != -1)
{
if (end < start)
{
throw new IllegalArgumentException(qNameAsString);
}
namespaceUri = qNameAsString.substring(start + 1, end);
qNameAsString = qNameAsString.substring(end + 1);
}
start = qNameAsString.indexOf(':');
if (start != -1)
{
prefix = qNameAsString.substring(0, start);
qNameAsString = qNameAsString.substring(start + 1);
}
return new QName(namespaceUri, qNameAsString, prefix);
}
}