You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2005/08/21 18:54:00 UTC

svn commit: r234264 [10/11] - in /directory/shared/ldap/branches/new-codec-integration/apache2-provider/src: ./ java/ java/main/ java/main/org/ java/main/org/apache/ java/main/org/apache/asn1new/ java/main/org/apache/asn1new/ldap/ java/main/org/apache/...

Added: directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SearchRequest.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SearchRequest.java?rev=234264&view=auto
==============================================================================
--- directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SearchRequest.java (added)
+++ directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SearchRequest.java Sun Aug 21 09:53:27 2005
@@ -0,0 +1,541 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed 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.
+ *
+ */
+package org.apache.asn1new.ldap.pojo;
+
+import org.apache.asn1new.Asn1Object;
+import org.apache.asn1new.EncoderException;
+import org.apache.asn1new.ber.tlv.Length;
+import org.apache.asn1new.ber.tlv.UniversalTag;
+import org.apache.asn1new.ber.tlv.Value;
+import org.apache.asn1new.ldap.codec.LdapConstants;
+import org.apache.asn1new.ldap.codec.primitives.LdapDN;
+import org.apache.asn1new.ldap.codec.primitives.LdapString;
+import org.apache.asn1new.ldap.pojo.filters.Filter;
+
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * A SearchRequest ldapObject. It's a sub-class of Asn1Object, and it implements
+ * the ldapObject class to be seen as a member of the LdapMessage
+ * CHOICE.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class SearchRequest extends Asn1Object
+{
+    //~ Instance fields ----------------------------------------------------------------------------
+
+    /** The base DN */
+    private LdapDN baseObject;
+
+    /** The scope. It could be baseObject, singleLevel or wholeSubtree. */
+    private int scope;
+
+    /** The deref alias could be neverDerefAliases, derefInSearching, 
+     * derefFindingBaseObj or derefAlways. */
+    private int derefAliases;
+
+    /** The size limit (number of objects returned)*/
+    private int sizeLimit;
+
+    /** The time limit (max time to process the response before returning the result) */
+    private int timeLimit;
+
+    /** An indicator as to whether search results will contain
+     both attribute types and values, or just attribute types.  Setting
+     this field to TRUE causes only attribute types (no values) to be
+     returned.  Setting this field to FALSE causes both attribute types
+     and values to be returned. */
+    private boolean typesOnly;
+
+    /** The filter tree */
+    private Filter filter;
+
+    /** The list of attributes to get */
+    private ArrayList attributes;
+
+    /** The current filter. This is used while decoding a PDU */
+    private transient Filter currentFilter;
+    
+    /** The searchRequest length */
+    private transient int searchRequestLength;
+    
+    /** The attributeDescriptionList length */
+    private transient int attributeDescriptionListLength;
+
+    //~ Constructors -------------------------------------------------------------------------------
+
+    /**
+     * Creates a new SearchRequest object.
+     */
+    public SearchRequest()
+    {
+        super( );
+
+        currentFilter = null;
+    }
+
+    //~ Methods ------------------------------------------------------------------------------------
+
+    /**
+     * Get the list of attributes
+     *
+     * @return Returns the attributes.
+     */
+    public ArrayList getAttributes()
+    {
+        return attributes;
+    }
+
+    /**
+     * Add an attribute to the attributes list.
+     * 
+     * @param attribute The attribute to add to the list
+     */
+    public void addAttribute( LdapString attribute )
+    {
+        attributes.add( attribute );
+    }
+
+    /**
+     * Initialize the attributes list
+     */
+    public void initAttributes()
+    {
+        attributes = new ArrayList();
+    }
+
+    /**
+     * Get the base object
+     *
+     * @return Returns the baseObject.
+     */
+    public String getBaseObject()
+    {
+        return ( ( baseObject == null ) ? null : baseObject.toString() );
+    }
+
+    /**
+     * Set the base object
+     *
+     * @param baseObject The baseObject to set.
+     */
+    public void setBaseObject( LdapDN baseObject )
+    {
+        this.baseObject = baseObject;
+    }
+
+    /**
+     * Get the derefAliases flag
+     *
+     * @return Returns the derefAliases.
+     */
+    public int getDerefAliases()
+    {
+        return derefAliases;
+    }
+
+    /**
+     * Set the derefAliases flag
+     *
+     * @param derefAliases The derefAliases to set.
+     */
+    public void setDerefAliases( int derefAliases )
+    {
+        this.derefAliases = derefAliases;
+    }
+
+    /**
+     * Get the filter
+     *
+     * @return Returns the filter.
+     */
+    public Filter getFilter()
+    {
+        return filter;
+    }
+
+    /**
+     * Set the filter
+     *
+     * @param filter The filter to set.
+     */
+    public void setFilter( Filter filter )
+    {
+        this.filter = filter;
+    }
+
+    /**
+     * Get the search scope
+     *
+     * @return Returns the scope.
+     */
+    public int getScope()
+    {
+        return scope;
+    }
+
+    /**
+     * Set the search scope
+     *
+     * @param scope The scope to set.
+     */
+    public void setScope( int scope )
+    {
+        this.scope = scope;
+    }
+
+    /**
+     * Get the size limit
+     *
+     * @return Returns the sizeLimit.
+     */
+    public int getSizeLimit()
+    {
+        return sizeLimit;
+    }
+
+    /**
+     * Set the size limit
+     *
+     * @param sizeLimit The sizeLimit to set.
+     */
+    public void setSizeLimit( int sizeLimit )
+    {
+        this.sizeLimit = sizeLimit;
+    }
+
+    /**
+     * Get the time limit
+     *
+     * @return Returns the timeLimit.
+     */
+    public int getTimeLimit()
+    {
+        return timeLimit;
+    }
+
+    /**
+     * Set the time limit
+     *
+     * @param timeLimit The timeLimit to set.
+     */
+    public void setTimeLimit( int timeLimit )
+    {
+        this.timeLimit = timeLimit;
+    }
+
+    /**
+     * Get the typesOnly flag
+     *
+     * @return Returns the typesOnly.
+     */
+    public boolean isTypesOnly()
+    {
+        return typesOnly;
+    }
+
+    /**
+     * Set the typesOnly flag
+     *
+     * @param typesOnly The typesOnly to set.
+     */
+    public void setTypesOnly( boolean typesOnly )
+    {
+        this.typesOnly = typesOnly;
+    }
+
+    /**
+     * Get the current dilter
+     *
+     * @return Returns the currentFilter.
+     */
+    public Filter getCurrentFilter()
+    {
+        return currentFilter;
+    }
+
+    /**
+     * Set the current dilter
+     *
+     * @param currentFilter The currentFilter to set.
+     */
+    public void setCurrentFilter( Filter currentFilter )
+    {
+        this.currentFilter = currentFilter;
+    }
+    
+    /**
+     * Compute the SearchRequest length
+     * 
+     * SearchRequest :
+     * 
+     * 0x63 L1
+     *  |
+     *  +--> 0x04 L2 baseObject
+     *  +--> 0x0A 0x01 scope
+     *  +--> 0x0A 0x01 derefAliases
+     *  +--> 0x02 0x0(1..4) sizeLimit
+     *  +--> 0x02 0x0(1..4) timeLimit
+     *  +--> 0x01 0x01 typesOnly
+     *  +--> filter.computeLength()
+     *  +--> 0x30 L3 (Attribute description list)
+     *        |
+     *        +--> 0x04 L4-1 Attribute description 
+     *        +--> 0x04 L4-2 Attribute description 
+     *        +--> ... 
+     *        +--> 0x04 L4-i Attribute description 
+     *        +--> ... 
+     *        +--> 0x04 L4-n Attribute description 
+     * 
+     */
+    public int computeLength()
+    {
+        searchRequestLength = 0;
+        
+        // The baseObject
+        searchRequestLength += 1 + Length.getNbBytes( baseObject.getLength() ) + baseObject.getLength();
+        
+        // The scope
+        searchRequestLength += 1 + 1 + 1;
+        
+        // The derefAliases
+        searchRequestLength += 1 + 1 + 1;
+        
+        // The sizeLimit
+        searchRequestLength += 1 + 1 + Value.getNbBytes(sizeLimit);
+        
+        // The timeLimit
+        searchRequestLength += 1 + 1 + Value.getNbBytes(timeLimit);
+        
+        // The typesOnly
+        searchRequestLength += 1 + 1 + 1;
+        
+        // The filter
+        searchRequestLength += filter.computeLength();
+        
+        // The attributes description list
+        attributeDescriptionListLength = 0;
+        
+        if ( ( attributes != null ) && ( attributes.size() != 0 ) )
+        {
+            Iterator attributeIterator = attributes.iterator();
+            
+            // Compute the attributes length
+            while ( attributeIterator.hasNext() )
+            {
+                LdapString attribute = (LdapString)attributeIterator.next();
+                
+                // add the attribute length to the attributes length
+                attributeDescriptionListLength += 1 + Length.getNbBytes( attribute.getLength() ) + attribute.getLength();
+            }
+        }
+        
+        searchRequestLength += 1 + Length.getNbBytes( attributeDescriptionListLength ) + attributeDescriptionListLength;
+
+        // Return the result.
+        return 1 + Length.getNbBytes( searchRequestLength ) + searchRequestLength;
+    }
+    
+    /**
+     * Encode the SearchRequest message to a PDU.
+     * 
+     * SearchRequest :
+     * 
+     * 0x63 LL
+     *   0x04 LL baseObject
+     *   0x0A 01 scope
+     *   0x0A 01 derefAliases
+     *   0x02 0N sizeLimit
+     *   0x02 0N timeLimit
+     *   0x01 0x01 typesOnly
+     *   filter.encode()
+     *   0x30 LL attributeDescriptionList
+     *     0x04 LL attributeDescription
+     *     ... 
+     *     0x04 LL attributeDescription
+     * 
+     * @param buffer The buffer where to put the PDU
+     * @return The PDU.
+     */
+    public ByteBuffer encode( ByteBuffer buffer ) throws EncoderException
+    {
+        if ( buffer == null )
+        {
+            throw new EncoderException( "Cannot put a PDU in a null buffer !" );
+        }
+
+        try 
+        {
+            // The SearchRequest Tag
+            buffer.put( LdapConstants.SEARCH_REQUEST_TAG );
+            buffer.put( Length.getBytes( searchRequestLength ) ) ;
+            
+            // The baseObject
+            Value.encode( buffer, baseObject );
+            
+            // The scope
+            Value.encodeEnumerated( buffer, scope );
+
+            // The derefAliases
+            Value.encodeEnumerated( buffer, derefAliases );
+
+            // The sizeLimit
+            Value.encode( buffer, sizeLimit );
+
+            // The timeLimit
+            Value.encode( buffer, timeLimit );
+
+            // The typesOnly
+            Value.encode( buffer, typesOnly );
+
+            // The filter
+            filter.encode( buffer );
+            
+            // The attributeDescriptionList
+            buffer.put( UniversalTag.SEQUENCE_TAG );
+            buffer.put( Length.getBytes( attributeDescriptionListLength ) );
+            
+            if ( ( attributes != null ) && ( attributes.size() != 0 ) )
+            {
+                Iterator attributeIterator = attributes.iterator();
+                
+                // encode each attribute
+                while ( attributeIterator.hasNext() )
+                {
+                    LdapString attribute = (LdapString)attributeIterator.next();
+                    
+                    Value.encode( buffer, attribute );
+                }
+            }
+        }
+        catch ( BufferOverflowException boe )
+        {
+            throw new EncoderException("The PDU buffer size is too small !"); 
+        }
+
+        return buffer;
+    }
+
+    /**
+     * 
+     * @return A string that represent the Filter
+     */
+    private String buildFilter()
+    {
+        if (filter == null)
+        {
+            return "";
+        }
+        
+        StringBuffer sb = new StringBuffer();
+        
+        sb.append("(");
+
+        sb.append( filter.toString() );
+        
+        sb.append(")");
+        
+        return sb.toString();
+    }
+    
+    /**
+     * Return a string the represent a SearchRequest
+     */
+    public String toString()
+    {
+        StringBuffer sb = new StringBuffer();
+        
+        sb.append( "    Search Request\n" );
+        sb.append( "        Base Object : '" ).append( baseObject ).append( "'\n" );
+        sb.append( "        Scope : " );
+        
+        switch (scope)
+        {
+        	case LdapConstants.SCOPE_BASE_OBJECT : 
+        	    sb.append("base object");
+        	    break;
+        	    
+        	case LdapConstants.SCOPE_SINGLE_LEVEL :
+        		sb.append("single level");
+    	    	break;
+    	    	
+        	case LdapConstants.SCOPE_WHOLE_SUBTREE :
+    	    	sb.append("whole subtree");
+    	    	break;
+        }
+
+        sb.append( "\n" );
+        
+        sb.append( "        Deref Aliases : " );
+        
+        switch (derefAliases)
+        {
+    		case LdapConstants.NEVER_DEREF_ALIASES :
+    		    sb.append("never Deref Aliases");
+	    		break;
+
+        	case LdapConstants.DEREF_IN_SEARCHING :
+    	    	sb.append("deref In Searching");
+    	    	break;
+
+        	case LdapConstants.DEREF_FINDING_BASE_OBJ :
+        		sb.append("deref Finding Base Obj");
+    	    	break;
+    	    	
+        	case LdapConstants.DEREF_ALWAYS : 
+        	    sb.append("deref Always");
+        	    break;
+        }
+
+        sb.append( "\n" );
+        
+        sb.append( "        Size Limit : " );
+        
+        if ( sizeLimit == 0 ) 
+        {
+            sb.append( "no limit" );
+        }
+        else
+        {
+            sb.append( sizeLimit );
+        }
+        
+        sb.append( "\n" );
+        
+        sb.append( "        Time Limit : " );
+        
+        if ( timeLimit == 0 ) 
+        {
+            sb.append( "no limit" );
+        }
+        else
+        {
+            sb.append( timeLimit );
+        }
+        
+        sb.append( "\n" );
+        
+        sb.append( "        Types Only : " ).append( typesOnly ).append( "\n" );
+        sb.append( "        Filter : '" ).append( buildFilter() ).append( "'\n" );
+        
+        return sb.toString();
+    }
+}

