| Home >> All >> javax >> ide >> extension >> [ spi Javadoc ] |
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 }