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 2011/01/25 14:29:19 UTC

svn commit: r1063270 - in /directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec: ./ decorators/

Author: elecharny
Date: Tue Jan 25 13:29:18 2011
New Revision: 1063270

URL: http://svn.apache.org/viewvc?rev=1063270&view=rev
Log:
Fixed the remaining issues on the encoders

Added:
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ResponseDecorator.java
Modified:
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapEncoder.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/AddResponseDecorator.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/BindResponseDecorator.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/CompareResponseDecorator.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/DeleteResponseDecorator.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ExtendedResponseDecorator.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/IntermediateResponseDecorator.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/MessageDecorator.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ModifyDnResponseDecorator.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ModifyResponseDecorator.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/SearchResultDoneDecorator.java

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapEncoder.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapEncoder.java?rev=1063270&r1=1063269&r2=1063270&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapEncoder.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/LdapEncoder.java Tue Jan 25 13:29:18 2011
@@ -34,12 +34,54 @@ import org.apache.directory.shared.asn1.
 import org.apache.directory.shared.asn1.util.Asn1StringUtils;
 import org.apache.directory.shared.i18n.I18n;
 import org.apache.directory.shared.ldap.codec.controls.CodecControl;
-import org.apache.directory.shared.ldap.codec.decorators.*;
+import org.apache.directory.shared.ldap.codec.decorators.AddRequestDecorator;
+import org.apache.directory.shared.ldap.codec.decorators.AddResponseDecorator;
+import org.apache.directory.shared.ldap.codec.decorators.BindRequestDecorator;
+import org.apache.directory.shared.ldap.codec.decorators.BindResponseDecorator;
+import org.apache.directory.shared.ldap.codec.decorators.CompareRequestDecorator;
+import org.apache.directory.shared.ldap.codec.decorators.CompareResponseDecorator;
+import org.apache.directory.shared.ldap.codec.decorators.DeleteResponseDecorator;
+import org.apache.directory.shared.ldap.codec.decorators.ExtendedRequestDecorator;
+import org.apache.directory.shared.ldap.codec.decorators.ExtendedResponseDecorator;
+import org.apache.directory.shared.ldap.codec.decorators.IntermediateResponseDecorator;
+import org.apache.directory.shared.ldap.codec.decorators.LdapResultDecorator;
+import org.apache.directory.shared.ldap.codec.decorators.MessageDecorator;
+import org.apache.directory.shared.ldap.codec.decorators.ModifyDnRequestDecorator;
+import org.apache.directory.shared.ldap.codec.decorators.ModifyDnResponseDecorator;
+import org.apache.directory.shared.ldap.codec.decorators.ModifyRequestDecorator;
+import org.apache.directory.shared.ldap.codec.decorators.ModifyResponseDecorator;
+import org.apache.directory.shared.ldap.codec.decorators.SearchRequestDecorator;
+import org.apache.directory.shared.ldap.codec.decorators.SearchResultDoneDecorator;
+import org.apache.directory.shared.ldap.codec.decorators.SearchResultEntryDecorator;
+import org.apache.directory.shared.ldap.codec.decorators.SearchResultReferenceDecorator;
 import org.apache.directory.shared.ldap.model.entry.BinaryValue;
 import org.apache.directory.shared.ldap.model.entry.Entry;
 import org.apache.directory.shared.ldap.model.entry.EntryAttribute;
 import org.apache.directory.shared.ldap.model.entry.Modification;
-import org.apache.directory.shared.ldap.model.message.*;
+import org.apache.directory.shared.ldap.model.message.AbandonRequestImpl;
+import org.apache.directory.shared.ldap.model.message.AddRequest;
+import org.apache.directory.shared.ldap.model.message.AddResponse;
+import org.apache.directory.shared.ldap.model.message.BindRequest;
+import org.apache.directory.shared.ldap.model.message.BindResponse;
+import org.apache.directory.shared.ldap.model.message.CompareRequest;
+import org.apache.directory.shared.ldap.model.message.CompareResponse;
+import org.apache.directory.shared.ldap.model.message.Control;
+import org.apache.directory.shared.ldap.model.message.DeleteRequestImpl;
+import org.apache.directory.shared.ldap.model.message.DeleteResponse;
+import org.apache.directory.shared.ldap.model.message.ExtendedRequest;
+import org.apache.directory.shared.ldap.model.message.ExtendedResponse;
+import org.apache.directory.shared.ldap.model.message.IntermediateResponse;
+import org.apache.directory.shared.ldap.model.message.LdapResult;
+import org.apache.directory.shared.ldap.model.message.Message;
+import org.apache.directory.shared.ldap.model.message.ModifyDnRequest;
+import org.apache.directory.shared.ldap.model.message.ModifyDnResponse;
+import org.apache.directory.shared.ldap.model.message.ModifyRequest;
+import org.apache.directory.shared.ldap.model.message.ModifyResponse;
+import org.apache.directory.shared.ldap.model.message.Referral;
+import org.apache.directory.shared.ldap.model.message.SearchRequest;
+import org.apache.directory.shared.ldap.model.message.SearchResultDone;
+import org.apache.directory.shared.ldap.model.message.SearchResultEntry;
+import org.apache.directory.shared.ldap.model.message.SearchResultReference;
 import org.apache.directory.shared.ldap.model.name.Dn;
 import org.apache.directory.shared.util.Strings;
 
@@ -143,20 +185,20 @@ public class LdapEncoder
      * L1 = length(ProtocolOp) 
      * LdapMessage length = Length(0x30) + Length(L1) + MessageId length + L1
      *
-     * @param decorator the decorated Message who's length is to be encoded
+     * @param messageDecorator the decorated Message who's length is to be encoded
      */
-    private int computeMessageLength( MessageDecorator decorator )
+    private int computeMessageLength( MessageDecorator messageDecorator )
     {
         // The length of the MessageId. It's the sum of
         // - the tag (0x02), 1 byte
         // - the length of the Id length, 1 byte
         // - the Id length, 1 to 4 bytes
-        int ldapMessageLength = 1 + 1 + Value.getNbBytes( decorator.getMessage().getMessageId());
+        int ldapMessageLength = 1 + 1 + Value.getNbBytes( messageDecorator.getMessage().getMessageId());
 
         // Get the protocolOp length
-        ldapMessageLength += computeProtocolOpLength( decorator );
+        ldapMessageLength += computeProtocolOpLength( messageDecorator );
 
-        Map<String, Control> controls = decorator.getMessage().getControls();
+        Map<String, Control> controls = messageDecorator.getMessage().getControls();
 
         // Do the same thing for Controls, if any.
         if ( controls.size() > 0 )
@@ -190,14 +232,14 @@ public class LdapEncoder
 
             // Computes the controls length
             // 1 + Length.getNbBytes( controlsSequenceLength ) + controlsSequenceLength;
-            decorator.setControlsLength( controlsSequenceLength );
+            messageDecorator.setControlsLength( controlsSequenceLength );
 
             // Now, add the tag and the length of the controls length
             ldapMessageLength += 1 + TLV.getNbBytes( controlsSequenceLength ) + controlsSequenceLength;
         }
 
         // Store the messageLength
-        decorator.setMessageLength( ldapMessageLength );
+        messageDecorator.setMessageLength( ldapMessageLength );
 
         // finally, calculate the global message size :
         // length(Tag) + Length(length) + length
@@ -230,9 +272,9 @@ public class LdapEncoder
      *      Length(0x01) + 1 + Length(0x04) + Length(L1) + L1 + Length(0x04) +
      *      Length(L2) + L2 + Length(0x83) + Length(L3) + L3
      */