Added: directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SearchResultDone.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SearchResultDone.java?rev=234264&view=auto
==============================================================================
--- directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SearchResultDone.java (added)
+++ directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SearchResultDone.java Sun Aug 21 09:53:27 2005
@@ -0,0 +1,109 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed 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.
+ *
+ */
+package org.apache.asn1new.ldap.pojo;
+
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
+
+import org.apache.asn1new.EncoderException;
+import org.apache.asn1new.ber.tlv.Length;
+import org.apache.asn1new.ldap.codec.LdapConstants;
+
+/**
+ * A SearchResultDone Message. Its syntax is :
+ *   SearchResultDone ::= [APPLICATION 5] LDAPResult
+ * 
+ * It's a Response, so it inherites from LdapResponse.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class SearchResultDone extends LdapResponse
+{
+    //~ Constructors -------------------------------------------------------------------------------
+
+    /**
+     * Creates a new SearchResultDone object.
+     */
+    public SearchResultDone()
+    {
+        super( );
+    }
+
+    /**
+     * Compute the SearchResultDone length
+     * 
+     * SearchResultDone :
+     * 
+     * 0x65 L1
+     *  |
+     *  +--> LdapResult
+     * 
+     * L1 = Length(LdapResult)
+     * 
+     * Length(SearchResultDone) = Length(0x65) + Length(L1) + L1
+     */
+    public int computeLength()
+    {
+        int ldapResponseLength = super.computeLength();
+        
+        return 1 + Length.getNbBytes( ldapResponseLength ) + ldapResponseLength;
+    }
+    
+    /**
+     * Encode the SearchResultDone message to a PDU.
+     * 
+     * @param buffer The buffer where to put the PDU
+     * @return The PDU.
+     */
+    public ByteBuffer encode( ByteBuffer buffer )  throws EncoderException
+    {
+        if (buffer == null)
+        {
+            throw new EncoderException("Cannot put a PDU in a null buffer !");
+        }
+        
+        try
+        {
+            // The tag
+            buffer.put( LdapConstants.SEARCH_RESULT_DONE_TAG );
+            buffer.put( Length.getBytes( getLdapResponseLength() ) );
+        }
+        catch ( BufferOverflowException boe )
+        {
+            throw new EncoderException("The PDU buffer size is too small !"); 
+        }
+        
+        // The ldapResult
+        return super.encode( buffer);
+    }
+    
+    /**
+     * Get a String representation of a SearchResultDone
+     *
+     * @return A SearchResultDone String 
+     */
+    public String toString()
+    {
+
+        StringBuffer sb = new StringBuffer();
+
+        sb.append( "    Search Result Done\n" );
+        sb.append( super.toString() );
+
+        return sb.toString();
+    }
+}

