You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2003/12/16 02:36:33 UTC

svn commit: rev 1428 - in incubator/directory/ldap/trunk/eve/backend/schema: api common/api common/api/src oid oid/api oid/api/src oid/api/src/java oid/api/src/java/org oid/api/src/java/org/apache oid/api/src/java/org/apache/eve oid/api/src/java/org/apache/eve/schema oid/impl oid/impl/src oid/impl/src/java oid/impl/src/java/org oid/impl/src/java/org/apache oid/impl/src/java/org/apache/eve oid/impl/src/java/org/apache/eve/schema

Author: akarasulu
Date: Mon Dec 15 17:36:33 2003
New Revision: 1428

Added:
   incubator/directory/ldap/trunk/eve/backend/schema/common/api/   (props changed)
      - copied from rev 1426, incubator/directory/ldap/trunk/eve/backend/schema/api/
   incubator/directory/ldap/trunk/eve/backend/schema/common/api/project.properties
      - copied unchanged from rev 1427, incubator/directory/ldap/trunk/eve/backend/schema/api/project.properties
   incubator/directory/ldap/trunk/eve/backend/schema/common/api/project.xml
      - copied unchanged from rev 1427, incubator/directory/ldap/trunk/eve/backend/schema/api/project.xml
   incubator/directory/ldap/trunk/eve/backend/schema/common/api/src/
      - copied from rev 1427, incubator/directory/ldap/trunk/eve/backend/schema/api/src/
   incubator/directory/ldap/trunk/eve/backend/schema/oid/
   incubator/directory/ldap/trunk/eve/backend/schema/oid/api/
   incubator/directory/ldap/trunk/eve/backend/schema/oid/api/src/
   incubator/directory/ldap/trunk/eve/backend/schema/oid/api/src/java/
   incubator/directory/ldap/trunk/eve/backend/schema/oid/api/src/java/org/
   incubator/directory/ldap/trunk/eve/backend/schema/oid/api/src/java/org/apache/
   incubator/directory/ldap/trunk/eve/backend/schema/oid/api/src/java/org/apache/eve/
   incubator/directory/ldap/trunk/eve/backend/schema/oid/api/src/java/org/apache/eve/schema/
   incubator/directory/ldap/trunk/eve/backend/schema/oid/api/src/java/org/apache/eve/schema/OidRegistry.java
   incubator/directory/ldap/trunk/eve/backend/schema/oid/api/src/java/org/apache/eve/schema/OidRegistryMonitor.java
   incubator/directory/ldap/trunk/eve/backend/schema/oid/api/src/java/org/apache/eve/schema/OidRegistryMonitorAdapter.java
   incubator/directory/ldap/trunk/eve/backend/schema/oid/impl/
   incubator/directory/ldap/trunk/eve/backend/schema/oid/impl/src/
   incubator/directory/ldap/trunk/eve/backend/schema/oid/impl/src/java/
   incubator/directory/ldap/trunk/eve/backend/schema/oid/impl/src/java/org/
   incubator/directory/ldap/trunk/eve/backend/schema/oid/impl/src/java/org/apache/
   incubator/directory/ldap/trunk/eve/backend/schema/oid/impl/src/java/org/apache/eve/
   incubator/directory/ldap/trunk/eve/backend/schema/oid/impl/src/java/org/apache/eve/schema/
   incubator/directory/ldap/trunk/eve/backend/schema/oid/impl/src/java/org/apache/eve/schema/DefaultOidRegistry.java
Removed:
   incubator/directory/ldap/trunk/eve/backend/schema/api/
Log:
rearranging a few things


