package org.apache.xerces.xni;

public class QName implements Cloneable {
  public String prefix;
  
  public String localpart;
  
  public String rawname;
  
  public String uri;
  
  public QName() {
    clear();
  }
  
  public QName(String prefix, String localpart, String rawname, String uri) {
    setValues(prefix, localpart, rawname, uri);
  }
  
  public QName(QName qname) {
    setValues(qname);
  }
  
  public void setValues(QName qname) {
    this.prefix = qname.prefix;
    this.localpart = qname.localpart;
    this.rawname = qname.rawname;
    this.uri = qname.uri;
  }
  
  public void setValues(String prefix, String localpart, String rawname, String uri) {
    this.prefix = prefix;
    this.localpart = localpart;
    this.rawname = rawname;
    this.uri = uri;
  }
  
  public void clear() {
    this.prefix = null;
    this.localpart = null;
    this.rawname = null;
    this.uri = null;
  }
  
  public Object clone() {
    return new QName(this);
  }
  
  public int hashCode() {
    if (this.uri != null)
      return this.uri.hashCode() + this.localpart.hashCode(); 
    return this.rawname.hashCode();
  }
  
  public boolean equals(Object object) {
    if (object instanceof QName) {
      QName qname = (QName)object;
      if (qname.uri != null)
        return (this.uri == qname.uri && this.localpart == qname.localpart); 
      if (this.uri == null)
        return (this.rawname == qname.rawname); 
    } 
    return false;
  }
  
  public String toString() {
    StringBuffer str = new StringBuffer();
    boolean comma = false;
    if (this.prefix != null) {
      str.append("prefix=\"" + this.prefix + '"');
      comma = true;
    } 
    if (this.localpart != null) {
      if (comma)
        str.append(','); 
      str.append("localpart=\"" + this.localpart + '"');
      comma = true;
    } 
    if (this.rawname != null) {
      if (comma)
        str.append(','); 
      str.append("rawname=\"" + this.rawname + '"');
      comma = true;
    } 
    if (this.uri != null) {
      if (comma)
        str.append(','); 
      str.append("uri=\"" + this.uri + '"');
    } 
    return str.toString();
  }
}
