/* * 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 javax.naming; import java.io.Serializable; import java.util.Enumeration; /** * A <code>Name</code> interface represents a name in a naming service. * <p> * A name which implements this interface has a sequence of zero or more * elements delimited by separators. Each element can be accessed using its * position. The first element is at position 0. * </p> * <p> * This interface is implemented by 2 classes - <code>CompoundName</code> and * <code>CompositeName</code>. * </p> * <p> * Examples of names are: * * <pre> * File system name - for example /home/jenningm/.profile * DNS hostname - for example www.apache.org * Internet URL - for example http://www.eclipse.org/org/index.html * </pre> * * </p> * * @see CompositeName * @see CompoundName */ public interface Name extends Cloneable, Serializable, Comparable<Object> { public static final long serialVersionUID = -3617482732056931635L; /** * Get all the elements of this <code>Name</code>. If the * <code>Name</code> is empty then return an empty * <code>Enumeration</code>. * * @return an enumeration of <code>Name</code> elements - cannot be null */ public Enumeration<String> getAll(); /** * Get an element of this <code>Name</code>. * * @param i * the index of the required element - must be greater than or * equal to 0 and less than size(). * @return the element at the specified position * @throws ArrayIndexOutOfBoundsException * when the position is invalid. If the <code>Name</code> is * empty this always returns * <code>ArrayIndexOutOfBoundsException</code> */ public String get(int i); /** * Create a new <code>Name</code> which comprises the first several * elements of this <code>Name</code>. * * @param i * the index of the first element not to be included - must be * greater than or equal to 0 and less than or equal to size. If * 0 then an empty name is returned. * @return a new <code>Name</code> which comprises the first several * elements of this <code>Name</code> * @throws ArrayIndexOutOfBoundsException * when the position is invalid. */ public Name getPrefix(int i); /** * Create a new <code>Name</code> which comprises the last (<code>size() - i</code>) * elements of this <code>Name</code>. * * @param i * the index of the first element to be included - must be * greater than or equal to 0 and less than size. * @return a new <code>Name</code> which comprises the last (<code>size() - i</code>) * elements of this <code>Name</code> * @throws ArrayIndexOutOfBoundsException * when the position is invalid. */ public Name getSuffix(int i); /** * Append a name to this <code>Name</code>. The name itself may have a * number of elements. * * @param name * the name to append onto this <code>Name</code>. * @return this <code>Name</code> * @throws InvalidNameException * if name is invalid or the addition of the name results in * this <code>Name</code> becoming invalid. */ public Name addAll(Name name) throws InvalidNameException; /** * Insert a name within this <code>Name</code> at the specified position. * The name itself may have a number of elements. * * @param i * the index of the element where to start inserting the name - * must be greater than or equal to 0 and less than or equal to * size. * @param name * the name to insert into this <code>Name</code>. * @return this <code>Name</code> * @throws InvalidNameException * if name is invalid or the addition of the name results in * this <code>Name</code> becoming invalid. */ public Name addAll(int i, Name name) throws InvalidNameException; /** * Append an element to this <code>Name</code>. * * @param s * the string to append * @return this <code>Name</code> * @throws InvalidNameException * if the addition of the element results in this * <code>Name</code> becoming invalid. */ public Name add(String s) throws InvalidNameException; /** * Insert an element within this <code>Name</code> at the specified * position. * * @param i * the index of the element where to insert the element - must be * greater than or equal to 0 and less than or equal to size. * @param s * the String to insert * @return this <code>Name</code>. * @throws InvalidNameException * if the insertion of the element results in this Name becoming * invalid. */ public Name add(int i, String s) throws InvalidNameException; /** * Delete an element from this <code>Name</code>. * * @param i * the index of the element to delete - must be greater than or * equal to 0 and less than size. * @return the deleted element * @throws InvalidNameException * if the deletion of the element results in this * <code>Name</code> becoming invalid. */ public Object remove(int i) throws InvalidNameException; /** * Create a copy of this <code>Name</code>. * * @return a complete (deep) copy of the object. */ public Object clone(); /** * Compare this <code>Name</code> with the one supplied as a parameter. * Each class which implements this interface will have a specification of * how to do the comparison. * * @param o * the object to compare - cannot be null. * @return a negative number means this is less than the supplied object. a * positive number means this is greater than the supplied object. * Zero means the two objects are equal. */ public int compareTo(Object o); /** * Get the size of this <code>Name</code>. The size of a * <code>Name</code> is its number of elements. * * @return the size of this name - cannot be null - can be zero */ public int size(); /** * Check if this <code>Name</code> is empty. A <code>Name</code> is * empty when it has no elements. * * @return true if empty, else returns false */ public boolean isEmpty(); /** * Check if this <code>Name</code> starts with the elements in the * supplied name. The supplied name itself may have a number of elements. * * @param name * the name to check against this name * @return true when the supplied name matches else returns false */ public boolean startsWith(Name name); /** * Check if this <code>Name</code> ends with the elements in the supplied * name. The supplied name itself may have a number of elements. * * @param name * the name to check against this name. * @return true when the supplied name matches else returns false. */ public boolean endsWith(Name name); }