public final class

LdapName

extends Object
implements Name
java.lang.Object
   ↳ com.sun.jndi.ldap.LdapName

Class Overview

LdapName implements compound names for LDAP v3 as specified by RFC 2253.

RFC 2253 has a few ambiguities and outright inconsistencies. These are resolved as follows:

  • RFC 2253 leaves the term "whitespace" undefined. The definition of "optional-space" given in RFC 1779 is used in its place: either a space character or a carriage return ("\r").
  • Whitespace is allowed on either side of ',', ';', '=', and '+'. Such whitespace is accepted but not generated by this code, and is ignored when comparing names.
  • AttributeValue strings containing '=' or non-leading '#' characters (unescaped) are accepted.

String names passed to LdapName or returned by it use the full 16-bit Unicode character set. They may also contain characters encoded into UTF-8 with each octet represented by a three-character substring such as "\\B4". They may not, however, contain characters encoded into UTF-8 with each octet represented by a single character in the string: the meaning would be ambiguous.

LdapName will properly parse all valid names, but does not attempt to detect all possible violations when parsing invalid names. It's "generous".

When names are tested for equality, attribute types and binary values are case-insensitive, and string values are by default case-insensitive. String values with different but equivalent usage of quoting, escaping, or UTF8-hex-encoding are considered equal. The order of components in multi-valued RDNs (such as "ou=Sales+cn=Bob") is not significant.

Summary

[Expand]
Inherited Constants
From interface javax.naming.Name
Public Constructors
LdapName(String name)
Constructs an LDAP name from the given DN.
Public Methods
Name add(int pos, String comp)
Adds a single component at a specified position within this name.
Name add(String comp)
Adds a single component to the end of this name.
Name addAll(int pos, Name suffix)
Adds the components of a name -- in order -- at a specified position within this name.
Name addAll(Name suffix)
Adds the components of a name -- in order -- to the end of this name.
Object clone()
Creates and returns a copy of this object.
int compareTo(Object obj)
Compares this name with another name for order.
boolean endsWith(Name n)
Determines whether this name ends with a specified suffix.
boolean equals(Object obj)
Indicates whether some other object is "equal to" this one.
static String escapeAttributeValue(Object val)
Given the value of an attribute, returns a string suitable for inclusion in a DN.
String get(int pos)
Retrieves a component of this name.
Enumeration getAll()
Retrieves the components of this name as an enumeration of strings.
Name getPrefix(int pos)
Creates a name whose components consist of a prefix of the components of this name.
Name getSuffix(int pos)
Creates a name whose components consist of a suffix of the components in this name.
int hashCode()
Returns a hash code value for the object.
boolean isEmpty()
Determines whether this name is empty.
Object remove(int pos)
Removes a component from this name.
void setValuesCaseSensitive(boolean caseSensitive)
Controls whether string-values are treated as case-sensitive when the string values within names are compared.
int size()
Returns the number of components in this name.
boolean startsWith(Name n)
Determines whether this name starts with a specified prefix.
String toString()
Returns a string representation of the object.
static Object unescapeAttributeValue(String val)
Given an attribute value formated according to RFC 2253, returns the unformated value.
[Expand]
Inherited Methods
From class java.lang.Object
From interface java.lang.Comparable
From interface javax.naming.Name

Public Constructors

public LdapName (String name)

Constructs an LDAP name from the given DN.

Parameters
name An LDAP DN. To JNDI, a compound name.
Throws
InvalidNameException if a syntax violation is detected.

Public Methods

public Name add (int pos, String comp)

Adds a single component at a specified position within this name. Components of this name at or after the index of the new component are shifted up by one (away from index 0) to accommodate the new component.

Parameters
pos the index at which to add the new component. Must be in the range [0,size()].
comp the component to add
Returns
  • the updated name (not a new one)

public Name add (String comp)

Adds a single component to the end of this name.

Parameters
comp the component to add
Returns
  • the updated name (not a new one)

public Name addAll (int pos, Name suffix)

Adds the components of a name -- in order -- at a specified position within this name. Components of this name at or after the index of the first new component are shifted up (away from 0) to accommodate the new components.

Parameters
pos the index in this name at which to add the new components. Must be in the range [0,size()].
suffix the components to add
Returns
  • the updated name (not a new one)

public Name addAll (Name suffix)

Adds the components of a name -- in order -- to the end of this name.

Parameters
suffix the components to add
Returns
  • the updated name (not a new one)

public Object clone ()

Creates and returns a copy of this object. The precise meaning of "copy" may depend on the class of the object. The general intent is that, for any object x, the expression:

 x.clone() != x
will be true, and that the expression:
 x.clone().getClass() == x.getClass()
will be true, but these are not absolute requirements. While it is typically the case that:
 x.clone().equals(x)
will be true, this is not an absolute requirement.

By convention, the returned object should be obtained by calling super.clone. If a class and all of its superclasses (except Object) obey this convention, it will be the case that x.clone().getClass() == x.getClass().

