org.apache.directory.api.ldap.model.ldif
Class LdifReader

java.lang.Object
  extended by org.apache.directory.api.ldap.model.ldif.LdifReader
All Implemented Interfaces:
Closeable, Iterable<LdifEntry>
Direct Known Subclasses:
LdifAttributesReader

public class LdifReader
extends Object
implements Iterable<LdifEntry>, Closeable

  <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.
 

Author:
Apache Directory Project

Field Summary
protected static int ATTRVAL_SPEC
          State values for the modify operation : ATTRVAL_SPEC
protected static int ATTRVAL_SPEC_OR_SEP
          State values for the modify operation : ATTRVAL_SPEC_OR_SEP
protected static int CHANGE
          Type of element read : CHANGE
protected  boolean containsChanges
          A flag set if the ldif contains changes
protected  boolean containsEntries
          A flag set if the ldif contains entries
protected static int DEFAULT_VERSION
          The ldif file version default value
protected  Exception error
          An Exception to handle error message, has Iterator.next() can't throw exceptions
protected static int LDIF_ENTRY
          Type of element read : ENTRY
protected  List<String> lines
          A list of read lines
protected static int MOD_SPEC
          State values for the modify operation : MOD_SPEC
protected  int position
          The current position
protected  LdifEntry prefetched
          Iterator prefetched entry
protected  Reader reader
          The ldif Reader
protected static long SIZE_LIMIT_DEFAULT
          The default size limit : 1Mo
protected  long sizeLimit
          Size limit for file contained values
protected static int UNKNOWN
          Type of element read : UNKNOWN
protected  int version
          The ldif version
 
Constructor Summary
LdifReader()
          Constructors
LdifReader(File file)
          A constructor which takes a File
LdifReader(InputStream in)
          A constructor which takes an InputStream
LdifReader(Reader in)
          A constructor which takes a Reader
LdifReader(String ldifFileName)
          A constructor which takes a file name
 
Method Summary
 void close()
          
 boolean containsEntries()
           
 Exception getError()
           
protected  String getLine()
          gets a line from the underlying data store
 long getSizeLimit()
           
 int getVersion()
           
 boolean hasError()
           
 boolean hasNext()
          Tests to see if another LDIF is on the input channel.
protected  void init()
           
 Iterator<LdifEntry> iterator()
           
 LdifEntry next()
          Gets the next LDIF on the channel.
 void parseAttributeValue(LdifEntry entry, String line, String lowerLine)
          Parse an AttributeType/AttributeValue
static Attribute parseAttributeValue(String line)
          Parse an AttributeType/AttributeValue
 List<LdifEntry> parseLdif(BufferedReader reader)
          The main entry point of the LdifParser.
 List<LdifEntry> parseLdif(String ldif)
          A method which parses a ldif string and returns a list of entries.
 List<LdifEntry> parseLdifFile(String fileName)
          Parse a ldif file (using the default encoding).
 List<LdifEntry> parseLdifFile(String fileName, String encoding)
          Parse a ldif file, decoding it using the given charset encoding
protected static Object parseSimpleValue(String line, int pos)
          Parse the value part.
protected  Object parseValue(String line, int pos)
          Parse the value part.
protected  void readLines()
          Reads an entry in a ldif buffer, and returns the resulting lines, without comments, and unfolded.
 void remove()
          Always throws UnsupportedOperationException!
 void setSizeLimit(long sizeLimit)
          Set the maximum file size that can be accepted for an attribute value
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

lines

protected List<String> lines
A list of read lines


position

protected int position
The current position


DEFAULT_VERSION

protected static final int DEFAULT_VERSION
The ldif file version default value

See Also:
Constant Field Values

version

protected int version
The ldif version


LDIF_ENTRY

protected static final int LDIF_ENTRY
Type of element read : ENTRY

See Also:
Constant Field Values

CHANGE

protected static final int CHANGE
Type of element read : CHANGE

See Also:
Constant Field Values

UNKNOWN

protected static final int UNKNOWN
Type of element read : UNKNOWN

See Also:
Constant Field Values

sizeLimit

protected long sizeLimit
Size limit for file contained values


SIZE_LIMIT_DEFAULT

protected static final long SIZE_LIMIT_DEFAULT
The default size limit : 1Mo

See Also:
Constant Field Values

MOD_SPEC

protected static final int MOD_SPEC
State values for the modify operation : MOD_SPEC

See Also:
Constant Field Values

ATTRVAL_SPEC

protected static final int ATTRVAL_SPEC
State values for the modify operation : ATTRVAL_SPEC

See Also:
Constant Field Values

ATTRVAL_SPEC_OR_SEP

protected static final int ATTRVAL_SPEC_OR_SEP
State values for the modify operation : ATTRVAL_SPEC_OR_SEP

See Also:
Constant Field Values

prefetched

protected LdifEntry prefetched
Iterator prefetched entry


reader

protected Reader reader
The ldif Reader


containsEntries

protected boolean containsEntries
A flag set if the ldif contains entries


containsChanges

protected boolean containsChanges
A flag set if the ldif contains changes


