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 2010/07/30 23:08:08 UTC

svn commit: r980965 [3/3] - in /directory/shared/trunk: all/ asn1-codec/ asn1/ cursor/ dsml-parser/ dsml-parser/src/main/java/org/apache/directory/shared/dsmlv2/ dsml-parser/src/main/java/org/apache/directory/shared/dsmlv2/engine/ dsml-parser/src/main/...

Propchange: directory/shared/trunk/dsml-parser/src/test/resources/org/apache/directory/shared/dsmlv2/searchResponse/searchResultReference/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jul 30 21:08:04 2010
@@ -1,4 +1,7 @@
+/directory/shared/branches-dnfactory-experiment/dsml-parser/src/test/resources/org/apache/directory/shared/dsmlv2/searchResponse/searchResultReference:980350-980351
+/directory/shared/branches/shared-dnfactory-experiment/dsml-parser/src/test/resources/org/apache/directory/shared/dsmlv2/searchResponse/searchResultReference:980352-980933
 /directory/shared/branches/shared-replication/dsml-parser/src/test/resources/org/apache/directory/studio/dsmlv2/searchResponse/searchResultReference:749791-764113
 /directory/shared/branches/shared-schema/dsml-parser/src/test/resources/org/apache/directory/shared/dsmlv2/searchResponse/searchResultReference:806622-896441
 /directory/shared/branches/shared-subtree/dsml-parser/src/test/resources/org/apache/directory/shared/dsmlv2/searchResponse/searchResultReference:965208-965686
 /directory/shared/branches/xdbm-refactoring/dsml-parser/src/test/resources/org/apache/directory/shared/dsmlv2/searchResponse/searchResultReference:945830-946347
+/directory/shared/trunk/dsml-parser/src/test/resources/org/apache/directory/shared/dsmlv2/searchResponse/searchResultReference:980025-980349

Propchange: directory/shared/trunk/i18n/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Fri Jul 30 21:08:04 2010
@@ -0,0 +1,3 @@
+/directory/shared/branches-dnfactory-experiment/i18n:980350-980351
+/directory/shared/branches/shared-dnfactory-experiment/i18n:980352-980933
+/directory/shared/trunk/i18n:980025-980349

Propchange: directory/shared/trunk/ldap/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Fri Jul 30 21:08:04 2010
@@ -0,0 +1,2 @@
+/directory/shared/branches-dnfactory-experiment/ldap:980350-980351
+/directory/shared/branches/shared-dnfactory-experiment/ldap:980352-980933

Propchange: directory/shared/trunk/ldap-constants/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Fri Jul 30 21:08:04 2010
@@ -0,0 +1,2 @@
+/directory/shared/branches-dnfactory-experiment/ldap-constants:980350-980351
+/directory/shared/branches/shared-dnfactory-experiment/ldap-constants:980352-980933

Propchange: directory/shared/trunk/ldap-constants/src/main/java/org/apache/directory/shared/ldap/constants/MetaSchemaConstants.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jul 30 21:08:04 2010
@@ -1,3 +1,5 @@
 /directory/apacheds/branches/apacheds-replication/core-constants/src/main/java/org/apache/directory/server/constants/MetaSchemaConstants.java:749790-764110
+/directory/shared/branches-dnfactory-experiment/ldap-constants/src/main/java/org/apache/directory/shared/ldap/constants/MetaSchemaConstants.java:980350-980351
+/directory/shared/branches/shared-dnfactory-experiment/ldap-constants/src/main/java/org/apache/directory/shared/ldap/constants/MetaSchemaConstants.java:980352-980933
 /directory/shared/branches/shared-subtree/ldap-constants/src/main/java/org/apache/directory/shared/ldap/constants/MetaSchemaConstants.java:965208-965686
 /directory/shared/branches/xdbm-refactoring/ldap-constants/src/main/java/org/apache/directory/shared/ldap/constants/MetaSchemaConstants.java:945830-946347

Propchange: directory/shared/trunk/ldap-convert/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Fri Jul 30 21:08:04 2010
@@ -0,0 +1,3 @@
+/directory/shared/branches-dnfactory-experiment/ldap-convert:980350-980351
+/directory/shared/branches/shared-dnfactory-experiment/ldap-convert:980352-980933
+/directory/shared/trunk/ldap-convert:980025-980349

Propchange: directory/shared/trunk/ldap-jndi/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Fri Jul 30 21:08:04 2010
@@ -0,0 +1,3 @@
+/directory/shared/branches-dnfactory-experiment/ldap-jndi:980350-980351
+/directory/shared/branches/shared-dnfactory-experiment/ldap-jndi:980352-980933
+/directory/shared/trunk/ldap-jndi:980025-980349

Propchange: directory/shared/trunk/ldap-ldif/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Fri Jul 30 21:08:04 2010
@@ -0,0 +1,2 @@
+/directory/shared/branches-dnfactory-experiment/ldap-ldif:980350-980351
+/directory/shared/branches/shared-dnfactory-experiment/ldap-ldif:980352-980933

Modified: directory/shared/trunk/ldap-ldif/src/main/java/org/apache/directory/shared/ldap/ldif/LdifEntry.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap-ldif/src/main/java/org/apache/directory/shared/ldap/ldif/LdifEntry.java?rev=980965&r1=980964&r2=980965&view=diff
==============================================================================
--- directory/shared/trunk/ldap-ldif/src/main/java/org/apache/directory/shared/ldap/ldif/LdifEntry.java (original)
+++ directory/shared/trunk/ldap-ldif/src/main/java/org/apache/directory/shared/ldap/ldif/LdifEntry.java Fri Jul 30 21:08:04 2010
@@ -112,7 +112,7 @@ public class LdifEntry implements Clonea
      */
     public void setDn( DN dn )
     {
-        entry.setDn( (DN)dn.clone() );
+        entry.setDn( dn );
     }
 
     

Modified: directory/shared/trunk/ldap-ldif/src/main/java/org/apache/directory/shared/ldap/ldif/LdifRevertor.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap-ldif/src/main/java/org/apache/directory/shared/ldap/ldif/LdifRevertor.java?rev=980965&r1=980964&r2=980965&view=diff
==============================================================================
--- directory/shared/trunk/ldap-ldif/src/main/java/org/apache/directory/shared/ldap/ldif/LdifRevertor.java (original)
+++ directory/shared/trunk/ldap-ldif/src/main/java/org/apache/directory/shared/ldap/ldif/LdifRevertor.java Fri Jul 30 21:08:04 2010
@@ -268,12 +268,12 @@ public class LdifRevertor
             throw new IllegalArgumentException( I18n.err( I18n.ERR_12076 ) );
         }
 
