1 package bsh; 2 3 import java.util.*; 4 5 24 30 public class ExternalNameSpace extends NameSpace 31 { 32 private Map externalMap; 33 34 public ExternalNameSpace() 35 { 36 this( null, "External Map Namespace", null ); 37 } 38 39 41 public ExternalNameSpace( NameSpace parent, String name, Map externalMap ) 42 { 43 super( parent, name ); 44 45 if ( externalMap == null ) 46 externalMap = new HashMap(); 47 48 this.externalMap = externalMap; 49 50 } 51 52 55 public Map getMap() { return externalMap; } 56 57 63 public void setMap( Map map ) 64 { 65 this.externalMap = null; 68 clear(); 69 this.externalMap = map ; 70 } 71 72 74 void setVariable( 75 String name, Object value, boolean strictJava, boolean recurse ) 76 throws UtilEvalError 77 { 78 super.setVariable( name, value, strictJava, recurse ); 79 putExternalMap( name, value ); 80 } 81 82 84 public void unsetVariable( String name ) 85 { 86 super.unsetVariable( name ); 87 externalMap.remove( name ); 88 } 89 90 92 public String [] getVariableNames() 93 { 94 Set nameSet = new HashSet(); 96 String [] nsNames = super.getVariableNames(); 97 nameSet.addAll( Arrays.asList( nsNames ) ); 98 nameSet.addAll( externalMap.keySet() ); 99 return (String [])nameSet.toArray( new String [0] ); 100 } 101 102 104 112 protected Variable getVariableImpl( String name, boolean recurse ) 113 throws UtilEvalError 114 { 115 Object value = externalMap.get( name ); 117 118 Variable var; 119 if ( value == null ) 120 { 121 super.unsetVariable( name ); 125 126 var = super.getVariableImpl( name, recurse ); 128 } else 129 { 130 Variable localVar = super.getVariableImpl( name, false ); 133 134 if ( localVar == null ) 138 var = new Variable( name, (Class )null, value, (Modifiers)null ); 139 else 140 var = localVar; 141 } 142 143 return var; 144 } 145 146 148 154 public Variable [] getDeclaredVariables() 155 { 156 return super.getDeclaredVariables(); 157 } 158 159 161 public void setTypedVariable( 162 String name, Class type, Object value, Modifiers modifiers ) 163 throws UtilEvalError 164 { 165 super.setTypedVariable( name, type, value, modifiers ); 166 putExternalMap( name, value ); 167 } 168 169 173 public void setMethod( String name, BshMethod method ) 174 throws UtilEvalError 175 { 176 super.setMethod( name, method ); 177 } 178 179 183 public BshMethod getMethod( 184 String name, Class [] sig, boolean declaredOnly ) 185 throws UtilEvalError 186 { 187 return super.getMethod( name, sig, declaredOnly ); 188 } 189 190 191 195 protected void getAllNamesAux( Vector vec ) 196 { 197 super.getAllNamesAux( vec ); 198 } 199 200 204 public void clear() 205 { 206 super.clear(); 207 externalMap.clear(); 208 } 209 210 216 protected void putExternalMap( String name, Object value ) 217 { 218 if ( value instanceof Variable ) 219 try { 220 value = unwrapVariable( (Variable)value ); 221 } catch ( UtilEvalError ute ) { 222 throw new InterpreterError("unexpected UtilEvalError"); 226 } 227 228 if ( value instanceof Primitive ) 229 value = Primitive.unwrap( (Primitive)value ); 230 231 externalMap.put( name, value ); 232 } 233 } 234 235 | Popular Tags |