package net.sf.saxon.om; import java.io.Serializable; /** * A qualified name. */ @SuppressWarnings("serial") public class QualifiedName implements Serializable { /** * Creates a {@link QualifiedName} instance. * @param prefix a prefix. * @param localName a local name. * @param namespace a namespace. */ public QualifiedName(String prefix, String localName, String namespace) { this(prefix, new QualifiedName(localName, namespace), 0); } /** * Creates a {@link QualifiedName} instance. * @param prefix a prefix. * @param localName a local name. * @param namespace a namespace. * @param id an associated identifier. */ public QualifiedName( String prefix, String localName, String namespace, int id) { this(prefix, new QualifiedName(localName, namespace), id); } /** * Creates a {@link QualifiedName} instance. * @param prefix a prefix. * @param name an expanded name. */ public QualifiedName(String prefix, QualifiedName name) { this(prefix, name, 0); } /** * Creates a {@link QualifiedName} instance. * @param prefix a prefix. * @param name an expanded name. * @param id an associated identifier. */ public QualifiedName(String prefix, QualifiedName name, int id) { this.prefix = prefix; this.localName = name.localName; this.namespace = name.namespace; this.expandedName = name.expandedName; this.id = id; } /** * Creates a {@link QualifiedName} instance. * @param localName a local name. * @param namespace an namespace. */ public QualifiedName(String localName, String namespace) { this(localName, namespace, 0); } /** * Creates a {@link QualifiedName} instance. * @param localName a local name. * @param namespace an namespace. * @param id an associated identifier. */ public QualifiedName(String localName, String namespace, int id) { this.prefix = ""; this.localName = localName; this.namespace = namespace; this.expandedName = this; this.id = 0; } /** * Gets a prefix. * @return a prefix. */ public final String getPrefix() { return prefix; } /** * Gets a local name. * @return a local name. */ public final String getLocalName() { return localName; } /** * Gets a namespace. * @return a namespace. */ public final String getNamespace() { return namespace; } /** * Gets an expanded name. * @return an expanded name. */ public final QualifiedName getExpandedName() { return expandedName; } /** * Gets an associated identifier. * @return an associated identifier. */ public final int getId() { return id; } /** * Gets a display name. * @return */ public final String getQName() { if (qname == null) { if (prefix.length() == 0) { qname = localName; } else { qname = prefix + ":" + localName; } } return qname; } /** * Gets a hash code. */ @Override public int hashCode() { return localName.hashCode() ^ Integer.rotateLeft(namespace.hashCode(), 13) ^ Integer.rotateLeft(prefix.hashCode(), 26); } /** * Compares qualified name with other instance. */ @Override public final boolean equals(Object other) { if (other instanceof QualifiedName) { QualifiedName that = (QualifiedName)other; return equal(this, that); } return false; } /** * Compares two expanded names. * @param first a first instance. * @param second a second instance. * @return true if instances are equal, and false otherwise. */ public static boolean equal(QualifiedName first, QualifiedName second) { if (first == second) { return true; } return first.localName.equals(second.localName) && first.namespace.equals(second.namespace) && first.prefix.equals(second.prefix); } /** * A prefix. */ private final String prefix; /** * A local name. */ private final String localName; /** * A namespace. */ private final String namespace; /** * An expanded name. */ private final QualifiedName expandedName; /** * An associated identifier. */ private final int id; /** * A display name. */ private transient String qname; }