Added: directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SearchResultEntry.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SearchResultEntry.java?rev=234264&view=auto
==============================================================================
--- directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SearchResultEntry.java (added)
+++ directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SearchResultEntry.java Sun Aug 21 09:53:27 2005
@@ -0,0 +1,454 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed 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.
+ *
+ */
+package org.apache.asn1new.ldap.pojo;
+
+import org.apache.asn1new.Asn1Object;
+import org.apache.asn1new.EncoderException;
+import org.apache.asn1new.ber.tlv.Length;
+import org.apache.asn1new.ber.tlv.UniversalTag;
+import org.apache.asn1new.ber.tlv.Value;
+import org.apache.asn1new.primitives.OctetString;
+import org.apache.asn1new.ldap.codec.LdapConstants;
+import org.apache.asn1new.ldap.codec.primitives.LdapDN;
+import org.apache.asn1new.ldap.codec.primitives.LdapString;
+
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.BasicAttribute;
+
+
+/**
+ * A SearchResultEntry Message. Its syntax is :
+ *   SearchResultEntry ::= [APPLICATION 4] SEQUENCE {
+ *       objectName      LDAPDN,
+ *       attributes      PartialAttributeList }
+ * 
+ *   PartialAttributeList ::= SEQUENCE OF SEQUENCE {
+ *       type    AttributeDescription,
+ *       vals    SET OF AttributeValue }
+ * 
+ *   AttributeDescription ::= LDAPString
+ * 
+ *   AttributeValue ::= OCTET STRING
+ * 
+ * It contains an entry, with all its attributes, and all the attributes
+ * values. If a search request is submited, all the results are sent one
+ * by one, followed by a searchResultDone message.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class SearchResultEntry extends Asn1Object
+{
+    //~ Instance fields ----------------------------------------------------------------------------
+
+    /** The DN of the returned entry */
+    private LdapDN objectName;
+
+    /** The attributes list. It contains javax.naming.directory.Attribute */
+    private ArrayList partialAttributeList;
+
+    /** The attributes list expected length */
+    //private transient int partialAttributesListExpectedLength;
+
+    /** The current attribute being decoded */
+    private transient Attribute currentAttributeValue;
+    
+    /** The search result entry length */
+    private transient int searchResultEntryLength;
+    
+    /** The partial attributes length */
+    private transient int attributesLength;
+    
+    /** The list of all attributes length */
+    private transient List attributeLength;
+    
+    /** The list of all vals length */
+    private transient List valsLength;
+
+    //~ Constructors -------------------------------------------------------------------------------
+
+    /**
+     * Creates a new SearchResultEntry object.
+     */
+    public SearchResultEntry()
+    {
+        super( );
+    }
+
+    //~ Methods ------------------------------------------------------------------------------------
+
+    /**
+     * Get the entry DN
+     *
+     * @return Returns the objectName.
+     */
+    public String getObjectName()
+    {
+        return ( ( objectName == null ) ? null : objectName.toString() );
+    }
+
+    /**
+     * Set the entry DN
+     *
+     * @param objectName The objectName to set.
+     */
+    public void setObjectName( LdapDN objectName )
+    {
+        this.objectName = objectName;
+    }
+
+    /**
+     * Get the entry's attributes
+     *
+     * @return Returns the partialAttributeList.
+     */
+    public ArrayList getPartialAttributeList()
+    {
+        return partialAttributeList;
+    }
+
+    /**
+     * Initialize the partial Attribute list if needed, otherwise add the current
+     * Attribute Value to the list.
+     *
+     */
+    public void addPartialAttributeList()
+    {
+
+        if ( currentAttributeValue == null )
+        {
+            partialAttributeList = new ArrayList();
+        }
+    }
+
+    /**
+     * Get the partial attributes list length
+     *
+     * @return Returns the partialAttributesListExpectedLength.
+     */
+    //public int getPartialAttributesListExpectedLength()
+    //{
+    //    return partialAttributesListExpectedLength;
+    //}
+
+    /**
+     * Set the partial attributes list length
+     *
+     * @param partialAttributesListExpectedLength The partialAttributesListExpectedLength to set.
+     */
+    //public void setPartialAttributesListExpectedLength( int partialAttributesListExpectedLength )
+    //{
+    //    this.partialAttributesListExpectedLength = partialAttributesListExpectedLength;
+    //}
+
+    /**
+     * Create a new attributeValue
+     * @param type The attribute's name
+     */
+    public void addAttributeValues( LdapString type )
+    {
+        currentAttributeValue = new BasicAttribute( type.toString().toLowerCase() );
+
+        partialAttributeList.add( currentAttributeValue );
+    }
+
+    /**
+     * Add a new value to the current attribute
+     * @param value
+     */
+    public void addAttributeValue( OctetString value )
+    {
+        currentAttributeValue.add( value );
+    }
+
+    /**
+     * Compute the SearchResultEntry length
+     * 
+     * SearchResultEntry :
+     * 
+     * 0x64 L1
+     *  |
+     *  +--> 0x04 L2 objectName
+     *  +--> 0x30 L3 (attributes)
+     *        |
+     *        +--> 0x30 L4-1 (partial attributes list)
+     *        |     |
+     *        |     +--> 0x04 L5-1 type
+     *        |     +--> 0x31 L6-1 (values)
+     *        |           |
+     *        |           +--> 0x04 L7-1-1 value
+     *        |           +--> ...
+     *        |           +--> 0x04 L7-1-n value
+     *        |
+     *        +--> 0x30 L4-2 (partial attributes list)
+     *        |     |
+     *        |     +--> 0x04 L5-2 type
+     *        |     +--> 0x31 L6-2 (values)
+     *        |           |
+     *        |           +--> 0x04 L7-2-1 value
+     *        |           +--> ...
+     *        |           +--> 0x04 L7-2-n value
+     *        |
+     *        +--> ...
+     *        |
+     *        +--> 0x30 L4-m (partial attributes list)
+     *              |
+     *              +--> 0x04 L5-m type
+     *              +--> 0x31 L6-m (values)
+     *                    |
+     *                    +--> 0x04 L7-m-1 value
+     *                    +--> ...
+     *                    +--> 0x04 L7-m-n value
+     * 
+     */
+    public int computeLength()
+    {
+        // The entry
+        searchResultEntryLength = 1 + Length.getNbBytes( objectName.getLength() ) + objectName.getLength();
+        
+        // The attributes sequence
+        attributesLength = 0;
+        
+        if ( ( partialAttributeList != null ) && ( partialAttributeList.size() != 0 ) )
+        {
+            Iterator attributeIterator = partialAttributeList.iterator();
+            attributeLength = new LinkedList();
+            valsLength = new LinkedList();
+            
+            // Compute the attributes length
+            while ( attributeIterator.hasNext() )
+            {
+                Attribute attribute = (Attribute)attributeIterator.next();
+                int localAttributeLength = 0;
+                int localValuesLength = 0;
+                
+                // Get the type length
+                int idLength = attribute.getID().getBytes().length;
+                localAttributeLength = 1 + Length.getNbBytes( idLength ) + idLength;
+                
+                // The values
+                try
+                {
+	                NamingEnumeration values = attribute.getAll();
+	                
+	                if ( values.hasMoreElements() )
+	                {
+                        localValuesLength = 0;
+	                    
+		                while ( values.hasMoreElements() )
+		                {
+		                    OctetString value = (OctetString)values.next();
+		                    
+                            localValuesLength += 1 + Length.getNbBytes( value.getLength() ) + value.getLength();
+		                }
+
+                        localAttributeLength += 1 + Length.getNbBytes( localValuesLength ) + localValuesLength; 
+	                }
+	                
+                }
+                catch (NamingException ne)
+                {
+                    return 0;
+                }
+                
+                // add the attribute length to the attributes length
+                attributesLength += 1 + Length.getNbBytes( localAttributeLength ) + localAttributeLength;
+                
+                attributeLength.add( new Integer( localAttributeLength ) );
+                valsLength.add( new Integer( localValuesLength ) );
+            }
+        }
+        
+        searchResultEntryLength += 1 + Length.getNbBytes( attributesLength ) + attributesLength;
+
+        // Return the result.
+        return 1 + Length.getNbBytes( searchResultEntryLength ) + searchResultEntryLength;
+    }
+    
+    /**
+     * Encode the SearchResultEntry message to a PDU.
+     * 
+     * SearchResultEntry :
+     * 
+     * 0x64 LL
+     *   0x04 LL objectName
+     *   0x30 LL attributes
+     *     0x30 LL partialAttributeList
+     *       0x04 LL type
+     *       0x31 LL vals
+     *         0x04 LL attributeValue
+     *         ... 
+     *         0x04 LL attributeValue
+     *     ... 
+     *     0x30 LL partialAttributeList
+     *       0x04 LL type
+     *       0x31 LL vals
+     *         0x04 LL attributeValue
+     *         ... 
+     *         0x04 LL attributeValue 
+     * 
+     * @param buffer The buffer where to put the PDU
+     * @return The PDU.
+     */
+    public ByteBuffer encode( ByteBuffer buffer ) throws EncoderException
+    {
+        if ( buffer == null )
+        {
+            throw new EncoderException( "Cannot put a PDU in a null buffer !" );
+        }
+
+        try 
+        {
+            // The SearchResultEntry Tag
+            buffer.put( LdapConstants.SEARCH_RESULT_ENTRY_TAG );
+            buffer.put( Length.getBytes( searchResultEntryLength ) ) ;
+            
+            // The objectName
+            Value.encode( buffer, objectName );
+            
+            // The attributes sequence
+            buffer.put( UniversalTag.SEQUENCE_TAG );
+            buffer.put( Length.getBytes( attributesLength ) ) ;
+
+            // The partial attribute list
+            if ( ( partialAttributeList != null ) && ( partialAttributeList.size() != 0 ) )
+            {
+                Iterator attributeIterator = partialAttributeList.iterator();
+                int attributeNumber = 0;
+                
+                // Compute the attributes length
+                while ( attributeIterator.hasNext() )
+                {
+                    Attribute attribute = (Attribute)attributeIterator.next();
+                    
+                    // The partial attribute list sequence
+                    buffer.put( UniversalTag.SEQUENCE_TAG );
+                    int localAttributeLength = ( (Integer)attributeLength.get( attributeNumber ) ).intValue();
+                    buffer.put( Length.getBytes( localAttributeLength ) );
+
+                    // The attribute type
+                    Value.encode( buffer, attribute.getID() );
+                    
+                    // The values
+                    buffer.put( UniversalTag.SET_TAG );
+                    int localValuesLength = ( (Integer)valsLength.get( attributeNumber ) ).intValue();
+                    buffer.put( Length.getBytes( localValuesLength ) );
+                    
+                    try
+                    {
+                        NamingEnumeration values = attribute.getAll();
+                        
+                        if ( values.hasMoreElements() )
+                        {
+                            while ( values.hasMoreElements() )
+                            {
+                                OctetString value = (OctetString)values.next();
+                                
+                                Value.encode( buffer, value );
+                            }
+                        }
+                        
+                    }
+                    catch (NamingException ne)
+                    {
+                        throw new EncoderException("Cannot enumerate the values");
+                    }
+                    
+                    // Go to the next attribute number;
+                    attributeNumber++;
+                }
+            }
+        }
+        catch ( BufferOverflowException boe )
+        {
+            throw new EncoderException("The PDU buffer size is too small !"); 
+        }
+
+        return buffer;
+    }
+
+    /**
+     * Returns the Search Result Entry string
+     *
+     * @return The Search Result Entry string 
+     */
+    public String toString()
+    {
+
+        StringBuffer sb = new StringBuffer();
+
+        sb.append( "    Search Result Entry\n" );
+        sb.append( "        Object Name : '" ).append( objectName.toString() ).append( "'\n" );
+        sb.append( "        Attributes\n" );
+
+        if ( ( partialAttributeList == null ) || ( partialAttributeList.size() == 0 ) )
+        {
+            sb.append( "            No attributes\n" );
+        }
+        else
+        {
+
+            Iterator attributesIter = partialAttributeList.iterator();
+
+            while ( attributesIter.hasNext() )
+            {
+
+                Attribute attribute = ( Attribute ) attributesIter.next();
+
+                sb.append( "            Name : '" ).append( attribute.getID() ).append( "'\n" );
+
+                try
+                {
+
+                    NamingEnumeration values = attribute.getAll();
+
+                    if ( values.hasMoreElements() )
+                    {
+                        sb.append( "            Values\n" );
+
+                        while ( values.hasMore() )
+                        {
+
+                            OctetString value = ( OctetString ) values.next();
+
+                            sb.append( "                '" ).append( value.toString() ).append(
+                                "'\n" );
+                        }
+                    }
+                    else
+                    {
+                        sb.append( "            No Values\n" );
+                    }
+                }
+                catch ( NamingException ne )
+                {
+                    sb.append( "            Error while reading attribute.\n " );
+                }
+            }
+        }
+
+        return sb.toString();
+    }
+}

