Fix for HER-1962 NPE from missing sheet

* SheetOverlaysManager.java
    getOverlayMap(String) - return null if sheet missing instead of triggering npe
* KeyedProperties.java
    get(String) - check for null return value from getOverlayMap() and log warning
This commit is contained in:
Noah Levitt
2011-10-27 10:40:30 -07:00
parent 9b418bbb76
commit 995133dc40
2 changed files with 18 additions and 5 deletions
@@ -24,6 +24,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger;
/**
* Map for storing overridable properties.
@@ -36,6 +37,9 @@ import java.util.concurrent.ConcurrentHashMap;
*/
public class KeyedProperties extends ConcurrentHashMap<String,Object> {
private static final long serialVersionUID = 3403222335436162778L;
private static final Logger logger = Logger.getLogger(KeyedProperties.class.getName());
/** the alternate global property-paths leading to this map
* TODO: consider if deterministic ordered list is important */
HashSet<String> externalPaths = new HashSet<String>();
@@ -61,11 +65,15 @@ public class KeyedProperties extends ConcurrentHashMap<String,Object> {
for(int j = ocontext.getOverlayNames().size()-1; j>=0; j--) {
String name = ocontext.getOverlayNames().get(j);
Map<String,Object> m = ocontext.getOverlayMap(name);
for(String ok : getOverrideKeys(key)) {
Object val = m.get(ok);
if(val!=null) {
return val;
if (m != null) {
for(String ok : getOverrideKeys(key)) {
Object val = m.get(ok);
if(val!=null) {
return val;
}
}
} else {
logger.warning("sheet '" + name + "' should apply but there is no such sheet!");
}
}
}
@@ -169,7 +169,12 @@ BeanFactoryAware, OverlayMapsSource, ApplicationListener {
* @see org.archive.spring.OverlayMapsSource#getOverlayMap(java.lang.String)
*/
public Map<String, Object> getOverlayMap(String name) {
return sheetsByName.get(name).getMap();
Sheet sheet = sheetsByName.get(name);
if (sheet != null) {
return sheet.getMap();
} else {
return null;
}
}
/**