-    private int computeLdapResultLength( LdapResultDecorator decorator )
+    private int computeLdapResultLength( LdapResultDecorator ldapResultDecorator )
     {
-        LdapResult ldapResult = decorator.getLdapResult();
+        LdapResult ldapResult = ldapResultDecorator.getLdapResult();
         int ldapResultLength = 0;
 
         // The result code : always 3 bytes
@@ -248,13 +290,13 @@ public class LdapEncoder
             byte[] matchedDNBytes = Strings.getBytesUtf8(Strings
                     .trimLeft(ldapResult.getMatchedDn().getName()));
             ldapResultLength += 1 + TLV.getNbBytes( matchedDNBytes.length ) + matchedDNBytes.length;
-            decorator.setMatchedDnBytes( matchedDNBytes );
+            ldapResultDecorator.setMatchedDnBytes( matchedDNBytes );
         }
 
         // The errorMessage length
         byte[] errorMessageBytes = Strings.getBytesUtf8(ldapResult.getErrorMessage());
         ldapResultLength += 1 + TLV.getNbBytes( errorMessageBytes.length ) + errorMessageBytes.length;
-        decorator.setErrorMessageBytes( errorMessageBytes );
+        ldapResultDecorator.setErrorMessageBytes( errorMessageBytes );
 
         int referralLength = computeReferralLength( ldapResult.getReferral() );
 
@@ -395,9 +437,9 @@ public class LdapEncoder
      *                    +--> ...
      *                    +--> 0x04 L7-m-n value
      */
-    private int computeAddRequestLength( AddRequestDecorator decorator )
+    private int computeAddRequestLength( AddRequestDecorator addRequestDecorator )
     {
-        AddRequest addRequest = decorator.getAddRequest();
+        AddRequest addRequest = addRequestDecorator.getAddRequest();
         Entry entry = addRequest.getEntry();
 
         if ( entry == null )
@@ -447,13 +489,13 @@ public class LdapEncoder
                 valuesLength.add( localValuesLength );
             }
 
-            decorator.setAttributesLength( attributesLength );
-            decorator.setValuesLength( valuesLength );
-            decorator.setEntryLength( entryLength );
+            addRequestDecorator.setAttributesLength( attributesLength );
+            addRequestDecorator.setValuesLength( valuesLength );
+            addRequestDecorator.setEntryLength( entryLength );
         }
 
         addRequestLength += 1 + TLV.getNbBytes( entryLength ) + entryLength;
-        decorator.setAddRequestLength( addRequestLength );
+        addRequestDecorator.setAddRequestLength( addRequestLength );
 
         // Return the result.
         return 1 + TLV.getNbBytes( addRequestLength ) + addRequestLength;
@@ -473,12 +515,13 @@ public class LdapEncoder
      * 
      * Length(AddResponse) = Length(0x69) + Length(L1) + L1
      */
-    private int computeAddResponseLength( AddResponseDecorator decorator )
+    private int computeAddResponseLength( AddResponseDecorator addResponseDecorator )
     {
-        AddResponse addResponse = decorator.getAddResponse();
-        int addResponseLength = computeLdapResultLength( new LdapResultDecorator( addResponse.getLdapResult() ) );
+        AddResponse addResponse = addResponseDecorator.getAddResponse();
+        addResponseDecorator.setLdapResultDecorator( new LdapResultDecorator( addResponse.getLdapResult() ) );
+        int addResponseLength = computeLdapResultLength( addResponseDecorator.getLdapResultDecorator() );
 
-        decorator.setAddResponseLength( addResponseLength );
+        addResponseDecorator.setAddResponseLength( addResponseLength );
 
         return 1 + TLV.getNbBytes( addResponseLength ) + addResponseLength;
     }
@@ -501,9 +544,9 @@ public class LdapEncoder
      *      Length(0x04) + Length(L2) + L2 + Length(authentication)
      * </pre>
      */
-    private int computeBindRequestLength( BindRequestDecorator decorator )
+    private int computeBindRequestLength( BindRequestDecorator bindRequestDecorator )
     {
-        BindRequest bindRequest = decorator.getBindRequest();
+        BindRequest bindRequest = bindRequestDecorator.getBindRequest();
         int bindRequestLength = 1 + 1 + 1; // Initialized with version
 
         // The name
@@ -542,11 +585,11 @@ public class LdapEncoder
             bindRequestLength += saslLength;
 
             // Store the mechanism and credentials lengths
-            decorator.setSaslMechanismLength( saslMechanismLength );
-            decorator.setSaslCredentialsLength( saslCredentialsLength );
+            bindRequestDecorator.setSaslMechanismLength( saslMechanismLength );
+            bindRequestDecorator.setSaslCredentialsLength( saslCredentialsLength );
         }
 
-        decorator.setBindRequestLength( bindRequestLength );
+        bindRequestDecorator.setBindRequestLength( bindRequestLength );
 
         // Return the result.
         return 1 + TLV.getNbBytes( bindRequestLength ) + bindRequestLength;
@@ -567,10 +610,11 @@ public class LdapEncoder
      * Length(BindResponse) = Length(0x61) + Length(L1) + L1
      * </pre>
      */
-    private int computeBindResponseLength( BindResponseDecorator decorator )
+    private int computeBindResponseLength( BindResponseDecorator bindResponseDecorator )
     {
-        BindResponse bindResponse = decorator.getBindResponse();
-        int ldapResultLength = computeLdapResultLength( new LdapResultDecorator( bindResponse.getLdapResult() ) );
+        BindResponse bindResponse = bindResponseDecorator.getBindResponse();
+        bindResponseDecorator.setLdapResultDecorator( new LdapResultDecorator( bindResponse.getLdapResult() ) );
+        int ldapResultLength = computeLdapResultLength( bindResponseDecorator.getLdapResultDecorator() );
 
         int bindResponseLength = ldapResultLength;
 
@@ -581,7 +625,7 @@ public class LdapEncoder
             bindResponseLength += 1 + TLV.getNbBytes( serverSaslCreds.length ) + serverSaslCreds.length;
         }
 
-        decorator.setBindResponseLength( bindResponseLength );
+        bindResponseDecorator.setBindResponseLength( bindResponseLength );
 
         return 1 + TLV.getNbBytes( bindResponseLength ) + bindResponseLength;
     }
@@ -606,9 +650,9 @@ public class LdapEncoder
      * 
      * @return The CompareRequest PDU's length
      */