Added: directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SearchResultReference.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SearchResultReference.java?rev=234264&view=auto
==============================================================================
--- directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SearchResultReference.java (added)
+++ directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SearchResultReference.java Sun Aug 21 09:53:27 2005
@@ -0,0 +1,189 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed 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.
+ *
+ */
+package org.apache.asn1new.ldap.pojo;
+
+import org.apache.asn1new.Asn1Object;
+import org.apache.asn1new.EncoderException;
+import org.apache.asn1new.ber.tlv.Length;
+import org.apache.asn1new.ber.tlv.Value;
+import org.apache.asn1new.ldap.codec.LdapConstants;
+import org.apache.asn1new.ldap.codec.primitives.LdapURL;
+
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+
+/**
+ * A SearchResultReference Message. Its syntax is :
+ *   SearchResultReference ::= [APPLICATION 19] SEQUENCE OF LDAPURL
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class SearchResultReference extends Asn1Object
+{
+    //~ Instance fields ----------------------------------------------------------------------------
+
+    /** The set of LdapURLs */
+    private ArrayList searchResultReferences;
+    
+    /** The search result reference length */
+    private transient int searchResultReferenceLength;
+
+    //~ Constructors -------------------------------------------------------------------------------
+
+    /**
+     * Creates a new SearchResultEntry object.
+     */
+    public SearchResultReference()
+    {
+        super( );
+        searchResultReferences = new ArrayList();
+    }
+
+    //~ Methods ------------------------------------------------------------------------------------
+
+    /**
+     * Add a new reference to the list.
+     * @param searchResultReference The search result reference
+    */
+    public void addSearchResultReference( LdapURL searchResultReference )
+    {
+        searchResultReferences.add( searchResultReference );
+    }
+
+    /**
+     * Get the list of references
+     * @return An ArrayList of SearchResultReferences
+     */
+    public ArrayList getSearchResultReferences()
+    {
+        return searchResultReferences;
+    }
+
+    /**
+     * Compute the SearchResultReference length
+     * 
+     * SearchResultReference :
+     * 
+     * 0x73 L1
+     *  |
+     *  +--> 0x04 L2 reference
+     *  +--> 0x04 L3 reference
+     *  +--> ...
+     *  +--> 0x04 Li reference
+     *  +--> ...
+     *  +--> 0x04 Ln reference
+     * 
+     * L1 = n*Length(0x04) + sum(Length(Li)) + sum(Length(reference[i]))
+     * 
+     * Length(SearchResultReference) = Length(0x73 + Length(L1) + L1
+     */
+    public int computeLength()
+    {
+        searchResultReferenceLength = 0;
+        
+        Iterator referencesIterator = searchResultReferences.iterator();
+        
+        // We may have more than one reference.
+        while (referencesIterator.hasNext())
+        {
+            int ldapUrlLength = ((LdapURL)referencesIterator.next()).getLength();
+            searchResultReferenceLength += 1 + Length.getNbBytes( ldapUrlLength ) + ldapUrlLength;
+        }
+        
+        return 1 + Length.getNbBytes( searchResultReferenceLength ) + searchResultReferenceLength;
+    }
+
+    /**
+     * Encode the SearchResultReference message to a PDU.
+     * 
+     * SearchResultReference :
+     * 
+     * 0x73 LL
+     *   0x04 LL reference
+     *   [0x04 LL reference]*
+     * 
+     * @param buffer The buffer where to put the PDU
+     * @return The PDU.
+     */
+    public ByteBuffer encode( ByteBuffer buffer ) throws EncoderException
+    {
+        if ( buffer == null )
+        {
+            throw new EncoderException( "Cannot put a PDU in a null buffer !" );
+        }
+
+        try 
+        {
+            // The SearchResultReference Tag
+            buffer.put( LdapConstants.SEARCH_RESULT_REFERENCE_TAG );
+            buffer.put( Length.getBytes( searchResultReferenceLength ) ) ;
+
+            // The references. We must at least have one reference
+            Iterator referencesIterator = searchResultReferences.iterator();
+            
+            // We may have more than one reference.
+            while (referencesIterator.hasNext())
+            {
+                LdapURL reference = ((LdapURL)referencesIterator.next());
+                
+                // Encode the reference
+                Value.encode( buffer, reference );
+            }
+        }
+        catch ( BufferOverflowException boe )
+        {
+            throw new EncoderException("The PDU buffer size is too small !"); 
+        }
+
+        return buffer;
+    }
+
+    /**
+     * Returns the Search Result Reference string
+     *
+     * @return The Search Result Reference string 
+     */
+    public String toString()
+    {
+
+        StringBuffer sb = new StringBuffer();
+
+        sb.append( "    Search Result Reference\n" );
+
+        if ( ( searchResultReferences == null ) || ( searchResultReferences.size() == 0 ) )
+        {
+            sb.append( "        No Reference\n" );
+        }
+        else
+        {
+            sb.append( "        References\n" );
+
+            Iterator referencesIterator = searchResultReferences.iterator();
+
+            while ( referencesIterator.hasNext() )
+            {
+                sb.append( "            '" )
+                  .append( ( ( LdapURL ) referencesIterator.next() ).toString() ).append( "'\n" );
+            }
+        }
+
+        return sb.toString();
+    }
+}

