org.apache.directory.shared.ldap.name
Class RdnParser

java.lang.Object
  extended byorg.apache.directory.shared.ldap.name.RdnParser

public class RdnParser
extends java.lang.Object

This class parse the name-component part or the following BNF grammar (as of RFC2253, par. 3, and RFC1779, fig. 1) :
- <name-component> ::= <attributeType> <spaces> '=' <spaces> <attributeValue> <attributeTypeAndValues>
- <attributeTypeAndValues> ::= <spaces> '+' <spaces> <attributeType> <spaces> '=' <spaces> <attributeValue> <attributeTypeAndValues> | e
- <attributeType> ::= [a-zA-Z] <keychars> | <oidPrefix> [0-9] <digits> <oids> | [0-9] <digits> <oids>
- <keychars> ::= [a-zA-Z] <keychars> | [0-9] <keychars> | '-' <keychars> | e
- <oidPrefix> ::= 'OID.' | 'oid.' | e
- <oids> ::= '.' [0-9] <digits> <oids> | e
- <attributeValue> ::= <pairs-or-strings> | '#' <hexstring> |'"' <quotechar-or-pairs> '"'
- <pairs-or-strings> ::= '\' <pairchar> <pairs-or-strings> | <stringchar> <pairs-or-strings> | e
- <quotechar-or-pairs> ::= <quotechar> <quotechar-or-pairs> | '\' <pairchar> <quotechar-or-pairs> | e
- <pairchar> ::= ',' | '=' | '+' | '<' | '>' | '#' | ';' | '\' | '"' | [0-9a-fA-F] [0-9a-fA-F]
- <hexstring> ::= [0-9a-fA-F] [0-9a-fA-F] <hexpairs>
- <hexpairs> ::= [0-9a-fA-F] [0-9a-fA-F] <hexpairs> | e
- <digits> ::= [0-9] <digits> | e
- <stringchar> ::= [0x00-0xFF] - [,=+<>#;\"\n\r]
- <quotechar> ::= [0x00-0xFF] - [\"]
- <separator> ::= ',' | ';'
- <spaces> ::= ' ' <spaces> | e

A RDN is a part of a DN. It can be composed of many types, as in the RDN following RDN :
ou=value + cn=other value

In this case, we have to store an 'ou' and a 'cn' in the RDN.

The types are case insensitive.
Spaces before and after types and values are not stored.
Spaces before and after '+' are not stored.

Thus, we can consider that the following RDNs are equals :

'ou=test 1'
' ou=test 1'
'ou =test 1'
'ou= test 1'
'ou=test 1 '
' ou = test 1 '

So are the following :

'ou=test 1+cn=test 2'
'ou = test 1 + cn = test 2'
' ou =test 1+ cn =test 2 '
'cn = test 2 +ou = test 1'

but the following are not equal :
'ou=test 1'
'ou=test 1'
because we have more than one spaces inside the value.

Author:
Apache Directory Project

Constructor Summary
RdnParser()
           
 
Method Summary
static int parse(char[] chars, int pos, Rdn rdn)
          Parse a NameComponent :
static void parse(java.lang.String string, Rdn rdn)
          Parse a NameComponent :
static int unescapeValue(java.lang.String value)
          Parse this rule :
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RdnParser

public RdnParser()
Method Detail

unescapeValue

public static int unescapeValue(java.lang.String value)
                         throws java.lang.IllegalArgumentException
Parse this rule :

<attributeValue> ::= <pairs-or-strings> | '#' <hexstring> |'"' <quotechar-or-pairs> '"'
<pairs-or-strings> ::= '\' <pairchar> <pairs-or-strings> | <stringchar> <pairs-or-strings> | | e
<quotechar-or-pairs> ::= <quotechar> <quotechar-or-pairs> | '\' <pairchar> <quotechar-or-pairs> | e

Returns:
The new position in the char array, or PARSING_ERROR if the rule does not apply to the char array
Throws:
java.lang.IllegalArgumentException

parse

public static int parse(char[] chars,
                        int pos,
                        Rdn rdn)
                 throws javax.naming.InvalidNameException
Parse a NameComponent :

<name-component> ::= <attributeType> <spaces> '=' <spaces> <attributeValue> <nameComponents>

Parameters:
pos - The current position in the buffer
Returns:
The new position in the char array, or PARSING_ERROR if the rule does not apply to the char array
Throws:
javax.naming.InvalidNameException

parse

public static void parse(java.lang.String string,
                         Rdn rdn)
                  throws javax.naming.InvalidNameException
Parse a NameComponent :

<name-component> ::= <attributeType> <spaces> '=' <spaces> <attributeValue> <nameComponents>

Parameters:
string - The buffer to parse
rdn - The RDN to fill. Beware that if the RDN is not empty, the new AttributeTypeAndValue will be added.
Throws:
javax.naming.InvalidNameException


Copyright © 2003-2006 . All Rights Reserved.