001 //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/tags/2.1/src/org/deegree/datatypes/QualifiedName.java $ 002 /*---------------- FILE HEADER ------------------------------------------ 003 004 This file is part of deegree. 005 Copyright (C) 2001-2006 by: 006 EXSE, Department of Geography, University of Bonn 007 http://www.giub.uni-bonn.de/deegree/ 008 lat/lon GmbH 009 http://www.lat-lon.de 010 011 This library is free software; you can redistribute it and/or 012 modify it under the terms of the GNU Lesser General Public 013 License as published by the Free Software Foundation; either 014 version 2.1 of the License, or (at your option) any later version. 015 016 This library is distributed in the hope that it will be useful, 017 but WITHOUT ANY WARRANTY; without even the implied warranty of 018 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 019 Lesser General Public License for more details. 020 021 You should have received a copy of the GNU Lesser General Public 022 License along with this library; if not, write to the Free Software 023 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 024 025 Contact: 026 027 Andreas Poth 028 lat/lon GmbH 029 Aennchenstr. 19 030 53115 Bonn 031 Germany 032 E-Mail: poth@lat-lon.de 033 034 Prof. Dr. Klaus Greve 035 Department of Geography 036 University of Bonn 037 Meckenheimer Allee 166 038 53115 Bonn 039 Germany 040 E-Mail: greve@giub.uni-bonn.de 041 042 ---------------------------------------------------------------------------*/ 043 package org.deegree.datatypes; 044 045 import java.io.Serializable; 046 import java.net.URI; 047 048 import org.deegree.framework.util.StringTools; 049 050 /** 051 * This class represent a qualified name for something. A name is thought to be built from an 052 * optional prefix and/or a local name E.g.: <BR>- deegree - pre:deegree <BR> 053 * a name may be located within a namespace assigned to the names prefix (or as default namespace if 054 * the name has not prefix). 055 * 056 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth </a> 057 * @author last edited by: $Author: apoth $ 058 * 059 * @version $Revision: 6822 $, $Date: 2007-05-04 16:42:27 +0200 (Fr, 04 Mai 2007) $ 060 */ 061 public class QualifiedName implements Serializable { 062 063 private static final long serialVersionUID = 5551137348397905772L; 064 065 private String prefix = null; 066 067 private String localName = null; 068 069 private URI namespace = null; 070 071 private String s = null; 072 073 /** 074 * @param name 075 * local name/simple (without prefix) 076 */ 077 public QualifiedName( String name ) { 078 if ( name.indexOf( ':' ) > -1 ) { 079 String[] tmp = StringTools.toArray( name, ":", false ); 080 prefix = tmp[0]; 081 this.localName = tmp[1]; 082 } else { 083 this.localName = name; 084 } 085 buildString(); 086 } 087 088 /** 089 * @param name 090 * complete name including a prefix 091 * @param namespace 092 * namespace the name is located within 093 */ 094 public QualifiedName( String name, URI namespace ) { 095 if ( name.indexOf( ':' ) > -1 ) { 096 String[] tmp = StringTools.toArray( name, ":", false ); 097 prefix = tmp[0]; 098 this.localName = tmp[1]; 099 } else { 100 this.localName = name; 101 } 102 this.namespace = namespace; 103 buildString(); 104 } 105 106 /** 107 * @param prefix 108 * @param localName 109 * local/simple name (e.g. deegree) 110 * @param namespace 111 * namespace the name is located within 112 */ 113 public QualifiedName( String prefix, String localName, URI namespace ) { 114 this.prefix = prefix; 115 this.localName = localName; 116 this.namespace = namespace; 117 buildString(); 118 } 119 120 private void buildString() { 121 StringBuffer sb = new StringBuffer( 50 ); 122 if ( prefix != null && prefix.length() != 0 ) { 123 sb.append( prefix ).append( ':' ); 124 } 125 sb.append( localName ); 126 s = sb.toString(); 127 } 128 129 /** 130 * returns a string representation of a QualifiedName. prefix and local name are separated by 131 * ':' 132 * 133 * @return string representation of a QualifiedName 134 * @deprecated use 135 * @see #getFormattedString() or @see #getPrefixedName() instead 136 */ 137 @Deprecated 138 public String getAsString() { 139 return s; 140 } 141 142 /** 143 * returns a string representation of a QualifiedName. prefix and local name are separated by 144 * ':'. If the Prefix is null, the sole localname will be returned. 145 * @return string representation of a QualifiedName 146 */ 147 public String getPrefixedName() { 148 return s; 149 } 150 151 /** 152 * @return a QualifiedName as a formatted string. If a QualifiedName has a namespace the 153 * returned format is:<br> 154 * {namespace}:localName. <br> 155 * Otherwise just a String representation of this qualified name will be returned. Which 156 * means, that if the prefix is not null (allthough not bound to namespace) the result 157 * String will be: <br> 158 * PRE_FIX:localName.<br> 159 * If the Prefix is null, the sole localname will be returned. 160 */ 161 public String getFormattedString() { 162 if ( namespace != null ) { 163 return StringTools.concat( 100, "{", namespace, "}:", localName ); 164 } 165 return s; 166 } 167 168 /** 169 * returns the names prefix 170 * 171 * @return the names prefix 172 */ 173 public String getPrefix() { 174 return prefix; 175 } 176 177 /** 178 * returns the local part of the name 179 * 180 * @return the local part of the name 181 */ 182 public String getLocalName() { 183 return localName; 184 } 185 186 /** 187 * returns the namespace the name is located within (may be null) 188 * 189 * @return the namespace the name is located within (may be null) 190 */ 191 public URI getNamespace() { 192 return namespace; 193 } 194 195 /** 196 * @param ns 197 * the namespace to checkfor 198 * @return true if the given namespace equals this qualified name's namespace. If the given ns 199 * is null and the namespace is null, this method will also return true. 200 */ 201 public boolean isInNamespace( URI ns ) { 202 if ( ns == null ) { 203 if ( this.namespace == null ) { 204 return true; 205 } 206 return false; 207 } 208 return ns.equals( this.namespace ); 209 } 210 211 @Override 212 public String toString() { 213 StringBuffer result = new StringBuffer( 150 ); 214 result.append( this.s ); 215 if ( this.prefix != null && this.prefix.length() > 0 ) { 216 result.append( " (" ); 217 result.append( this.prefix ); 218 result.append( "=" ); 219 if ( this.namespace == null || this.namespace.toASCIIString().length() == 0 ) { 220 result.append( "not bound to a namespace" ); 221 } else { 222 result.append( this.namespace.toASCIIString() ); 223 } 224 result.append( ")" ); 225 } 226 return result.toString(); 227 } 228 229 @Override 230 public int hashCode() { 231 return ( this.namespace + this.localName ).hashCode(); 232 } 233 234 @Override 235 public boolean equals( Object o ) { 236 // return false in the case that the object is null 237 // or isn't an instance of QualifiedName 238 if ( o == null || !( o instanceof QualifiedName ) ) { 239 return false; 240 } 241 242 QualifiedName other = (QualifiedName) o; 243 if ( localName.equals( other.getLocalName() ) ) { 244 if ( ( namespace != null && namespace.equals( other.getNamespace() ) ) 245 || ( namespace == null && other.getNamespace() == null ) ) { 246 return true; 247 } 248 } 249 return false; 250 } 251 }