Added: directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SimpleAuthentication.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SimpleAuthentication.java?rev=234264&view=auto
==============================================================================
--- directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SimpleAuthentication.java (added)
+++ directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/SimpleAuthentication.java Sun Aug 21 09:53:27 2005
@@ -0,0 +1,120 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed 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.
+ *
+ */
+package org.apache.asn1new.ldap.pojo;
+
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
+
+import org.apache.asn1new.Asn1Object;
+import org.apache.asn1new.EncoderException;
+import org.apache.asn1new.ber.tlv.Length;
+import org.apache.asn1new.primitives.OctetString;
+import org.apache.asn1new.ldap.codec.LdapConstants;
+
+
+/**
+ * A ldapObject which stores the Simple authentication for a BindRequest.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class SimpleAuthentication extends Asn1Object
+{
+    //~ Instance fields ----------------------------------------------------------------------------
+
+    /** The simple authentication password */
+    private OctetString simple;
+
+    //~ Methods ------------------------------------------------------------------------------------
+
+    /**
+     * Get the simple password
+     *
+     * @return The password
+     */
+    public OctetString getSimple()
+    {
+        return simple;
+    }
+
+    /**
+     * Set the simple password
+     *
+     * @param simple The simple password
+     */
+    public void setSimple( OctetString simple )
+    {
+        this.simple = simple;
+    }
+
+    /**
+     * Compute the Simple authentication length
+     * 
+     * Simple authentication :
+     * 
+     * 0x80 L1 simple
+     * 
+     * L1 = Length(simple)
+     * 
+     * Length(Simple authentication) = Length(0x80) + Length(L1) + Length(simple)
+     */
+    public int computeLength()
+    {
+        return 1 + Length.getNbBytes( simple.getLength() ) + simple.getLength();
+    }
+    
+    /**
+     * Encode the simple authentication to a PDU.
+     * 
+     * SimpleAuthentication :
+     * 
+     * 0x80 LL simple
+     * 
+     * @param buffer The buffer where to put the PDU
+     * @return The PDU.
+     */
+    public ByteBuffer encode( ByteBuffer buffer ) throws EncoderException
+    {
+        if ( buffer == null )
+        {
+            throw new EncoderException( "Cannot put a PDU in a null buffer !" );
+        }
+
+        try 
+        {
+            // The simpleAuthentication Tag
+            buffer.put( (byte)LdapConstants.BIND_REQUEST_SIMPLE_TAG );
+            buffer.put( Length.getBytes( simple.getLength() ) ) ;
+            buffer.put( simple.getValue() ) ;
+        }
+        catch ( BufferOverflowException boe )
+        {
+            throw new EncoderException("The PDU buffer size is too small !"); 
+        }
+
+        return buffer;
+    }
+
+    /**
+     * Return the simple authentication as a string
+     *
+     * @return The simple authentication string.
+     */
+    public String toString()
+    {
+        return ( ( simple == null ) ? "null" : simple.toString() );
+    }
+}

Added: directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/UnBindRequest.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/UnBindRequest.java?rev=234264&view=auto
==============================================================================
--- directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/UnBindRequest.java (added)
+++ directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/UnBindRequest.java Sun Aug 21 09:53:27 2005
@@ -0,0 +1,105 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed 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.
+ *
+ */
+package org.apache.asn1new.ldap.pojo;
+
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
+
+import org.apache.asn1new.Asn1Object;
+import org.apache.asn1new.EncoderException;
+import org.apache.asn1new.ldap.codec.LdapConstants;
+
+/**
+ * A UnBindRequest ldapObject. Its syntax is :
+ * 	UnbindRequest ::= [APPLICATION 2] NULL
+ * 
+ * This ldapObject is empty.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class UnBindRequest extends Asn1Object
+{
+    //~ Instance fields ----------------------------------------------------------------------------
+
+    //~ Constructors -------------------------------------------------------------------------------
+
+    /**
+     * Creates a new BindRequest object.
+     */
+    public UnBindRequest()
+    {
+        super( );
+    }
+
+    //~ Methods ------------------------------------------------------------------------------------
+    /**
+     * Compute the UnBindRequest length
+     * 
+     * UnBindRequest :
+     * 
+     * 0x42 00
+     */
+    public int computeLength()
+    {
+        return 2; // Always 2
+    }
+    
+    /**
+     * Encode the UnbindRequest message to a PDU.
+     * 
+     * @param buffer The buffer where to put the PDU
+     * @return The PDU.
+     */
+    public ByteBuffer encode( ByteBuffer buffer )  throws EncoderException
+    {
+        if (buffer == null)
+        {
+            throw new EncoderException("Cannot put a PDU in a null buffer !");
+        }
+        
+        try 
+        {
+            // The tag
+            buffer.put(LdapConstants.UNBIND_REQUEST_TAG);
+            
+            // The length is always null.
+            buffer.put( (byte)0 );
+        }
+        catch ( BufferOverflowException boe )
+        {
+            throw new EncoderException("The PDU buffer size is too small !"); 
+        }
+        
+        return buffer;
+    }
+
+    /**
+     * Get a String representation of a UnBindRequest
+     *
+     * @return A UnBindRequest String 
+     */
+    public String toString()
+    {
+
+        StringBuffer sb = new StringBuffer();
+
+        sb.append( "    UnBind Request\n" );
+        sb.append( super.toString() );
+
+        return sb.toString();
+    }
+}

Added: directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/AndFilter.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/AndFilter.java?rev=234264&view=auto
==============================================================================
--- directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/AndFilter.java (added)
+++ directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/AndFilter.java Sun Aug 21 09:53:27 2005
@@ -0,0 +1,120 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed 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.
+ *
+ */
+package org.apache.asn1new.ldap.pojo.filters;
+
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+
+import org.apache.asn1new.EncoderException;
+import org.apache.asn1new.ber.tlv.Length;
+import org.apache.asn1new.ldap.codec.LdapConstants;
+
+/**
+ * And Filter Object to store the And filter.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class AndFilter extends ConnectorFilter
+{
+    //~ Methods ------------------------------------------------------------------------------------
+
+    /**
+     * The constructor. We wont initialize the ArrayList as they may not be used. 
+     */
+    public AndFilter()
+    {
+        super();
+    }
+    
+    /**
+     * Get the AndFilter.
+     *
+     * @return Returns the andFilter.
+     */
+    public ArrayList getAndFilter()
+    {
+        return filterSet;
+    }
+    
+    /**
+     * Compute the AndFilter length
+     * 
+     * AndFilter :
+     * 
+     * 0xA0 L1 super.computeLength()
+     * 
+     * Length(AndFilter) = Length(0xA0) + Length(super.computeLength()) + super.computeLength()
+     * 
+     */
+    public int computeLength()
+    {
+        filtersLength = super.computeLength();
+        
+        return 1 + Length.getNbBytes( filtersLength ) + filtersLength;
+    }
+    
+    /**
+     * Encode the AndFilter message to a PDU.
+     * 
+     * AndFilter :
+     * 
+     * 0xA0 LL 
+     * filter.encode()
+     * ...
+     * filter.encode()
+     * 
+     * @param buffer The buffer where to put the PDU
+     * @return The PDU.
+     */
+    public ByteBuffer encode( ByteBuffer buffer ) throws EncoderException
+    {
+        if (buffer == null)
+        {
+            throw new EncoderException("Cannot put a PDU in a null buffer !");
+        }
+
+        try 
+        {
+            // The AndFilter Tag
+            buffer.put( (byte)LdapConstants.AND_FILTER_TAG );
+            buffer.put( Length.getBytes( filtersLength ) );
+        }
+        catch ( BufferOverflowException boe )
+        {
+            throw new EncoderException("The PDU buffer size is too small !"); 
+        }
+        
+        super.encode( buffer );
+
+        return buffer;
+    }
+
+    /**
+     * Return a string compliant with RFC 2254 representing an AND filter
+     *
+     * @return The AND filter string
+     */
+    public String toString()
+    {
+        StringBuffer sb = new StringBuffer();
+        
+        sb.append('&').append(super.toString());
+        
+        return sb.toString();
+    }
+}