error

protected Exception error
An Exception to handle error message, has Iterator.next() can't throw exceptions

Constructor Detail

LdifReader

public LdifReader()
Constructors


LdifReader

public LdifReader(String ldifFileName)
           throws LdapLdifException
A constructor which takes a file name

Parameters:
ldifFileName - A file name containing ldif formated input
Throws:
LdapLdifException - If the file cannot be processed or if the format is incorrect

LdifReader

public LdifReader(Reader in)
           throws LdapException
A constructor which takes a Reader

Parameters:
in - A Reader containing ldif formated input
Throws:
LdapException - If the file cannot be processed or if the format is incorrect

LdifReader

public LdifReader(InputStream in)
           throws LdapException
A constructor which takes an InputStream

Parameters:
in - An InputStream containing ldif formated input
Throws:
LdapException - If the file cannot be processed or if the format is incorrect

LdifReader

public LdifReader(File file)
           throws LdapLdifException
A constructor which takes a File

Parameters:
file - A File containing ldif formated input
Throws:
LdapLdifException - If the file cannot be processed or if the format is incorrect
Method Detail

init

protected void init()
             throws LdapException
Throws:
LdapException

getVersion

public int getVersion()
Returns:
The ldif file version

getSizeLimit

public long getSizeLimit()
Returns:
The maximum size of a file which is used into an attribute value.

setSizeLimit

public void setSizeLimit(long sizeLimit)
Set the maximum file size that can be accepted for an attribute value

Parameters:
sizeLimit - The size in bytes

parseSimpleValue

protected static Object parseSimpleValue(String line,
                                         int pos)
Parse the value part.

Parameters:
line - The line which contains the value
pos - The starting position in the line
Returns:
A String or a byte[], depending of the kind of value we get

parseValue

protected Object parseValue(String line,
                            int pos)
                     throws LdapLdifException
Parse the value part.

Parameters:
line - The line which contains the value
pos - The starting position in the line
Returns:
A String or a byte[], depending of the kind of value we get
Throws:
LdapLdifException - If something went wrong

parseAttributeValue

public static Attribute parseAttributeValue(String line)
Parse an AttributeType/AttributeValue

Parameters:
line - The line to parse
Returns:
the parsed Attribute

parseAttributeValue

public void parseAttributeValue(LdifEntry entry,
                                String line,
                                String lowerLine)
                         throws LdapException
Parse an AttributeType/AttributeValue

Parameters:
entry - The entry where to store the value
line - The line to parse
lowerLine - The same line, lowercased
Throws:
LdapException - If anything goes wrong

getLine

protected String getLine()
                  throws IOException
gets a line from the underlying data store

Returns:
a line of characters or null if EOF reached
Throws:
IOException - on read failure

readLines

protected void readLines()
                  throws LdapLdifException
Reads an entry in a ldif buffer, and returns the resulting lines, without comments, and unfolded. The lines represent *one* entry.

Throws:
LdapLdifException - If something went wrong

parseLdifFile

public List<LdifEntry> parseLdifFile(String fileName)
                              throws LdapLdifException
Parse a ldif file (using the default encoding).

Parameters:
fileName - The ldif file
Returns:
A list of entries
Throws:
LdapLdifException - If the parsing fails

parseLdifFile

public List<LdifEntry> parseLdifFile(String fileName,
                                     String encoding)
                              throws LdapLdifException
Parse a ldif file, decoding it using the given charset encoding

Parameters:
fileName - The ldif file
encoding - The charset encoding to use
Returns:
A list of entries
Throws:
LdapLdifException - If the parsing fails

parseLdif

public List<LdifEntry> parseLdif(String ldif)
                          throws LdapLdifException
A method which parses a ldif string and returns a list of entries.

Parameters:
ldif - The ldif string
Returns:
A list of entries, or an empty List
Throws:
LdapLdifException - If something went wrong

next

public LdifEntry next()
Gets the next LDIF on the channel.

Returns:
the next LDIF as a String.

hasNext

public boolean hasNext()
Tests to see if another LDIF is on the input channel.

Returns:
true if another LDIF is available false otherwise.

remove

public void remove()
Always throws UnsupportedOperationException!

See Also:
Iterator.remove()

iterator

public Iterator<LdifEntry> iterator()
Specified by:
iterator in interface Iterable<LdifEntry>
Returns:
An iterator on the file

hasError

public boolean hasError()
Returns:
True if an error occurred during parsing

getError

public Exception getError()
Returns:
The exception that occurs during an entry parsing

parseLdif

public List<LdifEntry> parseLdif(BufferedReader reader)
                          throws LdapException
The main entry point of the LdifParser. It reads a buffer and returns a List of entries.

Parameters:
reader - The buffer being processed
Returns:
A list of entries
Throws:
LdapException - If something went wrong

containsEntries

public boolean containsEntries()
Returns:
True if the ldif file contains entries, fals if it contains changes

close

public void close()
           throws IOException

Specified by:
close in interface Closeable
Throws:
IOException


Copyright © 2003-2013 The Apache Software Foundation. All Rights Reserved.