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 2009/10/17 06:19:23 UTC

svn commit: r826175 - in /directory/shared/branches/shared-schema/ldap/src: main/java/org/apache/directory/shared/ldap/schema/registries/ test/java/org/apache/directory/shared/ldap/schema/registries/

Author: elecharny
Date: Sat Oct 17 04:19:20 2009
New Revision: 826175

URL: http://svn.apache.org/viewvc?rev=826175&view=rev
Log:
Added some more clone methods

Added:
    directory/shared/branches/shared-schema/ldap/src/test/java/org/apache/directory/shared/ldap/schema/registries/
    directory/shared/branches/shared-schema/ldap/src/test/java/org/apache/directory/shared/ldap/schema/registries/AttributeTypeRegistryTest.java
    directory/shared/branches/shared-schema/ldap/src/test/java/org/apache/directory/shared/ldap/schema/registries/OidRegistryTest.java
Modified:
    directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/AttributeTypeRegistry.java
    directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/OidRegistry.java
    directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/SchemaObjectRegistry.java

Modified: directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/AttributeTypeRegistry.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/AttributeTypeRegistry.java?rev=826175&r1=826174&r2=826175&view=diff
==============================================================================
--- directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/AttributeTypeRegistry.java (original)
+++ directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/AttributeTypeRegistry.java Sat Oct 17 04:19:20 2009
@@ -21,11 +21,11 @@
 
 
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
 
 import javax.naming.NamingException;
 import javax.naming.directory.NoSuchAttributeException;
@@ -46,7 +46,7 @@
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  * @version $Rev$
  */
-public class AttributeTypeRegistry extends SchemaObjectRegistry<AttributeType>
+public class AttributeTypeRegistry extends SchemaObjectRegistry<AttributeType> implements Cloneable
 {
     /** static class logger */
     private static final Logger LOG = LoggerFactory.getLogger( AttributeTypeRegistry.class );
@@ -58,7 +58,7 @@
     private transient Map<String, OidNormalizer> oidNormalizerMap;
     
     /** maps OIDs to a Set of descendants for that OID */
-    private final Map<String,Set<AttributeType>> oidToDescendantSet;
+    private Map<String,Set<AttributeType>> oidToDescendantSet;
 
     
     /**
@@ -67,8 +67,8 @@
     public AttributeTypeRegistry( OidRegistry oidRegistry )
     {
         super( SchemaObjectType.ATTRIBUTE_TYPE, oidRegistry );
-        oidNormalizerMap = new ConcurrentHashMap<String, OidNormalizer>();
-        oidToDescendantSet= new ConcurrentHashMap<String,Set<AttributeType>>();
+        oidNormalizerMap = new HashMap<String, OidNormalizer>();
+        oidToDescendantSet = new HashMap<String,Set<AttributeType>>();
     }
     
     
@@ -344,8 +344,28 @@
         }
     }
     
+    /**
+     * @see Object#toString()
+     */
     public String toString()
     {
         return byName.toString();
     }
+    
+    
+    /**
+     * Clone the AttributeTypeRegistry
+     */
+    public AttributeTypeRegistry clone() throws CloneNotSupportedException
+    {
+        AttributeTypeRegistry clone = (AttributeTypeRegistry)super.clone();
+        
+        // Clone the oidNormalizerMap (will be empty)
+        clone.oidNormalizerMap = new HashMap<String, OidNormalizer>();
+        
+        // Clone the oidToDescendant map (will be empty)
+        clone.oidToDescendantSet = new HashMap<String,Set<AttributeType>>();
+
+        return clone;
+    }
 }

Modified: directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/OidRegistry.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/OidRegistry.java?rev=826175&r1=826174&r2=826175&view=diff
==============================================================================
--- directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/OidRegistry.java (original)
+++ directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/OidRegistry.java Sat Oct 17 04:19:20 2009
@@ -21,6 +21,7 @@
 
 
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -42,7 +43,7 @@
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  * @version $Rev$
  */
