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/26 18:20:47 UTC

svn commit: r778788 - /directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultMatchingRuleRegistry.java

Author: elecharny
Date: Tue May 26 16:20:47 2009
New Revision: 778788

URL: http://svn.apache.org/viewvc?rev=778788&view=rev
Log:
o Cleanup of the MatchingRule registry

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

Modified: directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultMatchingRuleRegistry.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultMatchingRuleRegistry.java?rev=778788&r1=778787&r2=778788&view=diff
==============================================================================
--- directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultMatchingRuleRegistry.java (original)
+++ directory/apacheds/trunk/schema-registries/src/main/java/org/apache/directory/server/schema/registries/DefaultMatchingRuleRegistry.java Tue May 26 16:20:47 2009
@@ -20,12 +20,13 @@
 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;
 
+import org.apache.directory.shared.asn1.primitives.OID;
 import org.apache.directory.shared.ldap.schema.MatchingRule;
 
 import org.slf4j.Logger;
@@ -42,8 +43,10 @@
 {
     /** static class logger */
     private static final Logger LOG = LoggerFactory.getLogger( DefaultMatchingRuleRegistry.class );
+
     /** a map using an OID for the key and a MatchingRule for the value */
-    private final Map<String,MatchingRule> byOid;
+    private final Map<String,MatchingRule> byOidMatchingRule;
+    
     /** the registry used to resolve names to OIDs */
     private final OidRegistry oidRegistry;
 
@@ -51,8 +54,6 @@
     // ------------------------------------------------------------------------
     // C O N S T R U C T O R S
     // ------------------------------------------------------------------------
-
-    
     /**
      * Creates a DefaultMatchingRuleRegistry using existing MatchingRulees
      * for lookups.
@@ -63,109 +64,133 @@
     public DefaultMatchingRuleRegistry( OidRegistry oidRegistry )
     {
         this.oidRegistry = oidRegistry;
-        this.byOid = new HashMap<String,MatchingRule>();
+        byOidMatchingRule = new ConcurrentHashMap<String,MatchingRule>();
     }
 
 
     // ------------------------------------------------------------------------
     // MatchingRuleRegistry interface methods
     // ------------------------------------------------------------------------
-
     /**
-     * @see org.apache.directory.server.schema.registries.MatchingRuleRegistry#lookup(String)
+     * {@inheritDoc}
      */
     public MatchingRule lookup( String id ) throws NamingException
     {
-        id = oidRegistry.getOid( id );
+        String oid = oidRegistry.getOid( id );
 
-        if ( byOid.containsKey( id ) )
+        MatchingRule matchingRule = byOidMatchingRule.get( oid );
+        
+        if ( matchingRule != null )
         {
-            MatchingRule matchingRule = byOid.get( id );
             if ( LOG.isDebugEnabled() )
             {
-                LOG.debug( "lookup with id '"+id+"' of matchingRule: " + matchingRule );
+                LOG.debug( "lookup with id '{}' of matchingRule: {}", oid, matchingRule );
             }
+
             return matchingRule;
         }
 
-        throw new NamingException( "Unknown MatchingRule OID " + id );
+        String msg = "Unknown MatchingRule OID " + oid;
+        LOG.error( msg );
+        throw new NamingException( msg );
     }
 
 
     /**
-     * @see MatchingRuleRegistry#register(MatchingRule)
+     * {@inheritDoc}
      */
     public void register( MatchingRule matchingRule ) throws NamingException
     {
-        if ( byOid.containsKey( matchingRule.getOid() ) )
+        String oid = matchingRule.getOid();
+        
+        if ( byOidMatchingRule.containsKey( oid ) )
         {
-            throw new NamingException( "matchingRule w/ OID " + matchingRule.getOid()
-                + " has already been registered!" );
+            String msg = "matchingRule w/ OID " + oid
+                + " has already been registered!";
+            LOG.warn( msg );
+            throw new NamingException( msg );
         }
 
         String[] names = matchingRule.getNamesRef();
         
         for ( String name : names )
         {
-            oidRegistry.register( name, matchingRule.getOid() );
+            oidRegistry.register( name, oid );
         }
-        oidRegistry.register( matchingRule.getOid(), matchingRule.getOid() );
-
-        byOid.put( matchingRule.getOid(), matchingRule );
+        
+        oidRegistry.register( oid, oid );
+        byOidMatchingRule.put( oid, matchingRule );
+        
         if ( LOG.isDebugEnabled() )
         {
-            LOG.debug( "registed matchingRule: " + matchingRule);
+            LOG.debug( "registed matchingRule: {}", matchingRule);
         }
     }
 
 
     /**
-     * @see org.apache.directory.server.schema.registries.MatchingRuleRegistry#hasMatchingRule(String)
+     * {@inheritDoc}
      */
     public boolean hasMatchingRule( String id )
     {
-        if ( oidRegistry.hasOid( id ) )
+        try
         {
-            try
+            String oid = oidRegistry.getOid( id );
+            
+            if ( oid != null )
             {
-                return byOid.containsKey( oidRegistry.getOid( id ) );
-            }
-            catch ( NamingException e )
-            {
-                return false;
+                return byOidMatchingRule.containsKey( oid );
             }
+            
+            return false;
+        }
+        catch ( NamingException e )
+        {
+            return false;
         }
-
-        return false;
     }
 
 
+    /**
+     * {@inheritDoc}
+     */
     public String getSchemaName( String id ) throws NamingException
     {
-        id = oidRegistry.getOid( id );
-        MatchingRule mr = byOid.get( id );
+        String oid = oidRegistry.getOid( id );
+        MatchingRule mr = byOidMatchingRule.get( oid );
+       
         if ( mr != null )
         {
             return mr.getSchema();
         }
 
-        throw new NamingException( "OID " + id + " not found in oid to " + "MatchingRule name map!" );
+        String msg = "OID " + oid + " not found in oid to " + "MatchingRule name map!";
+        LOG.warn( msg );
+        throw new NamingException( msg );
     }
 
 
+    /**
+     * {@inheritDoc}
+     */
     public Iterator<MatchingRule> iterator()
     {
-        return byOid.values().iterator();
+        return byOidMatchingRule.values().iterator();
     }
     
     
+    /**
+     * {@inheritDoc}
+     */
     public void unregister( String numericOid ) throws NamingException
     {
-        if ( ! Character.isDigit( numericOid.charAt( 0 ) ) )
+        if ( !OID.isOID( numericOid ) )
         {
-            throw new NamingException( "Looks like the arg is not a numeric OID" );
+            String msg = "OID " + numericOid + " is not a numeric OID";
+            LOG.error( msg );
+            throw new NamingException( msg );
         }
 
-        byOid.remove( numericOid );
+        byOidMatchingRule.remove( numericOid );
     }
 }