-    private int computeCompareRequestLength( CompareRequestDecorator decorator )
+    private int computeCompareRequestLength( CompareRequestDecorator compareRequestDecorator )
     {
-        CompareRequest compareRequest = decorator.getCompareRequest();
+        CompareRequest compareRequest = compareRequestDecorator.getCompareRequest();
         // The entry Dn
         Dn entry = compareRequest.getName();
         int compareRequestLength = 1 + TLV.getNbBytes( Dn.getNbBytes(entry) ) + Dn.getNbBytes(entry);
@@ -616,26 +660,26 @@ public class LdapEncoder
         // The attribute value assertion
         byte[] attributeIdBytes = Strings.getBytesUtf8(compareRequest.getAttributeId());
         int avaLength = 1 + TLV.getNbBytes( attributeIdBytes.length ) + attributeIdBytes.length;
-        decorator.setAttrIdBytes( attributeIdBytes );
+        compareRequestDecorator.setAttrIdBytes( attributeIdBytes );
 
-        org.apache.directory.shared.ldap.model.entry.Value assertionValue = compareRequest.getAssertionValue();
+        org.apache.directory.shared.ldap.model.entry.Value<?> assertionValue = compareRequest.getAssertionValue();
 
         if ( assertionValue instanceof BinaryValue )
         {
             byte[] value = compareRequest.getAssertionValue().getBytes();
             avaLength += 1 + TLV.getNbBytes( value.length ) + value.length;
-            decorator.setAttrValBytes( value );
+            compareRequestDecorator.setAttrValBytes( value );
         }
         else
         {
             byte[] value = Strings.getBytesUtf8(compareRequest.getAssertionValue().getString());
             avaLength += 1 + TLV.getNbBytes( value.length ) + value.length;
-            decorator.setAttrValBytes( value );
+            compareRequestDecorator.setAttrValBytes( value );
         }
 
-        decorator.setAvaLength( avaLength );
+        compareRequestDecorator.setAvaLength( avaLength );
         compareRequestLength += 1 + TLV.getNbBytes( avaLength ) + avaLength;
-        decorator.setCompareRequestLength( compareRequestLength );
+        compareRequestDecorator.setCompareRequestLength( compareRequestLength );
 
         return 1 + TLV.getNbBytes( compareRequestLength ) + compareRequestLength;
 
@@ -655,12 +699,13 @@ public class LdapEncoder
      * 
      * Length(CompareResponse) = Length(0x6F) + Length(L1) + L1
      */
-    private int computeCompareResponseLength( CompareResponseDecorator decorator )
+    private int computeCompareResponseLength( CompareResponseDecorator compareResponseDecorator )
     {
-        CompareResponse compareResponse = decorator.getCompareResponse();
-        int compareResponseLength = computeLdapResultLength( new LdapResultDecorator( compareResponse.getLdapResult() ) );
+        CompareResponse compareResponse = compareResponseDecorator.getCompareResponse();
+        compareResponseDecorator.setLdapResultDecorator( new LdapResultDecorator( compareResponse.getLdapResult() ) );
+        int compareResponseLength = computeLdapResultLength( compareResponseDecorator.getLdapResultDecorator() );
 
-        decorator.setCompareResponseLength( compareResponseLength );
+        compareResponseDecorator.setCompareResponseLength( compareResponseLength );
 
         return 1 + TLV.getNbBytes( compareResponseLength ) + compareResponseLength;
     }
@@ -695,12 +740,13 @@ public class LdapEncoder
      * 
      * Length(DelResponse) = Length(0x6B) + Length(L1) + L1
      */
-    private int computeDeleteResponseLength( DeleteResponseDecorator decorator )
+    private int computeDeleteResponseLength( DeleteResponseDecorator deleteResponseDecorator )
     {
-        DeleteResponse deleteResponse = decorator.getDeleteResponse();
-        int deleteResponseLength = computeLdapResultLength( new LdapResultDecorator( deleteResponse.getLdapResult() ) );
+        DeleteResponse deleteResponse = deleteResponseDecorator.getDeleteResponse();
+        deleteResponseDecorator.setLdapResultDecorator( new LdapResultDecorator( deleteResponse.getLdapResult() ) );
+        int deleteResponseLength = computeLdapResultLength( deleteResponseDecorator.getLdapResultDecorator() );
 
-        decorator.setDeleteResponseLength( deleteResponseLength );
+        deleteResponseDecorator.setDeleteResponseLength( deleteResponseLength );
 
         return 1 + TLV.getNbBytes( deleteResponseLength ) + deleteResponseLength;
     }
@@ -721,12 +767,12 @@ public class LdapEncoder
      * 
      * Length(ExtendedRequest) = Length(0x77) + Length(L1) + L1
      */
-    private int computeExtendedRequestLength( ExtendedRequestDecorator decorator )
+    private int computeExtendedRequestLength( ExtendedRequestDecorator extendedRequestDecorator )
     {
-        ExtendedRequest extendedRequest = decorator.getExtendedRequest();
+        ExtendedRequest extendedRequest = extendedRequestDecorator.getExtendedRequest();
         byte[] requestNameBytes = Strings.getBytesUtf8(extendedRequest.getRequestName());
 
-        decorator.setRequestNameBytes( requestNameBytes );
+        extendedRequestDecorator.setRequestNameBytes( requestNameBytes );
 
         int extendedRequestLength = 1 + TLV.getNbBytes( requestNameBytes.length ) + requestNameBytes.length;
 
@@ -736,7 +782,7 @@ public class LdapEncoder
                 + extendedRequest.getRequestValue().length;
         }
 
-        decorator.setExtendedRequestLength( extendedRequestLength );
+        extendedRequestDecorator.setExtendedRequestLength( extendedRequestLength );
 
         return 1 + TLV.getNbBytes( extendedRequestLength ) + extendedRequestLength;
     }
@@ -761,10 +807,11 @@ public class LdapEncoder
      * 
      * @return The ExtendedResponse length
      */
-    private int computeExtendedResponseLength( ExtendedResponseDecorator decorator )
+    private int computeExtendedResponseLength( ExtendedResponseDecorator extendedResponseDecorator )
     {
-        ExtendedResponse extendedResponse = decorator.getExtendedResponse();
-        int ldapResultLength = computeLdapResultLength( new LdapResultDecorator( extendedResponse.getLdapResult() ) );
+        ExtendedResponse extendedResponse = extendedResponseDecorator.getExtendedResponse();
+        extendedResponseDecorator.setLdapResultDecorator( new LdapResultDecorator( extendedResponse.getLdapResult() ) );
+        int ldapResultLength = computeLdapResultLength( extendedResponseDecorator.getLdapResultDecorator() );
 
         int extendedResponseLength = ldapResultLength;
 
@@ -773,7 +820,7 @@ public class LdapEncoder
         if ( !Strings.isEmpty(id) )
         {
             byte[] idBytes = Strings.getBytesUtf8(id);
-            decorator.setResponseNameBytes( idBytes );
+            extendedResponseDecorator.setResponseNameBytes( idBytes );
             int idLength = idBytes.length;
             extendedResponseLength += 1 + TLV.getNbBytes( idLength ) + idLength;
         }
@@ -785,7 +832,7 @@ public class LdapEncoder
             extendedResponseLength += 1 + TLV.getNbBytes( encodedValue.length ) + encodedValue.length;
         }
 
-        decorator.setExtendedResponseLength( extendedResponseLength );
+        extendedResponseDecorator.setExtendedResponseLength( extendedResponseLength );
 
         return 1 + TLV.getNbBytes( extendedResponseLength ) + extendedResponseLength;
     }
@@ -808,9 +855,9 @@ public class LdapEncoder
      * 
      * @return The IntermediateResponse length
      */
-    private int computeIntermediateResponseLength( IntermediateResponseDecorator decorator )
+    private int computeIntermediateResponseLength( IntermediateResponseDecorator intermediateResponseDecorator )
     {
-        IntermediateResponse intermediateResponse = decorator.getIntermediateResponse();
+        IntermediateResponse intermediateResponse = intermediateResponseDecorator.getIntermediateResponse();
         int intermediateResponseLength = 0;
 
         if ( !Strings.isEmpty(intermediateResponse.getResponseName()) )
@@ -819,7 +866,7 @@ public class LdapEncoder
 
             int responseNameLength = responseNameBytes.length;
             intermediateResponseLength += 1 + TLV.getNbBytes( responseNameLength ) + responseNameLength;
-            decorator.setResponseNameBytes( responseNameBytes );
+            intermediateResponseDecorator.setResponseNameBytes( responseNameBytes );
         }
 
         byte[] encodedValue = intermediateResponse.getResponseValue();
@@ -829,7 +876,7 @@ public class LdapEncoder
             intermediateResponseLength += 1 + TLV.getNbBytes( encodedValue.length ) + encodedValue.length;
         }
 
-        decorator.setIntermediateResponseLength( intermediateResponseLength );
+        intermediateResponseDecorator.setIntermediateResponseLength( intermediateResponseLength );
 
         return 1 + TLV.getNbBytes( intermediateResponseLength ) + intermediateResponseLength;
     }