-public class OidRegistry
+public class OidRegistry implements Cloneable
 {
     /** static class logger */
     private static final Logger LOG = LoggerFactory.getLogger( OidRegistry.class );
@@ -233,4 +234,27 @@
             LOG.debug( "Unregisted SchemaObject '{}' with OID: {}", removed, oid );
         }
     }
+    
+    
+    /**
+     * Clone the OidRegistry, and all the contained values
+     * 
+     * @return A new OidRegistry instance
+     */
+    public OidRegistry clone() throws CloneNotSupportedException
+    {
+        OidRegistry clone = (OidRegistry)super.clone();
+        
+        clone.byOid = new HashMap<String,SchemaObject>();
+        
+        // Clone the byOid Map
+        for ( String key : byOid.keySet() )
+        {
+            // Clone each SchemaObject
+            SchemaObject value = byOid.get( key );
+            clone.byOid.put( key, value.clone() );
+        }
+        
+        return clone;
+    }
 }

Modified: directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/SchemaObjectRegistry.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/SchemaObjectRegistry.java?rev=826175&r1=826174&r2=826175&view=diff
==============================================================================
--- directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/SchemaObjectRegistry.java (original)
+++ directory/shared/branches/shared-schema/ldap/src/main/java/org/apache/directory/shared/ldap/schema/registries/SchemaObjectRegistry.java Sat Oct 17 04:19:20 2009
@@ -20,9 +20,9 @@
 package org.apache.directory.shared.ldap.schema.registries;
 
 
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 import javax.naming.NamingException;
 
@@ -40,7 +40,7 @@
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  * @version $Rev$, $Date$
  */
-public class SchemaObjectRegistry<T extends SchemaObject> implements Iterable<T>
+public class SchemaObjectRegistry<T extends SchemaObject> implements Iterable<T>, Cloneable
 {
     /** static class logger */
     private static final Logger LOG = LoggerFactory.getLogger( SchemaObjectRegistry.class );
@@ -49,13 +49,13 @@
     private static final boolean DEBUG = LOG.isDebugEnabled();
     
     /** a map of SchemaObject looked up by name */
-    protected final Map<String, T> byName;
+    protected Map<String, T> byName;
     
     /** The SchemaObject type */
     protected SchemaObjectType type;
 
     /** the global OID Registry */
-    protected final OidRegistry oidRegistry;
+    protected OidRegistry oidRegistry;
     
 
     /**
@@ -63,7 +63,7 @@
      */
     protected SchemaObjectRegistry( SchemaObjectType schemaObjectType, OidRegistry oidRegistry )
     {
-        byName = new ConcurrentHashMap<String, T>();
+        byName = new HashMap<String, T>();
         type = schemaObjectType;
         this.oidRegistry = oidRegistry;
     }
@@ -365,4 +365,29 @@
 
         return true;
     }
+    
+
+    /**
+     * Clone a SchemaObjectRegistry
+     */
+    protected SchemaObjectRegistry<T> clone() throws CloneNotSupportedException
+    {
+        // Clone the base object
+        SchemaObjectRegistry<T> clone = (SchemaObjectRegistry<T>)super.clone();
+        
+        // Clone the byName Map
+        clone.byName = new HashMap<String, T>();
+        
+        for ( String key : byName.keySet() )
+        {
+            // Clone each SchemaObject
+            SchemaObject value = byName.get( key );
+            clone.byName.put( key, (T)value.clone() );
+        }
+        
+        // Clone the oidRegistry
+        clone.oidRegistry = oidRegistry.clone();
+        
+        return clone;
+    }
 }

