Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: javax/ide/extension/spi/ScopedMap.java


1   package javax.ide.extension.spi;
2   
3   import java.util.AbstractMap;
4   import java.util.HashMap;
5   import java.util.HashSet;
6   import java.util.Iterator;
7   import java.util.Map;
8   import java.util.Set;
9   
10  /**
11   * A map that provides support for scoping.
12   */
13  public final class ScopedMap extends AbstractMap
14  {
15    private final Stack _mapStack = new Stack();
16    
17    public ScopedMap()
18    {
19      enterScope();    // Always have a root scope to avoid illegal object states  
20    }
21    
22    /**
23     * Enter a new scope level.  
24     */
25    public void enterScope()
26    {
27      _mapStack.push( new HashMap() );
28    }
29    
30    /**
31     * Exit the current scope level. Name / value pairs that
32     * were defined in the current scope will no longer be available.
33     */
34    public void exitScope()
35    {
36      _mapStack.pop();
37    }
38    
39    
40    public Object put( Object key, Object value )
41    {
42      Map topMap = (Map) _mapStack.peek();
43      return topMap.put( key, value );
44    }
45    
46    public Object get( Object key )
47    {
48      for ( Iterator i = _mapStack.iterator(); i.hasNext(); )
49      {
50        Map thisMap = (Map) i.next();
51        Object o = thisMap.get( key );
52        if ( o != null )
53        {
54          return o;
55        }
56      }
57      return null;
58    }
59    
60    public Object remove( Object key )
61    {
62      for ( Iterator i = _mapStack.iterator(); i.hasNext(); )
63      {
64        Map thisMap = (Map) i.next(); 
65        Object o = thisMap.remove( key );
66        if ( o != null )
67        {
68          return o;
69        }
70      }
71      return null;
72    }
73    
74    public void clear()
75    {
76      for ( Iterator i = _mapStack.iterator(); i.hasNext(); )
77      {
78        ((Map)i.next()).clear();
79      }
80    }
81    
82    public Set entrySet()
83    {
84      HashSet hs = new HashSet();
85      for ( Iterator i = _mapStack.iterator(); i.hasNext(); )
86      {
87        Map thisMap = (Map) i.next();
88        hs.addAll( thisMap.entrySet() );
89      }
90      return hs;
91    }
92  }