-        currentParent = ( DN ) modifiedDn.clone();
+        currentParent = modifiedDn;
         currentRdn = currentParent.getRdn();
-        currentParent.remove( currentParent.size() - 1 );
+        currentParent = currentParent.remove( currentParent.size() - 1 );
 
-        newDn = ( DN ) newSuperiorDn.clone();
-        newDn.add( modifiedDn.getRdn() );
+        newDn = newSuperiorDn;
+        newDn = newDn.add( modifiedDn.getRdn() );
 
         entry.setChangeType( ChangeType.ModDn );
         entry.setDn( newDn );
@@ -298,7 +298,7 @@ public class LdifRevertor
         
         if ( newSuperior != null )
         {
-            DN restoredDn = (DN)((DN)newSuperior.clone()).add( newRdn ); 
+            DN restoredDn = newSuperior.add( newRdn ); 
             reverted.setDn( restoredDn );
         }
         else
@@ -317,9 +317,9 @@ public class LdifRevertor
         
         if ( newSuperior != null )
         {
-            DN oldSuperior = ( DN ) entry.getDn().clone();
+            DN oldSuperior = entry.getDn();
 
-            oldSuperior.remove( oldSuperior.size() - 1 );
+            oldSuperior = oldSuperior.remove( oldSuperior.size() - 1 );
             reverted.setNewSuperior( oldSuperior.getName() );
         }
 
@@ -371,7 +371,7 @@ public class LdifRevertor
 
         if ( newSuperior != null )
         {
-            DN restoredDn = (DN)((DN)newSuperior.clone()).add( newRdn ); 
+            DN restoredDn = newSuperior.add( newRdn ); 
             reverted.setDn( restoredDn );
         }
         else
@@ -383,9 +383,9 @@ public class LdifRevertor
         
         if ( newSuperior != null )
         {
-            DN oldSuperior = ( DN ) newDn.clone();
+            DN oldSuperior = newDn;
 
-            oldSuperior.remove( oldSuperior.size() - 1 );
+            oldSuperior = oldSuperior.remove( oldSuperior.size() - 1 );
             reverted.setNewSuperior( oldSuperior.getName() );
         }
         
@@ -445,12 +445,12 @@ public class LdifRevertor
             throw new IllegalArgumentException( I18n.err( I18n.ERR_12079 ) );
         }
 
-        parentDn = ( DN ) entry.getDn().clone();
+        parentDn = entry.getDn();
         RDN oldRdn = parentDn.getRdn();
 
-        newDn = ( DN ) parentDn.clone();
-        newDn.remove( newDn.size() - 1 );
-        newDn.add( newRdn );
+        newDn = parentDn;
+        newDn = newDn.remove( newDn.size() - 1 );
+        newDn = newDn.add( newRdn );
 
         List<LdifEntry> entries = new ArrayList<LdifEntry>( 1 );
         LdifEntry reverted = new LdifEntry();

Propchange: directory/shared/trunk/ldap-schema/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jul 30 21:08:04 2010
@@ -1,5 +1,8 @@
 /directory/apacheds/branches/apacheds-replication/schema-data:749790-764110
+/directory/shared/branches-dnfactory-experiment/ldap-schema:980350-980351
+/directory/shared/branches/shared-dnfactory-experiment/ldap-schema:980352-980933
 /directory/shared/branches/shared-replication/ldap-schema:749791-764113
 /directory/shared/branches/shared-schema/ldap-schema:806622-896441
 /directory/shared/branches/shared-subtree/ldap-schema:965208-965686
 /directory/shared/branches/xdbm-refactoring/ldap-schema:945830-946347
+/directory/shared/trunk/ldap-schema:980025-980349

Propchange: directory/shared/trunk/ldap-schema-loader/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jul 30 21:08:04 2010
@@ -1,5 +1,8 @@
 /directory/apacheds/branches/apacheds-replication/schema-loader:749790-764110
+/directory/shared/branches-dnfactory-experiment/ldap-schema-loader:980350-980351
+/directory/shared/branches/shared-dnfactory-experiment/ldap-schema-loader:980352-980933
 /directory/shared/branches/shared-replication/ldap-schema-loader:749791-764113
 /directory/shared/branches/shared-schema/ldap-schema-loader:806622-896441
 /directory/shared/branches/shared-subtree/ldap-schema-loader:965208-965686
 /directory/shared/branches/xdbm-refactoring/ldap-schema-loader:945830-946347
+/directory/shared/trunk/ldap-schema-loader:980025-980349

Propchange: directory/shared/trunk/ldap-schema-manager/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Fri Jul 30 21:08:04 2010
@@ -0,0 +1,3 @@
+/directory/shared/branches-dnfactory-experiment/ldap-schema-manager:980350-980351
+/directory/shared/branches/shared-dnfactory-experiment/ldap-schema-manager:980352-980933
+/directory/shared/trunk/ldap-schema-manager:980025-980349

Propchange: directory/shared/trunk/ldap-schema-manager-tests/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Fri Jul 30 21:08:04 2010
@@ -0,0 +1,3 @@
+/directory/shared/branches-dnfactory-experiment/ldap-schema-manager-tests:980350-980351
+/directory/shared/branches/shared-dnfactory-experiment/ldap-schema-manager-tests:980352-980933
+/directory/shared/trunk/ldap-schema-manager-tests:980025-980349

Propchange: directory/shared/trunk/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jul 30 21:08:04 2010
@@ -1,5 +1,7 @@
+/directory/shared/branches-dnfactory-experiment/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager:980350-980351
+/directory/shared/branches/shared-dnfactory-experiment/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager:980352-980933
 /directory/shared/branches/shared-replication/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager:749791-764113
 /directory/shared/branches/shared-schema/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager:806622-893998
 /directory/shared/branches/shared-subtree/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager:965208-965686
 /directory/shared/branches/xdbm-refactoring/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager:945830-946347
-/directory/shared/trunk/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager:806622-894844*
+/directory/shared/trunk/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager:806622-894844*,980025-980349

Propchange: directory/shared/trunk/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jul 30 21:08:04 2010
@@ -1,5 +1,7 @@
+/directory/shared/branches-dnfactory-experiment/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl:980350-980351
+/directory/shared/branches/shared-dnfactory-experiment/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl:980352-980933
 /directory/shared/branches/shared-replication/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl:749791-764113
 /directory/shared/branches/shared-schema/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl:806622-893998
 /directory/shared/branches/shared-subtree/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl:965208-965686
 /directory/shared/branches/xdbm-refactoring/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl:945830-946347