@@ -875,9 +922,9 @@ public class LdapEncoder
      *                          +--> ...
      *                          +--> 0x04 L8-2-n attributeValue
      */
-    private int computeModifyRequestLength( ModifyRequestDecorator decorator )
+    private int computeModifyRequestLength( ModifyRequestDecorator modifyRequestDecorator )
     {
-        ModifyRequest modifyRequest = decorator.getModifyRequest();
+        ModifyRequest modifyRequest = modifyRequestDecorator.getModifyRequest();
         // Initialized with name
         int modifyRequestLength = 1 + TLV.getNbBytes( Dn.getNbBytes( modifyRequest.getName() ) )
             + Dn.getNbBytes(modifyRequest.getName() );
@@ -930,13 +977,13 @@ public class LdapEncoder
 
             // Add the modifications length to the modificationRequestLength
             modifyRequestLength += 1 + TLV.getNbBytes( changesLength ) + changesLength;
-            decorator.setChangeLength( changeLength );
-            decorator.setModificationLength( modificationLength );
-            decorator.setValuesLength( valuesLength );
+            modifyRequestDecorator.setChangeLength( changeLength );
+            modifyRequestDecorator.setModificationLength( modificationLength );
+            modifyRequestDecorator.setValuesLength( valuesLength );
         }
 
-        decorator.setChangesLength( changesLength );
-        decorator.setModifyRequestLength( modifyRequestLength );
+        modifyRequestDecorator.setChangesLength( changesLength );
+        modifyRequestDecorator.setModifyRequestLength( modifyRequestLength );
 
         return 1 + TLV.getNbBytes( modifyRequestLength ) + modifyRequestLength;
 
@@ -956,12 +1003,13 @@ public class LdapEncoder
      * Length(ModifyResponse) = Length(0x67) + Length(L1) + L1
      * </pre>
      */
-    private int computeModifyResponseLength( ModifyResponseDecorator decorator )
+    private int computeModifyResponseLength( ModifyResponseDecorator modifyResponseDecorator )
     {
-        ModifyResponse modifyResponse = decorator.getModifyResponse();
-        int modifyResponseLength = computeLdapResultLength( new LdapResultDecorator( modifyResponse.getLdapResult() ) );
+        ModifyResponse modifyResponse = modifyResponseDecorator.getModifyResponse();
+        modifyResponseDecorator.setLdapResultDecorator( new LdapResultDecorator( modifyResponse.getLdapResult() ) );
+        int modifyResponseLength = computeLdapResultLength( modifyResponseDecorator.getLdapResultDecorator() );
 
-        decorator.setModifyResponseLength( modifyResponseLength );
+        modifyResponseDecorator.setModifyResponseLength( modifyResponseLength );
 
         return 1 + TLV.getNbBytes( modifyResponseLength ) + modifyResponseLength;
     }
@@ -989,9 +1037,9 @@ public class LdapEncoder
      * 
      * @return The PDU's length of a ModifyDN Request
      */
-    private int computeModifyDnRequestLength( ModifyDnRequestDecorator decorator )
+    private int computeModifyDnRequestLength( ModifyDnRequestDecorator modifyDnRequestDecorator )
     {
-        ModifyDnRequest modifyDnRequest = decorator.getModifyDnRequest();
+        ModifyDnRequest modifyDnRequest = modifyDnRequestDecorator.getModifyDnRequest();
         int newRdnlength = Strings.getBytesUtf8(modifyDnRequest.getNewRdn().getName()).length;
 
         int modifyDNRequestLength = 1 + TLV.getNbBytes( Dn.getNbBytes(modifyDnRequest.getName()) )
@@ -1004,7 +1052,7 @@ public class LdapEncoder
                 + Dn.getNbBytes(modifyDnRequest.getNewSuperior());
         }
 
-        decorator.setModifyDnRequestLength( modifyDNRequestLength );
+        modifyDnRequestDecorator.setModifyDnRequestLength( modifyDNRequestLength );
 
         return 1 + TLV.getNbBytes( modifyDNRequestLength ) + modifyDNRequestLength;
     }
@@ -1023,13 +1071,13 @@ public class LdapEncoder
      * Length(ModifyDNResponse) = Length(0x6D) + Length(L1) + L1
      * </pre>
      */
-    private int computeModifyDnResponseLength( ModifyDnResponseDecorator decorator )
+    private int computeModifyDnResponseLength( ModifyDnResponseDecorator modifyDnResponseDecorator )
     {
-        ModifyDnResponse modifyDnResponse = decorator.getModifyDnResponse();
-        int modifyDnResponseLength = computeLdapResultLength( new LdapResultDecorator(
-                modifyDnResponse.getLdapResult() ) );
+        ModifyDnResponse modifyDnResponse = modifyDnResponseDecorator.getModifyDnResponse();
+        modifyDnResponseDecorator.setLdapResultDecorator( new LdapResultDecorator( modifyDnResponse.getLdapResult() ) );
+        int modifyDnResponseLength = computeLdapResultLength( modifyDnResponseDecorator.getLdapResultDecorator() );
 
-        decorator.setModifyDnResponseLength( modifyDnResponseLength );
+        modifyDnResponseDecorator.setModifyDnResponseLength( modifyDnResponseLength );
 
         return 1 + TLV.getNbBytes( modifyDnResponseLength ) + modifyDnResponseLength;
     }
@@ -1093,9 +1141,9 @@ public class LdapEncoder
      *        +--> 0x04 L4-n Attribute description 
      *        </pre>
      */
-    private int computeSearchRequestLength( SearchRequestDecorator decorator )
+    private int computeSearchRequestLength( SearchRequestDecorator searchRequestDecorator )
     {
-        SearchRequest searchRequest = decorator.getSearchRequest();
+        SearchRequest searchRequest = searchRequestDecorator.getSearchRequest();
         int searchRequestLength = 0;
 
         // The baseObject
@@ -1118,7 +1166,7 @@ public class LdapEncoder
         searchRequestLength += 1 + 1 + 1;
 
         // The filter
-        searchRequestLength += decorator.getCurrentFilter().computeLength();
+        searchRequestLength += searchRequestDecorator.getCurrentFilter().computeLength();
 
         // The attributes description list
         int attributeDescriptionListLength = 0;
@@ -1134,11 +1182,11 @@ public class LdapEncoder
             }
         }
 
-        decorator.setAttributeDescriptionListLength( attributeDescriptionListLength );
+        searchRequestDecorator.setAttributeDescriptionListLength( attributeDescriptionListLength );
 
         searchRequestLength += 1 + TLV.getNbBytes( attributeDescriptionListLength ) + attributeDescriptionListLength;
 
-        decorator.setSearchRequestLength( searchRequestLength );
+        searchRequestDecorator.setSearchRequestLength( searchRequestLength );
         // Return the result.
         return 1 + TLV.getNbBytes( searchRequestLength ) + searchRequestLength;
     }
@@ -1157,13 +1205,13 @@ public class LdapEncoder
      * Length(SearchResultDone) = Length(0x65) + Length(L1) + L1
      * </pre>
      */
-    private int computeSearchResultDoneLength( SearchResultDoneDecorator decorator )
+    private int computeSearchResultDoneLength( SearchResultDoneDecorator searchResultDoneDecorator )
     {
-        SearchResultDone searchResultDone = decorator.getSearchResultDone();
-        int searchResultDoneLength = computeLdapResultLength( new LdapResultDecorator(
-                searchResultDone.getLdapResult() ) );
+        SearchResultDone searchResultDone = searchResultDoneDecorator.getSearchResultDone();
+        searchResultDoneDecorator.setLdapResultDecorator( new LdapResultDecorator( searchResultDone.getLdapResult() ) );
+        int searchResultDoneLength = computeLdapResultLength( searchResultDoneDecorator.getLdapResultDecorator() );
 
-        decorator.setSearchResultDoneLength( searchResultDoneLength );
+        searchResultDoneDecorator.setSearchResultDoneLength( searchResultDoneLength );
 
         return 1 + TLV.getNbBytes( searchResultDoneLength ) + searchResultDoneLength;
     }