Added: incubator/directory/ldap/trunk/eve/backend/schema/oid/api/src/java/org/apache/eve/schema/OidRegistry.java
==============================================================================
--- (empty file)
+++ incubator/directory/ldap/trunk/eve/backend/schema/oid/api/src/java/org/apache/eve/schema/OidRegistry.java	Mon Dec 15 17:36:33 2003
@@ -0,0 +1,118 @@
+/*
+
+ ============================================================================
+                   The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of  source code must  retain the above copyright  notice,
+    this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+    include  the following  acknowledgment:  "This product includes  software
+    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+    Alternately, this  acknowledgment may  appear in the software itself,  if
+    and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve" 
+    and "Apache Software Foundation"  must not be used to endorse or promote
+    products derived  from this  software without  prior written
+    permission. For written permission, please contact apache@apache.org.
+
+ 5. Products  derived from this software may not  be called "Apache", nor may
+    "Apache" appear  in their name,  without prior written permission  of the
+    Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software  consists of voluntary contributions made  by many individuals
+ on  behalf of the Apache Software  Foundation. For more  information on the
+ Apache Software Foundation, please see <http://www.apache.org/>.
+
+*/
+package org.apache.eve.schema ;
+
+
+import java.util.List ;
+import java.util.Iterator ;
+
+import javax.naming.NamingException ;
+
+
+/**
+ * Object identifier registry.
+ *
+ * @author <a href="mailto:akarasulu@apache.org">Alex Karasulu</a>
+ * @author $LastChangedBy$
+ * @version $LastChangedRevision$
+ */
+public interface OidRegistry
+{
+    /** Avalon service interface ROLE */
+    String ROLE = OidRegistry.class.toString() ;
+    
+    /**
+     * Gets the object identifier using a common name
+     * 
+     * @param a_name the name to lookup an OID for
+     * @return the OID string associated with a name
+     * @throws NamingException if a_name does not map to an OID
+     */
+    String getOid( String a_name ) throws NamingException ;
+    
+    /**
+     * Gets the primary name associated with an OID.  The primary name is the
+     * first name specified for the OID.
+     * 
+     * @param a_oid the object identifier
+     * @return the primary name
+     * @throws NamingException if a_oid does not exist
+     */
+    String getPrimaryName( String a_oid ) throws NamingException ;
+    
+    /**
+     * Gets the names associated with an OID.  An OID is unique however it may 
+     * have many names used to refer to it.  A good example is the cn and
+     * commonName attribute names for OID 2.5.4.3.  Within a server one name 
+     * within the set must be chosen as the primary name.  This is used to
+     * name certain things within the server internally.  If there is more than
+     * one name then the first name is taken to be the primary.
+     * 
+     * @param a_oid the OID for which we return the set of common names
+     * @return a sorted set of names
+     * @throws NamingException if a_oid does not exist
+     */
+    List getNameSet( String a_oid ) throws NamingException ;
+    
+    /**
+     * Lists all the OIDs within the registry.  This may be a really big list.
+     * 
+     * @return all the OIDs registered
+     */
+    Iterator list() ;
+    
+    /**
+     * Adds an OID name pair to the registry.
+     * 
+     * @param a_name the name to associate with the OID
+     * @param a_oid the OID to add or associate a new name with 
+     */
+    void register( String a_name, String a_oid ) ;
+}

Added: incubator/directory/ldap/trunk/eve/backend/schema/oid/api/src/java/org/apache/eve/schema/OidRegistryMonitor.java
==============================================================================
--- (empty file)
+++ incubator/directory/ldap/trunk/eve/backend/schema/oid/api/src/java/org/apache/eve/schema/OidRegistryMonitor.java	Mon Dec 15 17:36:33 2003
@@ -0,0 +1,132 @@
+/*
+
+ ============================================================================
+                   The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of  source code must  retain the above copyright  notice,
+    this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+    include  the following  acknowledgment:  "This product includes  software
+    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+    Alternately, this  acknowledgment may  appear in the software itself,  if
+    and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve" 
+	and "Apache Software Foundation"  must not be used to endorse or promote
+    products derived  from this  software without  prior written
+    permission. For written permission, please contact apache@apache.org.
+
+ 5. Products  derived from this software may not  be called "Apache", nor may
+    "Apache" appear  in their name,  without prior written permission  of the
+    Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software  consists of voluntary contributions made  by many individuals
+ on  behalf of the Apache Software  Foundation. For more  information on the
+ Apache Software Foundation, please see <http://www.apache.org/>.
+
+*/
+package org.apache.eve.schema ;
+
+
+import java.util.List ;
+
+import javax.naming.NamingException ;
+
+
+/**
+ * Monitor used to track notable OidRegistry events.
+ *
+ * @author <a href="mailto:akarasulu@apache.org">Alex Karasulu</a>
+ * @author $LastChangedBy$
+ * @version $LastChangedRevision$
+ */
+public interface OidRegistryMonitor
+{
+    /**
+     * Monitors situations where an OID is used to resolve an OID.  The caller
+     * does not know that the argument is the same as the return value.
+     * 
+     * @param a_oid the OID argument and return value
+     */
+    void getOidWithOid( String a_oid ) ;
+    
+    /**
+     * Monitors when an OID is resolved successfully for a name.
+     *  
+     * @param a_name the name used to lookup an OID
+     * @param a_oid the OID returned for the name
+     */
+	void oidResolved( String a_name, String a_oid ) ;
+	
+	/**
+     * Monitors when an OID is resolved successfully by using a normalized form
+     * of the name.
+     *  
+     * @param a_name the name used to lookup an OID
+	 * @param a_normalized the normalized name that mapped to the OID
+     * @param a_oid the OID returned for the name
+	 */
+	void oidResolved( String a_name, String a_normalized, String a_oid ) ;
+	
+	/**
+	 * Monitors when resolution of an OID by name fails.
+	 * 
+	 * @param a_name the name used to lookup an OID
+	 * @param a_fault the exception thrown for the failure after this call
+	 */
+	void oidResolutionFailed( String a_name, NamingException a_fault ) ;
+	
+	/**
+	 * Monitors when a name lookups fail due to the use of an unknown OID.
+	 *  
+	 * @param a_oid the OID used to lookup object names
+	 * @param a_fault the exception thrown for the failure after this call
+	 */
+	void oidDoesNotExist( String a_oid, NamingException a_fault ) ;
+	
+	/**
+	 * Monitors situations where a primary name is resolved for a OID.
+	 * 
+	 * @param a_oid the OID used for the lookup
+	 * @param a_primaryName the primary name found for the OID
+	 */
+	void nameResolved( String a_oid, String a_primaryName ) ;
+
+	/**
+	 * Monitors situations where a names are resolved for a OID.
+	 * 
+	 * @param a_oid the OID used for the lookup
+	 * @param a_names the names found for the OID
+	 */
+	void namesResolved( String a_oid, List a_names ) ;
+	
+	/**
+	 * Monitors the successful registration of a name for an OID.
+	 * 
+	 * @param a_name the one of many names registered with an OID
+	 * @param a_oid the OID to be associated with the name
+	 */
+	void registered( String a_name, String a_oid ) ;
+}