-/directory/shared/trunk/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl:806622-894844*
+/directory/shared/trunk/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl:806622-894844*,980025-980349

Propchange: directory/shared/trunk/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl/DefaultSchemaManager.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jul 30 21:08:04 2010
@@ -1,5 +1,7 @@
+/directory/shared/branches-dnfactory-experiment/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl/DefaultSchemaManager.java:980350-980351
+/directory/shared/branches/shared-dnfactory-experiment/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl/DefaultSchemaManager.java:980352-980933
 /directory/shared/branches/shared-replication/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl/DefaultSchemaManager.java:749791-764113
 /directory/shared/branches/shared-schema/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl/DefaultSchemaManager.java:806622-893998
 /directory/shared/branches/shared-subtree/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl/DefaultSchemaManager.java:965208-965686
 /directory/shared/branches/xdbm-refactoring/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl/DefaultSchemaManager.java:945830-946347
-/directory/shared/trunk/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl/DefaultSchemaManager.java:806622-894844
+/directory/shared/trunk/ldap-schema-manager/src/main/java/org/apache/directory/shared/ldap/schema/manager/impl/DefaultSchemaManager.java:806622-894844,980025-980349

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/DefaultEntry.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/DefaultEntry.java?rev=980965&r1=980964&r2=980965&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/DefaultEntry.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/DefaultEntry.java Fri Jul 30 21:08:04 2010
@@ -199,7 +199,7 @@ public class DefaultEntry implements Ent
         // We will clone the existing entry, because it may be normalized
         if ( entry.getDn() != null )
         {
-            dn = ( DN ) entry.getDn().clone();
+            dn = entry.getDn();
         }
         else
         {
@@ -982,11 +982,7 @@ public class DefaultEntry implements Ent
             }
 
             // An Entry has a DN and many attributes.
-            // First, clone the DN, if not null.
-            if ( dn != null )
-            {
-                clone.dn = ( DN ) dn.clone();
-            }
+            clone.dn = dn; // note that DN is immutable now
 
             // then clone the ClientAttribute Map.
             clone.attributes = ( Map<String, EntryAttribute> ) ( ( ( HashMap<String, EntryAttribute> ) attributes )
@@ -2692,14 +2688,14 @@ public class DefaultEntry implements Ent
     public void deserialize( ObjectInput in ) throws IOException, ClassNotFoundException
     {
         // Read the DN
-        dn = new DN();
+        dn = DN.EMPTY_DN;
 
         byte b = in.readByte();
 
         if ( b == 1 )
         {
             RDN rdn = RdnSerializer.deserialize( in );
-            dn.add( rdn );
+            dn = new DN( rdn );
         }
 
         // Read the number of attributes

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/name/DN.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/name/DN.java?rev=980965&r1=980964&r2=980965&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/name/DN.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/name/DN.java Fri Jul 30 21:08:04 2010
@@ -50,7 +50,7 @@ import org.slf4j.LoggerFactory;
 
 
 /**
- * The DN class contains a DN (Distinguished Name).
+ * The DN class contains a DN (Distinguished Name). This class is immutable.
  *
  * Its specification can be found in RFC 2253,
  * "UTF-8 String Representation of Distinguished Names".
@@ -133,7 +133,7 @@ public class DN implements Cloneable, Se
     {
         this.schemaManager = schemaManger;
         upName = "";
-        normName = null;
+        normName = "";
         normalized = true;
     }
 
@@ -163,20 +163,39 @@ public class DN implements Cloneable, Se
             for ( int ii = 0; ii < dn.size(); ii++ )
             {
                 String nameComponent = dn.get( ii );
-                add( nameComponent );
+                
+                if ( nameComponent.length() > 0 )
+                {
+                    RDN newRdn = new RDN( nameComponent, schemaManager );
+                    
+                    rdns.add( 0, newRdn );
+                }
             }
         }
 
+        toUpName();
+        
         if( schemaManager != null )
         {
-            normalized = true;
+            normalize( schemaManager.getNormalizerMapping() );
         }
         else
         {
+            normalizeInternal();
             normalized = false;
         }
     }
 
+
+    /**
+     * @see #DN(String, SchemaManager)
+     */
+    public DN( String upName ) throws LdapInvalidDnException
+    {
+        this( upName, null );
+    }
+
+
     
     /**
      * Parse a String and checks that it is a valid DN <br>
@@ -188,15 +207,9 @@ public class DN implements Cloneable, Se
      * </p>
      *
      * @param upName The String that contains the DN.
+     * @param schemaManager the schema manager (optional)
      * @throws LdapInvalidNameException if the String does not contain a valid DN.
      */
-    public DN( String upName ) throws LdapInvalidDnException
-    {
-        this( upName, null );
-    }
-
-
-    
     public DN( String upName, SchemaManager schemaManager ) throws LdapInvalidDnException
     {
         if ( upName != null )
@@ -208,7 +221,6 @@ public class DN implements Cloneable, Se
         {
             this.schemaManager = schemaManager;
             normalize( schemaManager.getNormalizerMapping() );
-            normalized = true;
         }
         else
         {
@@ -222,6 +234,7 @@ public class DN implements Cloneable, Se
         this.upName = upName;
     }
 
+    
     /**
      * @see #DN(SchemaManager, String...)
      */
@@ -311,7 +324,7 @@ public class DN implements Cloneable, Se
     
 
     /**
-     * Create a DN when deserializing it.
+     * Create a DN while deserializing it.
      * 
      * Note : this constructor is used only by the deserialization method.
      * @param upName The user provided name
@@ -326,8 +339,51 @@ public class DN implements Cloneable, Se
         this.bytes = bytes;
     }
 
+    
+    /**
+     * Creates a DN.
+     * 
+     * Note: This is mostly used internally in the server 
+     * 
+     * @param upName The user provided name
+     * @param normName the normalized name
+     * @param bytes the name as a byte[]
+     * @param rdnList the list of RDNs present in the DN
+     */
+    public DN( String upName, String normName, byte[] bytes, List<RDN> rdnList )
+    {
+        this( upName, normName, bytes );
+        rdns.addAll( rdnList );
+    }
+
 
     /**
+     * 
+     * Creates a DN by based on the given RDN.
+     *
+     * @param rdn the RDN to be used in the DN
+     */
+    public DN( RDN rdn )
+    {
+        rdns.add( rdn );
+        
+        if( rdn.isNormalized() )
+        {
+            this.normName = rdn.getNormName();
+            this.upName = rdn.getName();
+            this.bytes = StringTools.getBytesUtf8( normName );
+            normalized = true;
+        }
+        else
+        {
+            normalizeInternal();
+            toUpName();
+            normalized = false;
+        }
+    }
+
+    
+    /**
      * Static factory which creates a normalized DN from a String and a Map of OIDs.
      *
      * @param name The DN as a String
@@ -1032,59 +1088,40 @@ public class DN implements Cloneable, Se
      *
      * @param posn the index in this name at which to add the new components.
      *            Must be in the range [0,size()]. Note this is from the opposite end as rnds.get(posn)
-     * @param name the components to add
-     * @return the updated name (not a new one)
+     * @param dn the components to add
+     * @return a cloned and updated DN of the original DN, if no changes were applied the original DN will be returned
      * @throws ArrayIndexOutOfBoundsException
      *             if posn is outside the specified range
      * @throws LdapInvalidDnException
      *             if <tt>n</tt> is not a valid name, or if the addition of
      *             the components would violate the syntax rules of this name
      */
-    public DN addAllNormalized( int posn, DN name ) throws LdapInvalidDnException
+    public DN addAllNormalized( int posn, DN dn ) throws LdapInvalidDnException
     {
-        if ( name instanceof DN )
+        if ( ( dn == null ) || ( dn.size() == 0 ) )
         {
-            DN dn = (DN)name;
-            
-            if ( ( dn == null ) || ( dn.size() == 0 ) )
-            {
-                return this;
-            }
-
-            // Concatenate the rdns
-            rdns.addAll( size() - posn, dn.rdns );
-
-            if ( StringTools.isEmpty( normName ) )
-            {
-                normName = dn.normName;
-                bytes = dn.bytes;
-                upName = dn.upName;
-            }
-            else
-            {
-                normName = dn.normName + "," + normName;
-                bytes = StringTools.getBytesUtf8( normName );
-                upName = dn.upName + "," + upName;
-            }
+            return this;
+        }
+        
+        DN clonedDn = ( DN ) clone();
+        
+        // Concatenate the rdns
+        clonedDn.rdns.addAll( clonedDn.size() - posn, dn.rdns );
+        
+        if ( StringTools.isEmpty( normName ) )
+        {
+            clonedDn.normName = dn.normName;
+            clonedDn.bytes = dn.bytes;
+            clonedDn.upName = dn.upName;
         }
         else
         {
-            if ( ( name == null ) || ( name.size() == 0 ) )
-            {
-                return this;
-            }
-
-            for ( int i = name.size() - 1; i >= 0; i-- )
-            {
-                RDN rdn = new RDN( name.get( i ) );
-                rdns.add( size() - posn, rdn );
-            }
-
-            normalizeInternal();
-            toUpName();
+            clonedDn.normName = dn.normName + "," + normName;
+            clonedDn.bytes = StringTools.getBytesUtf8( normName );
+            clonedDn.upName = dn.upName + "," + upName;
         }
 
-        return this;
+        return clonedDn;
     }
 
     /**
@@ -1092,14 +1129,9 @@ public class DN implements Cloneable, Se
      */
     public DN addAll( DN suffix ) throws LdapInvalidDnException
     {
-        addAll( rdns.size(), suffix );
-        //normalizeInternal();
-        //toUpName();
-
-        return this;
+        return addAll( rdns.size(), suffix );
     }
 
-
     /**
      * {@inheritDoc}
      */
@@ -1110,16 +1142,18 @@ public class DN implements Cloneable, Se
             return this;
         }
 
+        DN clonedDn = ( DN ) clone();
+        
         for ( int i = name.size() - 1; i >= 0; i-- )
         {
             RDN rdn = new RDN( name.get( i ) );
-            rdns.add( size() - posn, rdn );
+            clonedDn.rdns.add( clonedDn.size() - posn, rdn );
         }
 
-        normalizeInternal();
-        toUpName();
+        clonedDn.normalizeInternal();
+        clonedDn.toUpName();
 
-        return this;
+        return clonedDn;
     }
 
     
@@ -1133,26 +1167,28 @@ public class DN implements Cloneable, Se
             return this;
         }
 
