View Javadoc

1   /*
2    * Copyright (C) The Apache Software Foundation. All rights reserved.
3    *
4    * This software is published under the terms of the Apache Software License
5    * version 1.1, a copy of which has been included with this distribution in
6    * the LICENSE file.
7    */
8   package org.apache.avalon.excalibur.naming;
9   
10  import java.util.Hashtable;
11  import javax.naming.NameParser;
12  import javax.naming.Name;
13  import javax.naming.Context;
14  import javax.naming.NamingException;
15  import javax.naming.spi.InitialContextFactory;
16  import javax.naming.spi.ObjectFactory;
17  import javax.naming.spi.StateFactory;
18  
19  /***
20   * This is the class to extend that provides
21   * basic facilities for Namespace management.
22   *
23   * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
24   * @version $Revision: 1.2 $
25   */
26  public abstract class AbstractNamespace
27      implements Namespace
28  {
29      protected ObjectFactory[]        m_objectFactorySet;
30      protected StateFactory[]         m_stateFactorySet;
31  
32      public Object getStateToBind( final Object object,
33                                    final Name name,
34                                    final Context parent,
35                                    final Hashtable environment )
36          throws NamingException
37      {
38          //for thread safety so that member variable can be updated
39          //at any time
40          final StateFactory[] stateFactorySet = m_stateFactorySet;
41  
42          for( int i = 0; i < stateFactorySet.length; i++ )
43          {
44              final Object result =
45                  stateFactorySet[ i ].getStateToBind( object, name, parent, environment );
46  
47              if( null != result )
48              {
49                  return result;
50              }
51          }
52  
53          return object;
54      }
55  
56      public Object getObjectInstance( final Object object,
57                                       final Name name,
58                                       final Context parent,
59                                       final Hashtable environment )
60          throws Exception
61      {
62          //for thread safety so that member variable can be updated
63          //at any time
64          final ObjectFactory[] objectFactorySet = m_objectFactorySet;
65  
66          for( int i = 0; i < objectFactorySet.length; i++ )
67          {
68              final Object result =
69                  objectFactorySet[ i ].getObjectInstance( object, name, parent, environment );
70  
71              if( null != result )
72              {
73                  return result;
74              }
75          }
76  
77          return object;
78      }
79  }