* Implement new case insensitive mapping that uses an in-between key lookup

table and preserves capitalization of property keys.
This commit is contained in:
hns 2006-08-09 09:55:24 +00:00
parent 4ee8b35d80
commit d47a2de6ff

View file

@ -56,6 +56,8 @@ public class ResourceProperties extends Properties {
// Sorted map of resources // Sorted map of resources
private Set resources; private Set resources;
private Properties keyMap = new Properties();
/** /**
* Constructs an empty ResourceProperties * Constructs an empty ResourceProperties
* Resources must be added manually afterwards * Resources must be added manually afterwards
@ -307,7 +309,13 @@ public class ResourceProperties extends Properties {
if ((System.currentTimeMillis() - lastCheck) > CACHE_TIME) { if ((System.currentTimeMillis() - lastCheck) > CACHE_TIME) {
update(); update();
} }
return (String) super.get(ignoreCase ? key.toString().toLowerCase() : key.toString()); String strkey = key.toString();
if (ignoreCase) {
strkey = keyMap.getProperty(strkey.toLowerCase());
if (strkey == null)
return null;
}
return (String) super.get(key.toString());
} }
/** /**
@ -364,7 +372,12 @@ public class ResourceProperties extends Properties {
if ((System.currentTimeMillis() - lastCheck) > CACHE_TIME) { if ((System.currentTimeMillis() - lastCheck) > CACHE_TIME) {
update(); update();
} }
return super.getProperty(ignoreCase ? key.toLowerCase() : key, defaultValue); if (ignoreCase) {
key = keyMap.getProperty(key.toLowerCase());
if (key == null)
return defaultValue;
}
return super.getProperty(key, defaultValue);
} }
/** /**
@ -376,7 +389,12 @@ public class ResourceProperties extends Properties {
if ((System.currentTimeMillis() - lastCheck) > CACHE_TIME) { if ((System.currentTimeMillis() - lastCheck) > CACHE_TIME) {
update(); update();
} }
return super.getProperty(ignoreCase ? key.toLowerCase() : key); if (ignoreCase) {
key = keyMap.getProperty(key.toLowerCase());
if (key == null)
return null;
}
return super.getProperty(key);
} }
/** /**
@ -430,7 +448,11 @@ public class ResourceProperties extends Properties {
if (value != null) { if (value != null) {
value = value.toString().trim(); value = value.toString().trim();
} }
return super.put(ignoreCase ? key.toString().toLowerCase() : key.toString(), value); String strkey = key.toString();
if (ignoreCase) {
keyMap.put(strkey.toLowerCase(), strkey);
}
return super.put(strkey, value);
} }
/** /**
@ -439,7 +461,13 @@ public class ResourceProperties extends Properties {
* @return the old value * @return the old value
*/ */
public Object remove(Object key) { public Object remove(Object key) {
return super.remove(ignoreCase ? key.toString().toLowerCase() : key.toString()); String strkey = key.toString();
if (ignoreCase) {
strkey = (String) keyMap.remove(strkey.toLowerCase());
if (strkey == null)
return null;
}
return super.remove(strkey);
} }
/** /**
@ -464,6 +492,14 @@ public class ResourceProperties extends Properties {
return super.size(); return super.size();
} }
/**
* Overwrite clear() to also empty the key map.
*/
public void clear() {
keyMap.clear();
super.clear();
}
/** /**
* Returns a string-representation of the class * Returns a string-representation of the class
* @return string * @return string