+        DN clonedDn = ( DN ) clone();
+        
         // Concatenate the rdns
-        rdns.addAll( size() - posn, dn.rdns );
+        clonedDn.rdns.addAll( clonedDn.size() - posn, dn.rdns );
 
         // Regenerate the normalized name and the original string
-        if ( this.isNormalized() && dn.isNormalized() )
+        if ( clonedDn.isNormalized() && dn.isNormalized() )
         {
-            if ( this.size() != 0 )
+            if ( clonedDn.size() != 0 )
             {
-                normName = dn.getNormName() + "," + normName;
-                bytes = StringTools.getBytesUtf8( normName );
-                upName = dn.getName() + "," + upName;
+                clonedDn.normName = dn.getNormName() + "," + normName;
+                clonedDn.bytes = StringTools.getBytesUtf8( normName );
+                clonedDn.upName = dn.getName() + "," + upName;
             }
         }
         else
         {
-            normalizeInternal();
-            toUpName();
+            clonedDn.normalizeInternal();
+            clonedDn.toUpName();
         }
 
-        return this;
+        return clonedDn;
     }
 
 
@@ -1166,24 +1202,16 @@ public class DN implements Cloneable, Se
             return this;
         }
 
-        //FIXME this try-catch block is for the time being, during removal of
-        // java.naming.Name we have to remove this
-        try
-        {
-            // We have to parse the nameComponent which is given as an argument
-            RDN newRdn = new RDN( comp, schemaManager );
-            
-            rdns.add( 0, newRdn );
-        }
-        catch( LdapInvalidDnException le )
-        {
-            throw new LdapInvalidDnException( le.getMessage() );
-        }
+        DN clonedDn = ( DN ) clone();
+        // We have to parse the nameComponent which is given as an argument
+        RDN newRdn = new RDN( comp, schemaManager );
         
-        normalizeInternal();
-        toUpName();
+        clonedDn.rdns.add( 0, newRdn );
+        
+        clonedDn.normalizeInternal();
+        clonedDn.toUpName();
 
-        return this;
+        return clonedDn;
     }
 
 
@@ -1191,16 +1219,18 @@ public class DN implements Cloneable, Se
      * Adds a single RDN to the (leaf) end of this name.
      *
      * @param newRdn the RDN to add
