org.apache.directory.shared.ldap.ldif
Class LdifComposerImpl

java.lang.Object
  extended by org.apache.directory.shared.ldap.ldif.LdifComposerImpl
All Implemented Interfaces:
LdifComposer

public class LdifComposerImpl
extends java.lang.Object
implements LdifComposer

An LDAP Data Interchange Format (LDIF) composer.

  <ldif-file> ::= "version:" <fill> <number> <seps> <dn-spec> <sep> 
  <ldif-content-change>
  
  <ldif-content-change> ::= 
    <number> <oid> <options-e> <value-spec> <sep> <attrval-specs-e> 
    <ldif-attrval-record-e> | 
    <alpha> <chars-e> <options-e> <value-spec> <sep> <attrval-specs-e> 
    <ldif-attrval-record-e> | 
    "control:" <fill> <number> <oid> <spaces-e> <criticality> 
    <value-spec-e> <sep> <controls-e> 
        "changetype:" <fill> <changerecord-type> <ldif-change-record-e> |
    "changetype:" <fill> <changerecord-type> <ldif-change-record-e>
                              
  <ldif-attrval-record-e> ::= <seps> <dn-spec> <sep> <attributeType> 
    <options-e> <value-spec> <sep> <attrval-specs-e> 
    <ldif-attrval-record-e> | e
                              
  <ldif-change-record-e> ::= <seps> <dn-spec> <sep> <controls-e> 
    "changetype:" <fill> <changerecord-type> <ldif-change-record-e> | e
                              
  <dn-spec> ::= "dn:" <fill> <safe-string> | "dn::" <fill> <base64-string>
                              
  <controls-e> ::= "control:" <fill> <number> <oid> <spaces-e> <criticality> 
    <value-spec-e> <sep> <controls-e> | e
                              
  <criticality> ::= "true" | "false" | e
                              
  <oid> ::= '.' <number> <oid> | e
                              
  <attrval-specs-e> ::= <number> <oid> <options-e> <value-spec> <sep> 
  <attrval-specs-e> | 
    <alpha> <chars-e> <options-e> <value-spec> <sep> <attrval-specs-e> | e
                              
  <value-spec-e> ::= <value-spec> | e
  
  <value-spec> ::= ':' <fill> <safe-string-e> | 
    "::" <fill> <base64-chars> | 
    ":<" <fill> <url>
  
  <attributeType> ::= <number> <oid> | <alpha> <chars-e>
  
  <options-e> ::= ';' <char> <chars-e> <options-e> |e
                              
  <chars-e> ::= <char> <chars-e> |  e
  
  <changerecord-type> ::= "add" <sep> <attributeType> 
  <options-e> <value-spec> <sep> <attrval-specs-e> | 
    "delete" <sep> | 
    "modify" <sep> <mod-type> <fill> <attributeType> <options-e> 
    <sep> <attrval-specs-e> <sep> '-' <sep> <mod-specs-e> | 
    "moddn" <sep> <newrdn> <sep> "deleteoldrdn:" <fill> 
    <0-1> <sep> <newsuperior-e> <sep> |
    "modrdn" <sep> <newrdn> <sep> "deleteoldrdn:" <fill> 
    <0-1> <sep> <newsuperior-e> <sep>
  
  <newrdn> ::= ':' <fill> <safe-string> | "::" <fill> <base64-chars>
  
  <newsuperior-e> ::= "newsuperior" <newrdn> | e
  
  <mod-specs-e> ::= <mod-type> <fill> <attributeType> <options-e> 
    <sep> <attrval-specs-e> <sep> '-' <sep> <mod-specs-e> | e
  
  <mod-type> ::= "add:" | "delete:" | "replace:"
  
  <url> ::= <a Uniform Resource Locator, as defined in [6]>
  
  
  
  LEXICAL
  -------
  
  <fill>           ::= ' ' <fill> | e
  <char>           ::= <alpha> | <digit> | '-'
  <number>         ::= <digit> <digits>
  <0-1>            ::= '0' | '1'
  <digits>         ::= <digit> <digits> | e
  <digit>          ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
  <seps>           ::= <sep> <seps-e> 
  <seps-e>         ::= <sep> <seps-e> | e
  <sep>            ::= 0x0D 0x0A | 0x0A
  <spaces>         ::= ' ' <spaces-e>
  <spaces-e>       ::= ' ' <spaces-e> | e
  <safe-string-e>  ::= <safe-string> | e
  <safe-string>    ::= <safe-init-char> <safe-chars>
  <safe-init-char> ::= [0x01-0x09] | 0x0B | 0x0C | [0x0E-0x1F] | [0x21-0x39] | 0x3B | [0x3D-0x7F]
  <safe-chars>     ::= <safe-char> <safe-chars> | e
  <safe-char>      ::= [0x01-0x09] | 0x0B | 0x0C | [0x0E-0x7F]
  <base64-string>  ::= <base64-char> <base64-chars>
  <base64-chars>   ::= <base64-char> <base64-chars> | e
  <base64-char>    ::= 0x2B | 0x2F | [0x30-0x39] | 0x3D | [0x41-9x5A] | [0x61-0x7A]
  <alpha>          ::= [0x41-0x5A] | [0x61-0x7A]
  
  COMMENTS
  --------
  - The ldap-oid VN is not correct in the RFC-2849. It has been changed from 1*DIGIT 0*1("." 1*DIGIT) to
  DIGIT+ ("." DIGIT+)*
  - The mod-spec lacks a sep between *attrval-spec and "-".
  - The BASE64-UTF8-STRING should be BASE64-CHAR BASE64-STRING
  - The ValueSpec rule must accept multilines values. In this case, we have a LF followed by a 
  single space before the continued value.
 

Version:
$Revision: 687181 $
Author:
Apache Directory Project

Constructor Summary
LdifComposerImpl()
           
 
Method Summary
 char[] base64encode(byte[] byteArray)
          Encodes an binary data into a base64 String.
 java.lang.String compose(java.util.Map<java.lang.String,?> attrHash)
          Generates an LDIF from a multi map.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LdifComposerImpl

public LdifComposerImpl()
Method Detail

compose

public java.lang.String compose(java.util.Map<java.lang.String,?> attrHash)
Generates an LDIF from a multi map.

Specified by:
compose in interface LdifComposer
Parameters:
attrHash - the multi map of single and multivalued attributes.
Returns:
the LDIF as a String.

base64encode

public char[] base64encode(byte[] byteArray)
Encodes an binary data into a base64 String.

Parameters:
byteArray - the value of a binary attribute.
Returns:
the encoded binary data as a char array.


Copyright © 2003-2009 Apache Software Foundation. All Rights Reserved.