| /* |
| * |
| * 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. |
| * |
| */ |
| |
| package flex2.compiler.util; |
| |
| import flex2.compiler.SymbolTable; |
| |
| /** |
| * This class represents a namespace URI and local part. |
| * |
| * @author Clement Wong |
| */ |
| public final class QName extends Name |
| { |
| public static final String DEFAULT_NAMESPACE = SymbolTable.publicNamespace; |
| |
| QName() |
| { |
| this(DEFAULT_NAMESPACE, ""); |
| } |
| |
| public QName(String qname) |
| { |
| int index = qname.indexOf(":"); |
| if (index == -1) |
| { |
| namespaceURI = DEFAULT_NAMESPACE; |
| localPart = qname; |
| } |
| else |
| { |
| namespaceURI = qname.substring(0, index); |
| localPart = qname.substring(index + 1); |
| } |
| fullName = qname; |
| } |
| |
| public QName(final String namespaceURI, final String localPart) |
| { |
| assert namespaceURI != null : "Null namespace"; |
| this.namespaceURI = namespaceURI; |
| this.localPart = localPart; |
| } |
| |
| public QName(final String namespaceURI, final String localPart, final String preferredPrefix) |
| { |
| this(namespaceURI, localPart); |
| this.preferredPrefix = preferredPrefix; |
| } |
| |
| public QName(QName qName) |
| { |
| assert qName.namespaceURI != null : "Null namespace"; |
| namespaceURI = qName.namespaceURI; |
| localPart = qName.localPart; |
| fullName = qName.fullName; |
| preferredPrefix = qName.preferredPrefix; |
| } |
| |
| private String namespaceURI; |
| private String fullName; |
| private String preferredPrefix; |
| |
| public String getNamespace() |
| { |
| return namespaceURI; |
| } |
| |
| public void setNamespace(String namespaceURI) |
| { |
| assert namespaceURI != null : "Null namespace"; |
| this.namespaceURI = namespaceURI; |
| } |
| |
| public String getPreferredPrefix() |
| { |
| return preferredPrefix; |
| } |
| |
| public boolean equals(String namespaceURI, String localPart) |
| { |
| assert namespaceURI != null : "Null namespace"; |
| |
| boolean result = this.namespaceURI.equals(namespaceURI) && this.localPart.equals(localPart); |
| |
| return result; |
| } |
| |
| public boolean equals(Object obj) |
| { |
| if (obj instanceof QName) |
| { |
| QName qName = (QName) obj; |
| return equals(qName.namespaceURI, qName.localPart); |
| } |
| /* |
| else if (obj instanceof MultiName) |
| { |
| MultiName mName = (MultiName) obj; |
| String[] ns = mName.getNamespace(); |
| return (ns.length == 1 && ns[0].equals(namespaceURI) && mName.getLocalPart().equals(localPart)); |
| } |
| */ |
| else |
| { |
| return false; |
| } |
| } |
| |
| public int hashCode() |
| { |
| int result; |
| |
| if (namespaceURI.length() != 0) |
| { |
| result = namespaceURI.hashCode() ^ super.hashCode(); |
| } |
| else |
| { |
| result = super.hashCode(); |
| } |
| |
| return result; |
| } |
| |
| public String toString() |
| { |
| if (namespaceURI.length() == 0) |
| { |
| return localPart; |
| } |
| else if (fullName != null) |
| { |
| return fullName; |
| } |
| else |
| { |
| StringBuilder b = new StringBuilder(namespaceURI.length() + localPart.length() + 1); |
| b.append(namespaceURI).append(':').append(localPart); |
| fullName = b.toString(); |
| return fullName; |
| } |
| } |
| } |