001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *     http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.commons.jxpath.ri;
018    
019    import java.io.Serializable;
020    
021    
022    /**
023     * A qualified name: a combination of an optional namespace prefix
024     * and an local name.
025     *
026     * @author Dmitri Plotnikov
027     * @version $Revision: 652925 $ $Date: 2008-05-02 17:05:41 -0500 (Fri, 02 May 2008) $
028     */
029    public class QName implements Serializable {
030        private static final long serialVersionUID = 7616199282015091496L;
031    
032        private String prefix;
033        private String name;
034        private String qualifiedName;
035    
036        /**
037         * Create a new QName.
038         * @param qualifiedName value
039         */
040        public QName(String qualifiedName) {
041            this.qualifiedName = qualifiedName;
042            int index = qualifiedName.indexOf(':');
043            prefix = index < 0 ? null : qualifiedName.substring(0, index);
044            name = index < 0 ? qualifiedName : qualifiedName.substring(index + 1);
045        }
046    
047        /**
048         * Create a new QName.
049         * @param prefix ns
050         * @param localName String
051         */
052        public QName(String prefix, String localName) {
053            this.prefix = prefix;
054            this.name = localName;
055            this.qualifiedName = prefix == null ? localName : prefix + ':' + localName;
056        }
057    
058        /**
059         * Get the prefix of this QName.
060         * @return String
061         */
062        public String getPrefix() {
063            return prefix;
064        }
065    
066        /**
067         * Get the local name.
068         * @return String
069         */
070        public String getName() {
071            return name;
072        }
073    
074        public String toString() {
075            return qualifiedName;
076        }
077    
078        public int hashCode() {
079            return name.hashCode();
080        }
081    
082        public boolean equals(Object object) {
083            if (this == object) {
084                return true;
085            }
086            if (!(object instanceof QName)) {
087                return false;
088            }
089            return qualifiedName.equals(((QName) object).qualifiedName);
090        }
091    }