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.Enumeration;
11 import java.util.HashMap;
12 import java.util.Hashtable;
13 import java.util.Map;
14 import java.util.NoSuchElementException;
15 import javax.naming.*;
16 import javax.naming.Context;
17 import org.apache.avalon.excalibur.naming.AbstractLocalContext;
18 import org.apache.avalon.excalibur.naming.Namespace;
19
20 /***
21 * Start of a generic Context implementation.
22 *
23 * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
24 * @version $Revision: 1.2 $
25 */
26 public class MemoryContext
27 extends AbstractLocalContext
28 {
29 protected Hashtable m_bindings;
30
31 protected MemoryContext( final Namespace namespace,
32 final Hashtable environment,
33 final Context parent,
34 final Hashtable bindings )
35 {
36 super( namespace, environment, parent );
37 m_bindings = bindings;
38 }
39
40 public MemoryContext( final Namespace namespace,
41 final Hashtable environment,
42 final Context parent )
43 {
44 this( namespace, environment, parent, new Hashtable( 11 ) );
45 }
46
47 protected Context newContext()
48 throws NamingException
49 {
50 return new MemoryContext( m_namespace, m_environment, m_parent );
51 }
52
53 protected Context cloneContext()
54 throws NamingException
55 {
56 return new MemoryContext( m_namespace, m_environment, m_parent, m_bindings );
57 }
58
59 protected void doLocalBind( final Name name, final Object object )
60 throws NamingException
61 {
62 m_bindings.put( name.get( 0 ), object );
63 }
64
65 protected NamingEnumeration doLocalList()
66 throws NamingException
67 {
68 return new MemoryNamingEnumeration( this, m_namespace, m_bindings, false );
69 }
70
71 protected NamingEnumeration doLocalListBindings()
72 throws NamingException
73 {
74 return new MemoryNamingEnumeration( this, m_namespace, m_bindings, true );
75 }
76
77 /***
78 * Actually lookup raw entry in local context.
79 * When overidding this it is not neccesary to resolve references etc.
80 *
81 * @param name the name in local context (size() == 1)
82 * @return the bound object
83 * @exception NamingException if an error occurs
84 */
85 protected Object doLocalLookup( final Name name )
86 throws NamingException
87 {
88 final Object object = m_bindings.get( name.get( 0 ) );
89 if( null == object ) throw new NameNotFoundException( name.get( 0 ) );
90 return object;
91 }
92
93 /***
94 * Actually unbind raw entry in local context.
95 *
96 * @param name the name in local context (size() == 1)
97 * @exception NamingException if an error occurs
98 */
99 protected void doLocalUnbind( final Name name )
100 throws NamingException
101 {
102 m_bindings.remove( name.get( 0 ) );
103 }
104 }
105
This page was automatically generated by Maven