Added: incubator/directory/ldap/trunk/eve/backend/schema/oid/api/src/java/org/apache/eve/schema/OidRegistryMonitorAdapter.java
==============================================================================
--- (empty file)
+++ incubator/directory/ldap/trunk/eve/backend/schema/oid/api/src/java/org/apache/eve/schema/OidRegistryMonitorAdapter.java	Mon Dec 15 17:36:33 2003
@@ -0,0 +1,141 @@
+/*
+
+ ============================================================================
+                   The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of  source code must  retain the above copyright  notice,
+    this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+    include  the following  acknowledgment:  "This product includes  software
+    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+    Alternately, this  acknowledgment may  appear in the software itself,  if
+    and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve" 
+	and "Apache Software Foundation"  must not be used to endorse or promote
+    products derived  from this  software without  prior written
+    permission. For written permission, please contact apache@apache.org.
+
+ 5. Products  derived from this software may not  be called "Apache", nor may
+    "Apache" appear  in their name,  without prior written permission  of the
+    Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software  consists of voluntary contributions made  by many individuals
+ on  behalf of the Apache Software  Foundation. For more  information on the
+ Apache Software Foundation, please see <http://www.apache.org/>.
+
+*/
+package org.apache.eve.schema;
+
+import java.util.List;
+
+import javax.naming.NamingException;
+
+/**
+ * $todo$ doc me
+ *
+ * @author <a href="mailto:akarasulu@apache.org">Alex Karasulu</a>
+ * @author $LastChangedBy$
+ * @version $LastChangedRevision$
+ */
+public class OidRegistryMonitorAdapter implements OidRegistryMonitor
+{
+
+    /* (non-Javadoc)
+     * @see org.apache.eve.schema.OidRegistryMonitor#getOidWithOid(java.lang.String)
+     */
+    public void getOidWithOid(String a_a_oid)
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.eve.schema.OidRegistryMonitor#oidResolved(java.lang.String, java.lang.String)
+     */
+    public void oidResolved(String a_a_name, String a_a_oid)
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.eve.schema.OidRegistryMonitor#oidResolved(java.lang.String, java.lang.String, java.lang.String)
+     */
+    public void oidResolved(
+        String a_a_name,
+        String a_a_normalized,
+        String a_a_oid)
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.eve.schema.OidRegistryMonitor#oidResolutionFailed(java.lang.String, javax.naming.NamingException)
+     */
+    public void oidResolutionFailed(String a_a_name, NamingException a_a_fault)
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.eve.schema.OidRegistryMonitor#oidDoesNotExist(java.lang.String, javax.naming.NamingException)
+     */
+    public void oidDoesNotExist(String a_a_oid, NamingException a_a_fault)
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.eve.schema.OidRegistryMonitor#nameResolved(java.lang.String, java.lang.String)
+     */
+    public void nameResolved(String a_a_oid, String a_name)
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.eve.schema.OidRegistryMonitor#namesResolved(java.lang.String, java.util.List)
+     */
+    public void namesResolved(String a_a_oid, List a_a_names)
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.eve.schema.OidRegistryMonitor#registered(java.lang.String, java.lang.String)
+     */
+    public void registered(String a_a_name, String a_a_oid)
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+}

