From 26a523a58bb1611dffabccdae6f8085d2f65ae8f Mon Sep 17 00:00:00 2001 From: Ulrik Sandberg Date: Sun, 10 Oct 2010 21:41:37 +0000 Subject: [PATCH] Added Keith's documentation for the LDIF parser. Updated package dependencies doc. --- src/docbkx/index.xml | 5 + src/docbkx/ldif-parsing.xml | 166 ++++++++++++++++++ src/docbkx/overview.xml | 70 +++++++- .../resources/images/package-dependencies.png | Bin 14128 -> 25754 bytes src/docbkx/resources/xsl/fopdf.xsl | 2 +- 5 files changed, 236 insertions(+), 7 deletions(-) create mode 100644 src/docbkx/ldif-parsing.xml diff --git a/src/docbkx/index.xml b/src/docbkx/index.xml index ecd11c27..8f1f762e 100644 --- a/src/docbkx/index.xml +++ b/src/docbkx/index.xml @@ -19,6 +19,10 @@ Eric Dalquist + + Keith + Barlow + @@ -44,4 +48,5 @@ + diff --git a/src/docbkx/ldif-parsing.xml b/src/docbkx/ldif-parsing.xml new file mode 100644 index 00000000..6444d087 --- /dev/null +++ b/src/docbkx/ldif-parsing.xml @@ -0,0 +1,166 @@ + + + + LDIF Parsing + +
+ Introduction + + LDIF files are the standard medium for serializing directoy data to + a flat file for archival, transferrence, or altercation. The + org.springframework.ldap.ldif package provides classes + needed to read ldap objects from flat files and deserialize them into + tangible objects. + + The LdifParser is the main class of the + org.springframework.ldap.ldif package and is capable of + parsing files that are RFC 2849 compliant. This class reads lines from a + resource and assembles them into an LdapAttributes object. + The LdifParser currently ignores + changetype LDIF entries as their usefulness in the + context of an application has yet to be determined. +
+ +
+ Object Representation + + Two classes in the org.springframework.ldap.core + package provide the means to represent an LDIF in code: + + + + LdapAttribute - Extends + javax.naming.directory.BasicAttribute adding support + for LDIF options as defined in RFC2849. + + + + LdapAttributes - Extends + javax.naming.directory.BasicAttributes adding + specialized support for DNs. + + + + LdapAttribute objects represent options as a + Set<String>. The DN support added to the + LdapAttributes object employs the + org.springframework.ldap.core.DistuishedName class. +
+ +
+ The Parser + + The Parser interface provides the foundation for + operation and employs three supporting policy definitions: + + + + SeparatorPolicy - establishes the mechanism by + which lines are assembled into attributes. + + + + AttributeValidationPolicy - ensures that + attributes are correctly structured prior to parsing. + + + + Specification - provides a mechanism by which + object structure can be validated after assembly. + + + + The default implementations of these interfaces are the + org.springframework.ldap.ldif.parser.LdifParser, the + org.springframework.ldap.ldif.support.SeparatorPolicy, and + the + org.springframework.ldap.ldif.support.DefaultAttributeValidationPolicy, + and the + org.springframework.ldap.schema.DefaultSchemaSpecification + respectively. Together, these 4 classes parse a resource line by line and + translate the data into LdapAttributes objects. + + The SeparatorPolicy determines how individual + lines read from the source file should be interpreted as the LDIF + specification allows attributes to span multiple lines. The default policy + assess lines in the context of the order in which they were read to + determine the nature of the line in consideration. + control attributes and + changetype records are ignored. + + The DefaultAttributeValidationPolicy uses REGEX + expressions to ensure each attribute conforms to a valid attribute format + according to RFC 2849 once parsed. If an attribute fails validation, an + InvalidAttributeFormatException is logged and the record is + skipped (the parser returns null). +
+ +
+ Schema Validation + + A mechanism for validating parsed objects against a schema and is + available via the Specification interface in the + org.springframework.ldap.schema package. The + DefaultSchemaSpecification does not do any validation and + is available for instances where records are known to be valid and not + required to be checked. This option saves the performance penalty that + validation imposes. The BasicSchemaSpecification applies + basic checks such as ensuring DN and object class declarations have been + provided. Currently, validation against an actual schema requires + implementation of the Specification interface. +
+ +
+ Spring Batch Integration + + While the LdifParser can be employed by any + application that requires parsing of LDIF files, Spring offers a batch + processing framework that offers many file processing utilities for + parsing delimited files such as CSV. The + org.springframework.ldap.ldif.batch package offers the + classes necessary for using the LdifParser as a valid + configuration option in the Spring Batch framework. + + There are 5 classes in this package which offer three basic use + cases: + + + + Use Case 1: Read LDIF records from a file and return an + LdapAttributes object. + + + + Use Case 2: Read LDIF records from a file and map records to + Java objects (POJOs). + + + + Use Case 3: Write LDIF records to a file. + + + + The first use case is accomplished with the LdifReader. This class + extends Spring Batch's + AbstractItemCountingItemSteamItemReader and implements its + ResourceAwareItemReaderItemStream. It fits naturally into + the framework and can be used to read LdapAttributes + objects from a file. + + The MappingLdifReader can be used to map LDIF objects + directly to any POJO. This class requires an implementation of the + RecordMapper interface be provided. This implementation + should implement the logic for mapping objects to POJOs. + + The RecordCallbackHandler can be implemented and + provided to either reader. This handler can be used to operate on skipped + records. Consult the Spring Batch documentation for more + information. + + The last member of this package, the LdifAggregator, + can be used to write LDIF records to a file. This class simply invokes the + toString() method of the LdapAttributes + object. +
+
diff --git a/src/docbkx/overview.xml b/src/docbkx/overview.xml index cc18f48c..4ba53e26 100644 --- a/src/docbkx/overview.xml +++ b/src/docbkx/overview.xml @@ -209,6 +209,9 @@ public class PersonDaoImpl implements PersonDao { commons-pool (If you are planning to use the pooling functionality) + + spring-batch (If you are planning to use the LDIF parsing functionality together with Spring Batch) + @@ -335,8 +338,8 @@ public class PersonDaoImpl implements PersonDao { - Dependencies: ldap, ldap.core, ldap.pool, spring-beans, spring-tx - commons-lang, commons-logging, commons-pool + Dependencies: ldap, ldap.core, ldap.pool, ldap.pool.validation, + spring-beans, spring-tx, commons-lang, commons-logging, commons-pool @@ -362,7 +365,7 @@ public class PersonDaoImpl implements PersonDao { - Dependencies: ldap, spring-core, commons-logging + Dependencies: ldap, spring-core, commons-lang, commons-logging @@ -422,7 +425,7 @@ public class PersonDaoImpl implements PersonDao { - Dependencies: ldap.core, transaction.compensating, + Dependencies: ldap.core, ldap.core.support, transaction.compensating, spring-core, commons-lang, commons-logging @@ -437,7 +440,8 @@ public class PersonDaoImpl implements PersonDao { Dependencies: ldap, ldap.core, ldap.support, ldap.transaction.compensating, - transaction.compensating, spring-tx, spring-jdbc, spring-orm, commons-logging + ldap.transaction.compensating.support, transaction.compensating, + spring-tx, spring-jdbc, spring-orm, commons-logging @@ -455,10 +459,64 @@ public class PersonDaoImpl implements PersonDao { + + org.springframework.ldap.ldif + + The ldap.ldif package provides support for parsing LDIF + files. + + + + Dependencies: ldap.core + + + + + + org.springframework.ldap.ldif.batch + + The ldap.ldif.batch package provides the classes necessary to + use the LDIF parser in the Spring Batch framework. + + + + Dependencies: ldap.core, ldap.ldif.parser, spring-batch, + spring-core, spring-beans, commons-logging + + + + + + org.springframework.ldap.ldif.parser + + The ldap.ldif.parser package provides the parser classes + and interfaces. + + + + Dependencies: ldap.core, ldap.schema, ldap.ldif, ldap.ldif.support, + spring-core, spring-beans, commons-lang, commons-logging + + + + + + org.springframework.ldap.ldif.support + + The ldap.ldif.support package provides the necessary auxiliary + classes utilized by the LDIF Parser. + + + + Dependencies: ldap.core, ldap.ldif, commons-lang, commons-logging + + + + For the exact list of jar dependencies, see the Spring LDAP Maven2 Project Object Model (POM) files in the source tree. - + Support diff --git a/src/docbkx/resources/images/package-dependencies.png b/src/docbkx/resources/images/package-dependencies.png index 91ae4af60521900a0fc2234e2d282c95d89978ae..eca8c1d4bb8e0df8fbc08a4be59e130d18dd1482 100644 GIT binary patch literal 25754 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%0A*nc%_Fu=XE7&%unOoH$ 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 literal 14128 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 Y)D5#;{m=|f!XYTgs7O~zz6t#Q0DfOmjsO4v diff --git a/src/docbkx/resources/xsl/fopdf.xsl b/src/docbkx/resources/xsl/fopdf.xsl index d8ea0630..b71f10d6 100644 --- a/src/docbkx/resources/xsl/fopdf.xsl +++ b/src/docbkx/resources/xsl/fopdf.xsl @@ -49,7 +49,7 @@ - Copyright © 2005-2009 + Copyright © 2005-2010 ,