@@ -1209,16 +1257,16 @@ public class LdapEncoder
      *                    +--> 0x04 L7-m-n value
      * </pre>
      */
-    private int computeSearchResultEntryLength( SearchResultEntryDecorator decorator )
+    private int computeSearchResultEntryLength( SearchResultEntryDecorator searchResultEntryDecorator )
     {
-        SearchResultEntry searchResultEntry = decorator.getSearchResultEntry();
+        SearchResultEntry searchResultEntry = searchResultEntryDecorator.getSearchResultEntry();
         Dn dn = searchResultEntry.getObjectName();
 
         byte[] dnBytes = Strings.getBytesUtf8(dn.getName());
 
         // The entry
         int searchResultEntryLength = 1 + TLV.getNbBytes( dnBytes.length ) + dnBytes.length;
-        decorator.setObjectNameBytes( dnBytes );
+        searchResultEntryDecorator.setObjectNameBytes( dnBytes );
 
         // The attributes sequence
         int attributesLength = 0;
@@ -1231,8 +1279,8 @@ public class LdapEncoder
             List<Integer> valsLength = new LinkedList<Integer>();
 
             // Store those lists in the object
-            decorator.setAttributeLength( attributeLength );
-            decorator.setValsLength( valsLength );
+            searchResultEntryDecorator.setAttributeLength( attributeLength );
+            searchResultEntryDecorator.setValsLength( valsLength );
 
             // Compute the attributes length
             for ( EntryAttribute attribute : entry )
@@ -1284,13 +1332,13 @@ public class LdapEncoder
             }
 
             // Store the lengths of the entry
-            decorator.setAttributesLength( attributesLength );
+            searchResultEntryDecorator.setAttributesLength( attributesLength );
         }
 
         searchResultEntryLength += 1 + TLV.getNbBytes( attributesLength ) + attributesLength;
 
         // Store the length of the response 
-        decorator.setSearchResultEntryLength( searchResultEntryLength );
+        searchResultEntryDecorator.setSearchResultEntryLength( searchResultEntryLength );
 
         // Return the result.
         return 1 + TLV.getNbBytes( searchResultEntryLength ) + searchResultEntryLength;
@@ -1316,9 +1364,9 @@ public class LdapEncoder
      * Length(SearchResultReference) = Length(0x73 + Length(L1) + L1
      * </pre>
      */
-    private int computeSearchResultReferenceLength( SearchResultReferenceDecorator decorator )
+    private int computeSearchResultReferenceLength( SearchResultReferenceDecorator searchResultReferenceDecorator )
     {
-        SearchResultReference searchResultReference = decorator.getSearchResultReference();
+        SearchResultReference searchResultReference = searchResultReferenceDecorator.getSearchResultReference();
         int searchResultReferenceLength = 0;
 
         // We may have more than one reference.
@@ -1334,7 +1382,7 @@ public class LdapEncoder
         }
 
         // Store the length of the response 
-        decorator.setSearchResultReferenceLength( searchResultReferenceLength );
+        searchResultReferenceDecorator.setSearchResultReferenceLength( searchResultReferenceLength );
 
         return 1 + TLV.getNbBytes( searchResultReferenceLength ) + searchResultReferenceLength;
     }
@@ -1472,19 +1520,18 @@ public class LdapEncoder
      * Encode the AddResponse message to a PDU.
      * 
      * @param buffer The buffer where to put the PDU
+     * @param addResponseDecorator the AddResponse decorator
      */