-     * @return the updated name (not a new one)
+     * @return the updated cloned DN
      */
     public DN add( RDN newRdn )
     {
-        rdns.add( 0, newRdn );
+        DN clonedDn = ( DN ) clone();
         
-        normalizeInternal();
-        toUpName();
+        clonedDn.rdns.add( 0, newRdn );
+        
+        clonedDn.normalizeInternal();
+        clonedDn.toUpName();
 
-        return this;
+        return clonedDn;
     }
 
 
@@ -1213,72 +1243,47 @@ public class DN implements Cloneable, Se
      */
     public DN add( int pos, RDN newRdn )
     {
-        rdns.add( newRdn );
+        DN clonedDn = ( DN ) clone();
         
-        normalizeInternal();
-        toUpName();
-
-        return this;
-    }
-
-
-    /**
-     * Adds the RDNs in the left to right order
-     * i.e adding ou=users followed by ou=system forms the DN ou=users,ou=system 
-     * 
-     * @param newRdn the normalized RDN to be added
-     * @return the DN formed after adding the given RDN, this will already be in a normalized form
-     *         cause of adding normalized RDNs
-     */
-    public DN addNormalizedInOrder( RDN newRdn )
-    {
-        rdns.add( newRdn );
-
-        if (rdns.size() == 1 )
-        {
-            normName = newRdn.getNormName();
-            upName = newRdn.getName();
-        }
-        else
-        {
-            normName = normName + "," + newRdn.getNormName();
-            upName = upName + "," + newRdn.getName();
-        }
+        clonedDn.rdns.add( newRdn );
         
-        bytes = StringTools.getBytesUtf8( normName );
+        clonedDn.normalizeInternal();
+        clonedDn.toUpName();
 
-        return this;
+        return clonedDn;
     }
-    
+
     
     /**
      * Adds a single normalized RDN to the (leaf) end of this name.
      *
      * @param newRdn the RDN to add
-     * @return the updated name (not a new one)
+     * @return the cloned and updated DN
      */
     public DN addNormalized( RDN newRdn )
     {
-        rdns.add( 0, newRdn );
+        DN clonedDn = ( DN ) clone();
+        
+        clonedDn.rdns.add( 0, newRdn );
         
         // Avoid a call to the toNormName() method which
         // will iterate through all the rdns, when we only
         // have to build a new normName by using the current
         // RDN normalized name. The very same for upName.
-        if (rdns.size() == 1 )
+        if (clonedDn.rdns.size() == 1 )
         {
-            normName = newRdn.getNormName();
-            upName = newRdn.getName();
+            clonedDn.normName = newRdn.getNormName();
+            clonedDn.upName = newRdn.getName();
         }
         else
         {
-            normName = newRdn.getNormName() + "," + normName;
-            upName = newRdn.getName() + "," + upName;
+            clonedDn.normName = newRdn.getNormName() + "," + normName;
+            clonedDn.upName = newRdn.getName() + "," + upName;
         }
         
-        bytes = StringTools.getBytesUtf8( normName );
+        clonedDn.bytes = StringTools.getBytesUtf8( normName );
 
-        return this;
+        return clonedDn;
     }
 
 
@@ -1294,36 +1299,29 @@ public class DN implements Cloneable, Se
             throw new ArrayIndexOutOfBoundsException( message );
         }
 
-        //FIXME this try-catch block is for the time being, during removal of
-        // java.naming.Name we have to remove this
-        try
-        {
-            // We have to parse the nameComponent which is given as an argument
-            RDN newRdn = new RDN( comp );
-            
-            int realPos = size() - posn;
-            rdns.add( realPos, newRdn );
-        }
-        catch( LdapInvalidDnException le )
-        {
-            throw new LdapInvalidDnException( le.getMessage() );
-        }
+        // We have to parse the nameComponent which is given as an argument
+        RDN newRdn = new RDN( comp );
 
-        normalizeInternal();
-        toUpName();
+        DN clonedDn = ( DN ) clone();
+        
+        int realPos = clonedDn.size() - posn;
+        clonedDn.rdns.add( realPos, newRdn );
 
-        return this;
+        clonedDn.normalizeInternal();
+        clonedDn.toUpName();
+
+        return clonedDn;
     }
 
 
     /**
      * {@inheritDoc}
      */
-    public RDN remove( int posn ) throws LdapInvalidDnException
+    public DN remove( int posn ) throws LdapInvalidDnException
     {
         if ( rdns.size() == 0 )
         {
-            return RDN.EMPTY_RDN;
+            return this;
         }
 
         if ( ( posn < 0 ) || ( posn >= rdns.size() ) )
@@ -1333,16 +1331,28 @@ public class DN implements Cloneable, Se
             throw new ArrayIndexOutOfBoundsException( message );
         }
 
+        DN clonedDn = ( DN ) clone();
+        clonedDn._removeChild( posn );
+
+        return clonedDn;
+    }
+
+    
+    /**
+     * removes a child (RDN) present at the given position
+     *
+     * @param posn the index of the child's position
+     */
+    private void _removeChild( int posn )
+    {
         int realPos = size() - posn - 1;
-        RDN rdn = rdns.remove( realPos );
+        rdns.remove( realPos );
 
         normalizeInternal();
         toUpName();
-
-        return rdn;
     }
-
-
+    
+    
     /**
      * Gets the parent DN of this DN. Null if this DN doesn't have a parent, i.e. because it
      * is the empty DN.
@@ -1363,7 +1373,7 @@ public class DN implements Cloneable, Se
     /**
      * {@inheritDoc}
      */
