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/05/21 18:36:13 UTC

svn commit: r777169 - in /directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries: DefaultAttributeTypeRegistry.java DefaultObjectClassRegistry.java DefaultRegistries.java

Author: elecharny
Date: Thu May 21 16:36:13 2009
New Revision: 777169

URL: http://svn.apache.org/viewvc?rev=777169&view=rev
Log:
Reviewed the ObjectClassRegistry classes.
o Added some Javadoc
o Switched to ConncurrentHashMap
o The OC oid is now injected in the byOid internal structure
o Added some logs
o Added some checks

Modified:
    directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultAttributeTypeRegistry.java
    directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultObjectClassRegistry.java
    directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultRegistries.java

Modified: directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultAttributeTypeRegistry.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultAttributeTypeRegistry.java?rev=777169&r1=777168&r2=777169&view=diff
==============================================================================
--- directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultAttributeTypeRegistry.java (original)
+++ directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultAttributeTypeRegistry.java Thu May 21 16:36:13 2009
@@ -103,13 +103,15 @@
         // First, register the AttributeType names and oid in the global
         // OidRegistry
         String[] names = attributeType.getNamesRef();
+        String oid = attributeType.getOid();
         
         for ( String name : names )
         {
-            oidRegistry.register( name, attributeType.getOid() );
+            oidRegistry.register( name, oid );
         }
         
-        oidRegistry.register( attributeType.getOid(), attributeType.getOid() );
+        // Also register the oid/oid relation
+        oidRegistry.register( oid, oid );
 
         // Inject the attributeType into the oid/normalizer map
         addMappingFor( attributeType );

Modified: directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultObjectClassRegistry.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultObjectClassRegistry.java?rev=777169&r1=777168&r2=777169&view=diff
==============================================================================
--- directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultObjectClassRegistry.java (original)
+++ directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultObjectClassRegistry.java Thu May 21 16:36:13 2009
@@ -20,9 +20,9 @@
 package org.apache.directory.server.schema.registries;
 
 
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 import javax.naming.NamingException;
 
@@ -47,7 +47,8 @@
     private static final boolean IS_DEBUG = LOG.isDebugEnabled();
     
     /** maps an OID to an ObjectClass */
-    private final Map<String,ObjectClass> byOid;
+    private final Map<String,ObjectClass> byOidOC;
+    
     /** the registry used to resolve names to OIDs */
     private final OidRegistry oidRegistry;
 
@@ -64,7 +65,7 @@
      */
     public DefaultObjectClassRegistry( OidRegistry oidRegistry )
     {
-        this.byOid = new HashMap<String,ObjectClass>();
+        byOidOC = new ConcurrentHashMap<String,ObjectClass>();
         this.oidRegistry = oidRegistry;
     }
 
@@ -72,102 +73,154 @@
     // ------------------------------------------------------------------------
     // Service Methods
     // ------------------------------------------------------------------------