Added: incubator/directory/ldap/trunk/eve/backend/schema/oid/impl/src/java/org/apache/eve/schema/DefaultOidRegistry.java
==============================================================================
--- (empty file)
+++ incubator/directory/ldap/trunk/eve/backend/schema/oid/impl/src/java/org/apache/eve/schema/DefaultOidRegistry.java	Mon Dec 15 17:36:33 2003
@@ -0,0 +1,268 @@
+/*
+
+ ============================================================================
+                   The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of  source code must  retain the above copyright  notice,
+    this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+    include  the following  acknowledgment:  "This product includes  software
+    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+    Alternately, this  acknowledgment may  appear in the software itself,  if
+    and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve" 
+	and "Apache Software Foundation"  must not be used to endorse or promote
+    products derived  from this  software without  prior written
+    permission. For written permission, please contact apache@apache.org.
+
+ 5. Products  derived from this software may not  be called "Apache", nor may
+    "Apache" appear  in their name,  without prior written permission  of the
+    Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software  consists of voluntary contributions made  by many individuals
+ on  behalf of the Apache Software  Foundation. For more  information on the
+ Apache Software Foundation, please see <http://www.apache.org/>.
+
+*/
+package org.apache.eve.schema ;
+
+import java.util.List ;
+import java.util.Iterator ;
+import java.util.ArrayList ;
+import java.util.Hashtable ;
+import java.util.Collections ;
+
+import javax.naming.NamingException ;
+
+
+/**
+ * Default OID registry implementation used to resolve a schema object OID 
+ * to a name and vice-versa.
+ * 
+ * @author <a href="mailto:akarasulu@apache.org">Alex Karasulu</a>
+ * @author $LastChangedBy$
+ * @version $LastChangedRevision$
+ */
+public class DefaultOidRegistry
+{ 
+	/** Maps OID to a name or a list of names if more than one name exists */
+	private Hashtable m_byOid = new Hashtable() ;
+	/** Maps several names to an OID */
+	private Hashtable m_byName = new Hashtable() ;
+	/** Default OidRegistryMonitor */
+	private OidRegistryMonitor m_monitor = null ;
+    
+    
+	/**
+	 * @see org.apache.ldap.server.schema.OidRegistry#getOid(java.lang.String)
+	 */
+	public String getOid( String a_name ) throws NamingException
+	{
+		/* If a_name is an OID than we return it back since inherently the 
+	     * OID is another name for the object referred to by OID and the
+	     * caller does not know that the argument is an OID String.
+	     */
+		if ( Character.isDigit( a_name.charAt( 0 ) ) 
+			&& m_byOid.containsKey( a_name ) )
+		{
+		    m_monitor.getOidWithOid( a_name ) ;
+			return a_name ;
+		}
+
+		// If a_name is mapped to a OID already return OID
+		if ( m_byName.containsKey( a_name ) )
+		{
+		    String l_oid = ( String ) m_byName.get( a_name ) ; 
+		    m_monitor.oidResolved( a_name, l_oid ) ;
+			return l_oid ;
+		}
+        
+		/*
+		 * As a last resort we check if a_name is not normalized and if the 
+		 * normalized version used as a key returns an OID.  If the normalized
+		 * name works add the normalized name as a key with its OID to the 
+		 * byName lookup.  BTW these normalized versions of the key are not 
+		 * returned on a getNameSet.
+		 */
+		 String l_lowerCase = a_name.trim().toLowerCase() ;
+		 if ( ! a_name.equals( l_lowerCase ) 
+			&& m_byName.containsKey( l_lowerCase ) )
+		 {
+			 String l_oid = ( String ) m_byName.get( l_lowerCase ) ;
+			 m_monitor.oidResolved( a_name, l_lowerCase, l_oid ) ;
+			 
+			 // We expect to see this version of the key again so we add it 
+			 m_byName.put( a_name, l_oid ) ;
+			 return l_oid ;
+		 }
+         
+		 NamingException l_fault = new NamingException ( "OID for name '" 
+		         + a_name + "' was not " + "found within the OID registry" ) ; 
+		 m_monitor.oidResolutionFailed( a_name, l_fault ) ;
+		 throw l_fault ;
+	}
+
+
+	/**
+	 * @see org.apache.ldap.server.schema.OidRegistry#getPrimaryName(java.lang.String)
+	 */
+	public String getPrimaryName( String a_oid ) throws NamingException
+	{
+		Object l_value = m_byOid.get( a_oid ) ;
+        
+		if ( null == l_value )
+		{
+		    NamingException l_fault = new NamingException ( "OID '" + a_oid 
+		            + "' was not found within the OID registry" ) ; 
+		    m_monitor.oidDoesNotExist( a_oid, l_fault ) ;
+			throw l_fault ;
+		}
+        
+		if ( l_value instanceof String )
+		{
+		    m_monitor.nameResolved( a_oid, ( String ) l_value ) ;
+			return ( String ) l_value ;
+		}
+        
+		String l_name = ( String ) ( ( List ) l_value ).get( 0 ) ;
+		m_monitor.nameResolved( a_oid, l_name ) ;
+		return l_name ;
+	}
+
+
+	/**
+	 * @see org.apache.ldap.server.schema.OidRegistry#getNameSet(java.lang.String)
+	 */
+	public List getNameSet( String a_oid ) throws NamingException
+	{
+		Object l_value = m_byOid.get( a_oid ) ;
+        
+		if ( null == l_value )
+		{
+			NamingException l_fault = new NamingException ( "OID '" + a_oid 
+					+ "' was not found within the OID registry" ) ; 
+			m_monitor.oidDoesNotExist( a_oid, l_fault ) ;
+			throw l_fault ;
+		}
+        
+		if ( l_value instanceof String )
+		{
+		    List l_list = Collections.singletonList( l_value ) ;
+		    m_monitor.namesResolved( a_oid, l_list ) ;
+			return l_list ;
+		}
+        
+		m_monitor.namesResolved( a_oid, ( List ) l_value ) ;
+		return ( List ) l_value ;
+	}
+
+
+	/**
+	 * @see org.apache.ldap.server.schema.OidRegistry#listOids()
+	 */
+	public Iterator listOids()
+	{
+		return Collections.unmodifiableSet( m_byOid.keySet() ).iterator() ;
+	}
+
+
+	/**
+	 * @see org.apache.ldap.server.schema.OidRegistry#add(java.lang.String, 
+	 * java.lang.String)
+	 */
+	public void register( String a_name, String a_oid )
+	{
+		/*
+		 * Add the entry for the given name as is and its lowercased version if
+		 * the lower cased name is different from the given name name.  
+		 */
+		String l_lowerCase = a_name.toLowerCase() ;
+		if ( ! l_lowerCase.equals( a_name ) )
+		{
+			m_byName.put( l_lowerCase, a_oid ) ;
+		}
+        
+		// Put both the name and the oid as names
+		m_byName.put( a_name, a_oid ) ;
+		m_byName.put( a_oid, a_oid ) ;
+        
+		/*
+		 * Update OID Map
+		 * 
+		 * 1). Check if we already have a value[s] stored
+		 *      1a). Value is a single value and is a String
+		 *          Replace value with list containing old and new values
+		 *      1b). More than one value stored in a list
+		 *          Add new value to the list
+		 * 2). If we do not have a value then we just add it as a String
+		 */
+		Object l_value = null ;
+		if ( ! m_byOid.containsKey( a_oid ) )
+		{
+			l_value = a_name ;
+		}
+		else 
+		{
+			ArrayList l_list = null ;
+			l_value = m_byOid.get( a_oid ) ;
+            
+			if ( l_value instanceof String )
+			{
+				String l_existingName = ( String ) l_value ;
+                
+				// if the existing name is already there we don't readd it
+				if ( l_existingName.equalsIgnoreCase( a_name ) )
+				{
+					return ;
+				}
+                
+				l_list = new ArrayList() ;
+				l_list.add( l_value ) ;
+				l_value = l_list ;
+			}
+			else if ( l_value instanceof ArrayList )
+			{
+				l_list = ( ArrayList ) l_list ;
+                
+				for ( int ii = 0; ii < l_list.size(); ii++ )
+				{
+					// One form or another of the name already exists in list
+					if ( ! a_name.equalsIgnoreCase( ( String ) 
+						l_list.get( ii ) ) )
+					{
+						return ;
+					}
+				}
+                
+				l_list.add( a_name ) ;
+			}
+		}
+
+		m_byOid.put( a_oid, l_value ) ;
+		m_monitor.registered( a_name, a_oid ) ;
+	}
+}
+