-    public Object clone()
+    protected Object clone()
     {
         try
         {

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/name/DnSerializer.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/name/DnSerializer.java?rev=980965&r1=980964&r2=980965&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/name/DnSerializer.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/name/DnSerializer.java Fri Jul 30 21:08:04 2010
@@ -22,6 +22,8 @@ package org.apache.directory.shared.ldap
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.apache.directory.shared.i18n.I18n;
 import org.apache.directory.shared.ldap.util.StringTools;
@@ -134,14 +136,13 @@ public class DnSerializer
         // Read the RDNs. Is it's null, the number will be -1.
         int nbRdns = in.readInt();
         
-        DN dn = new DN( upName, normName, bytes );
-        
+        List<RDN> rdnList = new ArrayList<RDN>();
         for ( int i = 0; i < nbRdns; i++ )
         {
             RDN rdn = RdnSerializer.deserialize( in );
-            dn.add( 0, rdn );
+            rdnList.add( rdn );
         }
     
-        return dn;
+        return new DN( upName, normName, bytes, rdnList );
     }
 }

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/util/NamespaceTools.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/util/NamespaceTools.java?rev=980965&r1=980964&r2=980965&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/util/NamespaceTools.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/util/NamespaceTools.java Fri Jul 30 21:08:04 2010
@@ -79,15 +79,13 @@ public class NamespaceTools
      */
     public static DN getRelativeName( DN ancestor, DN descendant ) throws LdapInvalidDnException
     {
-        DN rdn = null;
+        DN rdn = descendant;
         
-        rdn = ( DN ) descendant.clone();
-
         if ( rdn.isChildOf( ancestor ) )
         {
             for ( int ii = 0; ii < ancestor.size(); ii++ )
             {
-                rdn.remove( 0 );
+                rdn = rdn.remove( 0 );
             }
         }
         else

Modified: directory/shared/trunk/ldap/src/test/java/org/apache/directory/shared/ldap/name/DNTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/test/java/org/apache/directory/shared/ldap/name/DNTest.java?rev=980965&r1=980964&r2=980965&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/test/java/org/apache/directory/shared/ldap/name/DNTest.java (original)
+++ directory/shared/trunk/ldap/src/test/java/org/apache/directory/shared/ldap/name/DNTest.java Fri Jul 30 21:08:04 2010
@@ -53,6 +53,7 @@ import org.apache.directory.shared.ldap.
 import org.apache.directory.shared.ldap.schema.normalizers.OidNormalizer;
 import org.apache.directory.shared.ldap.util.StringTools;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -112,6 +113,7 @@ public class DNTest
     {
         DN dn = new DN();
         assertEquals( "", dn.getName() );
+        assertEquals( "", dn.getNormName() );
         assertTrue( dn.isEmpty() );
     }
 
@@ -252,7 +254,7 @@ public class DNTest
         DN target = new DN();
 
         assertTrue( DN.isValid( "cn=Kate Bush+sn=Bush,ou=system" ) );
-        target.addAll( target.size(), dn );
+        target = target.addAll( target.size(), dn );
         assertEquals( "cn=Kate Bush+sn=Bush,ou=system", target.toString() );
         assertEquals( "cn=Kate Bush+sn=Bush,ou=system", target.getName() );
     }
@@ -543,7 +545,8 @@ public class DNTest
         DN dn = new DN( "a=b, c=d, e=f" );
 
         assertTrue( DN.isValid( "a=b, c=d, e=f" ) );
-        assertEquals( "e=f", dn.remove( 0 ).getNormName() );
+        // now remove method reurns a modified cloned DN
+        dn = dn.remove( 0 );
         assertEquals( "a=b,c=d", dn.getNormName() );
         assertEquals( "a=b, c=d", dn.getName() );
     }
@@ -558,8 +561,7 @@ public class DNTest
         DN dn = new DN( "a=b, c=d, e=f" );
 
         assertTrue( DN.isValid( "a=b, c=d, e=f" ) );
-        assertEquals( "c=d", dn.remove( 1 ).getNormName() );
-        assertEquals( "a=b, e=f", dn.getName() );
+        assertEquals( "a=b, c=d, e=f", dn.getName() );
     }
 
 
@@ -572,7 +574,7 @@ public class DNTest
         DN dn = new DN( "a=b, c=d, e=f" );
 
         assertTrue( DN.isValid( "a=b, c=d, e=f" ) );
-        assertEquals( "a=b", dn.remove( 2 ).toString() );
+        dn = dn.remove( 2 );
         assertEquals( " c=d, e=f", dn.getName() );
     }
 
@@ -586,7 +588,7 @@ public class DNTest
         DN dn = new DN( "a=b, c=d; e=f" );
 
         assertTrue( DN.isValid( "a=b, c=d; e=f" ) );
-        assertEquals( "c=d", dn.remove( 1 ).getNormName() );
+        dn = dn.remove( 1 );
         assertEquals( "a=b, e=f", dn.getName() );
     }
 
@@ -676,16 +678,16 @@ public class DNTest
         DN dn = new DN();
         assertEquals( 0, dn.size() );
 
-        dn.add( "e = f" );
+        dn = dn.add( "e = f" );
         assertEquals( 1, dn.size() );
 
-        dn.add( "c = d" );
+        dn = dn.add( "c = d" );
         assertEquals( 2, dn.size() );
 
-        dn.remove( 0 );
+        dn = dn.remove( 0 );
         assertEquals( 1, dn.size() );
 
-        dn.remove( 0 );
+        dn = dn.remove( 0 );
         assertEquals( 0, dn.size() );
     }
 
