1 /* 2 * Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package javax.naming; 27 28 import java.util.Enumeration; 29 30 /** 31 * The <tt>Name</tt> interface represents a generic name -- an ordered 32 * sequence of components. It can be a composite name (names that 33 * span multiple namespaces), or a compound name (names that are 34 * used within individual hierarchical naming systems). 35 * 36 * <p> There can be different implementations of <tt>Name</tt>; for example, 37 * composite names, URLs, or namespace-specific compound names. 38 * 39 * <p> The components of a name are numbered. The indexes of a name 40 * with N components range from 0 up to, but not including, N. This 41 * range may be written as [0,N). 42 * The most significant component is at index 0. 43 * An empty name has no components. 44 * 45 * <p> None of the methods in this interface accept null as a valid 46 * value for a parameter that is a name or a name component. 47 * Likewise, methods that return a name or name component never return null. 48 * 49 * <p> An instance of a <tt>Name</tt> may not be synchronized against 50 * concurrent multithreaded access if that access is not read-only. 51 * 52 * @author Rosanna Lee 53 * @author Scott Seligman 54 * @author R. Vasudevan 55 * @since 1.3 56 */ 57 58 public interface Name 59 extends Cloneable, java.io.Serializable, Comparable<Object> 60 { 61 62 /** 63 * The class fingerprint that is set to indicate 64 * serialization compatibility with a previous 65 * version of the class. 66 */ 67 static final long serialVersionUID = -3617482732056931635L; 68 69 /** 70 * Generates a new copy of this name. 71 * Subsequent changes to the components of this name will not 72 * affect the new copy, and vice versa. 73 * 74 * @return a copy of this name 75 * 76 * @see Object#clone() 77 */ 78 public Object clone(); 79 80 /** 81 * Compares this name with another name for order. 82 * Returns a negative integer, zero, or a positive integer as this 83 * name is less than, equal to, or greater than the given name. 84 * 85 * <p> As with <tt>Object.equals()</tt>, the notion of ordering for names 86 * depends on the class that implements this interface. 87 * For example, the ordering may be 88 * based on lexicographical ordering of the name components. 89 * Specific attributes of the name, such as how it treats case, 90 * may affect the ordering. In general, two names of different 91 * classes may not be compared. 92 * 93 * @param obj the non-null object to compare against. 94 * @return a negative integer, zero, or a positive integer as this name 95 * is less than, equal to, or greater than the given name 96 * @throws ClassCastException if obj is not a <tt>Name</tt> of a 97 * type that may be compared with this name 98 * 99 * @see Comparable#compareTo(Object) 100 */ 101 public int compareTo(Object obj); 102 103 /** 104 * Returns the number of components in this name. 105 * 106 * @return the number of components in this name 107 */ 108 public int size(); 109 110 /** 111 * Determines whether this name is empty. 112 * An empty name is one with zero components. 113 * 114 * @return true if this name is empty, false otherwise 115 */ 116 public boolean isEmpty(); 117 118 /** 119 * Retrieves the components of this name as an enumeration 120 * of strings. The effect on the enumeration of updates to 121 * this name is undefined. If the name has zero components, 122 * an empty (non-null) enumeration is returned. 123 * 124 * @return an enumeration of the components of this name, each a string 125 */ 126 public Enumeration<String> getAll(); 127 128 /** 129 * Retrieves a component of this name. 130 * 131 * @param posn 132 * the 0-based index of the component to retrieve. 133 * Must be in the range [0,size()). 134 * @return the component at index posn 135 * @throws ArrayIndexOutOfBoundsException 136 * if posn is outside the specified range 137 */ 138 public String get(int posn); 139 140 /** 141 * Creates a name whose components consist of a prefix of the 142 * components of this name. Subsequent changes to 143 * this name will not affect the name that is returned and vice versa. 144 * 145 * @param posn 146 * the 0-based index of the component at which to stop. 147 * Must be in the range [0,size()]. 148 * @return a name consisting of the components at indexes in 149 * the range [0,posn). 150 * @throws ArrayIndexOutOfBoundsException 151 * if posn is outside the specified range 152 */ 153 public Name getPrefix(int posn); 154 155 /** 156 * Creates a name whose components consist of a suffix of the 157 * components in this name. Subsequent changes to 158 * this name do not affect the name that is returned and vice versa. 159 * 160 * @param posn 161 * the 0-based index of the component at which to start. 162 * Must be in the range [0,size()]. 163 * @return a name consisting of the components at indexes in 164 * the range [posn,size()). If posn is equal to 165 * size(), an empty name is returned. 166 * @throws ArrayIndexOutOfBoundsException 167 * if posn is outside the specified range 168 */ 169 public Name getSuffix(int posn); 170 171 /** 172 * Determines whether this name starts with a specified prefix. 173 * A name <tt>n</tt> is a prefix if it is equal to 174 * <tt>getPrefix(n.size())</tt>. 175 * 176 * @param n 177 * the name to check 178 * @return true if <tt>n</tt> is a prefix of this name, false otherwise 179 */ 180 public boolean startsWith(Name n); 181 182 /** 183 * Determines whether this name ends with a specified suffix. 184 * A name <tt>n</tt> is a suffix if it is equal to 185 * <tt>getSuffix(size()-n.size())</tt>. 186 * 187 * @param n 188 * the name to check 189 * @return true if <tt>n</tt> is a suffix of this name, false otherwise 190 */ 191 public boolean endsWith(Name n); 192 193 /** 194 * Adds the components of a name -- in order -- to the end of this name. 195 * 196 * @param suffix 197 * the components to add 198 * @return the updated name (not a new one) 199 * 200 * @throws InvalidNameException if <tt>suffix</tt> is not a valid name, 201 * or if the addition of the components would violate the syntax 202 * rules of this name 203 */ 204 public Name addAll(Name suffix) throws InvalidNameException; 205 206 /** 207 * Adds the components of a name -- in order -- at a specified position 208 * within this name. 209 * Components of this name at or after the index of the first new 210 * component are shifted up (away from 0) to accommodate the new 211 * components. 212 * 213 * @param n 214 * the components to add 215 * @param posn 216 * the index in this name at which to add the new 217 * components. Must be in the range [0,size()]. 218 * @return the updated name (not a new one) 219 * 220 * @throws ArrayIndexOutOfBoundsException 221 * if posn is outside the specified range 222 * @throws InvalidNameException if <tt>n</tt> is not a valid name, 223 * or if the addition of the components would violate the syntax 224 * rules of this name 225 */ 226 public Name addAll(int posn, Name n) throws InvalidNameException; 227 228 /** 229 * Adds a single component to the end of this name. 230 * 231 * @param comp 232 * the component to add 233 * @return the updated name (not a new one) 234 * 235 * @throws InvalidNameException if adding <tt>comp</tt> would violate 236 * the syntax rules of this name 237 */ 238 public Name add(String comp) throws InvalidNameException; 239 240 /** 241 * Adds a single component at a specified position within this name. 242 * Components of this name at or after the index of the new component 243 * are shifted up by one (away from index 0) to accommodate the new 244 * component. 245 * 246 * @param comp 247 * the component to add 248 * @param posn 249 * the index at which to add the new component. 250 * Must be in the range [0,size()]. 251 * @return the updated name (not a new one) 252 * 253 * @throws ArrayIndexOutOfBoundsException 254 * if posn is outside the specified range 255 * @throws InvalidNameException if adding <tt>comp</tt> would violate 256 * the syntax rules of this name 257 */ 258 public Name add(int posn, String comp) throws InvalidNameException; 259 260 /** 261 * Removes a component from this name. 262 * The component of this name at the specified position is removed. 263 * Components with indexes greater than this position 264 * are shifted down (toward index 0) by one. 265 * 266 * @param posn 267 * the index of the component to remove. 268 * Must be in the range [0,size()). 269 * @return the component removed (a String) 270 * 271 * @throws ArrayIndexOutOfBoundsException 272 * if posn is outside the specified range 273 * @throws InvalidNameException if deleting the component 274 * would violate the syntax rules of the name 275 */ 276 public Object remove(int posn) throws InvalidNameException; 277 }