001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the "License");
007 * you may not use this file except in compliance with the License.
008 * You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018 /*
019 * $Id: QName.java 669372 2008-06-19 03:39:52Z zongaro $
020 */
021
022 package org.apache.xalan.xsltc.compiler;
023
024 /**
025 * @author Jacek Ambroziak
026 * @author Santiago Pericas-Geertsen
027 * @author Morten Jorgensen
028 */
029 final class QName {
030 private final String _localname;
031 private String _prefix;
032 private String _namespace;
033 private String _stringRep;
034 private int _hashCode;
035
036 public QName(String namespace, String prefix, String localname) {
037 _namespace = namespace;
038 _prefix = prefix;
039 _localname = localname;
040
041 _stringRep =
042 (namespace != null && !namespace.equals(Constants.EMPTYSTRING)) ?
043 (namespace + ':' + localname) : localname;
044
045 _hashCode = _stringRep.hashCode() + 19; // cached for speed
046 }
047
048 public void clearNamespace() {
049 _namespace = Constants.EMPTYSTRING;
050 }
051
052 public String toString() {
053 return _stringRep;
054 }
055
056 public String getStringRep() {
057 return _stringRep;
058 }
059
060 public boolean equals(Object other) {
061 return (this == other)
062 || (other instanceof QName
063 && _stringRep.equals(((QName) other).getStringRep()));
064 }
065
066 public String getLocalPart() {
067 return _localname;
068 }
069
070 public String getNamespace() {
071 return _namespace;
072 }
073
074 public String getPrefix() {
075 return _prefix;
076 }
077
078 public int hashCode() {
079 return _hashCode;
080 }
081
082 public String dump() {
083 return "QName: " + _namespace + "(" + _prefix + "):" + _localname;
084 }
085 }