1 8 package org.codehaus.dna.impl; 9 10 import java.util.HashMap ; 11 import java.util.Map ; 12 13 import org.codehaus.dna.MissingResourceException; 14 import org.codehaus.dna.ResourceLocator; 15 16 30 public class DefaultResourceLocator 31 extends AbstractFreezable 32 implements ResourceLocator 33 { 34 38 private final ResourceLocator m_parent; 39 40 43 private final Map m_resources = new HashMap (); 44 45 48 public DefaultResourceLocator() 49 { 50 this( null ); 51 } 52 53 58 public DefaultResourceLocator( final ResourceLocator parent ) 59 { 60 m_parent = parent; 61 } 62 63 71 public Object lookup( final String key ) 72 throws MissingResourceException 73 { 74 final Object resource = getResourceMap().get( key ); 75 if( null != resource ) 76 { 77 return resource; 78 } 79 80 final ResourceLocator parent = getParent(); 81 if( null != parent ) 82 { 83 return parent.lookup( key ); 84 } 85 else 86 { 87 final String message = "Unable to locate resource " + key + "."; 88 throw new MissingResourceException( message, key ); 89 } 90 } 91 92 98 public boolean contains( final String key ) 99 { 100 final Object resource = getResourceMap().get( key ); 101 if( null != resource ) 102 { 103 return true; 104 } 105 106 final ResourceLocator parent = getParent(); 107 if( null != parent ) 108 { 109 return parent.contains( key ); 110 } 111 else 112 { 113 return false; 114 } 115 } 116 117 123 public void put( final String key, 124 final Object resource ) 125 { 126 if( null == key ) 127 { 128 throw new NullPointerException ( "key" ); 129 } 130 if( null == resource ) 131 { 132 throw new NullPointerException ( "resource" ); 133 } 134 checkWriteable(); 135 getResourceMap().put( key, resource ); 136 } 137 138 143 protected final ResourceLocator getParent() 144 { 145 return m_parent; 146 } 147 148 153 protected final Map getResourceMap() 154 { 155 return m_resources; 156 } 157 } 158 | Popular Tags |