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.memory;
9   
10  import java.util.Hashtable;
11  import java.util.Iterator;
12  import java.util.NoSuchElementException;
13  import javax.naming.Binding;
14  import javax.naming.Context;
15  import javax.naming.NameClassPair;
16  import javax.naming.NamingException;
17  import org.apache.avalon.excalibur.naming.AbstractNamingEnumeration;
18  import org.apache.avalon.excalibur.naming.Namespace;
19  
20  /***
21   * Class for building NamingEnumerations.
22   *
23   * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
24   * @version $Revision: 1.2 $
25   */
26  final class MemoryNamingEnumeration
27      extends AbstractNamingEnumeration
28  {
29      protected Hashtable    m_bindings;
30      protected Iterator     m_names;
31      protected boolean      m_returnBindings;
32  
33      public MemoryNamingEnumeration( final Context owner,
34                                      final Namespace namespace,
35                                      final Hashtable bindings,
36                                      final boolean returnBindings )
37      {
38          super( owner, namespace );
39          m_returnBindings = returnBindings;
40          m_bindings = bindings;
41          m_names = m_bindings.keySet().iterator();
42      }
43  
44      public boolean hasMoreElements()
45      {
46          return m_names.hasNext();
47      }
48  
49      public Object next()
50          throws NamingException
51      {
52          if( !hasMore() ) throw new NoSuchElementException();
53  
54          final String name = (String)m_names.next();
55          Object object = m_bindings.get( name );
56  
57          if( !m_returnBindings )
58          {
59              return new NameClassPair( name, object.getClass().getName() );
60          }
61          else
62          {
63              return new Binding( name, resolve( name, object ) );
64          }
65      }
66  
67      public void close()
68      {
69          super.close();
70          m_bindings = null;
71      }
72  }