| /* | |
| * Licensed to the Apache Software Foundation (ASF) under one or more | |
| * contributor license agreements. See the NOTICE file distributed with | |
| * this work for additional information regarding copyright ownership. | |
| * The ASF licenses this file to You under the Apache License, Version 2.0 | |
| * (the "License"); you may not use this file except in compliance with | |
| * the License. You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| /* $Id$ */ | |
| package org.apache.xmlgraphics.util; | |
| import java.io.Serializable; | |
| /** | |
| * Represents a qualified name of an XML element or an XML attribute. | |
| * <p> | |
| * Note: This class allows to carry a namespace prefix but it is not used in the equals() and | |
| * hashCode() methods. | |
| */ | |
| public class QName implements Serializable { | |
| private static final long serialVersionUID = -5225376740044770690L; | |
| private String namespaceURI; | |
| private String localName; | |
| private String prefix; | |
| private int hashCode; | |
| /** | |
| * Main constructor. | |
| * @param namespaceURI the namespace URI | |
| * @param prefix the namespace prefix, may be null | |
| * @param localName the local name | |
| */ | |
| public QName(String namespaceURI, String prefix, String localName) { | |
| if (localName == null) { | |
| throw new NullPointerException("Parameter localName must not be null"); | |
| } | |
| if (localName.length() == 0) { | |
| throw new IllegalArgumentException("Parameter localName must not be empty"); | |
| } | |
| this.namespaceURI = namespaceURI; | |
| this.prefix = prefix; | |
| this.localName = localName; | |
| this.hashCode = toHashString().hashCode(); | |
| } | |
| /** | |
| * Main constructor. | |
| * @param namespaceURI the namespace URI | |
| * @param qName the qualified name | |
| */ | |
| public QName(String namespaceURI, String qName) { | |
| if (qName == null) { | |
| throw new NullPointerException("Parameter localName must not be null"); | |
| } | |
| if (qName.length() == 0) { | |
| throw new IllegalArgumentException("Parameter localName must not be empty"); | |
| } | |
| this.namespaceURI = namespaceURI; | |
| int p = qName.indexOf(':'); | |
| if (p > 0) { | |
| this.prefix = qName.substring(0, p); | |
| this.localName = qName.substring(p + 1); | |
| } else { | |
| this.prefix = null; | |
| this.localName = qName; | |
| } | |
| this.hashCode = toHashString().hashCode(); | |
| } | |
| /** @return the namespace URI */ | |
| public String getNamespaceURI() { | |
| return this.namespaceURI; | |
| } | |
| /** @return the namespace prefix */ | |
| public String getPrefix() { | |
| return this.prefix; | |
| } | |
| /** @return the local name */ | |
| public String getLocalName() { | |
| return this.localName; | |
| } | |
| /** @return the fully qualified name */ | |
| public String getQName() { | |
| return getPrefix() != null ? getPrefix() + ':' + getLocalName() : getLocalName(); | |
| } | |
| /** @see java.lang.Object#hashCode() */ | |
| public int hashCode() { | |
| return this.hashCode; | |
| } | |
| /** @see java.lang.Object#equals(java.lang.Object) */ | |
| public boolean equals(Object obj) { | |
| if (obj == null) { | |
| return false; | |
| } else if (obj == this) { | |
| return true; | |
| } else { | |
| if (obj instanceof QName) { | |
| QName other = (QName)obj; | |
| if ((getNamespaceURI() == null && other.getNamespaceURI() == null) | |
| || getNamespaceURI().equals(other.getNamespaceURI())) { | |
| return getLocalName().equals(other.getLocalName()); | |
| } | |
| } | |
| } | |
| return false; | |
| } | |
| /** @see java.lang.Object#toString() */ | |
| public String toString() { | |
| return prefix != null | |
| ? (prefix + ":" + localName) | |
| : toHashString(); | |
| } | |
| private String toHashString() { | |
| return (namespaceURI != null | |
| ? ("{" + namespaceURI + "}" + localName) | |
| : localName); | |
| } | |
| } |