Added: directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/AttributeValueAssertionFilter.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/AttributeValueAssertionFilter.java?rev=234264&view=auto
==============================================================================
--- directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/AttributeValueAssertionFilter.java (added)
+++ directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/AttributeValueAssertionFilter.java Sun Aug 21 09:53:27 2005
@@ -0,0 +1,206 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed 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.
+ *
+ */
+package org.apache.asn1new.ldap.pojo.filters;
+
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
+
+import org.apache.asn1new.EncoderException;
+import org.apache.asn1new.ber.tlv.Length;
+import org.apache.asn1new.ber.tlv.Value;
+import org.apache.asn1new.ldap.codec.LdapConstants;
+import org.apache.asn1new.ldap.pojo.AttributeValueAssertion;
+
+
+/**
+ * Object to store the filter. A filter is seen as a tree with a root.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class AttributeValueAssertionFilter extends Filter
+{
+    //~ Instance fields ----------------------------------------------------------------------------
+
+    /** The assertion. */
+    private AttributeValueAssertion assertion;
+
+    /** The filter type */
+    private int filterType;
+    
+    /** The attributeValueAssertion length */
+    private transient int avaLength;
+
+    //~ Constructors -------------------------------------------------------------------------------
+
+    /**
+     * The constructor. 
+     * @param filterType DOCUMENT ME!
+    */
+    public AttributeValueAssertionFilter(  int filterType )
+    {
+        this.filterType = filterType;
+    }
+
+    //~ Methods ------------------------------------------------------------------------------------
+
+    /**
+     * Get the assertion
+     *
+     * @return Returns the assertion.
+     */
+    public AttributeValueAssertion getAssertion()
+    {
+        return assertion;
+    }
+
+    /**
+     * Set the assertion
+     *
+     * @param assertion The assertion to set.
+     */
+    public void setAssertion( AttributeValueAssertion assertion )
+    {
+        this.assertion = assertion;
+    }
+
+    /**
+     * Get the filter type
+     *
+     * @return Returns the filterType.
+     */
+    public int getFilterType()
+    {
+        return filterType;
+    }
+
+    /**
+     * Set the filter type
+     *
+     * @param filterType The filterType to set.
+     */
+    public void setFilterType( int filterType )
+    {
+        this.filterType = filterType;
+    }
+
+    /**
+     * Compute the AttributeValueFilter length
+     * 
+     * AttributeValueFilter :
+     * 
+     * 0xA(3, 5, 6, 8) L1
+     *  |
+     *  +--> 0x04 L2 attributeDesc
+     *  +--> 0x04 L3 assertionValue
+     *  
+     * 
+     * L2 = Length(attributeDesc)
+     * L3 = Length(assertionValue)
+     * L1 = 1 + Length(L2) + L2 
+     *      + 1 + Length(L3) + L3
+     * 
+     * Length(AttributeValueFilter) = Length(0xA?) + Length(L1)
+     *                                + 1 + Length(L2) + L2 
+     *                                + 1 + Length(L3) + L3 
+     * 
+     */
+    public int computeLength()
+    {
+        avaLength = 0;
+        int attributeDescLength = assertion.getAttributeDesc().length();
+        
+        avaLength = 1 + Length.getNbBytes( attributeDescLength ) + attributeDescLength;
+        
+        int assertionValueLength = assertion.getAssertionValue().getLength();
+        
+        avaLength += 1 + Length.getNbBytes( assertionValueLength ) + assertionValueLength;
+        
+        return 1 + Length.getNbBytes( avaLength ) + avaLength;
+    }
+    
+    /**
+     * Encode the AttributeValueAssertion Filters to a PDU. The 
+     * following filters are to be encoded :
+     *  - equality match 
+     *  - greater or equal
+     *  - less or equal
+     *  - approx match 
+     * 
+     * AttributeValueAssertion filters :
+     * 
+     * 0xA[3, 5, 6, 8] LL 
+     * 0x04 LL attributeDesc
+     * 0x04 LL assertionValue
+     * 
+     * @param buffer The buffer where to put the PDU
+     * @return The PDU.
+     */
+    public ByteBuffer encode( ByteBuffer buffer ) throws EncoderException
+    {
+        if (buffer == null)
+        {
+            throw new EncoderException("Cannot put a PDU in a null buffer !");
+        }
+
+        try 
+        {
+            // The AttributeValueAssertion Tag
+            switch (filterType)
+            {
+                case LdapConstants.EQUALITY_MATCH_FILTER :
+                    buffer.put( (byte)LdapConstants.EQUALITY_MATCH_FILTER_TAG );
+                    break;
+                    
+                case LdapConstants.LESS_OR_EQUAL_FILTER :
+                    buffer.put( (byte)LdapConstants.LESS_OR_EQUAL_FILTER_TAG );
+                    break;
+                    
+                case LdapConstants.GREATER_OR_EQUAL_FILTER :
+                    buffer.put( (byte)LdapConstants.GREATER_OR_EQUAL_FILTER_TAG );
+                    break;
+                    
+                case LdapConstants.APPROX_MATCH_FILTER :
+                    buffer.put( (byte)LdapConstants.APPROX_MATCH_FILTER_TAG );
+                    break;
+            }
+            
+            buffer.put( Length.getBytes( avaLength ) );
+        }
+        catch ( BufferOverflowException boe )
+        {
+            throw new EncoderException("The PDU buffer size is too small !"); 
+        }
+        
+        // The attribute desc
+        Value.encode( buffer, assertion.getAttributeDesc() );
+
+        // The assertion desc
+        Value.encode( buffer, assertion.getAssertionValue() );
+            
+        return buffer;
+    }
+
+    /**
+     * Return a string compliant with RFC 2254 representing an item filter
+     *
+     * @return The item filter string
+     */
+    public String toString()
+    {
+        return assertion.toStringRFC2254( filterType );
+    }
+}

Added: directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/ConnectorFilter.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/ConnectorFilter.java?rev=234264&view=auto
==============================================================================
--- directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/ConnectorFilter.java (added)
+++ directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/ConnectorFilter.java Sun Aug 21 09:53:27 2005
@@ -0,0 +1,166 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed 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.
+ *
+ */
+package org.apache.asn1new.ldap.pojo.filters;
+
+import org.apache.asn1new.DecoderException;
+import org.apache.asn1new.EncoderException;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+
+/**
+ * This Filter abstract class is used to store a set of filters used by OR/AND/NOT
+ * filters. 
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public abstract class ConnectorFilter extends Filter
+{
+    //~ Instance fields ----------------------------------------------------------------------------
+
+    /** The set of filters used by And/Or filters */
+    protected ArrayList filterSet;
+    
+    /** The filters length */
+    protected transient int filtersLength;
+
+    //~ Constructors -------------------------------------------------------------------------------
+
+    /**
+     * The constructor. We wont initialize the ArrayList as it may not be used. 
+     */
+    public ConnectorFilter()
+    {
+    }
+
+    //~ Methods ------------------------------------------------------------------------------------
+
+    /**
+     * Add a new Filter to the list.
+     * @param filter The filter to add
+     */
+    public void addFilter( Filter filter ) throws DecoderException
+    {
+
+        if ( this.filterSet == null )
+        {
+            this.filterSet = new ArrayList();
+        }
+
+        this.filterSet.add( filter );
+    }
+
+    /**
+     * Get the list of filters stored in the composite filter
+     *
+     * @return And array of filters
+     */
+    public ArrayList getFilterSet()
+    {
+        return filterSet;
+    }
+
+    /**
+     * Compute the ConnectorFilter length
+     * 
+     * Length(ConnectorFilter) = sum(filterSet.computeLength())
+     * 
+     */
+    public int computeLength()
+    {
+        int connectorFilterLength = 0;
+        
+        if ( ( filterSet != null ) && ( filterSet.size() != 0 ) )
+        {
+            Iterator filterIterator = filterSet.iterator();
+            
+            while ( filterIterator.hasNext() )
+            {
+                Filter filter = (Filter)filterIterator.next();
+                
+                connectorFilterLength += filter.computeLength();
+            }
+        }
+        
+        return connectorFilterLength;
+    }
+
+    /**
+     * Encode the ConnectorFilter message to a PDU.
+     * 
+     * ConnectorFilter :
+     * 
+     * filter.encode()
+     * ...
+     * filter.encode()
+     * 
+     * @param buffer The buffer where to put the PDU
+     * @return The PDU.
+     */
+    public ByteBuffer encode( ByteBuffer buffer ) throws EncoderException
+    {
+        if (buffer == null)
+        {
+            throw new EncoderException("Cannot put a PDU in a null buffer !");
+        }
+
+        // encode each filter
+        if ( ( filterSet != null ) && ( filterSet.size() != 0 ) )
+        {
+            Iterator filterIterator = filterSet.iterator();
+            
+            while ( filterIterator.hasNext() )
+            {
+                Filter filter = (Filter)filterIterator.next();
+                
+                filter.encode( buffer );
+            }
+        }
+            
+        return buffer;
+    }
+
+    /**
+     * Return a string compliant with RFC 2254 representing a composite
+     * filter, one of AND, OR and NOT
+     *
+     * @return The composite filter string
+     */
+    public String toString()
+    {
+
+        StringBuffer sb = new StringBuffer();
+
+        if ( ( filterSet != null ) && ( filterSet.size() != 0 ) )
+        {
+
+            Iterator filterIterator = filterSet.iterator();
+
+            while ( filterIterator.hasNext() )
+            {
+
+                Filter filter = ( Filter ) filterIterator.next();
+
+                sb.append( '(' ).append( filter.toString() ).append( ')' );
+            }
+        }
+
+        return sb.toString();
+    }
+}

