scriptella.driver.ldap.ldif
Class LdifReader

java.lang.Object
  extended by scriptella.driver.ldap.ldif.LdifReader
All Implemented Interfaces:
java.lang.Iterable<Entry>, java.util.Iterator<Entry>

public class LdifReader
extends java.lang.Object
implements java.util.Iterator<Entry>, java.lang.Iterable<Entry>

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


Constructor Summary
LdifReader(scriptella.expression.LineIterator in)
          A constructor which takes a line iterator.
LdifReader(scriptella.expression.LineIterator in, long sizeLimit)
          * A constructor which takes a line iterator and a size limit.
LdifReader(java.lang.String string)
          For testing purposes.
 
Method Summary
 boolean containsEntries()
           
 long getSizeLimit()
           
protected  java.io.InputStream getUriStream(java.lang.String uri)
          Resolves URI to URL and returns a content stream.
 int getVersion()
           
 boolean hasNext()
          Tests to see if another LDIF is on the input channel.
 java.util.Iterator<Entry> iterator()
           
 Entry next()
          Gets the next LDIF on the channel.
 void parseAttributeValue(Entry entry, java.lang.String line)
          Parse an AttributeType/AttributeValue
 void remove()
          Always throws UnsupportedOperationException!
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LdifReader

public LdifReader(scriptella.expression.LineIterator in)
A constructor which takes a line iterator.

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

LdifReader

public LdifReader(scriptella.expression.LineIterator in,
                  long sizeLimit)
* A constructor which takes a line iterator and a size limit.

Parameters:
in - A Reader containing ldif formated input
sizeLimit - maximum file size that can be accepted for an attribute value

LdifReader

public LdifReader(java.lang.String string)
For testing purposes.

Method Detail

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.

getUriStream

protected java.io.InputStream getUriStream(java.lang.String uri)
                                    throws java.io.IOException
Resolves URI to URL and returns a content stream. This method just creates a new URL, subclasses may chnange this behaviour.

Parameters:
uri - URI to resolve.
Returns:
resolved URL content stream.
Throws:
java.io.IOException - if an I/O error occurs or URI is malformed.

parseAttributeValue

public void parseAttributeValue(Entry entry,
                                java.lang.String line)
Parse an AttributeType/AttributeValue

Parameters:
entry - The entry where to store the value
line - The line to parse

next

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

Specified by:
next in interface java.util.Iterator<Entry>
Returns:
the next LDIF as a String.

hasNext

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

Specified by:
hasNext in interface java.util.Iterator<Entry>
Returns:
true if another LDIF is available false otherwise.

remove

public void remove()
Always throws UnsupportedOperationException!

Specified by:
remove in interface java.util.Iterator<Entry>
See Also:
Iterator.remove()

iterator

public java.util.Iterator<Entry> iterator()
Specified by:
iterator in interface java.lang.Iterable<Entry>
Returns:
An iterator on the file

containsEntries

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


Copyright © Copyright 2006-2009 The Scriptella Project Team.