@@ -699,7 +701,7 @@ public class DNTest
     {
         DN dn = new DN();
 
-        dn.add( "e = f" );
+        dn = dn.add( "e = f" );
         assertEquals( "e=f", dn.getNormName() );
         assertEquals( "e = f", dn.getName() );
         assertEquals( 1, dn.size() );
@@ -714,7 +716,7 @@ public class DNTest
     {
         DN dn = new DN( "a=b, c=d" );
 
-        dn.add( "e = f" );
+        dn = dn.add( "e = f" );
         assertEquals( "e=f,a=b,c=d", dn.getNormName() );
         assertEquals( "e = f,a=b, c=d", dn.getName() );
         assertEquals( 3, dn.size() );
@@ -729,7 +731,7 @@ public class DNTest
     {
         DN dn = new DN( "a=b, c=d" );
 
-        dn.add( "e = f + g = h" );
+        dn = dn.add( "e = f + g = h" );
 
         // Warning ! The order of AVAs has changed during the parsing
         // This has no impact on the correctness of the DN, but the
@@ -747,7 +749,7 @@ public class DNTest
     {
         DN dn = new DN( "a=b, c=d" );
 
-        dn.add( dn.size(), "e = f" );
+        dn = dn.add( dn.size(), "e = f" );
         assertEquals( "e = f,a=b, c=d", dn.getName() );
         assertEquals( 3, dn.size() );
     }
@@ -761,7 +763,7 @@ public class DNTest
     {
         DN dn = new DN( "a=b, c=d" );
 
-        dn.add( 0, "e = f" );
+        dn = dn.add( 0, "e = f" );
         assertEquals( "a=b, c=d,e = f", dn.getName() );
         assertEquals( 3, dn.size() );
     }
@@ -775,7 +777,7 @@ public class DNTest
     {
         DN dn = new DN( "a=b, c=d" );
 
-        dn.add( 1, "e = f" );
+        dn = dn.add( 1, "e = f" );
         assertEquals( "a=b,e = f, c=d", dn.getName() );
         assertEquals( 3, dn.size() );
     }
@@ -792,7 +794,7 @@ public class DNTest
     {
         DN dn = new DN( "a = b" );
         DN dn2 = new DN( "c = d" );
-        dn.addAll( dn2 );
+        dn = dn.addAll( dn2 );
         assertEquals( "c = d,a = b", dn.getName() );
     }
 
@@ -807,7 +809,7 @@ public class DNTest
     {
         DN dn = new DN( "a = b" );
         DN dn2 = new DN();
-        dn.addAll( dn2 );
+        dn = dn.addAll( dn2 );
         assertEquals( "a=b", dn.getNormName() );
         assertEquals( "a = b", dn.getName() );
     }
@@ -823,7 +825,7 @@ public class DNTest
     {
         DN dn = new DN();
         DN dn2 = new DN( "a = b" );
-        dn.addAll( dn2 );
+        dn = dn.addAll( dn2 );
         assertEquals( "a = b", dn.getName() );
     }
 
@@ -838,7 +840,7 @@ public class DNTest
     {
         DN dn = new DN( "a = b" );
         DN dn2 = new DN( "c = d" );
-        dn.addAll( 0, dn2 );
+        dn = dn.addAll( 0, dn2 );
         assertEquals( "a = b,c = d", dn.getName() );
     }
 
@@ -853,7 +855,7 @@ public class DNTest
     {
         DN dn = new DN( "a = b" );
         DN dn2 = new DN( "c = d" );
-        dn.addAll( 1, dn2 );
+        dn = dn.addAll( 1, dn2 );
         assertEquals( "c = d,a = b", dn.getName() );
     }
 
@@ -868,7 +870,7 @@ public class DNTest
     {
         DN dn = new DN( "a = b, c = d" );
         DN dn2 = new DN( "e = f" );
-        dn.addAll( 1, dn2 );
+        dn = dn.addAll( 1, dn2 );
         assertEquals( "a = b,e = f, c = d", dn.getName() );
     }
 
@@ -883,7 +885,7 @@ public class DNTest
     {
         DN dn = new DN( "a = b" );
         DN dn2 = new DN();
-        dn.addAll( 0, dn2 );
+        dn = dn.addAll( 0, dn2 );
         assertEquals( "a=b", dn.getNormName() );
         assertEquals( "a = b", dn.getName() );
     }
@@ -899,7 +901,7 @@ public class DNTest
     {
         DN dn = new DN();
         DN dn2 = new DN( "a = b" );
-        dn.addAll( 0, dn2 );
+        dn = dn.addAll( 0, dn2 );
         assertEquals( "a = b", dn.getName() );
     }
 
@@ -1098,10 +1100,13 @@ public class DNTest
     public void testDnRemoveIsEmpty() throws LdapException
     {
         DN dn = new DN( "a=b, c=d" );
-        dn.remove( 0 );
-        dn.remove( 0 );
+        DN clonedDn = dn.remove( 0 );
+        
+        assertFalse( dn == clonedDn );
+        
+        clonedDn = clonedDn.remove( 0 );
 
-        assertEquals( true, dn.isEmpty() );
+        assertEquals( true, clonedDn.isEmpty() );
     }
 
 
@@ -1467,12 +1472,14 @@ public class DNTest
         DN name = new DN( "cn=John,ou=People,ou=Marketing" );
 
         // Remove the second component from the head: ou=People
-        String out = name.remove( 1 ).toString();
+        name = name.remove( 1 );
+        String out = name.toString();
 
-        assertEquals( "ou=People", out );
+        assertEquals( "cn=John,ou=Marketing", out );
 
         // Add to the head (first): cn=John,ou=Marketing,ou=East
-        out = name.add( 0, "ou=East" ).toString();
+        name = name.add( 0, "ou=East" );
+        out = name.toString();
 
         assertEquals( "cn=John,ou=Marketing,ou=East", out );
 
@@ -2174,7 +2181,8 @@ public class DNTest
         DN name1 = new DN( "cn=HomeDir,cn=John" );
         DN name2 = new DN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
 
-        assertTrue( name0.equals( name.addAll( name0 ) ) );
+        name = name.addAll( name0 );
+        assertTrue( name0.equals( name ) );
         assertTrue( name2.equals( name.addAll( name1 ) ) );
     }
 
@@ -2193,7 +2201,8 @@ public class DNTest
         DN name1 = new DN( "cn=HomeDir,cn=John" );
         DN name2 = new DN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
 
-        assertTrue( name0.equals( name.addAll( name0 ) ) );
+        name = name.addAll( name0 );
+        assertTrue( name0.equals( name ) );
         assertTrue( name2.equals( name.addAll( 2, name1 ) ) );
     }
 
@@ -2212,13 +2221,17 @@ public class DNTest
         DN name1 = new DN( "cn=John" );
         DN name2 = new DN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
 
-        assertTrue( name0.equals( name.addAll( name0 ) ) );
-        assertTrue( name2.equals( name.addAll( 2, name1 ) ) );
+        name = name.addAll( name0 );
+        assertTrue( name0.equals( name ) );
+        
+        name = name.addAll( 2, name1 );
+        assertTrue( name2.equals( name ) );
 
         DN name3 = new DN( "cn=Airport" );
         DN name4 = new DN( "cn=Airport,cn=HomeDir,cn=John,ou=Marketing,ou=East" );
 
-        assertTrue( name4.equals( name.addAll( 4, name3 ) ) );
+        name = name.addAll( 4, name3 );
+        assertTrue( name4.equals( name ) );
 
         DN name5 = new DN( "cn=ABC123" );
         DN name6 = new DN( "cn=Airport,cn=HomeDir,cn=ABC123,cn=John,ou=Marketing,ou=East" );
@@ -2240,19 +2253,19 @@ public class DNTest
         assertEquals( name, new DN( "" ) );
 
         DN name4 = new DN( "ou=East" );
-        name.add( "ou=East" );
+        name = name.add( "ou=East" );
         assertEquals( name4, name );
 
         DN name3 = new DN( "ou=Marketing,ou=East" );
-        name.add( "ou=Marketing" );
+        name = name.add( "ou=Marketing" );
         assertEquals( name3, name );
 
         DN name2 = new DN( "cn=John,ou=Marketing,ou=East" );
-        name.add( "cn=John" );
+        name = name.add( "cn=John" );
         assertEquals( name2, name );
 
         DN name0 = new DN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
-        name.add( "cn=HomeDir" );
+        name = name.add( "cn=HomeDir" );
         assertEquals( name0, name );
     }
 