Added: directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/ExtensibleMatchFilter.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/ExtensibleMatchFilter.java?rev=234264&view=auto
==============================================================================
--- directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/ExtensibleMatchFilter.java (added)
+++ directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/ExtensibleMatchFilter.java Sun Aug 21 09:53:27 2005
@@ -0,0 +1,336 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed 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.
+ *
+ */
+package org.apache.asn1new.ldap.pojo.filters;
+
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
+
+import org.apache.asn1new.EncoderException;
+import org.apache.asn1new.ber.tlv.Length;
+import org.apache.asn1new.ber.tlv.UniversalTag;
+import org.apache.asn1new.ber.tlv.Value;
+import org.apache.asn1new.primitives.OctetString;
+import org.apache.asn1new.ldap.codec.LdapConstants;
+import org.apache.asn1new.ldap.codec.primitives.LdapString;
+
+
+/**
+ * The search request filter Matching Rule assertion
+ * 
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class ExtensibleMatchFilter extends Filter
+{
+    //~ Instance fields ----------------------------------------------------------------------------
+
+    /** The expected lenth of the Matching Rule Assertion */
+    private transient int expectedMatchingRuleLength;
+
+    /** Matching rule  */
+    private LdapString matchingRule;
+
+    /** Matching rule type */
+    private LdapString type;
+
+    /** Matching rule value */
+    private OctetString matchValue;
+
+    /** The dnAttributes flag */
+    private boolean dnAttributes;
+    
+    /** The extensible match length */
+    private transient int extensibleMatchLength;
+    
+    /** The matching Rule Assertion Length */
+    private transient int matchingRuleAssertionLength;
+
+    //~ Constructors -------------------------------------------------------------------------------
+
+    /**
+     * Creates a new ExtensibleMatchFilter object.
+     * The dnAttributes flag defaults to false.
+     */
+    public ExtensibleMatchFilter()
+    {
+        dnAttributes = false;
+    }
+
+    //~ Methods ------------------------------------------------------------------------------------
+
+    /**
+     * Get the dnAttributes flag
+     *
+     * @return Returns the dnAttributes.
+     */
+    public boolean isDnAttributes()
+    {
+        return dnAttributes;
+    }
+
+    /**
+     * Set the dnAttributes flag
+     *
+     * @param dnAttributes The dnAttributes to set.
+     */
+    public void setDnAttributes( boolean dnAttributes )
+    {
+        this.dnAttributes = dnAttributes;
+    }
+
+    /**
+     * Get the matchingRule
+     *
+     * @return Returns the matchingRule.
+     */
+    public LdapString getMatchingRule()
+    {
+        return matchingRule;
+    }
+
+    /**
+     * Set the matchingRule
+     *
+     * @param matchingRule The matchingRule to set.
+     */
+    public void setMatchingRule( LdapString matchingRule )
+    {
+        this.matchingRule = matchingRule;
+    }
+
+    /**
+     * Get the matchValue
+     *
+     * @return Returns the matchValue.
+     */
+    public OctetString getMatchValue()
+    {
+        return matchValue;
+    }
+
+    /**
+     * Set the matchValue
+     *
+     * @param matchValue The matchValue to set.
+     */
+    public void setMatchValue( OctetString matchValue )
+    {
+        this.matchValue = matchValue;
+    }
+
+    /**
+     * Get the type
+     *
+     * @return Returns the type.
+     */
+    public LdapString getType()
+    {
+        return type;
+    }
+
+    /**
+     * Set the type
+     *
+     * @param type The type to set.
+     */
+    public void setType( LdapString type )
+    {
+        this.type = type;
+    }
+
+    /**
+     * get the expectedMatchingRuleLength
+     *
+     * @return Returns the expectedMatchingRuleLength.
+     */
+    public int getExpectedMatchingRuleLength()
+    {
+        return expectedMatchingRuleLength;
+    }
+
+    /**
+     * Set the expectedMatchingRuleLength
+     *
+     * @param expectedMatchingRuleLength The expectedMatchingRuleLength to set.
+     */
+    public void setExpectedMatchingRuleLength( int expectedMatchingRuleLength )
+    {
+        this.expectedMatchingRuleLength = expectedMatchingRuleLength;
+    }
+
+    /**
+     * Compute the ExtensibleMatchFilter length
+     * 
+     * ExtensibleMatchFilter :
+     * 
+     * 0xA9 L1
+     *  |
+     *  +--> 0x30 L2
+     *        |
+     *       [+--> 0x81 L3 matchingRule]
+     *       [+--> 0x82 L4 type]
+     *       [+--> 0x83 L5 matchValue]
+     *       [+--> 0x01 0x01 dnAttributes]
+     *  
+     */
+    public int computeLength()
+    {
+        if ( matchingRule != null )
+        {
+            matchingRuleAssertionLength = 1 + Length.getNbBytes( matchingRule.getLength() ) + matchingRule.getLength(); 
+        }
+        
+        if ( type != null )
+        {
+            matchingRuleAssertionLength += 1 + Length.getNbBytes( type.getLength() ) + type.getLength();
+        }
+        
+        if ( matchValue != null )
+        {
+            matchingRuleAssertionLength += 1 + Length.getNbBytes( matchValue.getLength() ) + matchValue.getLength(); 
+        }
+        
+        if ( dnAttributes == true )
+        {
+            matchingRuleAssertionLength += 1 + 1 + 1;
+        }
+
+        extensibleMatchLength = 1 + Length.getNbBytes( matchingRuleAssertionLength ) + matchingRuleAssertionLength;
+        
+        return 1 + Length.getNbBytes( extensibleMatchLength ) + extensibleMatchLength;
+    }
+    
+    /**
+     * Encode the ExtensibleMatch Filters to a PDU. 
+     * 
+     * ExtensibleMatch filter :
+     * 
+     * 0xA9 LL 
+     * 0x30 LL matchingRuleAssertion
+     *  |     0x81 LL matchingRule
+     *  |    / |   0x82 LL Type  
+     *  |   /  |  /0x83 LL matchValue
+     *  +--+   +-+
+     *  |   \     \
+     *  |    \     0x83 LL MatchValue
+     *  |     0x82 LL type
+     *  |     0x83 LL matchValue
+     *  +--[0x84 0x01 dnAttributes]
+     * 
+     * @param buffer The buffer where to put the PDU
+     * @return The PDU.
+     */
+    public ByteBuffer encode( ByteBuffer buffer ) throws EncoderException
+    {
+        if (buffer == null)
+        {
+            throw new EncoderException("Cannot put a PDU in a null buffer !");
+        }
+
+        try 
+        {
+            // The ExtensibleMatch Tag
+            buffer.put( (byte)LdapConstants.EXTENSIBLE_MATCH_FILTER_TAG );
+            buffer.put( Length.getBytes( extensibleMatchLength ) );
+
+            // The MatchingRuleAssertion sequence tag
+            buffer.put( UniversalTag.SEQUENCE_TAG );
+            buffer.put( Length.getBytes( matchingRuleAssertionLength ) );
+
+            if ( ( matchingRule == null ) && ( type == null ) ) 
+            {
+                throw new EncoderException("Cannot have a null matching rule and a null type");
+            }
+            
+            // The matching rule
+            if ( matchingRule != null ) 
+            {
+                buffer.put( (byte)LdapConstants.SEARCH_MATCHING_RULE_TAG );
+                buffer.put( Length.getBytes( matchingRule.getLength() ) );
+                buffer.put( matchingRule.getData() );                
+            }
+            
+            // The type
+            if ( type != null ) 
+            {
+                buffer.put( (byte)LdapConstants.SEARCH_TYPE_TAG );
+                buffer.put( Length.getBytes( type.getLength() ) );
+                buffer.put( type.getData() );                
+            }
+            
+            // The match value
+            if ( matchValue != null ) 
+            {
+                buffer.put( (byte)LdapConstants.SEARCH_MATCH_VALUE_TAG );
+                buffer.put( Length.getBytes( matchValue.getLength() ) );
+                buffer.put( matchValue.getValue() );                
+            }
+
+            // The dnAttributes flag, if true only
+            if ( dnAttributes == true )
+            {
+                buffer.put( (byte)LdapConstants.DN_ATTRIBUTES_FILTER_TAG );
+                buffer.put( (byte)1 );
+                buffer.put( Value.TRUE_VALUE );                
+            }
+        }
+        catch ( BufferOverflowException boe )
+        {
+            throw new EncoderException("The PDU buffer size is too small !"); 
+        }
+        
+        return buffer;
+    }
+
+    /**
+     * Return a String representing an extended filter as of RFC 2254
+     *
+     * @return An Extened Filter String
+     */
+    public String toString()
+    {
+
+        StringBuffer sb = new StringBuffer();
+
+        if ( type != null )
+        {
+            sb.append( type.toString() );
+        }
+
+        if ( dnAttributes == true )
+        {
+            sb.append( ":dn" );
+        }
+
+        if ( matchingRule == null )
+        {
+
+            if ( type == null )
+            {
+                return "Extended Filter wrong syntax";
+            }
+        }
+        else
+        {
+            sb.append( ':' ).append( matchingRule.toString() );
+        }
+
+        sb.append( ":=" ).append( matchValue.toString() );
+
+        return sb.toString();
+    }
+}