-
-    
+    /**
+     * {@inheritDoc}
+     */
     public void register( ObjectClass objectClass ) throws NamingException
     {
-        if ( byOid.containsKey( objectClass.getOid() ) )
-        {
-            throw new NamingException( "objectClass w/ OID " + objectClass.getOid()
-                + " has already been registered!" );
+    	String oid = objectClass.getOid();
+    	
+        if ( byOidOC.containsKey( oid ) )
+        {
+        	String msg = "objectClass " + objectClass.getName() + " w/ OID " + oid
+            	+ " has already been registered!";
+        	LOG.warn( msg );
+            throw new NamingException( msg );
         }
 
-        if ( objectClass.getNamesRef() != null && objectClass.getNamesRef().length > 0 )
-        {
-            oidRegistry.register( objectClass.getName(), objectClass.getOid() );
-        }
-        else
+        // Register the name/oid relation
+        String name = objectClass.getName();
+        
+        if ( !StringTools.isEmpty( name ) )
         {
-            oidRegistry.register( objectClass.getOid(), objectClass.getOid() );
+            oidRegistry.register( name, oid );
         }
         
-        byOid.put( objectClass.getOid(), objectClass );
+        // Also register the oid/oid relation
+        oidRegistry.register( oid, oid );
+        
+        // Stores the OC in the internal map
+        byOidOC.put( oid, objectClass );
         
         if ( IS_DEBUG )
         {
-            LOG.debug( "registered objectClass: " + objectClass );
+            LOG.debug( "registered objectClass: {}", objectClass );
         }
     }
 
 
+    /**
+     * {@inheritDoc}
+     */
     public ObjectClass lookup( String id ) throws NamingException
     {
-        if ( StringTools.isEmpty( id ) )
-        {
-            throw new NamingException( "name should not be empty" );
+    	String ocId = StringTools.trim( id ).toLowerCase();
+    	
+        if ( StringTools.isEmpty( ocId ) )
+        {
+        	String msg = "Lookup in the OC registry : name should not be empty";
+        	LOG.error( msg );
+            throw new NamingException( msg );
         }
         
-        String oid = oidRegistry.getOid( id.toLowerCase() );
+        String oid = oidRegistry.getOid( ocId );
+
+        ObjectClass objectClass = byOidOC.get( oid );
 
-        if ( !byOid.containsKey( oid ) )
+        if ( objectClass == null )
         {
-            throw new NamingException( "objectClass w/ OID " + oid + " not registered!" );
+        	String msg = "objectClass " + id + " w/ OID " + oid + " not registered!";
+        	LOG.warn( msg );
+            throw new NamingException( msg );
         }
-
-        ObjectClass objectClass = byOid.get( oid );
         
         if ( IS_DEBUG )
         {
-            LOG.debug( "looked objectClass with OID '" + oid + "' and got back " + objectClass );
+            LOG.debug( "looked objectClass with OID '{}' and got back {}", oid, objectClass );
         }
+        
         return objectClass;
     }
 
 
+    /**
+     * {@inheritDoc}
+     */
     public boolean hasObjectClass( String id )
     {
-        if ( oidRegistry.hasOid( id ) )
+        try
         {
-            try
-            {
-                return byOid.containsKey( oidRegistry.getOid( id ) );
-            }
-            catch ( NamingException e )
-            {
-                return false;
-            }
+        	String oid = oidRegistry.getOid( id );
+        	
+        	if ( oid == null )
+        	{
+        		return false;
+        	}
+        	
+            return byOidOC.containsKey( oid );
+        }
+        catch ( NamingException e )
+        {
+            return false;
         }
-
-        return false;
     }
 
 
+    /**
+     * {@inheritDoc}
+     */
     public String getSchemaName( String id ) throws NamingException
     {
-        id = oidRegistry.getOid( id );
-        ObjectClass oc = byOid.get( id );
+        String ocOid = oidRegistry.getOid( id );
+        
+        if ( ocOid == null )
+        {
+        	String msg = "Element " + id + " not found in the OID registry !";
+        	LOG.warn( msg );
+            throw new NamingException( msg );
+        }
+
+        ObjectClass oc = byOidOC.get( ocOid );
+        
         if ( oc != null )
         {
             return oc.getSchema();
         }
 
-        throw new NamingException( "OID " + id + " not found in oid to " + "ObjectClass map!" );
+        String msg = "OID " + id + " not found in oid to " + "ObjectClass map!";
+        LOG.warn( msg );
+        throw new NamingException( msg );
     }
 
 
+    /**
+     * {@inheritDoc}
+     */
     public Iterator<ObjectClass> iterator()
     {
-        return byOid.values().iterator();
+        return byOidOC.values().iterator();
     }
     
     
+    /**
+     * {@inheritDoc}
+     */
     public void unregister( String numericOid ) throws NamingException
     {
+    	if ( StringTools.isEmpty( numericOid ) )
+    	{
+    		String msg = "Can't unregister an empty element";
+    		LOG.warn( msg );
+    		throw new NamingException( msg );
+    	}
+    	
         if ( ! Character.isDigit( numericOid.charAt( 0 ) ) )
         {
-            throw new NamingException( "Looks like the arg is not a numeric OID" );
+        	String msg = "Looks like the arg is not a numeric OID";
+        	LOG.warn( msg );
+            throw new NamingException( msg );
         }
 
-        byOid.remove( numericOid );
+        byOidOC.remove( numericOid );
     }
 }

Modified: directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultRegistries.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultRegistries.java?rev=777169&r1=777168&r2=777169&view=diff
==============================================================================
--- directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultRegistries.java (original)
+++ directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultRegistries.java Thu May 21 16:36:13 2009
@@ -43,7 +43,12 @@
  */
 public class DefaultRegistries implements Registries
 {
-    private DefaultAttributeTypeRegistry attributeTypeRegistry;
+	/** The AttributeType registry */
+    private AttributeTypeRegistry attributeTypeRegistry;
+    
+    /** The ObjectClass registry */
+    private DefaultObjectClassRegistry objectClassRegistry;
+
     private DefaultComparatorRegistry comparatorRegistry;
     private DefaultDitContentRuleRegistry ditContentRuleRegistry;
     private DefaultDitStructureRuleRegistry ditStructureRuleRegistry;
@@ -51,7 +56,6 @@
     private DefaultMatchingRuleUseRegistry matchingRuleUseRegistry;
     private DefaultNameFormRegistry nameFormRegistry;
     private DefaultNormalizerRegistry normalizerRegistry;
-    private DefaultObjectClassRegistry objectClassRegistry;
     private OidRegistry oidRegistry;
     private DefaultSyntaxCheckerRegistry syntaxCheckerRegistry;
     private DefaultSyntaxRegistry syntaxRegistry;
@@ -64,12 +68,14 @@
     {
         this.name = name;
         this.schemaLoader = schemaLoader;
+        
         this.schemaLoader.setListener( new SchemaLoaderListener() {
             public void schemaLoaded( Schema schema )
             {
                 loadedByName.put( schema.getSchemaName(), schema );
             }
         });
+        
         oidRegistry = registry;
         normalizerRegistry = new DefaultNormalizerRegistry();
         comparatorRegistry = new DefaultComparatorRegistry();