OSDN Git Service

Initial revision
[pf3gnuchains/gcc-fork.git] / libjava / classpath / javax / xml / namespace / QName.java
1 /*
2  * QName.java
3  * Copyright (C) 2004 The Free Software Foundation
4  * 
5  * This file is part of GNU JAXP, a library.
6  *
7  * GNU JAXP is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  * 
12  * GNU JAXP is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  *
21  * Linking this library statically or dynamically with other modules is
22  * making a combined work based on this library.  Thus, the terms and
23  * conditions of the GNU General Public License cover the whole
24  * combination.
25  *
26  * As a special exception, the copyright holders of this library give you
27  * permission to link this library with independent modules to produce an
28  * executable, regardless of the license terms of these independent
29  * modules, and to copy and distribute the resulting executable under
30  * terms of your choice, provided that you also meet, for each linked
31  * independent module, the terms and conditions of the license of that
32  * module.  An independent module is a module which is not derived from
33  * or based on this library.  If you modify this library, you may extend
34  * this exception to your version of the library, but you are not
35  * obliged to do so.  If you do not wish to do so, delete this
36  * exception statement from your version. 
37  */
38
39 package javax.xml.namespace;
40
41 import javax.xml.XMLConstants;
42
43 /**
44  * An XML
45  * <a href='http://www.w3.org/TR/REC-xml-names/#ns-qualnames'>qualified name</a>.
46  *
47  * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
48  * @since 1.3
49  */
50 public class QName
51 {
52
53   private final String namespaceURI;
54   private final String localPart;
55   private final String prefix;
56   private final String qName;
57   int hashCode = -1;
58
59   public QName(String namespaceURI, String localPart)
60   {
61     this(namespaceURI, localPart, null);
62   }
63
64   public QName(String namespaceURI, String localPart, String prefix)
65   {
66     if (namespaceURI == null)
67       {
68         namespaceURI = XMLConstants.NULL_NS_URI;
69       }
70     if (localPart == null)
71       {
72         throw new IllegalArgumentException();
73       }
74     if (prefix == null)
75       {
76         prefix = XMLConstants.DEFAULT_NS_PREFIX;
77       }
78     this.namespaceURI = namespaceURI;
79     this.localPart = localPart;
80     this.prefix = prefix;
81     
82     StringBuffer buf = new StringBuffer();
83     if (namespaceURI != null && namespaceURI.length() > 0)
84       {
85         buf.append('{');
86         buf.append(namespaceURI);
87         buf.append('}');
88       }
89     if (prefix != null && prefix.length() > 0)
90       {
91         buf.append(prefix);
92         buf.append(':');
93       }
94     buf.append(localPart);
95     qName = buf.toString();
96   }
97
98   public QName(String localPart)
99   {
100     this(null, localPart, null);
101   }
102
103   public String getNamespaceURI()
104   {
105     return namespaceURI;
106   }
107
108   public String getLocalPart()
109   {
110     return localPart;
111   }
112
113   public String getPrefix()
114   {
115     return prefix;
116   }
117
118   public boolean equals(Object obj)
119   {
120     if (obj instanceof QName)
121       {
122         QName qname = (QName) obj;
123         return qname.getLocalPart().equals(localPart) &&
124           qname.getNamespaceURI().equals(namespaceURI);
125       }
126     return false;
127   }
128
129   public final int hashCode()
130   {
131     if (hashCode == -1)
132       {
133         StringBuffer buf = new StringBuffer();
134         buf.append('{');
135         buf.append(namespaceURI);
136         buf.append('}');
137         buf.append(localPart);
138         hashCode = buf.toString().hashCode();
139       }
140     return hashCode;
141   }
142
143   public String toString()
144   {
145     return qName;
146   }
147
148   public static QName valueOf(String qNameAsString)
149   {
150     String namespaceUri = "", prefix = null;
151     int start = qNameAsString.indexOf('{');
152     int end = qNameAsString.indexOf('}');
153     if (start != -1)
154       {
155         if (end < start)
156           {
157             throw new IllegalArgumentException(qNameAsString);
158           }
159         namespaceUri = qNameAsString.substring(start + 1, end);
160         qNameAsString = qNameAsString.substring(end + 1);
161       }
162     start = qNameAsString.indexOf(':');
163     if (start != -1)
164       {
165         prefix = qNameAsString.substring(0, start);
166         qNameAsString = qNameAsString.substring(start + 1);
167       }
168     return new QName(namespaceUri, qNameAsString, prefix);
169   }
170   
171 }