diff options
Diffstat (limited to 'src/share/classes/com/sun/org/apache/xerces/internal/xni/QName.java')
-rw-r--r-- | src/share/classes/com/sun/org/apache/xerces/internal/xni/QName.java | 243 |
1 files changed, 243 insertions, 0 deletions
diff --git a/src/share/classes/com/sun/org/apache/xerces/internal/xni/QName.java b/src/share/classes/com/sun/org/apache/xerces/internal/xni/QName.java new file mode 100644 index 0000000..5c47b7a --- /dev/null +++ b/src/share/classes/com/sun/org/apache/xerces/internal/xni/QName.java @@ -0,0 +1,243 @@ +/* + * reserved comment block + * DO NOT REMOVE OR ALTER! + */ +/* + * The Apache Software License, Version 1.1 + * + * + * Copyright (c) 2000-2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Xerces" and "Apache Software Foundation" must + * not be used to endorse or promote products derived from this + * software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * nor may "Apache" appear in their name, without prior written + * permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation and was + * originally based on software copyright (c) 1999, International + * Business Machines, Inc., http://www.apache.org. For more + * information on the Apache Software Foundation, please see + * <http://www.apache.org/>. + */ + +package com.sun.org.apache.xerces.internal.xni; + +/** + * A structure that holds the components of an XML Namespaces qualified + * name. + * <p> + * To be used correctly, the strings must be identical references for + * equal strings. Within the parser, these values are considered symbols + * and should always be retrieved from the <code>SymbolTable</code>. + * + * @see <a href="../../../../../xerces2/com/sun/org/apache/xerces/internal/util/SymbolTable.html">com.sun.org.apache.xerces.internal.util.SymbolTable</a> + * + * @author Andy Clark, IBM + * + * Better performance patch for the equals method by Daniel Petersson: refer to jaxp issue 61; + * == were used to compare strings + * @author Joe Wang, Oracle + * + * @version $Id: QName.java,v 1.6 2010/03/18 19:32:31 joehw Exp $ + */ +public class QName +implements Cloneable { + + + /** + * The qname prefix. For example, the prefix for the qname "a:foo" + * is "a". + */ + public String prefix; + + /** + * The qname localpart. For example, the localpart for the qname "a:foo" + * is "foo". + */ + public String localpart; + + /** + * The qname rawname. For example, the rawname for the qname "a:foo" + * is "a:foo". + */ + public String rawname; + + /** + * The URI to which the qname prefix is bound. This binding must be + * performed by a XML Namespaces aware processor. + */ + public String uri; + + // + // Constructors + // + + /** Default constructor. */ + public QName() { + clear(); + } // <init>() + + /** Constructs a QName with the specified values. */ + public QName(String prefix, String localpart, String rawname, String uri) { + setValues(prefix, localpart, rawname, uri); + } // <init>(String,String,String,String) + + /** Constructs a copy of the specified QName. */ + public QName(QName qname) { + setValues(qname); + } // <init>(QName) + + // + // Public methods + // + + /** + * Convenience method to set the values of the qname components. + * + * @param QName The qualified name to be copied. + */ + public void setValues(QName qname) { + prefix = qname.prefix; + localpart = qname.localpart; + rawname = qname.rawname; + uri = qname.uri; + } // setValues(QName) + + /** + * Convenience method to set the values of the qname components. + * + * @param prefix The qname prefix. (e.g. "a") + * @param localpart The qname localpart. (e.g. "foo") + * @param rawname The qname rawname. (e.g. "a:foo") + * @param uri The URI binding. (e.g. "http://foo.com/mybinding") + */ + public void setValues(String prefix, String localpart, String rawname, + String uri) { + this.prefix = prefix; + this.localpart = localpart; + this.rawname = rawname; + this.uri = uri; + } // setValues(String,String,String,String) + + /** Clears the values of the qname components. */ + public void clear() { + prefix = null; + localpart = null; + rawname = null; + uri = null; + } // clear() + + // + // Cloneable methods + // + + /** Returns a clone of this object. */ + public Object clone() { + return new QName(this); + } // clone():Object + + // + // Object methods + // + + /** Returns the hashcode for this object. */ + public int hashCode() { + if (uri != null) { + return uri.hashCode() + + ((localpart != null) ? localpart.hashCode() : 0); + } + return (rawname != null) ? rawname.hashCode() : 0; + } // hashCode():int + + /** Returns true if the two objects are equal. */ + public boolean equals(Object object) { + if (object == this) { + return true; + } + + if (object != null && object instanceof QName) { + QName qname = (QName)object; + if (qname.uri != null) { + return qname.localpart.equals(localpart) && qname.uri.equals(uri); + } + else if (uri == null) { + return rawname.equals(qname.rawname); + } + // fall through and return not equal + } + return false; + } // equals(Object):boolean + + /** Returns a string representation of this object. */ + public String toString() { + + StringBuffer str = new StringBuffer(); + boolean comma = false; + if (prefix != null) { + str.append("prefix=\""+prefix+'"'); + comma = true; + } + if (localpart != null) { + if (comma) { + str.append(','); + } + str.append("localpart=\""+localpart+'"'); + comma = true; + } + if (rawname != null) { + if (comma) { + str.append(','); + } + str.append("rawname=\""+rawname+'"'); + comma = true; + } + if (uri != null) { + if (comma) { + str.append(','); + } + str.append("uri=\""+uri+'"'); + } + return str.toString(); + + } // toString():String + +} // class QName |