By convention, the object returned by this method should be independent of this object (which is being cloned). To achieve this independence, it may be necessary to modify one or more fields of the object returned by super.clone before returning it. Typically, this means copying any mutable objects that comprise the internal "deep structure" of the object being cloned and replacing the references to these objects with references to the copies. If a class contains only primitive fields or references to immutable objects, then it is usually the case that no fields in the object returned by super.clone need to be modified.

The method clone for class Object performs a specific cloning operation. First, if the class of this object does not implement the interface Cloneable, then a CloneNotSupportedException is thrown. Note that all arrays are considered to implement the interface Cloneable. Otherwise, this method creates a new instance of the class of this object and initializes all its fields with exactly the contents of the corresponding fields of this object, as if by assignment; the contents of the fields are not themselves cloned. Thus, this method performs a "shallow copy" of this object, not a "deep copy" operation.

The class Object does not itself implement the interface Cloneable, so calling the clone method on an object whose class is Object will result in throwing an exception at run time.

Returns
  • a clone of this instance.

public int compareTo (Object obj)

Compares this name with another name for order. Returns a negative integer, zero, or a positive integer as this name is less than, equal to, or greater than the given name.

As with Object.equals(), the notion of ordering for names depends on the class that implements this interface. For example, the ordering may be based on lexicographical ordering of the name components. Specific attributes of the name, such as how it treats case, may affect the ordering. In general, two names of different classes may not be compared.

Parameters
obj the non-null object to compare against.
Returns
  • a negative integer, zero, or a positive integer as this name is less than, equal to, or greater than the given name

public boolean endsWith (Name n)

Determines whether this name ends with a specified suffix. A name n is a suffix if it is equal to getSuffix(size()-n.size()).

Parameters
n the name to check
Returns
  • true if n is a suffix of this name, false otherwise

public boolean equals (Object obj)

Indicates whether some other object is "equal to" this one.

The equals method implements an equivalence relation on non-null object references:

  • It is reflexive: for any non-null reference value x, x.equals(x) should return true.
  • It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.
  • It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.
  • It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified.
  • For any non-null reference value x, x.equals(null) should return false.

The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any non-null reference values x and y, this method returns true if and only if x and y refer to the same object (x == y has the value true).

Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes.

Parameters
obj the reference object with which to compare.
Returns
  • true if this object is the same as the obj argument; false otherwise.

public static String escapeAttributeValue (Object val)

Given the value of an attribute, returns a string suitable for inclusion in a DN. If the value is a string, this is accomplished by using backslash (\) to escape the following characters:

  • leading and trailing whitespace
  • , = + < > # ; " \
If the value is a byte array, it is converted to hex notation (such as "#CEB1DF80").

public String get (int pos)

Retrieves a component of this name.

Parameters
pos the 0-based index of the component to retrieve. Must be in the range [0,size()).
Returns
  • the component at index posn

public Enumeration getAll ()

Retrieves the components of this name as an enumeration of strings. The effect on the enumeration of updates to this name is undefined. If the name has zero components, an empty (non-null) enumeration is returned.

Returns
  • an enumeration of the components of this name, each a string

public Name getPrefix (int pos)

Creates a name whose components consist of a prefix of the components of this name. Subsequent changes to this name will not affect the name that is returned and vice versa.

Parameters
pos the 0-based index of the component at which to stop. Must be in the range [0,size()].
Returns
  • a name consisting of the components at indexes in the range [0,posn).

public Name getSuffix (int pos)

Creates a name whose components consist of a suffix of the components in this name. Subsequent changes to this name do not affect the name that is returned and vice versa.

Parameters
pos the 0-based index of the component at which to start. Must be in the range [0,size()].
Returns
  • a name consisting of the components at indexes in the range [posn,size()). If posn is equal to size(), an empty name is returned.

public int hashCode ()

Returns a hash code value for the object. This method is supported for the benefit of hashtables such as those provided by java.util.Hashtable.

The general contract of hashCode is:

  • Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.
  • If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result.
  • It is not required that if two objects are unequal according to the equals(java.lang.Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hashtables.

As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)

Returns
  • a hash code value for this object.

public boolean isEmpty ()

Determines whether this name is empty. An empty name is one with zero components.

Returns
  • true if this name is empty, false otherwise

public Object remove (int pos)

Removes a component from this name. The component of this name at the specified position is removed. Components with indexes greater than this position are shifted down (toward index 0) by one.

Parameters
pos the index of the component to remove. Must be in the range [0,size()).
Returns
  • the component removed (a String)

public void setValuesCaseSensitive (boolean caseSensitive)

Controls whether string-values are treated as case-sensitive when the string values within names are compared. The default behavior is case-insensitive comparison.

public int size ()

Returns the number of components in this name.

Returns
  • the number of components in this name

public boolean startsWith (Name n)

Determines whether this name starts with a specified prefix. A name n is a prefix if it is equal to getPrefix(n.size()).

Parameters
n the name to check
Returns
  • true if n is a prefix of this name, false otherwise

public String toString ()

Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.

The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

 getClass().getName() + '@' + Integer.toHexString(hashCode())
 

Returns
  • a string representation of the object.

public static Object unescapeAttributeValue (String val)

Given an attribute value formated according to RFC 2253, returns the unformated value. Returns a string value as a string, and a binary value as a byte array.