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 2008/09/04 03:23:13 UTC

svn commit: r691847 [1/2] - in /directory: apacheds/trunk/core-entry/src/main/java/org/apache/directory/server/core/entry/ apacheds/trunk/core/src/main/java/org/apache/directory/server/core/changelog/ apacheds/trunk/core/src/main/java/org/apache/direct...

Author: elecharny
Date: Wed Sep  3 18:23:12 2008
New Revision: 691847

URL: http://svn.apache.org/viewvc?rev=691847&view=rev
Log:
o Removed all the JNDI ModificationItem instances in the server
o Removed some asscoiated useless conversion methods
o Fixed the ModificationEnum values (REMOVE and REPLACE where inverted)
o Partially Fixed some errors in the way ;binay options where handled in modifications

Modified:
    directory/apacheds/trunk/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerEntryUtils.java
    directory/apacheds/trunk/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerModification.java
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributesSchemaChecker.java
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/InterceptorChain.java
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaChecker.java
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDao.java
    directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/authz/support/RelatedProtectedItemFilterTest.java
    directory/apacheds/trunk/server-tools/src/main/java/org/apache/directory/server/tools/ImportCommand.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/TwixTransformer.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ModifyAttributeValueAction.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modify/ModifyRequest.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/EntryAttribute.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/ModificationOperation.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/ClientModification.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/DefaultClientAttribute.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/ldif/LdifEntry.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/ldif/LdifReader.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/AbandonRequestImpl.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/AbstractMutableControlImpl.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/AddResponseImpl.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/CompareResponseImpl.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/DeleteResponseImpl.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/ModifyRequest.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/ModifyRequestImpl.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/SearchResponseDoneImpl.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/util/AttributeUtils.java
    directory/shared/trunk/ldap/src/test/java/org/apache/directory/shared/ldap/codec/modify/ModifyRequestTest.java
    directory/shared/trunk/ldap/src/test/java/org/apache/directory/shared/ldap/message/ModifyRequestImplTest.java