-    private void encodeAddResponse( ByteBuffer buffer, AddResponseDecorator decorator ) throws EncoderException
+    private void encodeAddResponse( ByteBuffer buffer, AddResponseDecorator addResponseDecorator ) throws EncoderException
     {
-        AddResponse addResponse = decorator.getAddResponse();
-
         try
         {
             // The AddResponse Tag
             buffer.put( LdapConstants.ADD_RESPONSE_TAG );
-            buffer.put( TLV.getBytes( decorator.getAddResponseLength() ) );
+            buffer.put( TLV.getBytes( addResponseDecorator.getAddResponseLength() ) );
 
             // The LdapResult
-            encodeLdapResult( buffer, new LdapResultDecorator( addResponse.getLdapResult() ) );
+            encodeLdapResult( buffer, addResponseDecorator.getLdapResultDecorator() );
         }
         catch ( BufferOverflowException boe )
         {
@@ -1600,21 +1647,21 @@ public class LdapEncoder
      * </pre>
      * 
      * @param bb The buffer where to put the PDU
-     * @param decorator The decorated BindResponse to encode
+     * @param bindResponseDecorator The decorated BindResponse to encode
      * @throws EncoderException when encoding operations fail
      */
-    private void encodeBindResponse( ByteBuffer bb, BindResponseDecorator decorator ) throws EncoderException
+    private void encodeBindResponse( ByteBuffer bb, BindResponseDecorator bindResponseDecorator ) throws EncoderException
     {
-        BindResponse bindResponse = decorator.getBindResponse();
+        BindResponse bindResponse = bindResponseDecorator.getBindResponse();
 
         try
         {
             // The BindResponse Tag
             bb.put( LdapConstants.BIND_RESPONSE_TAG );
-            bb.put( TLV.getBytes( decorator.getBindResponseLength() ) );
+            bb.put( TLV.getBytes( bindResponseDecorator.getBindResponseLength() ) );
 
             // The LdapResult
-            encodeLdapResult( bb, new LdapResultDecorator( bindResponse.getLdapResult() ) );
+            encodeLdapResult( bb,bindResponseDecorator.getLdapResultDecorator() );
 
             // The serverSaslCredential, if any
             byte[] serverSaslCreds = bindResponse.getServerSaslCreds();
@@ -1684,18 +1731,17 @@ public class LdapEncoder
      * 
      * @param buffer The buffer where to put the PDU
      */
-    private void encodeCompareResponse( ByteBuffer buffer, CompareResponseDecorator decorator )
+    private void encodeCompareResponse( ByteBuffer buffer, CompareResponseDecorator compareResponseDecorator )
         throws EncoderException
     {
-        CompareResponse compareResponse = decorator.getCompareResponse();
         try
         {
             // The CompareResponse Tag
             buffer.put( LdapConstants.COMPARE_RESPONSE_TAG );
-            buffer.put( TLV.getBytes( decorator.getCompareResponseLength() ) );
+            buffer.put( TLV.getBytes( compareResponseDecorator.getCompareResponseLength() ) );
 
             // The LdapResult
-            encodeLdapResult( buffer, new LdapResultDecorator( compareResponse.getLdapResult() ) );
+            encodeLdapResult( buffer, compareResponseDecorator.getLdapResultDecorator() );
         }
         catch ( BufferOverflowException boe )
         {
@@ -1735,18 +1781,16 @@ public class LdapEncoder
      * 
      * @param buffer The buffer where to put the PDU
      */
-    private void encodeDeleteResponse( ByteBuffer buffer, DeleteResponseDecorator decorator ) throws EncoderException
+    private void encodeDeleteResponse( ByteBuffer buffer, DeleteResponseDecorator deleteResponseDecorator ) throws EncoderException
     {
-        DeleteResponse deleteResponse = decorator.getDeleteResponse();
-
         try
         {
             // The DelResponse Tag
             buffer.put( LdapConstants.DEL_RESPONSE_TAG );
-            buffer.put( TLV.getBytes( decorator.getDeleteResponseLength() ) );
+            buffer.put( TLV.getBytes( deleteResponseDecorator.getDeleteResponseLength() ) );
 
             // The LdapResult
-            encodeLdapResult( buffer, new LdapResultDecorator( deleteResponse.getLdapResult() ) );
+            encodeLdapResult( buffer, deleteResponseDecorator.getLdapResultDecorator() );
         }
         catch ( BufferOverflowException boe )
         {
@@ -1821,21 +1865,22 @@ public class LdapEncoder
      * @param buffer The buffer where to put the PDU
      * @return The PDU.
      */
-    private void encodeExtendedResponse( ByteBuffer buffer, ExtendedResponseDecorator decorator )
+    private void encodeExtendedResponse( ByteBuffer buffer, ExtendedResponseDecorator extendedResponseDecorator )
         throws EncoderException
     {
-        ExtendedResponse extendedResponse = decorator.getExtendedResponse();
+        ExtendedResponse extendedResponse = extendedResponseDecorator.getExtendedResponse();
+        
         try
         {
             // The ExtendedResponse Tag
             buffer.put( LdapConstants.EXTENDED_RESPONSE_TAG );
-            buffer.put( TLV.getBytes( decorator.getExtendedResponseLength() ) );
+            buffer.put( TLV.getBytes( extendedResponseDecorator.getExtendedResponseLength() ) );
 
             // The LdapResult
-            encodeLdapResult( buffer, new LdapResultDecorator( extendedResponse.getLdapResult() ) );
+            encodeLdapResult( buffer, extendedResponseDecorator.getLdapResultDecorator() );
 
             // The ID, if any
-            byte[] idBytes = decorator.getResponseNameBytes();
+            byte[] idBytes = extendedResponseDecorator.getResponseNameBytes();
 
             if ( idBytes != null )
             {
@@ -2034,17 +2079,16 @@ public class LdapEncoder
      * 
      * @param buffer The buffer where to put the PDU
      */
-    private void encodeModifyResponse( ByteBuffer buffer, ModifyResponseDecorator decorator ) throws EncoderException
+    private void encodeModifyResponse( ByteBuffer buffer, ModifyResponseDecorator modifyDecorator ) throws EncoderException
     {
-        ModifyResponse modifyResponse = decorator.getModifyResponse();
         try
         {
             // The ModifyResponse Tag
             buffer.put( LdapConstants.MODIFY_RESPONSE_TAG );
-            buffer.put( TLV.getBytes( decorator.getModifyResponseLength() ) );
+            buffer.put( TLV.getBytes( modifyDecorator.getModifyResponseLength() ) );
 
             // The LdapResult
-            encodeLdapResult( buffer, new LdapResultDecorator( modifyResponse.getLdapResult() ) );
+            encodeLdapResult( buffer, modifyDecorator.getLdapResultDecorator() );
         }
         catch ( BufferOverflowException boe )
         {
@@ -2116,18 +2160,17 @@ public class LdapEncoder
      * 
      * @param buffer The buffer where to put the PDU
      */
-    private void encodeModifyDnResponse( ByteBuffer buffer, ModifyDnResponseDecorator decorator )
+    private void encodeModifyDnResponse( ByteBuffer buffer, ModifyDnResponseDecorator modifyDnDecorator )
         throws EncoderException
     {
-        ModifyDnResponse modifyDnResponse = decorator.getModifyDnResponse();
         try
         {
             // The ModifyResponse Tag
             buffer.put( LdapConstants.MODIFY_DN_RESPONSE_TAG );
-            buffer.put( TLV.getBytes( decorator.getModifyDnResponseLength() ) );
+            buffer.put( TLV.getBytes( modifyDnDecorator.getModifyDnResponseLength() ) );
 
             // The LdapResult
-            encodeLdapResult( buffer, new LdapResultDecorator( modifyDnResponse.getLdapResult() ) );
+            encodeLdapResult( buffer, modifyDnDecorator.getLdapResultDecorator() );
         }
         catch ( BufferOverflowException boe )
         {
@@ -2212,19 +2255,19 @@ public class LdapEncoder
      * Encode the SearchResultDone message to a PDU.
      * 
      * @param buffer The buffer where to put the PDU
+     * @param searchResultDoneDecorator The SearchResultDone decorator
      */
-    private void encodeSearchResultDone( ByteBuffer buffer, SearchResultDoneDecorator decorator )
+    private void encodeSearchResultDone( ByteBuffer buffer, SearchResultDoneDecorator searchResultDoneDecorator )
         throws EncoderException
     {
-        SearchResultDone searchResultDone = decorator.getSearchResultDone();
         try
         {
             // The searchResultDone Tag
             buffer.put( LdapConstants.SEARCH_RESULT_DONE_TAG );
-            buffer.put( TLV.getBytes( decorator.getSearchResultDoneLength() ) );
+            buffer.put( TLV.getBytes( searchResultDoneDecorator.getSearchResultDoneLength() ) );
 
             // The LdapResult
-            encodeLdapResult( buffer, new LdapResultDecorator( searchResultDone.getLdapResult() ) );
+            encodeLdapResult( buffer, searchResultDoneDecorator.getLdapResultDecorator() );
         }
         catch ( BufferOverflowException boe )
         {
@@ -2256,24 +2299,25 @@ public class LdapEncoder
      *         0x04 LL attributeValue 
      * </pre>
      * @param buffer The buffer where to put the PDU
+     * @param searchResultEntryDecorator the SearchResultEntry decorator
      * @return The PDU.
      */
-    private void encodeSearchResultEntry( ByteBuffer buffer, SearchResultEntryDecorator decorator )
+    private void encodeSearchResultEntry( ByteBuffer buffer, SearchResultEntryDecorator searchResultEntryDecorator )
         throws EncoderException
     {
-        SearchResultEntry searchResultEntry = decorator.getSearchResultEntry();
+        SearchResultEntry searchResultEntry = searchResultEntryDecorator.getSearchResultEntry();
         try
         {
             // The SearchResultEntry Tag
             buffer.put( LdapConstants.SEARCH_RESULT_ENTRY_TAG );
-            buffer.put( TLV.getBytes( decorator.getSearchResultEntryLength() ) );
+            buffer.put( TLV.getBytes( searchResultEntryDecorator.getSearchResultEntryLength() ) );
 
             // The objectName
-            Value.encode( buffer, decorator.getObjectNameBytes() );
+            Value.encode( buffer, searchResultEntryDecorator.getObjectNameBytes() );
 
             // The attributes sequence
             buffer.put( UniversalTag.SEQUENCE.getValue() );
-            buffer.put( TLV.getBytes( decorator.getAttributesLength() ) );
+            buffer.put( TLV.getBytes( searchResultEntryDecorator.getAttributesLength() ) );
 
             // The partial attribute list
             Entry entry = searchResultEntry.getEntry();
@@ -2287,7 +2331,7 @@ public class LdapEncoder
                 {
                     // The partial attribute list sequence
                     buffer.put( UniversalTag.SEQUENCE.getValue() );
-                    int localAttributeLength = decorator.getAttributeLength().get( attributeNumber );
+                    int localAttributeLength = searchResultEntryDecorator.getAttributeLength().get( attributeNumber );
                     buffer.put( TLV.getBytes( localAttributeLength ) );
 
                     // The attribute type
@@ -2295,7 +2339,7 @@ public class LdapEncoder
 
                     // The values
                     buffer.put( UniversalTag.SET.getValue() );
-                    int localValuesLength = decorator.getValsLength().get( attributeNumber );
+                    int localValuesLength = searchResultEntryDecorator.getValsLength().get( attributeNumber );
                     buffer.put( TLV.getBytes( localValuesLength ) );
 
                     if ( attribute.size() > 0 )
@@ -2356,17 +2400,18 @@ public class LdapEncoder
      *   [0x04 LL reference]*
      * </pre>
      * @param buffer The buffer where to put the PDU
+     * @param searchResultReferenceDecorator The SearchResultReference decorator
      * @return The PDU.
      */
-    private void encodeSearchResultReference( ByteBuffer buffer, SearchResultReferenceDecorator decorator )
+    private void encodeSearchResultReference( ByteBuffer buffer, SearchResultReferenceDecorator searchResultReferenceDecorator )
         throws EncoderException
     {
-        SearchResultReference searchResultReference = decorator.getSearchResultReference();
+        SearchResultReference searchResultReference = searchResultReferenceDecorator.getSearchResultReference();
         try
         {
             // The SearchResultReference Tag
             buffer.put( LdapConstants.SEARCH_RESULT_REFERENCE_TAG );
-            buffer.put( TLV.getBytes( decorator.getSearchResultReferenceLength() ) );
+            buffer.put( TLV.getBytes( searchResultReferenceDecorator.getSearchResultReferenceLength() ) );
 
             // The referrals, if any
             Referral referral = searchResultReference.getReferral();
@@ -2391,9 +2436,9 @@ public class LdapEncoder
     /**
      * Compute the protocolOp length 
      */
-    private int computeProtocolOpLength( MessageDecorator decorator )
+    private int computeProtocolOpLength( MessageDecorator messageDecorator )
     {
-        Message message = decorator.getMessage();
+        Message message = messageDecorator.getMessage();
 
         switch ( message.getType() )
         {
@@ -2401,61 +2446,61 @@ public class LdapEncoder
                 return computeAbandonRequestLength( ( AbandonRequestImpl ) message );
 
             case ADD_REQUEST:
-                return computeAddRequestLength( ( AddRequestDecorator ) decorator );
+                return computeAddRequestLength( ( AddRequestDecorator ) messageDecorator );
 
             case ADD_RESPONSE:
-                return computeAddResponseLength( ( AddResponseDecorator ) decorator );
+                return computeAddResponseLength( ( AddResponseDecorator ) messageDecorator );
 
             case BIND_REQUEST:
-                return computeBindRequestLength( ( BindRequestDecorator ) decorator );
+                return computeBindRequestLength( ( BindRequestDecorator ) messageDecorator );
 
             case BIND_RESPONSE:
-                return computeBindResponseLength( ( BindResponseDecorator ) decorator );
+                return computeBindResponseLength( ( BindResponseDecorator ) messageDecorator );
 
             case COMPARE_REQUEST:
-                return computeCompareRequestLength( ( CompareRequestDecorator ) decorator );
+                return computeCompareRequestLength( ( CompareRequestDecorator ) messageDecorator );
 
             case COMPARE_RESPONSE:
-                return computeCompareResponseLength( (CompareResponseDecorator) decorator );
+                return computeCompareResponseLength( (CompareResponseDecorator) messageDecorator );
 
             case DEL_REQUEST:
                 return computeDeleteRequestLength( ( DeleteRequestImpl ) message );
 
             case DEL_RESPONSE:
-                return computeDeleteResponseLength( ( DeleteResponseDecorator ) decorator );
+                return computeDeleteResponseLength( ( DeleteResponseDecorator ) messageDecorator );
 
             case EXTENDED_REQUEST:
-                return computeExtendedRequestLength( ( ExtendedRequestDecorator ) decorator );
+                return computeExtendedRequestLength( ( ExtendedRequestDecorator ) messageDecorator );
 
             case EXTENDED_RESPONSE:
-                return computeExtendedResponseLength( (ExtendedResponseDecorator) decorator );
+                return computeExtendedResponseLength( (ExtendedResponseDecorator) messageDecorator );
 
             case INTERMEDIATE_RESPONSE:
-                return computeIntermediateResponseLength( ( IntermediateResponseDecorator ) decorator );
+                return computeIntermediateResponseLength( ( IntermediateResponseDecorator ) messageDecorator );
 
             case MODIFY_REQUEST:
-                return computeModifyRequestLength( ( ModifyRequestDecorator ) decorator );
+                return computeModifyRequestLength( ( ModifyRequestDecorator ) messageDecorator );
 
             case MODIFY_RESPONSE:
-                return computeModifyResponseLength( ( ModifyResponseDecorator ) decorator );
+                return computeModifyResponseLength( ( ModifyResponseDecorator ) messageDecorator );
 
             case MODIFYDN_REQUEST:
-                return computeModifyDnRequestLength( ( ModifyDnRequestDecorator ) decorator );
+                return computeModifyDnRequestLength( ( ModifyDnRequestDecorator ) messageDecorator );
 
             case MODIFYDN_RESPONSE:
-                return computeModifyDnResponseLength( ( ModifyDnResponseDecorator ) decorator );
+                return computeModifyDnResponseLength( ( ModifyDnResponseDecorator ) messageDecorator );
 
             case SEARCH_REQUEST:
-                return computeSearchRequestLength( ( SearchRequestDecorator ) decorator );
+                return computeSearchRequestLength( ( SearchRequestDecorator ) messageDecorator );
 
             case SEARCH_RESULT_DONE:
-                return computeSearchResultDoneLength( ( SearchResultDoneDecorator ) decorator );
+                return computeSearchResultDoneLength( ( SearchResultDoneDecorator ) messageDecorator );
 
             case SEARCH_RESULT_ENTRY:
-                return computeSearchResultEntryLength( ( SearchResultEntryDecorator ) decorator );
+                return computeSearchResultEntryLength( ( SearchResultEntryDecorator ) messageDecorator );
 
             case SEARCH_RESULT_REFERENCE:
-                return computeSearchResultReferenceLength( ( SearchResultReferenceDecorator ) decorator );
+                return computeSearchResultReferenceLength( ( SearchResultReferenceDecorator ) messageDecorator );
 
             case UNBIND_REQUEST:
                 return computeUnbindRequestLength( );

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/AddResponseDecorator.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/AddResponseDecorator.java?rev=1063270&r1=1063269&r2=1063270&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/AddResponseDecorator.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/AddResponseDecorator.java Tue Jan 25 13:29:18 2011
@@ -28,7 +28,7 @@ import org.apache.directory.shared.ldap.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-public class AddResponseDecorator extends MessageDecorator
+public class AddResponseDecorator extends ResponseDecorator
 {
     /** The encoded addResponse length */
     private int addResponseLength;

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/BindResponseDecorator.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/BindResponseDecorator.java?rev=1063270&r1=1063269&r2=1063270&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/BindResponseDecorator.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/BindResponseDecorator.java Tue Jan 25 13:29:18 2011
@@ -28,7 +28,7 @@ import org.apache.directory.shared.ldap.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-public class BindResponseDecorator extends MessageDecorator
+public class BindResponseDecorator extends ResponseDecorator
 {
     /** The encoded bindResponse length */
     private int bindResponseLength;

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/CompareResponseDecorator.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/CompareResponseDecorator.java?rev=1063270&r1=1063269&r2=1063270&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/CompareResponseDecorator.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/CompareResponseDecorator.java Tue Jan 25 13:29:18 2011
@@ -28,7 +28,7 @@ import org.apache.directory.shared.ldap.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-public class CompareResponseDecorator extends MessageDecorator
+public class CompareResponseDecorator extends ResponseDecorator
 {
     /** The encoded compareResponse length */
     private int compareResponseLength;

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/DeleteResponseDecorator.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/DeleteResponseDecorator.java?rev=1063270&r1=1063269&r2=1063270&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/DeleteResponseDecorator.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/DeleteResponseDecorator.java Tue Jan 25 13:29:18 2011
@@ -28,7 +28,7 @@ import org.apache.directory.shared.ldap.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-public class DeleteResponseDecorator extends MessageDecorator
+public class DeleteResponseDecorator extends ResponseDecorator
 {
     /** The encoded deleteResponse length */
     private int deleteResponseLength;

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ExtendedResponseDecorator.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ExtendedResponseDecorator.java?rev=1063270&r1=1063269&r2=1063270&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ExtendedResponseDecorator.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ExtendedResponseDecorator.java Tue Jan 25 13:29:18 2011
@@ -28,7 +28,7 @@ import org.apache.directory.shared.ldap.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-public class ExtendedResponseDecorator extends MessageDecorator
+public class ExtendedResponseDecorator extends ResponseDecorator
 {
     /** The response name as a byte[] */
     private byte[] responseNameBytes;

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/IntermediateResponseDecorator.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/IntermediateResponseDecorator.java?rev=1063270&r1=1063269&r2=1063270&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/IntermediateResponseDecorator.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/IntermediateResponseDecorator.java Tue Jan 25 13:29:18 2011
@@ -28,7 +28,7 @@ import org.apache.directory.shared.ldap.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-public class IntermediateResponseDecorator extends MessageDecorator
+public class IntermediateResponseDecorator extends ResponseDecorator
 {
     /** The response name as a byte[] */
     private byte[] responseNameBytes;

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/MessageDecorator.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/MessageDecorator.java?rev=1063270&r1=1063269&r2=1063270&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/MessageDecorator.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/MessageDecorator.java Tue Jan 25 13:29:18 2011
@@ -65,45 +65,68 @@ public class MessageDecorator
         switch ( decoratedMessage.getType() )
         {
             case ABANDON_REQUEST:
-            case DEL_REQUEST:
-            case UNBIND_REQUEST:
                 return new MessageDecorator( decoratedMessage );
+
             case ADD_REQUEST:
                 return new AddRequestDecorator( ( AddRequest ) decoratedMessage );
+                
             case ADD_RESPONSE:
                 return new AddResponseDecorator( ( AddResponse ) decoratedMessage );
+                
             case BIND_REQUEST:
                 return new BindRequestDecorator( ( BindRequest ) decoratedMessage );
+                
             case BIND_RESPONSE:
                 return new BindResponseDecorator( ( BindResponse ) decoratedMessage );
+                
             case COMPARE_REQUEST:
                 return new CompareRequestDecorator( ( CompareRequest ) decoratedMessage );
+                
             case COMPARE_RESPONSE:
                 return new CompareResponseDecorator( ( CompareResponse ) decoratedMessage );
+                
+            case DEL_REQUEST:
+                return new MessageDecorator( decoratedMessage );
+
             case DEL_RESPONSE:
                 return new DeleteResponseDecorator( ( DeleteResponse ) decoratedMessage );
+                
             case EXTENDED_REQUEST:
                 return new ExtendedRequestDecorator( ( ExtendedRequest ) decoratedMessage );
+                
             case EXTENDED_RESPONSE:
                 return new ExtendedResponseDecorator( ( ExtendedResponse ) decoratedMessage );
+                
             case INTERMEDIATE_RESPONSE:
                 return new IntermediateResponseDecorator( ( IntermediateResponse ) decoratedMessage );
+                
             case MODIFY_REQUEST:
                 return new ModifyRequestDecorator( ( ModifyRequest ) decoratedMessage );
+                
             case MODIFY_RESPONSE:
                 return new ModifyResponseDecorator( ( ModifyResponse ) decoratedMessage );
+                
             case MODIFYDN_REQUEST:
                 return new ModifyDnRequestDecorator( ( ModifyDnRequest ) decoratedMessage );
+                
             case MODIFYDN_RESPONSE:
                 return new ModifyDnResponseDecorator( ( ModifyDnResponse ) decoratedMessage );
+                
             case SEARCH_REQUEST:
                 return new SearchRequestDecorator( ( SearchRequest ) decoratedMessage );
+                
             case SEARCH_RESULT_DONE:
                 return new SearchResultDoneDecorator( ( SearchResultDone ) decoratedMessage );
+                
             case SEARCH_RESULT_ENTRY:
                 return new SearchResultEntryDecorator( ( SearchResultEntry ) decoratedMessage );
+                
             case SEARCH_RESULT_REFERENCE:
                 return new SearchResultReferenceDecorator( ( SearchResultReference ) decoratedMessage );
+            
+            case UNBIND_REQUEST:
+                return new MessageDecorator( decoratedMessage );
+                
             default:
                 return new MessageDecorator( decoratedMessage );
         }

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ModifyDnResponseDecorator.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ModifyDnResponseDecorator.java?rev=1063270&r1=1063269&r2=1063270&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ModifyDnResponseDecorator.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ModifyDnResponseDecorator.java Tue Jan 25 13:29:18 2011
@@ -28,7 +28,7 @@ import org.apache.directory.shared.ldap.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-public class ModifyDnResponseDecorator extends MessageDecorator
+public class ModifyDnResponseDecorator extends ResponseDecorator
 {
     /** The encoded modifyDnResponse length */
     private int modifyDnResponseLength;

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ModifyResponseDecorator.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ModifyResponseDecorator.java?rev=1063270&r1=1063269&r2=1063270&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ModifyResponseDecorator.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ModifyResponseDecorator.java Tue Jan 25 13:29:18 2011
@@ -28,7 +28,7 @@ import org.apache.directory.shared.ldap.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-public class ModifyResponseDecorator extends MessageDecorator
+public class ModifyResponseDecorator extends ResponseDecorator
 {
     /** The encoded modifyResponse length */
     private int modifyResponseLength;

Added: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ResponseDecorator.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ResponseDecorator.java?rev=1063270&view=auto
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ResponseDecorator.java (added)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/ResponseDecorator.java Tue Jan 25 13:29:18 2011
@@ -0,0 +1,64 @@
+/*
+ *  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. 
+ *  
+ */
+package org.apache.directory.shared.ldap.codec.decorators;
+
+
+import org.apache.directory.shared.ldap.model.message.Message;
+
+
+/**
+ * A decorator for the Response message. It will store the LdapResult.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public abstract class ResponseDecorator extends MessageDecorator
+{
+    /** The LdapResult decorator */
+    private LdapResultDecorator ldapResultDecorator;
+
+
+    /**
+     * Makes a AddRequest encodable.
+     *
+     * @param decoratedMessage the decorated AddRequest
+     */
+    public ResponseDecorator( Message decoratedMessage )
+    {
+        super( decoratedMessage );
+    }
+
+
+    /**
+     * @return the ldapResultDecorator
+     */
+    public LdapResultDecorator getLdapResultDecorator()
+    {
+        return ldapResultDecorator;
+    }
+
+
+    /**
+     * @param ldapResultDecorator the ldapResultDecorator to set
+     */
+    public void setLdapResultDecorator( LdapResultDecorator ldapResultDecorator )
+    {
+        this.ldapResultDecorator = ldapResultDecorator;
+    }
+}

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/SearchResultDoneDecorator.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/SearchResultDoneDecorator.java?rev=1063270&r1=1063269&r2=1063270&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/SearchResultDoneDecorator.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/SearchResultDoneDecorator.java Tue Jan 25 13:29:18 2011
@@ -28,7 +28,7 @@ import org.apache.directory.shared.ldap.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-public class SearchResultDoneDecorator extends MessageDecorator
+public class SearchResultDoneDecorator extends ResponseDecorator
 {
     /** The encoded searchResultDone length */
     private int searchResultDoneLength;