<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
-->
<document>
  <properties>
    <author email="jmachols@apache.org">Jeff Machols</author>
    <title>Apache Directory Project: LDAP Common Code</title>
  </properties>
  
  <body>
    <section name="Overview">
      <p>LDAP Common Code</p>
      <p> 
      This project contains code and utilities common to the LDAP protocol.
      </p>
    </section>
    <section name="LDAP Common Packages">
      <subsection name="Filter">
        <p>
          The filter package will parsese and LDAP expression into 
          a filter expression tree as defined in <a href="http://www.ietf.org/rfc/rfc2254.txt">RFC 2254</a>
        </p>  
      </subsection>
        
      <subsection name="LDIF">
        <p>
          The The LDAP Data Interchange Format (LDIF) parsing 
          package Parses an LDIF into a multimap or a JNDI 
          Attributes instance of attributeToPropertyMapping key/value pairs with
          potential more than one attributeToPropertyMapping value per attributeToPropertyMapping.
          This parser populates the MultiMap or Attributes 
          instance with all attributeToPropertyMappings within the LDIF including
          control attributeToPropertyMappings like the 'dn' and the changeType.
        </p>
        <p>
          The package contain an LDIF entry class that can be used.  Along
          with the parsing utility, the embedding application can LDIF
          parsing and management without becomming an expert on the RFC.
          Addition details about LDIF can be obtained from the 
          <a href="http://www.ietf.org/rfc/rfc2849.txt">LDIF RFC</a>
        </p>        
      </subsection>
      
      <subsection name="Message">
      	<p>
          The LDAP Common Messaging package provides a framework for
          all LDAP request and response messages.  Each of the reponses
          and requests have an implementation.
      	</p>
      </subsection>
      
      <subsection name="Name">
        <p>
          This package provides LDAP distinguished name creation and 
          normalization.  This provides a common method for ensuring 
          you are creating the entry DN correctly.  Failure to properly
          create and normalize the DN of an entry will result in unpredicatble
          results when operations are performed on the entry.  
        </p>
      </subsection>
      
    </section>
  </body>
</document>