Modified: directory/apacheds/trunk/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerEntryUtils.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerEntryUtils.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/apacheds/trunk/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerEntryUtils.java (original)
+++ directory/apacheds/trunk/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerEntryUtils.java Wed Sep  3 18:23:12 2008
@@ -57,7 +57,29 @@
 public class ServerEntryUtils
 {
     /**
-     * Convert a ServerEntry into a AttributesImpl. The DN is lost
+     * Convert a ServerAttribute into a BasicAttribute. The DN is lost
+     * during this conversion, as the Attributes object does not store
+     * this element.
+     *
+     * @return An instance of a AttributesImpl() object
+     */
+    public static Attribute toBasicAttribute( ServerAttribute entryAttribute )
+    {
+        AttributeType attributeType = entryAttribute.getAttributeType();
+        
+        Attribute attribute = new BasicAttribute( attributeType.getName() );
+        
+        for ( Value<?> value: entryAttribute )
+        {
+            attribute.add( value.get() );
+        }
+        
+        return attribute;
+    }
+    
+    
+    /**
+     * Convert a ServerEntry into a BasicAttributes. The DN is lost
      * during this conversion, as the Attributes object does not store
      * this element.
      *
@@ -86,14 +108,7 @@
                 }
             }
             
-            Attribute attribute = new BasicAttribute( attributeType.getName() );
-            
-            for ( Value<?> value: attr )
-            {
-                attribute.add( value.get() );
-            }
-            
-            attributes.put( attribute );
+            attributes.put( toBasicAttribute( (ServerAttribute)attr ) );
         }
         
         return attributes;
@@ -216,24 +231,6 @@
 
 
     /**
-     * Convert a ServerAttributeEntry into a AttributeImpl.
-     *
-     * @return An instance of a BasicAttribute() object
-     */
-    public static Attribute toAttributeImpl( EntryAttribute attr )
-    {
-        Attribute attribute = new BasicAttribute( attr.getUpId() );
-
-        for ( Value<?> value:attr )
-        {
-            attribute.add( value.get() );
-        }
-        
-        return attribute;
-    }
-
-
-    /**
      * Gets the target entry as it would look after a modification operation 
      * was performed on it.
      * 
@@ -348,17 +345,6 @@
     }
     
     
-    public static ModificationItem toModificationItem( Modification modification )
-    {
-        ModificationItem modificationItem = new ModificationItem( 
-            modification.getOperation().getValue(),
-            toAttributeImpl( (ServerAttribute)modification.getAttribute() ) ); 
-        
-        return modificationItem;
-        
-    }
-
-
     /**
      * Convert a ModificationItem to an instance of a ServerModification object
      *
@@ -368,8 +354,27 @@
      */
     private static Modification toServerModification( ModificationItem modificationImpl, AttributeType attributeType ) 
     {
+        ModificationOperation operation;
+        
+        switch ( modificationImpl.getModificationOp() )
+        {
+            case DirContext.REMOVE_ATTRIBUTE :
+                operation = ModificationOperation.REMOVE_ATTRIBUTE;
+                break;
+                
+            case DirContext.REPLACE_ATTRIBUTE :
+                operation = ModificationOperation.REPLACE_ATTRIBUTE;
+                break;
+
+            case DirContext.ADD_ATTRIBUTE :
+            default :
+                operation = ModificationOperation.ADD_ATTRIBUTE;
+                break;
+                
+        }
+        
         Modification modification = new ServerModification( 
-            modificationImpl.getModificationOp(),
+            operation,
             ServerEntryUtils.toServerAttribute( modificationImpl.getAttribute(), attributeType ) ); 
         
         return modification;
@@ -377,26 +382,6 @@
     }
 
     
-    public static List<ModificationItem> toModificationItemImpl( List<Modification> modifications )
-    {
-        if ( modifications != null )
-        {
-            List<ModificationItem> modificationItems = new ArrayList<ModificationItem>();
-
-            for ( Modification modification: modifications )
-            {
-                modificationItems.add( toModificationItem( modification ) );
-            }
-        
-            return modificationItems;
-        }
-        else
-        {
-            return null;
-        }
-    }
-    
-    
     /**
      * 
      * Convert a list of ModificationItemImpl to a list of 
@@ -428,6 +413,77 @@
     }
     
     
+    /**
+     * Convert a Modification to an instance of a ServerModification object.
+     *
+     * @param modificationImpl the modification instance to convert
+     * @param attributeType the associated attributeType
+     * @return a instance of a ServerModification object
+     */
+    private static Modification toServerModification( Modification modification, AttributeType attributeType ) 
+    {
+        if ( modification instanceof ServerModification )
+        {
+            return modification;
+        }
+        
+        Modification serverModification = new ServerModification( 
+            modification.getOperation(),
+            new DefaultServerAttribute( attributeType, modification.getAttribute() ) ); 
+        
+        return serverModification;
+        
+    }
+
+    
+    public static List<Modification> toServerModification( Modification[] modifications, 
+        AttributeTypeRegistry atRegistry ) throws NamingException
+    {
+        if ( modifications != null )
+        {
+            List<Modification> modificationsList = new ArrayList<Modification>();
+    
+            for ( Modification modification: modifications )
+            {
+                String attributeId = modification.getAttribute().getId();
+                String id = stripOptions( attributeId );
+                modification.getAttribute().setId( id );
+                Set<String> options = getOptions( attributeId );
+
+                // -------------------------------------------------------------------
+                // DIRSERVER-646 Fix: Replacing an unknown attribute with no values 
+                // (deletion) causes an error
+                // -------------------------------------------------------------------
+                
+                // TODO - after removing JNDI we need to make the server handle 
+                // this in the codec
+                
+                if ( ! atRegistry.hasAttributeType( id ) 
+                     && modification.getAttribute().size() == 0 
+                     && modification.getOperation() == ModificationOperation.REPLACE_ATTRIBUTE )
+                {
+                    continue;
+                }
+
+                // -------------------------------------------------------------------
+                // END DIRSERVER-646 Fix
+                // -------------------------------------------------------------------
+                
+                
+                // TODO : handle options
+                AttributeType attributeType = atRegistry.lookup( id );
+                modificationsList.add( toServerModification( modification, attributeType ) );
+            }
+        
+            return modificationsList;
+        }
+        else
+        {
+            return null;
+        }
+    }
+
+
     public static List<Modification> toServerModification( ModificationItem[] modifications, 
         AttributeTypeRegistry atRegistry ) throws NamingException
     {

Modified: directory/apacheds/trunk/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerModification.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerModification.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/apacheds/trunk/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerModification.java (original)
+++ directory/apacheds/trunk/core-entry/src/main/java/org/apache/directory/server/core/entry/ServerModification.java Wed Sep  3 18:23:12 2008
@@ -24,7 +24,7 @@
 import java.io.ObjectOutput;
 
 import javax.naming.NamingException;
-import javax.naming.directory.DirContext;
+//import javax.naming.directory.DirContext;
 
 import org.apache.directory.server.schema.registries.AttributeTypeRegistry;
 import org.apache.directory.server.schema.registries.Registries;
@@ -81,19 +81,6 @@
     }
     
     
-    /**
-     * Create a new instance of a ServerModification.
-     * 
-     * @param operation the Modification operation (one of add, replace or remove)
-     * @param attribute the modified attribute
-     */
-    public ServerModification( int operation, EntryAttribute attribute )
-    {
-        setOperation( operation );
-        this.attribute = attribute;
-    }
-    
-    
     public ServerModification( Registries registries, Modification modification )
     {
         operation = modification.getOperation();
@@ -142,20 +129,7 @@
      */
     public void setOperation( int operation )
     {
-        switch ( operation )
-        {
-            case DirContext.ADD_ATTRIBUTE :
-                this.operation = ModificationOperation.ADD_ATTRIBUTE;
-                break;
-
-            case DirContext.REPLACE_ATTRIBUTE :
-                this.operation = ModificationOperation.REPLACE_ATTRIBUTE;
-                break;
-            
-            case DirContext.REMOVE_ATTRIBUTE :
-                this.operation = ModificationOperation.REMOVE_ATTRIBUTE;
-                break;
-        }
+        this.operation = ModificationOperation.getOperation( operation );
     }
 
     

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/changelog/ChangeLogInterceptor.java Wed Sep  3 18:23:12 2008
@@ -248,6 +248,9 @@
         for ( Modification modItem : opContext.getModItems() )
         {
             Modification mod = ((ServerModification)modItem).toClientModification();
+            
+            // TODO: handle correctly http://issues.apache.org/jira/browse/DIRSERVER-1198
+            mod.getAttribute().setId( modItem.getAttribute().getId() );
             mods.add( mod );
             
             forward.addModificationItem( mod );

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributesSchemaChecker.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributesSchemaChecker.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributesSchemaChecker.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/collective/CollectiveAttributesSchemaChecker.java Wed Sep  3 18:23:12 2008
@@ -35,6 +35,7 @@
 import org.apache.directory.shared.ldap.entry.EntryAttribute;
 import org.apache.directory.shared.ldap.entry.Modification;
 import org.apache.directory.shared.ldap.entry.ModificationOperation;
+import org.apache.directory.shared.ldap.exception.LdapInvalidAttributeIdentifierException;
 import org.apache.directory.shared.ldap.exception.LdapSchemaViolationException;
 import org.apache.directory.shared.ldap.message.ResultCodeEnum;
 import org.apache.directory.shared.ldap.name.LdapDN;
@@ -106,9 +107,23 @@
     {
         for ( Modification mod:mods )
         {
+            // TODO: handle http://issues.apache.org/jira/browse/DIRSERVER-1198
             ServerAttribute attr = (ServerAttribute)mod.getAttribute();
-            String attrID = attr.getId();
-            AttributeType attrType = attrTypeRegistry.lookup( attrID );
+            AttributeType attrType = attr.getAttributeType();
+
+            if ( attrType == null )
+            {
+                if ( !attrTypeRegistry.hasAttributeType( attr.getUpId() ) )
+                {
+                    throw new LdapInvalidAttributeIdentifierException();
+                }
+                else
+                {
+                    attrType = attrTypeRegistry.lookup( attr.getUpId() );
+                }
+            }
+            
+            
             ModificationOperation modOp = mod.getOperation();
             
             if ( ( ( modOp == ModificationOperation.ADD_ATTRIBUTE ) || ( modOp == ModificationOperation.REPLACE_ATTRIBUTE ) ) &&

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/InterceptorChain.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/InterceptorChain.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/InterceptorChain.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/InterceptorChain.java Wed Sep  3 18:23:12 2008
@@ -815,6 +815,7 @@
         }
         catch ( Exception ne )
         {
+            ne.printStackTrace();
             throw ne;
         }
         catch ( Throwable e )
@@ -1210,6 +1211,7 @@
                     }
                     catch ( Exception ne )
                     {
+                        ne.printStackTrace();
                         throw ne;
                     }
                     catch ( Throwable e )

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/interceptor/context/ModifyOperationContext.java Wed Sep  3 18:23:12 2008
@@ -24,7 +24,6 @@
 import java.util.List;
 
 import javax.naming.NamingException;
-import javax.naming.directory.ModificationItem;
 
 import org.apache.directory.shared.ldap.entry.EntryAttribute;
 import org.apache.directory.server.core.CoreSession;
@@ -34,6 +33,7 @@
 import org.apache.directory.server.core.entry.ServerModification;
 import org.apache.directory.shared.ldap.entry.Modification;
 import org.apache.directory.shared.ldap.entry.ModificationOperation;
+import org.apache.directory.shared.ldap.entry.client.ClientModification;
 import org.apache.directory.shared.ldap.message.MessageTypeEnum;
 import org.apache.directory.shared.ldap.message.ModifyRequest;
 import org.apache.directory.shared.ldap.name.LdapDN;
@@ -84,7 +84,7 @@
     {
         super( session, modifyRequest.getName() );
         this.modItems = ServerEntryUtils.toServerModification( 
-            modifyRequest.getModificationItems().toArray( new ModificationItem[0]), 
+            modifyRequest.getModificationItems().toArray( new ClientModification[0]), 
             session.getDirectoryService().getRegistries().getAttributeTypeRegistry() );
         this.requestControls = modifyRequest.getControls();
     }

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaChecker.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaChecker.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaChecker.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaChecker.java Wed Sep  3 18:23:12 2008
@@ -542,7 +542,7 @@
         }
 
         Set<String> rdnAttributes = getRdnAttributes( name );
-        String id = attribute.getUpId();
+        String id = attribute.getId();
 
         if ( !rdnAttributes.contains( oidRegistry.getOid( id ) ) )
         {

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java Wed Sep  3 18:23:12 2008
@@ -1289,7 +1289,8 @@
             ModificationOperation modOp = mod.getOperation();
             ServerAttribute change = ( ServerAttribute ) mod.getAttribute();
 
-            if ( !atRegistry.hasAttributeType( change.getUpId() )
+            // TODO/ handle http://issues.apache.org/jira/browse/DIRSERVER-1198
+            if ( ( change.getAttributeType() == null ) && !atRegistry.hasAttributeType( change.getUpId() )
                 && !objectClass.contains( SchemaConstants.EXTENSIBLE_OBJECT_OC ) )
             {
                 throw new LdapInvalidAttributeIdentifierException();
@@ -1297,7 +1298,12 @@
 
             // We will forbid modification of operational attributes which are not
             // user modifiable.
-            AttributeType attributeType = atRegistry.lookup( change.getUpId() );
+            AttributeType attributeType = change.getAttributeType();
+            
+            if ( attributeType == null )
+            {
+                attributeType = atRegistry.lookup( change.getUpId() );
+            }
 
             if ( !attributeType.isCanUserModify() )
             {
@@ -1307,7 +1313,7 @@
             switch ( modOp )
             {
                 case ADD_ATTRIBUTE:
-                    EntryAttribute attr = tmpEntry.get( change.getUpId() );
+                    EntryAttribute attr = tmpEntry.get( attributeType.getName() );
 
                     if ( attr != null )
                     {
@@ -1331,7 +1337,7 @@
                     break;
 
                 case REMOVE_ATTRIBUTE:
-                    if ( tmpEntry.get( change.getUpId() ) == null )
+                    if ( tmpEntry.get( change.getId() ) == null )
                     {
                         LOG.error( "Trying to remove an non-existant attribute: " + change.getUpId() );
                         throw new LdapNoSuchAttributeException();
@@ -1359,7 +1365,7 @@
                         }
 
                         // Now remove the attribute and all its values
-                        EntryAttribute modified = tmpEntry.removeAttributes( change.getUpId() ).get( 0 );
+                        EntryAttribute modified = tmpEntry.removeAttributes( change.getId() ).get( 0 );
 
                         // And inject back the values except the ones to remove
                         for ( Value<?> value : change )
@@ -1369,7 +1375,7 @@
 
                         // ok, done. Last check : if the attribute does not content any more value;
                         // and if it's a MUST one, we should thow an exception
-                        if ( ( modified.size() == 0 ) && isRequired( change.getUpId(), objectClass ) )
+                        if ( ( modified.size() == 0 ) && isRequired( change.getId(), objectClass ) )
                         {
                             LOG.error( "Trying to remove a required attribute: " + change.getUpId() );
                             throw new LdapSchemaViolationException( ResultCodeEnum.OBJECT_CLASS_VIOLATION );

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDao.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDao.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDao.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/schema/SchemaPartitionDao.java Wed Sep  3 18:23:12 2008
@@ -44,6 +44,7 @@
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
 import org.apache.directory.shared.ldap.entry.EntryAttribute;
 import org.apache.directory.shared.ldap.entry.Modification;
+import org.apache.directory.shared.ldap.entry.ModificationOperation;
 import org.apache.directory.shared.ldap.entry.client.ClientStringValue;
 import org.apache.directory.shared.ldap.filter.AndNode;
 import org.apache.directory.shared.ldap.filter.BranchNode;
@@ -595,14 +596,14 @@
             return;
         }
 
-        mods.add( new ServerModification( DirContext.REMOVE_ATTRIBUTE, new DefaultServerAttribute(
+        mods.add( new ServerModification( ModificationOperation.REMOVE_ATTRIBUTE, new DefaultServerAttribute(
             MetaSchemaConstants.M_DISABLED_AT, attrRegistry.lookup( MetaSchemaConstants.M_DISABLED_AT ) ) ) );
 
-        mods.add( new ServerModification( DirContext.ADD_ATTRIBUTE, new DefaultServerAttribute(
+        mods.add( new ServerModification( ModificationOperation.ADD_ATTRIBUTE, new DefaultServerAttribute(
             SchemaConstants.MODIFIERS_NAME_AT, attrRegistry.lookup( SchemaConstants.MODIFIERS_NAME_AT ),
             ServerDNConstants.ADMIN_SYSTEM_DN ) ) );
 
-        mods.add( new ServerModification( DirContext.ADD_ATTRIBUTE, new DefaultServerAttribute(
+        mods.add( new ServerModification( ModificationOperation.ADD_ATTRIBUTE, new DefaultServerAttribute(
             SchemaConstants.MODIFY_TIMESTAMP_AT, attrRegistry.lookup( SchemaConstants.MODIFY_TIMESTAMP_AT ), DateUtils
                 .getGeneralizedTime() ) ) );
 

Modified: directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/authz/support/RelatedProtectedItemFilterTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/authz/support/RelatedProtectedItemFilterTest.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/authz/support/RelatedProtectedItemFilterTest.java (original)
+++ directory/apacheds/trunk/core/src/test/java/org/apache/directory/server/core/authz/support/RelatedProtectedItemFilterTest.java Wed Sep  3 18:23:12 2008
@@ -122,7 +122,7 @@
         
         for ( ServerAttribute attribute:attributes )
         {
-            jndiAttributes.add( ServerEntryUtils.toAttributeImpl( attribute ) );
+            jndiAttributes.add( ServerEntryUtils.toBasicAttribute( attribute ) );
         }
         
         return jndiAttributes;

Modified: directory/apacheds/trunk/server-tools/src/main/java/org/apache/directory/server/tools/ImportCommand.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-tools/src/main/java/org/apache/directory/server/tools/ImportCommand.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/apacheds/trunk/server-tools/src/main/java/org/apache/directory/server/tools/ImportCommand.java (original)
+++ directory/apacheds/trunk/server-tools/src/main/java/org/apache/directory/server/tools/ImportCommand.java Wed Sep  3 18:23:12 2008
@@ -27,13 +27,9 @@
 import java.net.UnknownHostException;
 import java.nio.ByteBuffer;
 import java.nio.channels.SocketChannel;
-import java.util.Iterator;
 
 import javax.naming.InvalidNameException;
-import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.ModificationItem;
 
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
@@ -44,7 +40,6 @@
 import org.apache.directory.shared.asn1.ber.tlv.TLVStateEnum;
 import org.apache.directory.shared.asn1.codec.DecoderException;
 import org.apache.directory.shared.asn1.codec.EncoderException;
-import org.apache.directory.shared.ldap.codec.LdapConstants;
 import org.apache.directory.shared.ldap.codec.LdapDecoder;
 import org.apache.directory.shared.ldap.codec.LdapMessage;
 import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
@@ -61,6 +56,7 @@
 import org.apache.directory.shared.ldap.codec.unbind.UnBindRequest;
 import org.apache.directory.shared.ldap.entry.Entry;
 import org.apache.directory.shared.ldap.entry.EntryAttribute;
+import org.apache.directory.shared.ldap.entry.Modification;
 import org.apache.directory.shared.ldap.entry.Value;
 import org.apache.directory.shared.ldap.ldif.ChangeType;
 import org.apache.directory.shared.ldap.ldif.LdifEntry;
@@ -411,10 +407,8 @@
      * Send the entry to the encoder, then wait for a
      * reponse from the LDAP server on the results of the operation.
      * 
-     * @param entry
-     *            The entry to modify
-     * @param msgId
-     *            message id number
+     * @param entry The entry to modify
+     * @param msgId message id number
      */
     private int changeModifyEntry( LdifEntry entry, int messageId ) throws IOException, DecoderException,
         InvalidNameException, NamingException, EncoderException
@@ -431,35 +425,13 @@
         modifyRequest.setObject( new LdapDN( dn ) );
         modifyRequest.initModifications();
 
-        Iterator modifications = entry.getModificationItems().iterator();
-
-        while ( modifications.hasNext() )
+        for ( Modification modification: entry.getModificationItems() )
         {
-            ModificationItem modification = ( ModificationItem ) modifications.next();
-
-            switch ( modification.getModificationOp() )
-            {
-                case DirContext.ADD_ATTRIBUTE:
-                    modifyRequest.setCurrentOperation( LdapConstants.OPERATION_ADD );
-                    break;
-
-                case DirContext.REMOVE_ATTRIBUTE:
-                    modifyRequest.setCurrentOperation( LdapConstants.OPERATION_DELETE );
-                    break;
-
-                case DirContext.REPLACE_ATTRIBUTE:
-                    modifyRequest.setCurrentOperation( LdapConstants.OPERATION_REPLACE );
-                    break;
-
-                default:
-                    System.err.println( "Unknown modify operation for DN " + dn );
-            }
-
-            modifyRequest.addAttributeTypeAndValues( modification.getAttribute().getID() );
+            modifyRequest.setCurrentOperation( modification.getOperation() );
+            modifyRequest.addAttributeTypeAndValues( modification.getAttribute().getId() );
 
-            for ( NamingEnumeration values = modification.getAttribute().getAll(); values.hasMoreElements(); )
+            for ( Value<?> value:modification.getAttribute() )
             {
-                Object value = values.nextElement();
                 modifyRequest.addAttributeValue( value );
             }
         }

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/TwixTransformer.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/TwixTransformer.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/TwixTransformer.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/TwixTransformer.java Wed Sep  3 18:23:12 2008
@@ -25,7 +25,6 @@
 import java.util.List;
 
 import javax.naming.InvalidNameException;
-import javax.naming.directory.ModificationItem;
 
 import org.apache.directory.shared.asn1.Asn1Object;
 import org.apache.directory.shared.asn1.codec.DecoderException;
@@ -64,6 +63,7 @@
 import org.apache.directory.shared.ldap.codec.search.controls.SubEntryControlCodec;
 import org.apache.directory.shared.ldap.codec.util.LdapURLEncodingException;
 import org.apache.directory.shared.ldap.entry.EntryAttribute;
+import org.apache.directory.shared.ldap.entry.Modification;
 import org.apache.directory.shared.ldap.filter.AndNode;
 import org.apache.directory.shared.ldap.filter.ApproximateNode;
 import org.apache.directory.shared.ldap.filter.BranchNode;
@@ -436,7 +436,7 @@
         if ( modifyRequest.getModifications() != null )
         {
             // Loop through the modifications
-            for ( ModificationItem modification:modifyRequest.getModifications() )
+            for ( Modification modification:modifyRequest.getModifications() )
             {
                 snickersMessage.addModification( modification );
             }

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ModifyAttributeValueAction.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ModifyAttributeValueAction.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ModifyAttributeValueAction.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/ModifyAttributeValueAction.java Wed Sep  3 18:23:12 2008
@@ -63,7 +63,7 @@
         TLV tlv = ldapMessageContainer.getCurrentTLV();
 
         // Store the value. It can't be null
-        Object value = StringTools.EMPTY_BYTES;
+        byte[] value = StringTools.EMPTY_BYTES;
 
         if ( tlv.getLength() == 0 )
         {

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modify/ModifyRequest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modify/ModifyRequest.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modify/ModifyRequest.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/modify/ModifyRequest.java Wed Sep  3 18:23:12 2008
@@ -26,19 +26,18 @@
 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;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.ModificationItem;
-
 import org.apache.directory.shared.asn1.ber.tlv.TLV;
 import org.apache.directory.shared.asn1.ber.tlv.UniversalTag;
 import org.apache.directory.shared.asn1.ber.tlv.Value;
 import org.apache.directory.shared.asn1.codec.EncoderException;
 import org.apache.directory.shared.ldap.codec.LdapConstants;
 import org.apache.directory.shared.ldap.codec.LdapMessage;
+import org.apache.directory.shared.ldap.entry.EntryAttribute;
+import org.apache.directory.shared.ldap.entry.Modification;
+import org.apache.directory.shared.ldap.entry.ModificationOperation;
+import org.apache.directory.shared.ldap.entry.client.ClientModification;
+import org.apache.directory.shared.ldap.entry.client.ClientStringValue;
+import org.apache.directory.shared.ldap.entry.client.DefaultClientAttribute;
 import org.apache.directory.shared.ldap.name.LdapDN;
 import org.apache.directory.shared.ldap.util.StringTools;
 import org.slf4j.Logger;
@@ -78,7 +77,7 @@
     // -----------------------------------------------------------------
 
     /** The logger */
-    private static final Logger log = LoggerFactory.getLogger( ModifyRequest.class );
+    private static final Logger LOG = LoggerFactory.getLogger( ModifyRequest.class );
 
     // ~ Instance fields
     // ----------------------------------------------------------------------------
@@ -86,14 +85,14 @@
     /** The DN to be modified. */
     private LdapDN object;
 
-    /** The modifications list. This is an array of ModificationItemImpl. */
-    private List<ModificationItem> modifications;
+    /** The modifications list. This is an array of Modification. */
+    private List<Modification> modifications;
 
     /** The current attribute being decoded */
-    private Attribute currentAttribute;
+    private EntryAttribute currentAttribute;
 
     /** A local storage for the operation */
-    private int currentOperation;
+    private ModificationOperation currentOperation;
 
     /** The modify request length */
     private int modifyRequestLength;
@@ -142,7 +141,7 @@
      */
     public void initModifications()
     {
-        modifications = new ArrayList<ModificationItem>();
+        modifications = new ArrayList<Modification>();
     }
 
 
@@ -151,7 +150,7 @@
      * 
      * @return Returns the modifications.
      */
-    public List<ModificationItem> getModifications()
+    public List<Modification> getModifications()
     {
         return modifications;
     }
@@ -164,11 +163,11 @@
      */
     public void addModification( int operation )
     {
-        currentOperation = operation;
+        currentOperation = ModificationOperation.getOperation( operation );
 
         if ( currentAttribute == null )
         {
-            modifications = new ArrayList<ModificationItem>();
+            modifications = new ArrayList<Modification>();
         }
     }
 
@@ -180,28 +179,32 @@
      */
     public void addAttributeTypeAndValues( String type )
     {
-        currentAttribute = new BasicAttribute( StringTools.lowerCaseAscii( type ) );
+        currentAttribute = new DefaultClientAttribute( StringTools.lowerCaseAscii( type ) );
 
-        int operation = 0;
+        Modification modification = new ClientModification( currentOperation, currentAttribute );
+        modifications.add( modification );
+    }
 
-        switch ( currentOperation )
-        {
 
-            case LdapConstants.OPERATION_ADD: // add
-                operation = DirContext.ADD_ATTRIBUTE;
-                break;
-
-            case LdapConstants.OPERATION_DELETE: // delete
-                operation = DirContext.REMOVE_ATTRIBUTE;
-                break;
-
-            case LdapConstants.OPERATION_REPLACE: // replace
-                operation = DirContext.REPLACE_ATTRIBUTE;
-                break;
-        }
+    /**
+     * Add a new value to the current attribute
+     * 
+     * @param value The value to add
+     */
+    public void addAttributeValue( String value )
+    {
+        currentAttribute.add( value );
+    }
 
-        ModificationItem modification = new ModificationItem( operation, currentAttribute );
-        modifications.add( modification );
+
+    /**
+     * Add a new value to the current attribute
+     * 
+     * @param value The value to add
+     */
+    public void addAttributeValue( org.apache.directory.shared.ldap.entry.Value<?> value )
+    {
+        currentAttribute.add( value );
     }
 
 
@@ -210,7 +213,7 @@
      * 
      * @param value The value to add
      */
-    public void addAttributeValue( Object value )
+    public void addAttributeValue( byte[] value )
     {
         currentAttribute.add( value );
     }
@@ -221,7 +224,7 @@
      */
     public String getCurrentAttributeType()
     {
-        return currentAttribute.getID();
+        return currentAttribute.getId();
     }
 
 
@@ -254,7 +257,7 @@
      */
     public int getCurrentOperation()
     {
-        return currentOperation;
+        return currentOperation.getValue();
     }
 
 
@@ -265,6 +268,17 @@
      */
     public void setCurrentOperation( int currentOperation )
     {
+        this.currentOperation = ModificationOperation.getOperation( currentOperation );
+    }
+
+
+    /**
+     * Store the current operation
+     * 
+     * @param currentOperation The currentOperation to set.
+     */
+    public void setCurrentOperation( ModificationOperation currentOperation )
+    {
         this.currentOperation = currentOperation;
     }
 
@@ -323,48 +337,36 @@
             modificationLength = new LinkedList<Integer>();
             valuesLength = new LinkedList<Integer>();
 
-            for ( ModificationItem modification:modifications )
+            for ( Modification modification:modifications )
             {
                 // Modification sequence length initialized with the operation
                 int localModificationSequenceLength = 1 + 1 + 1;
                 int localValuesLength = 0;
 
                 // Modification length initialized with the type
-                int typeLength = modification.getAttribute().getID().length();
+                int typeLength = modification.getAttribute().getId().length();
                 int localModificationLength = 1 + TLV.getNbBytes( typeLength ) + typeLength;
 
-                try
+                // Get all the values
+                if ( modification.getAttribute().size() != 0 )
                 {
-
-                    NamingEnumeration<?> values = modification.getAttribute().getAll();
-
-                    // Get all the values
-                    if ( values.hasMoreElements() )
+                    for ( org.apache.directory.shared.ldap.entry.Value<?> value:modification.getAttribute() )
                     {
-                        while ( values.hasMore() )
+                        if ( value instanceof ClientStringValue )
                         {
-                            Object value = values.next();
-
-                            if ( value instanceof String )
-                            {
-                                int valueLength = StringTools.getBytesUtf8( ( String ) value ).length;
-                                localValuesLength += 1 + TLV.getNbBytes( valueLength ) + valueLength;
-                            }
-                            else
-                            {
-                                localValuesLength += 1 + TLV.getNbBytes( ( ( byte[] ) value ).length )
-                                    + ( ( byte[] ) value ).length;
-                            }
+                            int valueLength = StringTools.getBytesUtf8( (String)value.get() ).length;
+                            localValuesLength += 1 + TLV.getNbBytes( valueLength ) + valueLength;
+                        }
+                        else
+                        {
+                            localValuesLength += 1 + TLV.getNbBytes( ( ( byte[] ) value.getReference() ).length )
+                                + ( ( byte[] ) value.getReference() ).length;
                         }
                     }
-
-                    localModificationLength += 1 + TLV.getNbBytes( localValuesLength ) + localValuesLength;
-                }
-                catch ( NamingException ne )
-                {
-                    continue;
                 }
 
+                localModificationLength += 1 + TLV.getNbBytes( localValuesLength ) + localValuesLength;
+
                 // Compute the modificationSequenceLength
                 localModificationSequenceLength += 1 + TLV.getNbBytes( localModificationLength )
                     + localModificationLength;
@@ -442,7 +444,7 @@
                 int modificationNumber = 0;
 
                 // Compute the modifications length
-                for ( ModificationItem modification:modifications )
+                for ( Modification modification:modifications )
                 {
                     // The modification sequence
                     buffer.put( UniversalTag.SEQUENCE_TAG );
@@ -454,22 +456,7 @@
                     // the same value in DirContext and in RFC 2251.
                     buffer.put( UniversalTag.ENUMERATED_TAG );
                     buffer.put( ( byte ) 1 );
-
-                    switch ( modification.getModificationOp() )
-                    {
-
-                        case DirContext.ADD_ATTRIBUTE: // add
-                            buffer.put( ( byte ) LdapConstants.OPERATION_ADD );
-                            break;
-
-                        case DirContext.REMOVE_ATTRIBUTE: // delete
-                            buffer.put( ( byte ) LdapConstants.OPERATION_DELETE );
-                            break;
-
-                        case DirContext.REPLACE_ATTRIBUTE: // replace
-                            buffer.put( ( byte ) LdapConstants.OPERATION_REPLACE );
-                            break;
-                    }
+                    buffer.put( ( byte ) modification.getOperation().getValue() );
 
                     // The modification
                     buffer.put( UniversalTag.SEQUENCE_TAG );
@@ -477,38 +464,26 @@
                     buffer.put( TLV.getBytes( localModificationLength ) );
 
                     // The modification type
-                    Value.encode( buffer, modification.getAttribute().getID() );
+                    Value.encode( buffer, modification.getAttribute().getId() );
 
                     // The values
                     buffer.put( UniversalTag.SET_TAG );
                     int localValuesLength = valuesLength.get( modificationNumber );
                     buffer.put( TLV.getBytes( localValuesLength ) );
 
-                    try
+                    if ( modification.getAttribute().size() != 0 )
                     {
-                        NamingEnumeration<?> values = modification.getAttribute().getAll();
-
-                        if ( values.hasMoreElements() )
+                        for ( org.apache.directory.shared.ldap.entry.Value<?> value:modification.getAttribute() )
                         {
-                            while ( values.hasMoreElements() )
+                            if ( value instanceof ClientStringValue )
                             {
-                                Object value = values.next();
-
-                                if ( value instanceof String )
-                                {
-                                    Value.encode( buffer, ( String ) value );
-                                }
-                                else
-                                {
-                                    Value.encode( buffer, ( byte[] ) value );
-                                }
+                                Value.encode( buffer, ( String ) value.get() );
+                            }
+                            else
+                            {
+                                Value.encode( buffer, ( byte[] ) value.getReference() );
                             }
                         }
-
-                    }
-                    catch ( NamingException ne )
-                    {
-                        throw new EncoderException( "Cannot enumerate the values" );
                     }
 
                     // Go to the next modification number;
@@ -541,67 +516,36 @@
         {
             int i = 0;
             
-            for ( ModificationItem modification:modifications )
+            for ( Modification modification:modifications )
             {
                 sb.append( "            Modification[" ).append( i ).append( "]\n" );
                 sb.append( "                Operation : " );
 
                 if ( modification != null )
                 {
-                    switch ( modification.getModificationOp() )
+                    switch ( modification.getOperation() )
                     {
     
-                        case DirContext.ADD_ATTRIBUTE:
+                        case ADD_ATTRIBUTE:
                             sb.append( " add\n" );
                             break;
     
-                        case DirContext.REPLACE_ATTRIBUTE:
+                        case REPLACE_ATTRIBUTE:
                             sb.append( " replace\n" );
                             break;
     
-                        case DirContext.REMOVE_ATTRIBUTE:
+                        case REMOVE_ATTRIBUTE:
                             sb.append( " delete\n" );
                             break;
                     }
 
                     sb.append( "                Modification\n" );
     
-                    Attribute attribute = modification.getAttribute();
+                    EntryAttribute attribute = modification.getAttribute();
     
                     if ( attribute != null )
                     {
-                        try
-                        {
-                            sb.append( "                    Type : '" ).append( attribute.getID() ).append( "'\n" );
-                            sb.append( "                    Vals\n" );
-        
-                            for ( int j = 0; j < attribute.size(); j++ )
-                            {
-        
-                                Object attributeValue = attribute.get( j );
-                                sb.append( "                        Val[" ).append( j ).append( "] : '" );
-        
-                                if ( attributeValue != null )
-                                {
-                                    if ( attributeValue instanceof String )
-                                    {
-                                        sb.append( attributeValue ).append( "' \n" );
-                                    }
-                                    else
-                                    {
-                                        sb.append( StringTools.utf8ToString( ( byte[] ) attributeValue ) ).append( "' \n" );
-                                    }
-                                }
-                                else
-                                {
-                                    sb.append( "<null>'\n" );
-                                }
-                            }
-                        }
-                        catch ( NamingException ne )
-                        {
-                            log.error( "Naming exception while printing the '{}'", attribute.getID() );
-                        }
+                        sb.append( attribute );
                     }
                 }
                 else

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/EntryAttribute.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/EntryAttribute.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/EntryAttribute.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/EntryAttribute.java Wed Sep  3 18:23:12 2008
@@ -232,6 +232,23 @@
 
     /**
      * <p>
+     * Get the nth value of this attribute. If there is none, 
+     * null is returned.
+     * </p>
+     * <p>
+     * Note : even if we are storing values into a Set, one can assume
+     * the values are ordered following the insertion order.
+     * </p>
+     * <p> 
+     * 
+     * @param i the index  of the value to get
+     *  @return The nth value for this attribute.
+     */
+    Value<?> get( int i );
+    
+    
+    /**
+     * <p>
      * Get the byte[] value, if and only if the value is known to be Binary,
      * otherwise a InvalidAttributeValueException will be thrown
      * </p>

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/ModificationOperation.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/ModificationOperation.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/ModificationOperation.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/ModificationOperation.java Wed Sep  3 18:23:12 2008
@@ -29,9 +29,9 @@
  */
 public enum ModificationOperation
 {
-    ADD_ATTRIBUTE( 1 ),
-    REPLACE_ATTRIBUTE( 2 ),
-    REMOVE_ATTRIBUTE( 3 );
+    ADD_ATTRIBUTE( 0 ),
+    REMOVE_ATTRIBUTE( 1 ),
+    REPLACE_ATTRIBUTE( 2 );
 
     /** Internal value */
     private int value;

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/ClientModification.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/ClientModification.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/ClientModification.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/ClientModification.java Wed Sep  3 18:23:12 2008
@@ -158,11 +158,6 @@
             return true;
         }
         
-        if ( o == null )
-        {
-           return false;
-        }
-        
         if ( ! (o instanceof ClientModification ) )
         {
             return false;

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/DefaultClientAttribute.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/DefaultClientAttribute.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/DefaultClientAttribute.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/client/DefaultClientAttribute.java Wed Sep  3 18:23:12 2008
@@ -934,6 +934,46 @@
 
 
     /**
+     * <p>
+     * Get the nth value of this attribute. If there is none, 
+     * null is returned.
+     * </p>
+     * <p>
+     * Note : even if we are storing values into a Set, one can assume
+     * the values are ordered following the insertion order.
+     * </p>
+     * <p> 
+     * 
+     * @param i the index  of the value to get
+     *  @return The nth value for this attribute.
+     */
+    public Value<?> get( int i )
+    {
+        if ( values.size() < i )
+        {
+            return null;
+        }
+        else
+        {
+            int n = 0;
+            
+            for ( Value<?> value:values )
+            {
+                if ( n == i )
+                {
+                    return value;
+                }
+                
+                n++;
+            }
+        }
+        
+        // fallback to 
+        return null;
+    }
+    
+    
+    /**
      * Returns an iterator over all the attribute's values.
      * <p>
      * The effect on the returned enumeration of adding or removing values of

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/ldif/LdifEntry.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/ldif/LdifEntry.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/ldif/LdifEntry.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/ldif/LdifEntry.java Wed Sep  3 18:23:12 2008
@@ -36,6 +36,7 @@
 import org.apache.directory.shared.ldap.entry.Entry;
 import org.apache.directory.shared.ldap.entry.EntryAttribute;
 import org.apache.directory.shared.ldap.entry.Modification;
+import org.apache.directory.shared.ldap.entry.ModificationOperation;
 import org.apache.directory.shared.ldap.entry.Value;
 import org.apache.directory.shared.ldap.entry.client.ClientEntry;
 import org.apache.directory.shared.ldap.entry.client.ClientModification;
@@ -188,12 +189,14 @@
     /**
      * Add a modification item (used by modify operations)
      * 
-     * @param modOp The operation. One of : DirContext.ADD_ATTRIBUTE
-     *            DirContext.REMOVE_ATTRIBUTE DirContext.REPLACE_ATTRIBUTE
+     * @param modOp The operation. One of : 
+     * - ModificationOperation.ADD_ATTRIBUTE
+     * - ModificationOperation.REMOVE_ATTRIBUTE 
+     * - ModificationOperation.REPLACE_ATTRIBUTE
      * 
      * @param attr The attribute to be added
      */
-    public void addModificationItem( int modOp, EntryAttribute attr )
+    public void addModificationItem( ModificationOperation modOp, EntryAttribute attr )
     {
         if ( changeType == ChangeType.Modify )
         {
@@ -203,18 +206,20 @@
         }
     }
 
+
     /**
      * Add a modification item
      * 
-     * @param modOp
-     *            The operation. One of : DirContext.ADD_ATTRIBUTE
-     *            DirContext.REMOVE_ATTRIBUTE DirContext.REPLACE_ATTRIBUTE
+     * @param modOp The operation. One of : 
+     *  - ModificationOperation.ADD_ATTRIBUTE
+     *  - ModificationOperation.REMOVE_ATTRIBUTE 
+     *  - ModificationOperation.REPLACE_ATTRIBUTE
      * 
      * @param modOp The modification operation value
      * @param id The attribute's ID
      * @param value The attribute's value
      */
-    public void addModificationItem( int modOp, String id, Object value )
+    public void addModificationItem( ModificationOperation modOp, String id, Object value )
     {
         if ( changeType == ChangeType.Modify )
         {
@@ -236,6 +241,7 @@
         }
     }
 
+
     /**
      * Add an attribute to the entry
      * 
@@ -990,7 +996,7 @@
                     String modStr = in.readUTF();
                     DefaultClientAttribute value = (DefaultClientAttribute)in.readObject();
                     
-                    addModificationItem( operation, modStr, value );
+                    addModificationItem( ModificationOperation.getOperation( operation ), modStr, value );
                 }
                 
                 break;

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/ldif/LdifReader.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/ldif/LdifReader.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/ldif/LdifReader.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/ldif/LdifReader.java Wed Sep  3 18:23:12 2008
@@ -43,12 +43,12 @@
 import javax.naming.NamingException;
 import javax.naming.directory.Attribute;
 import javax.naming.directory.BasicAttribute;
-import javax.naming.directory.DirContext;
 import javax.naming.ldap.Control;
 
 import org.apache.directory.shared.asn1.codec.DecoderException;
 import org.apache.directory.shared.asn1.primitives.OID;
 import org.apache.directory.shared.ldap.entry.EntryAttribute;
+import org.apache.directory.shared.ldap.entry.ModificationOperation;
 import org.apache.directory.shared.ldap.entry.client.DefaultClientAttribute;
 import org.apache.directory.shared.ldap.name.LdapDN;
 import org.apache.directory.shared.ldap.name.LdapDnParser;
@@ -987,7 +987,7 @@
     {
         int state = MOD_SPEC;
         String modified = null;
-        int modificationType = 0;
+        ModificationOperation modificationType = ModificationOperation.ADD_ATTRIBUTE;
         EntryAttribute attribute = null;
 
         // The following flag is used to deal with empty modifications
@@ -1032,7 +1032,7 @@
                 }
 
                 modified = StringTools.trim( line.substring( "add:".length() ) );
-                modificationType = DirContext.ADD_ATTRIBUTE;
+                modificationType = ModificationOperation.ADD_ATTRIBUTE;
                 attribute = new DefaultClientAttribute( modified );
 
                 state = ATTRVAL_SPEC;
@@ -1046,7 +1046,7 @@
                 }
 
                 modified = StringTools.trim( line.substring( "delete:".length() ) );
-                modificationType = DirContext.REMOVE_ATTRIBUTE;
+                modificationType = ModificationOperation.REMOVE_ATTRIBUTE;
                 attribute = new DefaultClientAttribute( modified );
 
                 state = ATTRVAL_SPEC_OR_SEP;
@@ -1060,7 +1060,7 @@
                 }
 
                 modified = StringTools.trim( line.substring( "replace:".length() ) );
-                modificationType = DirContext.REPLACE_ATTRIBUTE;
+                modificationType = ModificationOperation.REPLACE_ATTRIBUTE;
                 attribute = new DefaultClientAttribute( modified );
 
                 state = ATTRVAL_SPEC_OR_SEP;

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/AbandonRequestImpl.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/AbandonRequestImpl.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/AbandonRequestImpl.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/AbandonRequestImpl.java Wed Sep  3 18:23:12 2008
@@ -21,7 +21,7 @@
 
 
 /**
- * Lockable implementation of an AbandonRequest.
+ * Implementation of an AbandonRequest.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  * @version $Rev$

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/AbstractMutableControlImpl.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/AbstractMutableControlImpl.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/AbstractMutableControlImpl.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/AbstractMutableControlImpl.java Wed Sep  3 18:23:12 2008
@@ -21,7 +21,7 @@
 
 
 /**
- * Lockable Control implementation.
+ * Control implementation.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  * @version $Rev$

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/AddResponseImpl.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/AddResponseImpl.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/AddResponseImpl.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/AddResponseImpl.java Wed Sep  3 18:23:12 2008
@@ -21,7 +21,7 @@
 
 
 /**
- * Lockable AddResponse implementation.
+ * AddResponse implementation.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  * @version $Rev$

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/CompareResponseImpl.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/CompareResponseImpl.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/CompareResponseImpl.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/CompareResponseImpl.java Wed Sep  3 18:23:12 2008
@@ -21,7 +21,7 @@
 
 
 /**
- * Lockable CompareResponse implementation.
+ * CompareResponse implementation.
  * 
  * @author <a href="mailto:dev@directory.apache.org"> Apache Directory Project</a>
  * @version $Rev$

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/DeleteResponseImpl.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/DeleteResponseImpl.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/DeleteResponseImpl.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/DeleteResponseImpl.java Wed Sep  3 18:23:12 2008
@@ -21,7 +21,7 @@
 
 
 /**
- * Lockable DeleteResponse implementation
+ * DeleteResponse implementation
  * 
  * @author <a href="mailto:dev@directory.apache.org"> Apache Directory Project</a>
  * @version $Rev$
@@ -37,7 +37,7 @@
 
 
     /**
-     * Creates a Lockable DeleteResponse as a reply to an DeleteRequest.
+     * Creates a DeleteResponse as a reply to an DeleteRequest.
      * 
      * @param id
      *            the session unique message id

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/ModifyRequest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/ModifyRequest.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/ModifyRequest.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/ModifyRequest.java Wed Sep  3 18:23:12 2008
@@ -22,10 +22,7 @@
 
 import java.util.Collection;
 
-import javax.naming.directory.ModificationItem;
-
-
-
+import org.apache.directory.shared.ldap.entry.Modification;
 import org.apache.directory.shared.ldap.name.LdapDN;
 
 
@@ -130,28 +127,25 @@
      * Gets an immutable Collection of modification items representing the
      * atomic changes to perform on the candidate entry to modify.
      * 
-     * @return an immutatble Collection of ModificationItem instances.
-     * @see javax.naming.directory.ModificationItem
+     * @return an immutable Collection of Modification instances.
      */
-    Collection<ModificationItem> getModificationItems();
+    Collection<Modification> getModificationItems();
 
 
     /**
      * Adds a ModificationItem to the set of modifications composing this modify
      * request.
      * 
-     * @param mod
-     *            a ModificationItem to add.
+     * @param mod a Modification to add.
      */
-    void addModification( ModificationItem mod );
+    void addModification( Modification mod );
 
 
     /**
      * Removes a ModificationItem to the set of modifications composing this
      * modify request.
      * 
-     * @param mod
-     *            a ModificationItem to remove.
+     * @param mod a Modification to remove.
      */
-    void removeModification( ModificationItem mod );
+    void removeModification( Modification mod );
 }

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/ModifyRequestImpl.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/ModifyRequestImpl.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/ModifyRequestImpl.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/ModifyRequestImpl.java Wed Sep  3 18:23:12 2008
@@ -23,19 +23,12 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Set;
-
-import javax.naming.NamingEnumeration;
-import javax.naming.NamingException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.ModificationItem;
 
+import org.apache.directory.shared.ldap.entry.Modification;
+import org.apache.directory.shared.ldap.entry.client.ClientModification;
 import org.apache.directory.shared.ldap.name.LdapDN;
-import org.apache.directory.shared.ldap.util.StringTools;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -51,13 +44,13 @@
     static final long serialVersionUID = -505803669028990304L;
 
     /** The logger */
-    private static final transient Logger log = LoggerFactory.getLogger( ModifyRequestImpl.class );
+    private static final transient Logger LOG = LoggerFactory.getLogger( ModifyRequestImpl.class );
 
     /** Dn of the entry to modify or PDU's <b>object</b> field */
     private LdapDN name;
 
     /** Sequence of modifications or PDU's <b>modification</b> seqence field */
-    private List<ModificationItem> mods = new ArrayList<ModificationItem>();
+    private List<Modification> mods = new ArrayList<Modification>();
 
     private ModifyResponse response;
 
@@ -82,15 +75,13 @@
     // ------------------------------------------------------------------------
     // ModifyRequest Interface Method Implementations
     // ------------------------------------------------------------------------
-
     /**
      * Gets an immutable Collection of modification items representing the
      * atomic changes to perform on the candidate entry to modify.
      * 
-     * @return an immutatble Collection of ModificationItem instances.
-     * @see <{javax.naming.directory.ModificationItem}>
+     * @return an immutable Collection of Modification instances.
      */
-    public Collection<ModificationItem> getModificationItems()
+    public Collection<Modification> getModificationItems()
     {
         return Collections.unmodifiableCollection( mods );
     }
@@ -122,26 +113,24 @@
 
 
     /**
-     * Adds a ModificationItem to the set of modifications composing this modify
+     * Adds a Modification to the set of modifications composing this modify
      * request.
      * 
-     * @param mod
-     *            a ModificationItem to add.
+     * @param mod a Modification to add
      */
-    public void addModification( ModificationItem mod )
+    public void addModification( Modification mod )
     {
         mods.add( mod );
     }
 
 
     /**
-     * Removes a ModificationItem to the set of modifications composing this
+     * Removes a Modification to the set of modifications composing this
      * modify request.
      * 
-     * @param mod
-     *            a ModificationItem to remove.
+     * @param mod a Modification to remove.
      */
-    public void removeModification( ModificationItem mod )
+    public void removeModification( Modification mod )
     {
         mods.remove( mod );
     }
@@ -224,13 +213,22 @@
             return false;
         }
 
-        Iterator<ModificationItem> list = req.getModificationItems().iterator();
+        Iterator<Modification> list = req.getModificationItems().iterator();
 
-        for ( int ii = 0; ii < mods.size(); ii++ )
+        for ( int i = 0; i < mods.size(); i++ )
         {
-            ModificationItem item = ( ModificationItem ) list.next();
+            Modification item = list.next();
 
-            if ( !equals( ( ModificationItem ) mods.get( ii ), item ) )
+            if ( item == null )
+            {
+                if ( mods.get( i ) != null )
+                {
+                    return false;
+                }
+            }
+            else
+                
+            if ( !item.equals((ClientModification) mods.get( i ) ) )
             {
                 return false;
             }
@@ -241,90 +239,6 @@
 
 
     /**
-     * Checks to see if two ModificationItems are equal by factoring in the
-     * modification operation as well as the attribute of each item.
-     * 
-     * @param item0
-     *            the first ModificationItem to compare
-     * @param item1
-     *            the second ModificationItem to compare
-     * @return true if the ModificationItems are equal, false otherwise
-     */
-    private boolean equals( ModificationItem item0, ModificationItem item1 )
-    {
-        if ( item0 == item1 )
-        {
-            return true;
-        }
-
-        if ( item0.getModificationOp() != item1.getModificationOp() )
-        {
-            return false;
-        }
-
-        // compare attribute id's at the very least
-        if ( !item0.getAttribute().getID().equals( item1.getAttribute().getID() ) )
-        {
-            return false;
-        }
-
-        try
-        {
-            Attribute attr0 = item0.getAttribute();
-            Attribute attr1 = item1.getAttribute();
-
-            Set<Object> attrHash0 = new HashSet<Object>();
-
-            NamingEnumeration<?> iter0 = attr0.getAll();
-
-            while ( iter0.hasMoreElements() )
-            {
-                attrHash0.add( iter0.next() );
-            }
-
-            NamingEnumeration<?> iter1 = attr1.getAll();
-
-            while ( iter1.hasMoreElements() )
-            {
-                Object value = iter1.next();
-
-                if ( attrHash0.contains( value ) == false )
-                {
-                    if ( value instanceof byte[] )
-                    {
-                        String sValue = StringTools.utf8ToString( ( byte[] ) value );
-
-                        if ( attrHash0.contains( sValue ) == false )
-                        {
-                            return false;
-                        }
-                        else
-                        {
-                            attrHash0.remove( sValue );
-                            continue;
-                        }
-                    }
-                    else
-                    {
-                        return false;
-                    }
-                }
-                else
-                {
-                    attrHash0.remove( value );
-                }
-            }
-
-            return ( attrHash0.size() == 0 );
-        }
-        catch ( NamingException ne )
-        {
-            return false;
-        }
-    }
-
-
-    /**
      * Get a String representation of a ModifyRequest
      * 
      * @return A ModifyRequest String
@@ -343,64 +257,28 @@
             for ( int i = 0; i < mods.size(); i++ )
             {
 
-                ModificationItem modification = ( ModificationItem ) mods.get( i );
+                ClientModification modification = ( ClientModification ) mods.get( i );
 
                 sb.append( "            Modification[" ).append( i ).append( "]\n" );
                 sb.append( "                Operation : " );
 
-                switch ( modification.getModificationOp() )
+                switch ( modification.getOperation() )
                 {
-
-                    case DirContext.ADD_ATTRIBUTE:
+                    case ADD_ATTRIBUTE:
                         sb.append( " add\n" );
                         break;
 
-                    case DirContext.REPLACE_ATTRIBUTE:
+                    case REPLACE_ATTRIBUTE:
                         sb.append( " replace\n" );
                         break;
 
-                    case DirContext.REMOVE_ATTRIBUTE:
+                    case REMOVE_ATTRIBUTE:
                         sb.append( " delete\n" );
                         break;
                 }
 
                 sb.append( "                Modification\n" );
-
-                Attribute attribute = modification.getAttribute();
-
-                try
-                {
-                    sb.append( "                    Type : '" ).append( attribute.getID() ).append( "'\n" );
-                    sb.append( "                    Vals\n" );
-
-                    for ( int j = 0; j < attribute.size(); j++ )
-                    {
-                        sb.append( "                        Val[" ).append( j ).append( "] : '" );
-
-                        Object attributeValue = attribute.get( j );
-
-                        if ( attributeValue instanceof byte[] )
-                        {
-                            sb.append( StringTools.utf8ToString( ( byte[] ) attributeValue ) ).append( '/' ).append(
-                                StringTools.dumpBytes( ( byte[] ) attributeValue ) );
-                        }
-                        else if ( attributeValue instanceof String )
-                        {
-                            sb.append( attributeValue );
-                        }
-                        else
-                        {
-                            sb.append( StringTools.dumpBytes( StringTools.getBytesUtf8( attributeValue.toString() ) ) );
-                        }
-
-                        sb.append( "' \n" );
-
-                    }
-                }
-                catch ( NamingException ne )
-                {
-                    log.error( "Naming exception while printing the '" + attribute.getID() + "'" );
-                }
+                sb.append( modification.getAttribute() );
             }
         }
 

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/SearchResponseDoneImpl.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/SearchResponseDoneImpl.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/SearchResponseDoneImpl.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/SearchResponseDoneImpl.java Wed Sep  3 18:23:12 2008
@@ -21,7 +21,7 @@
 
 
 /**
- * Lockable SearchResponseDone implementation
+ * SearchResponseDone implementation
  * 
  * @author <a href="mailto:dev@directory.apache.org"> Apache Directory Project</a>
  * @version $Rev$

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/util/AttributeUtils.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/util/AttributeUtils.java?rev=691847&r1=691846&r2=691847&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/util/AttributeUtils.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/util/AttributeUtils.java Wed Sep  3 18:23:12 2008
@@ -237,52 +237,6 @@
     
     
     /**
-     * Utility method to extract a modification item from an array of modifications.
-     * 
-     * @param mods the array of ModificationItems to extract the Attribute from.
-     * @param type the attributeType spec of the Attribute to extract
-     * @return the modification item on the attributeType specified
-     */
-    public static final ModificationItem getModificationItem( List<ModificationItem> mods, AttributeType type )
-    {
-        // optimization bypass to avoid cost of the loop below
-        if ( type.getNamesRef().length == 1 )
-        {
-            for ( ModificationItem mod:mods )
-            {
-                if ( mod.getAttribute().getID().equalsIgnoreCase( type.getNamesRef()[0] ) )
-                {
-                    return mod;
-                }
-            }
-        }
-        
-        // check if the attribute's OID is used
-        for ( ModificationItem mod:mods )
-        {
-            if ( mod.getAttribute().getID().equals( type.getOid() ) )
-            {
-                return mod;
-            }
-        }
-        
-        // iterate through aliases
-        for ( int ii = 0; ii < type.getNamesRef().length; ii++ )
-        {
-            for ( ModificationItem mod:mods )
-            {
-                if ( mod.getAttribute().getID().equalsIgnoreCase( type.getNamesRef()[ii] ) )
-                {
-                    return mod;
-                }
-            }
-        }
-        
-        return null;
-    }
-
-    
-    /**
      * Check if an attribute contains a specific value, using the associated matchingRule for that
      *
      * @param attr The attribute we are searching in