Added: directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/Filter.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/Filter.java?rev=234264&view=auto
==============================================================================
--- directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/Filter.java (added)
+++ directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/Filter.java Sun Aug 21 09:53:27 2005
@@ -0,0 +1,41 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed 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.
+ *
+ */
+package org.apache.asn1new.ldap.pojo.filters;
+
+import org.apache.asn1new.Asn1Object;
+
+
+/**
+ * An abstract Asn1Object used to store the filter. A filter is seen as a tree with a root.
+ * This class does nothing, it's just the root of all the different filters.
+ * 
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public abstract class Filter extends Asn1Object
+{
+    //~ Constructors -------------------------------------------------------------------------------
+
+    /**
+     * The constructor.  
+     */
+    public Filter()
+    {
+    }
+
+    //~ Methods ------------------------------------------------------------------------------------
+}

Added: directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/NotFilter.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/NotFilter.java?rev=234264&view=auto
==============================================================================
--- directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/NotFilter.java (added)
+++ directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/NotFilter.java Sun Aug 21 09:53:27 2005
@@ -0,0 +1,147 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed 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.
+ *
+ */
+package org.apache.asn1new.ldap.pojo.filters;
+
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
+
+import org.apache.asn1new.DecoderException;
+import org.apache.asn1new.EncoderException;
+import org.apache.asn1new.ber.tlv.Length;
+import org.apache.asn1new.ldap.codec.LdapConstants;
+
+/**
+ * Not Filter Object to store the Not filter.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class NotFilter extends ConnectorFilter
+{
+    //~ Methods ------------------------------------------------------------------------------------
+
+    /**
+     * The constructor. 
+     */
+    public NotFilter()
+    {
+    }
+    
+    /**
+     * Subclass the addFilterMethod, as this is specific for a NotFilter
+     * (we cannot have more than one elements).
+     * @param Filter The Filter to add
+     */
+    public void addFilter( Filter filter ) throws DecoderException
+    {
+        if ( filterSet != null )
+        {
+            throw new DecoderException("Cannot have more than one Filter within a Not Filter");
+        }
+        
+        super.addFilter( filter );
+    }
+
+    /**
+     * Get the NotFilter
+     *
+     * @return Returns the notFilter.
+     */
+    public Filter getNotFilter()
+    {
+        return (Filter)filterSet.get(0);
+    }
+
+    /**
+     * Set the NotFilter
+     *
+     * @param not The notFilter to set.
+     */
+    public void setNotFilter( Filter notFilter ) throws DecoderException
+    {
+        if ( filterSet != null )
+        {
+            throw new DecoderException("Cannot have more than one Filter within a Not Filter");
+        }
+        
+        super.addFilter( notFilter );
+    }
+    
+    /**
+     * Compute the NotFilter length
+     * 
+     * NotFilter :
+     * 
+     * 0xA2 L1 super.computeLength()
+     * 
+     * Length(NotFilter) = Length(0xA2) + Length(super.computeLength()) + super.computeLength()
+     * 
+     */
+    public int computeLength()
+    {
+        filtersLength = super.computeLength();
+        
+        return 1 + Length.getNbBytes( filtersLength ) + filtersLength;
+    }
+
+    /**
+     * Encode the NotFilter message to a PDU.
+     * 
+     * NotFilter :
+     * 
+     * 0xA2 LL 
+     * filter.encode()
+     * 
+     * @param buffer The buffer where to put the PDU
+     * @return The PDU.
+     */
+    public ByteBuffer encode( ByteBuffer buffer ) throws EncoderException
+    {
+        if (buffer == null)
+        {
+            throw new EncoderException("Cannot put a PDU in a null buffer !");
+        }
+
+        try 
+        {
+            // The NotFilter Tag
+            buffer.put( (byte)LdapConstants.NOT_FILTER_TAG );
+            buffer.put( Length.getBytes( filtersLength ) );
+        }
+        catch ( BufferOverflowException boe )
+        {
+            throw new EncoderException("The PDU buffer size is too small !"); 
+        }
+        
+        super.encode( buffer );
+            
+        return buffer;
+    }
+
+    /**
+     * Return a string compliant with RFC 2254 representing a NOT filter
+     *
+     * @return The NOT filter string
+     */
+    public String toString()
+    {
+        StringBuffer sb = new StringBuffer();
+        
+        sb.append('!').append(super.toString());
+        
+        return sb.toString();
+    }
+}

Added: directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/OrFilter.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/OrFilter.java?rev=234264&view=auto
==============================================================================
--- directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/OrFilter.java (added)
+++ directory/shared/ldap/branches/new-codec-integration/apache2-provider/src/java/main/org/apache/asn1new/ldap/pojo/filters/OrFilter.java Sun Aug 21 09:53:27 2005
@@ -0,0 +1,121 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   Licensed 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.
+ *
+ */
+package org.apache.asn1new.ldap.pojo.filters;
+
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+
+import org.apache.asn1new.EncoderException;
+import org.apache.asn1new.ber.tlv.Length;
+import org.apache.asn1new.ldap.codec.LdapConstants;
+
+
+/**
+ * Or Filter Object to store the Or filter.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class OrFilter extends ConnectorFilter
+{
+    //~ Constructors -------------------------------------------------------------------------------
+
+    /**
+     * The constructor. We wont initialize the ArrayList as they may not be used. 
+     */
+    public OrFilter()
+    {
+    }
+
+    //~ Methods ------------------------------------------------------------------------------------
+
+    /**
+     * Get the OrFilter
+     *
+     * @return Returns the orFilter.
+     */
+    public ArrayList getOrFilter()
+    {
+        return filterSet;
+    }
+
+    /**
+     * Compute the OrFilter length
+     * 
+     * OrFilter :
+     * 
+     * 0xA1 L1 super.computeLength()
+     * 
+     * Length(OrFilter) = Length(0xA1) + Length(super.computeLength()) + super.computeLength()
+     * 
+     */
+    public int computeLength()
+    {
+        filtersLength = super.computeLength();
+        
+        return 1 + Length.getNbBytes( filtersLength ) + filtersLength;
+    }
+    
+    /**
+     * Encode the OrFilter message to a PDU.
+     * 
+     * OrFilter :
+     * 
+     * 0xA1 LL 
+     * filter.encode()
+     * 
+     * @param buffer The buffer where to put the PDU
+     * @return The PDU.
+     */
+    public ByteBuffer encode( ByteBuffer buffer ) throws EncoderException
+    {
+        if (buffer == null)
+        {
+            throw new EncoderException("Cannot put a PDU in a null buffer !");
+        }
+
+        try 
+        {
+            // The OrFilter Tag
+            buffer.put( (byte)LdapConstants.OR_FILTER_TAG );
+            buffer.put( Length.getBytes( filtersLength ) );
+        }
+        catch ( BufferOverflowException boe )
+        {
+            throw new EncoderException("The PDU buffer size is too small !"); 
+        }
+        
+        super.encode( buffer );
+            
+        return buffer;
+    }
+
+    /**
+     * Return a string compliant with RFC 2254 representing an OR filter
+     *
+     * @return The OR filter string
+     */
+    public String toString()
+    {
+
+        StringBuffer sb = new StringBuffer();
+
+        sb.append( '|' ).append( super.toString() );
+
+        return sb.toString();
+    }
+}