@@ -2270,31 +2283,31 @@ public class DNTest
         assertEquals( name, new DN( "" ) );
 
         DN name4 = new DN( "ou=East" );
-        name.add( "ou=East" );
+        name = name.add( "ou=East" );
         assertEquals( name4, name );
 
         DN name3 = new DN( "ou=Marketing,ou=East" );
-        name.add( 1, "ou=Marketing" );
+        name = name.add( 1, "ou=Marketing" );
         assertEquals( name3, name );
 
         DN name2 = new DN( "cn=John,ou=Marketing,ou=East" );
-        name.add( 2, "cn=John" );
+        name = name.add( 2, "cn=John" );
         assertEquals( name2, name );
 
         DN name0 = new DN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
-        name.add( 3, "cn=HomeDir" );
+        name = name.add( 3, "cn=HomeDir" );
         assertEquals( name0, name );
 
         DN name5 = new DN( "cn=HomeDir,cn=John,ou=Marketing,ou=East,o=LL " + "Bean Inc." );
-        name.add( 0, "o=LL Bean Inc." );
+        name = name.add( 0, "o=LL Bean Inc." );
         assertEquals( name5, name );
 
         DN name6 = new DN( "cn=HomeDir,cn=John,ou=Marketing,ou=East,c=US,o=LL " + "Bean Inc." );
-        name.add( 1, "c=US" );
+        name = name.add( 1, "c=US" );
         assertEquals( name6, name );
 
         DN name7 = new DN( "cn=HomeDir,cn=John,ou=Advertising,ou=Marketing," + "ou=East,c=US,o=LL " + "Bean Inc." );
-        name.add( 4, "ou=Advertising" );
+        name = name.add( 4, "ou=Advertising" );
         assertEquals( name7, name );
     }
 
@@ -2312,27 +2325,27 @@ public class DNTest
         assertEquals( new DN( "" ), name );
 
         DN name3 = new DN( "ou=Marketing" );
-        name.add( "ou=East" );
-        name.add( 1, "ou=Marketing" );
-        name.remove( 0 );
+        name = name.add( "ou=East" );
+        name = name.add( 1, "ou=Marketing" );
+        name = name.remove( 0 );
         assertEquals( name3, name );
 
         DN name2 = new DN( "cn=HomeDir,ou=Marketing,ou=East" );
-        name.add( 0, "ou=East" );
-        name.add( 2, "cn=John" );
-        name.add( "cn=HomeDir" );
-        name.remove( 2 );
+        name = name.add( 0, "ou=East" );
+        name = name.add( 2, "cn=John" );
+        name = name.add( "cn=HomeDir" );
+        name = name.remove( 2 );
         assertEquals( name2, name );
 
-        name.remove( 1 );
+        name = name.remove( 1 );
         DN name1 = new DN( "cn=HomeDir,ou=East" );
         assertEquals( name1, name );
 
-        name.remove( 1 );
+        name = name.remove( 1 );
         DN name0 = new DN( "ou=East" );
         assertEquals( name0, name );
 
-        name.remove( 0 );
+        name = name.remove( 0 );
         assertEquals( new DN( "" ), name );
     }
 
@@ -2349,16 +2362,16 @@ public class DNTest
         DN name = new DN();
         assertEquals( "", name.toString() );
 
-        name.add( "ou=East" );
+        name = name.add( "ou=East" );
         assertEquals( "ou=East", name.toString() );
 
-        name.add( 1, "ou=Marketing" );
+        name = name.add( 1, "ou=Marketing" );
         assertEquals( "ou=Marketing,ou=East", name.toString() );
 
-        name.add( "cn=John" );
+        name = name.add( "cn=John" );
         assertEquals( "cn=John,ou=Marketing,ou=East", name.toString() );
 
-        name.add( "cn=HomeDir" );
+        name = name.add( "cn=HomeDir" );
         assertEquals( "cn=HomeDir,cn=John,ou=Marketing,ou=East", name.toString() );
     }
 
@@ -2628,6 +2641,7 @@ public class DNTest
      * Test for DIRSERVER-191
      */
     @Test
+    @Ignore( "from now onwards DN is not mutable" )
     public void testAddStringName() throws LdapException, InvalidNameException
     {
         LdapName jName = new LdapName( "cn=four,cn=three,cn=two,cn=one" );
@@ -2643,6 +2657,7 @@ public class DNTest
      * Test for DIRSERVER-191
      */
     @Test
+    @Ignore( "from now onwards DN is not mutable" )
     public void testAddIntString() throws LdapException, InvalidNameException
     {
         LdapName jName = new LdapName( "cn=four,cn=three,cn=two,cn=one" );
@@ -2666,6 +2681,7 @@ public class DNTest
      * Test for DIRSERVER-191
      */
     @Test
+    @Ignore( "from now onwards DN is not mutable" )
     public void testAddAllName() throws LdapException, InvalidNameException
     {
         LdapName jName = new LdapName( "cn=four,cn=three,cn=two,cn=one" );
@@ -2681,6 +2697,7 @@ public class DNTest
      * Test for DIRSERVER-191
      */
     @Test
+    @Ignore( "from now onwards DN is not mutable" )
     public void testAddAllIntName() throws LdapException, InvalidNameException
     {
         LdapName jName = new LdapName( "cn=four,cn=three,cn=two,cn=one" );
@@ -2754,6 +2771,7 @@ public class DNTest
      * Test for DIRSERVER-191
      */
     @Test
+    @Ignore( "from now onwards DN is not mutable" )
     public void testRemoveName() throws LdapException, InvalidNameException
     {
         LdapName jName = new LdapName( "cn=four,cn=three,cn=two,cn=one" );
@@ -3006,13 +3024,13 @@ public class DNTest
 
         CompoundName name = new CompoundName( "cn=blah,dc=example,dc=com", props );
         DN dn = new DN();
-        dn.addAll( 0, name );
+        dn = dn.addAll( 0, name );
 
         assertEquals( "cn=blah,dc=example,dc=com", dn.toString() );
 
         name = new CompoundName( "cn=blah,dc=example,dc=com", props );
         dn = new DN( "cn=xyz" );
-        dn.addAll( 0, name );
+        dn = dn.addAll( 0, name );
 
         assertEquals( "cn=xyz,cn=blah,dc=example,dc=com", dn.toString() );
     }