Added: directory/shared/branches/shared-schema/ldap/src/test/java/org/apache/directory/shared/ldap/schema/registries/AttributeTypeRegistryTest.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-schema/ldap/src/test/java/org/apache/directory/shared/ldap/schema/registries/AttributeTypeRegistryTest.java?rev=826175&view=auto
==============================================================================
--- directory/shared/branches/shared-schema/ldap/src/test/java/org/apache/directory/shared/ldap/schema/registries/AttributeTypeRegistryTest.java (added)
+++ directory/shared/branches/shared-schema/ldap/src/test/java/org/apache/directory/shared/ldap/schema/registries/AttributeTypeRegistryTest.java Sat Oct 17 04:19:20 2009
@@ -0,0 +1,71 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.directory.shared.ldap.schema.registries;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.directory.shared.ldap.schema.AttributeType;
+import org.junit.Test;
+
+/**
+ * Test the AttributeTypeRegistry class
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class AttributeTypeRegistryTest
+{
+    @Test
+    public void testClone() throws Exception
+    {
+        OidRegistry oidRegistry = new OidRegistry();
+        AttributeTypeRegistry atRegistry = new AttributeTypeRegistry( oidRegistry );
+        AttributeType at0 = new AttributeType( "1.1" );
+        at0.addName( "t", "test", "Test", "T" );
+        
+        atRegistry.register( at0 );
+        
+        AttributeType at1 = new AttributeType( "1.2" );
+        at1.addName( "u", "unit", "Unit", "U" );
+
+        atRegistry.register( at1 );
+        
+        // Clone the ATRegistry
+        AttributeTypeRegistry clone = atRegistry.clone();
+        
+        assertEquals( at0, clone.lookup( "1.1" ) );
+        assertEquals( at1, clone.lookup( "1.2" ) );
+        
+        atRegistry.unregister( "1.1" );
+        assertFalse( atRegistry.contains( "1.1" ) );
+        assertTrue( clone.contains( "1.1" ) );
+        
+        AttributeType at = atRegistry.lookup( "1.2" );
+        at.setOid( "2.2" );
+        
+        at = atRegistry.lookup( "1.2" );
+        assertEquals( "2.2", at.getOid() );
+
+        at = clone.lookup( "1.2" );
+        assertEquals( "1.2", at.getOid() );
+    }
+}

Added: directory/shared/branches/shared-schema/ldap/src/test/java/org/apache/directory/shared/ldap/schema/registries/OidRegistryTest.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/shared-schema/ldap/src/test/java/org/apache/directory/shared/ldap/schema/registries/OidRegistryTest.java?rev=826175&view=auto
==============================================================================
--- directory/shared/branches/shared-schema/ldap/src/test/java/org/apache/directory/shared/ldap/schema/registries/OidRegistryTest.java (added)
+++ directory/shared/branches/shared-schema/ldap/src/test/java/org/apache/directory/shared/ldap/schema/registries/OidRegistryTest.java Sat Oct 17 04:19:20 2009
@@ -0,0 +1,77 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.directory.shared.ldap.schema.registries;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.directory.shared.ldap.schema.AttributeType;
+import org.junit.Test;
+
+
+/**
+ * Test the OidRegistry class
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class OidRegistryTest
+{
+
+    @Test
+    public void testClone() throws Exception
+    {
+        OidRegistry oidRegistry = new OidRegistry();
+        AttributeType at0 = new AttributeType( "1.1" );
+        at0.addName( "t", "test", "Test", "T" );
+
+        oidRegistry.register( at0 );
+
+        AttributeType at1 = new AttributeType( "1.2" );
+        at1.addName( "u", "unit", "Unit", "U" );
+
+        oidRegistry.register( at1 );
+        
+        // Clone the oidRegistry
+        OidRegistry clone = oidRegistry.clone();
+        
+        assertTrue( clone.hasOid( "1.1" ) );
+        assertTrue( clone.hasOid( "1.2" ) );
+        
+        at0.setOid( "2.1" );
+        assertFalse( oidRegistry.hasOid( "2.1" ) );
+        assertFalse( clone.hasOid( "2.1" ) );
+        
+        AttributeType at = (AttributeType)oidRegistry.getSchemaObject( "1.1" );
+        assertEquals( "2.1", at.getOid() );
+        
+        at = (AttributeType)clone.getSchemaObject( "1.1" );
+        assertEquals( "1.1", at.getOid() );
+
+        oidRegistry.unregister( "2.1" );
+        oidRegistry.unregister( "1.1" );
+        assertFalse( oidRegistry.hasOid( "1.1" ) );
+        assertTrue( oidRegistry.hasOid( "1.2" ) );
+        assertFalse( oidRegistry.hasOid( "2.1" ) );
+        assertTrue( clone.hasOid( "1.1" ) );
+        assertTrue( clone.hasOid( "1.2" ) );
+    }
+}