public final class Dn extends Object implements Iterable<Rdn>, Comparable<Dn>
The following are examples of string representations of DNs:
UID=nobody@example.com,DC=example,DC=com CN=John Smith,OU=Sales,O=ACME Limited,L=Moab,ST=Utah,C=US
Modifier and Type | Method and Description |
---|---|
Dn |
child(Dn dn)
Returns a DN which is subordinate to this DN and having the additional
RDN components contained in the provided DN.
|
Dn |
child(Rdn rdn)
Returns a DN which is an immediate child of this DN and having the
specified RDN.
|
Dn |
child(String dn)
Returns a DN which is subordinate to this DN and having the additional
RDN components contained in the provided DN decoded using the default
schema.
|
Dn |
child(String attributeType,
Object attributeValue)
Returns a DN which is an immediate child of this DN and with an RDN
having the provided attribute type and value decoded using the default
schema.
|
int |
compareTo(Dn dn) |
static Dn |
emptyDn()
Returns the empty DN.
|
boolean |
equals(Object obj) |
static String |
escapeAttributeValue(Object attributeValue)
Returns the LDAP string representation of the provided DN attribute value
in a form suitable for substitution directly into a DN string.
|
static Dn |
format(String template,
Object... attributeValues)
Creates a new DN using the provided DN template and unescaped attribute
values using the default schema.
|
static Dn |
format(String template,
Schema schema,
Object... attributeValues)
Creates a new DN using the provided DN template and unescaped attribute
values using the provided schema.
|
int |
hashCode() |
boolean |
isChildOf(Dn dn)
Returns
true if this DN is an immediate child of the provided DN. |
boolean |
isChildOf(String dn)
Returns
true if this DN is an immediate child of the provided DN
decoded using the default schema. |
boolean |
isEmpty()
Returns
true if this DN contains zero RDN components. |
boolean |
isInScopeOf(Dn dn,
SearchScope scope)
Returns
true if this DN matches the provided base DN and search
scope. |
boolean |
isInScopeOf(String dn,
SearchScope scope)
Returns
true if this DN matches the provided base DN and search
scope. |
boolean |
isParentOf(Dn dn)
Returns
true if this DN is the immediate parent of the provided
DN. |
boolean |
isParentOf(String dn)
Returns
true if this DN is the immediate parent of the provided
DN. |
boolean |
isRootDn()
Deprecated.
use
isEmpty() instead |
boolean |
isSubordinateOrEqualTo(Dn dn)
Returns
true if this DN is subordinate to or equal to the provided DN. |
boolean |
isSubordinateOrEqualTo(String dn)
Returns
true if this DN is subordinate to or equal to the provided DN. |
boolean |
isSubordinateTo(Dn dn)
Returns
true if this DN is subordinate to, but not equal to the provided DN. |
boolean |
isSubordinateTo(String dn)
Returns
true if this DN is subordinate to, but not equal to the provided DN. |
boolean |
isSuperiorOrEqualTo(Dn dn)
Returns
true if this DN is superior to or equal to the provided DN. |
boolean |
isSuperiorOrEqualTo(String dn)
Returns
true if this DN is superior to or equal to the provided
DN. |
boolean |
isSuperiorTo(Dn dn)
Returns
true if this DN is superior to, but not equal to the provided DN. |
boolean |
isSuperiorTo(String dn)
Returns
true if this DN is superior to, but not equal to the provided DN. |
Iterator<Rdn> |
iterator()
Returns an iterator of the RDNs contained in this DN.
|
Dn |
localName(int index)
Returns the DN whose content is the specified number of RDNs from this
DN.
|
Dn |
parent()
Returns the DN which is the immediate parent of this DN, or
null
if this DN is the Root DN. |
Dn |
parent(int index)
Returns the DN which is equal to this DN with the specified number of
RDNs removed.
|
Rdn |
rdn()
Returns the RDN of this DN, or
null if this DN is the Root DN. |
Rdn |
rdn(int index)
Returns the RDN at the specified index for this DN,
or
null if no such RDN exists. |
Dn |
rename(Dn fromDN,
Dn toDN)
Returns a copy of this DN whose parent DN,
fromDN , has been
renamed to the new parent DN, toDN . |
Dn |
rename(Rdn newRdn,
Dn newSuperior)
Returns a DN whose value is the result of applying LDAP modify DN semantics to this DN.
|
static Dn |
rootDn()
Deprecated.
use
emptyDn() instead |
int |
size()
Returns the number of RDN components in this DN.
|
ByteString |
toNormalizedByteString()
Retrieves a normalized byte string representation of this DN.
|
String |
toNormalizedUrlSafeString()
Retrieves a normalized string representation of this DN.
|
String |
toString()
Returns the RFC 4514 string representation of this DN.
|
UUID |
toUuid()
Returns a UUID whose content is based on the normalized content of this DN.
|
static Dn |
valueOf(ByteString dn)
Parses the provided LDAP string representation of a DN using the default schema.
|
static Dn |
valueOf(String dn)
Parses the provided LDAP string representation of a DN using the default schema.
|
static Dn |
valueOf(String dn,
Schema schema)
Parses the provided LDAP string representation of a DN using the provided schema.
|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
forEach, spliterator
public static String escapeAttributeValue(Object attributeValue)
String#format(String, Object...)
. The following
example illustrates two approaches to constructing a DN:
// This may contain user input. String attributeValue = ...; // Using the equality filter constructor: DN dn = DN.valueOf("ou=people,dc=example,dc=com").child("uid", attributeValue); // Using a String template: String dnTemplate = "uid=%s,ou=people,dc=example,dc=com"; String dnString = String.format(dnTemplate, DN.escapeAttributeValue(attributeValue)); DN dn = DN.valueOf(dnString);Note: attribute values do not and should not be escaped before passing them to constructors like
child(String, Object)
.
Escaping is only required when creating DN strings.attributeValue
- The attribute value.public static Dn format(String template, Object... attributeValues) throws LocalizedIllegalArgumentException
String.format(String, Object...)
. Finally, the formatted string
is parsed as an LDAP DN using valueOf(String)
.
This method may be useful in cases where the structure of a DN is not known at compile time, for example, it may be obtained from a configuration file. Example usage:
String template = "uid=%s,ou=people,dc=example,dc=com"; DN dn = DN.format(template, "bjensen");
template
- The DN template.attributeValues
- The attribute values to be substituted into the template.DN
.LocalizedIllegalArgumentException
- If the formatted template is not a valid LDAP string
representation of a DN.escapeAttributeValue(Object)
public static Dn format(String template, Schema schema, Object... attributeValues) throws LocalizedIllegalArgumentException
String.format(String, Object...)
. Finally, the formatted string
is parsed as an LDAP DN using valueOf(String)
.
This method may be useful in cases where the structure of a DN is not known at compile time, for example, it may be obtained from a configuration file. Example usage:
String template = "uid=%s,ou=people,dc=example,dc=com"; DN dn = DN.format(template, "bjensen");
template
- The DN template.schema
- The schema to use when parsing the DN.attributeValues
- The attribute values to be substituted into the template.DN
.LocalizedIllegalArgumentException
- If the formatted template is not a valid LDAP string
representation of a DN.escapeAttributeValue(Object)
public static Dn emptyDn()
@Deprecated public static Dn rootDn()
emptyDn()
insteadpublic static Dn valueOf(String dn) throws LocalizedIllegalArgumentException
dn
- The LDAP string representation of a DN.LocalizedIllegalArgumentException
- If dn
is not a valid LDAP string representation of a DN.NullPointerException
- If dn
was null
.format(String, Object...)
public static Dn valueOf(String dn, Schema schema) throws LocalizedIllegalArgumentException
dn
- The LDAP string representation of a DN.schema
- The schema to use when parsing the DN.LocalizedIllegalArgumentException
- If dn
is not a valid LDAP string representation of a DN.NullPointerException
- If dn
or schema
was null
.format(String, Schema, Object...)
public static Dn valueOf(ByteString dn) throws LocalizedIllegalArgumentException
dn
- The LDAP byte string representation of a DN.LocalizedIllegalArgumentException
- If dn
is not a valid LDAP byte string representation of a DN.NullPointerException
- If dn
was null
.public Dn child(Dn dn)
dn
- The DN containing the RDN components to be added to this DN.NullPointerException
- If dn
was null
.public Dn child(Rdn rdn)
Note: the child DN whose RDN is Rdn.maxValue()
compares
greater than all other possible child DNs, and may be used to construct
range queries against DN keyed sorted collections such as
SortedSet
and SortedMap
.
rdn
- The RDN for the child DN.NullPointerException
- If rdn
was null
.Rdn.maxValue()
public Dn child(String dn) throws LocalizedIllegalArgumentException
dn
- The DN containing the RDN components to be added to this DN.LocalizedIllegalArgumentException
- If dn
is not a valid LDAP string representation of a
DN.NullPointerException
- If dn
was null
.public Dn child(String attributeType, Object attributeValue)
If attributeValue
is not an instance of ByteString
then
it will be converted using the ByteString.valueOfObject(Object)
method.
attributeType
- The attribute type.attributeValue
- The attribute value.UnknownSchemaElementException
- If attributeType
was not found in the default schema.NullPointerException
- If attributeType
or attributeValue
was
null
.public int compareTo(Dn dn)
compareTo
in interface Comparable<Dn>
public boolean isChildOf(Dn dn)
true
if this DN is an immediate child of the provided DN.dn
- The potential parent DN.true
if this DN is the immediate child of the provided
DN, otherwise false
.NullPointerException
- If dn
was null
.public boolean isChildOf(String dn) throws LocalizedIllegalArgumentException
true
if this DN is an immediate child of the provided DN
decoded using the default schema.dn
- The potential parent DN.true
if this DN is the immediate child of the provided
DN, otherwise false
.LocalizedIllegalArgumentException
- If dn
is not a valid LDAP string representation of a
DN.NullPointerException
- If dn
was null
.public boolean isInScopeOf(Dn dn, SearchScope scope)
true
if this DN matches the provided base DN and search
scope.dn
- The base DN.scope
- The search scope.true
if this DN matches the provided base DN and search
scope, otherwise false
.NullPointerException
- If dn
or scope
was null
.public boolean isInScopeOf(String dn, SearchScope scope) throws LocalizedIllegalArgumentException
true
if this DN matches the provided base DN and search
scope.dn
- The base DN.scope
- The search scope.true
if this DN matches the provided base DN and search
scope, otherwise false
.LocalizedIllegalArgumentException
- If dn
is not a valid LDAP string representation of a
DN.NullPointerException
- If dn
or scope
was null
.public boolean isParentOf(Dn dn)
true
if this DN is the immediate parent of the provided
DN.dn
- The potential child DN.true
if this DN is the immediate parent of the provided
DN, otherwise false
.NullPointerException
- If dn
was null
.public boolean isParentOf(String dn) throws LocalizedIllegalArgumentException
true
if this DN is the immediate parent of the provided
DN.dn
- The potential child DN.true
if this DN is the immediate parent of the provided
DN, otherwise false
.LocalizedIllegalArgumentException
- If dn
is not a valid LDAP string representation of a
DN.NullPointerException
- If dn
was null
.@Deprecated public boolean isRootDn()
isEmpty()
insteadtrue
if this DN contains zero RDN components. In other words, this method returns true
if
this DN is the empty DN
.true
if this DN contains zero RDN components.emptyDn()
public boolean isEmpty()
true
if this DN contains zero RDN components. In other words, this method returns true
if this DN is the empty DN
.true
if this DN contains zero RDN components.emptyDn()
public boolean isSubordinateOrEqualTo(Dn dn)
true
if this DN is subordinate to or equal to the provided DN.dn
- The potential parent DN.true
if this DN is subordinate to or equal to the provided DN, otherwise false
.NullPointerException
- If dn
was null
.public boolean isSubordinateOrEqualTo(String dn) throws LocalizedIllegalArgumentException
true
if this DN is subordinate to or equal to the provided DN.dn
- The potential parent DN.true
if this DN is subordinate to or equal to the provided DN, otherwise false
.LocalizedIllegalArgumentException
- If dn
is not a valid LDAP string representation of a DN.NullPointerException
- If dn
was null
.public boolean isSubordinateTo(String dn)
true
if this DN is subordinate to, but not equal to the provided DN.dn
- The potential parent DN.true
if this DN is subordinate to, but not equal to the provided DN, otherwise false
.NullPointerException
- If dn
was null
.public boolean isSubordinateTo(Dn dn)
true
if this DN is subordinate to, but not equal to the provided DN.dn
- The potential parent DN.true
if this DN is subordinate to, but not equal to the provided DN, otherwise false
.NullPointerException
- If dn
was null
.public boolean isSuperiorOrEqualTo(Dn dn)
true
if this DN is superior to or equal to the provided DN.dn
- The potential child DN.true
if this DN is superior to or equal to the provided DN, otherwise false
.NullPointerException
- If dn
was null
.public boolean isSuperiorOrEqualTo(String dn) throws LocalizedIllegalArgumentException
true
if this DN is superior to or equal to the provided
DN.dn
- The potential child DN.true
if this DN is superior to or equal to the provided
DN, otherwise false
.LocalizedIllegalArgumentException
- If dn
is not a valid LDAP string representation of a
DN.NullPointerException
- If dn
was null
.public boolean isSuperiorTo(String dn)
true
if this DN is superior to, but not equal to the provided DN.dn
- The potential child DN.true
if this DN is superior to, but not equal to the provided DN, otherwise false
.NullPointerException
- If dn
was null
.public boolean isSuperiorTo(Dn dn)
true
if this DN is superior to, but not equal to the provided DN.dn
- The potential child DN.true
if this DN is superior to, but not equal to the provided DN, otherwise false
.NullPointerException
- If dn
was null
.public Iterator<Rdn> iterator()
Attempts to remove RDNs using an iterator's remove()
method are not permitted and will result in an
UnsupportedOperationException
being thrown.
public Dn localName(int index)
dn.localName(0).isRootDN(); dn.localName(1).equals(rootDN.child(dn.rdn())); dn.localName(dn.size()).equals(dn);Said otherwise, a new DN is built using
index
RDNs,
retained in the same order, starting from the left.index
- The number of RDNs to be included in the local name.IllegalArgumentException
- If index
is less than zero.for the reverse operation (starting from the right)
public Dn parent()
null
if this DN is the Root DN.
This method is equivalent to:
parent(1);
null
if this DN is the Root DN.public Dn parent(int index)
index
is zero then this DN will be
returned (identity).
Said otherwise, a new DN is built using index
RDNs,
retained in the same order, starting from the right.index
- The number of RDNs to be removed.null
if the parent of the Root DN is
reached.IllegalArgumentException
- If index
is less than zero.for the reverse operation (starting from the left)
public Rdn rdn()
null
if this DN is the Root DN.
This is the equivalent of calling dn.rdn(0)
.
null
if this DN is the Root DN.public Rdn rdn(int index)
null
if no such RDN exists.
Here is an example usage:
DN.valueOf("ou=people,dc=example,dc=com").rdn(0) => "ou=people"
DN.valueOf("ou=people,dc=example,dc=com").rdn(1) => "dc=example"
DN.valueOf("ou=people,dc=example,dc=com").rdn(2) => "dc=com"
DN.valueOf("ou=people,dc=example,dc=com").rdn(3) => null
index
- The index of the requested RDN.null
if no such RDN exists.IllegalArgumentException
- If index
is less than zero.public Dn rename(Dn fromDN, Dn toDN)
fromDN
, has been
renamed to the new parent DN, toDN
. If this DN is not subordinate
or equal to fromDN
then this DN is returned (i.e. the DN is not
renamed).fromDN
- The old parent DN.toDN
- The new parent DN.NullPointerException
- If fromDN
or toDN
was null
.public Dn rename(Rdn newRdn, Dn newSuperior)
newSuperior
, if provided, otherwise it will be left unchanged. The
RDN of the returned DN will be set to newRdn
.newRdn
- The new RDN, which must not be null
.newSuperior
- The optional new parent, which may be null
indicating that the parent should remain the same.NullPointerException
- If newRdn
was null
.public int size()
public String toString()
toString
in class Object
public ByteString toNormalizedByteString()
This representation is suitable for equality and comparisons, and
for providing a natural hierarchical ordering.
However, it is not a valid DN and can't be reverted to a valid DN.
You should consider using a CompactDn
as an alternative.
public String toNormalizedUrlSafeString()
This representation is safe to use in an URL or in a file name. However, it is not a valid DN and can't be reverted to a valid DN.
public UUID toUuid()
Copyright 2010-2022 ForgeRock AS.