Fix StringMap so it handles changes to case sensitivity properly. (FELIX-1293)
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@790343 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/src/main/java/org/apache/felix/framework/util/StringMap.java b/framework/src/main/java/org/apache/felix/framework/util/StringMap.java
index 805909d..ca1f95d 100644
--- a/framework/src/main/java/org/apache/felix/framework/util/StringMap.java
+++ b/framework/src/main/java/org/apache/felix/framework/util/StringMap.java
@@ -21,15 +21,17 @@
import java.util.*;
/**
- * Simple utility class that creates a map for string-based keys by
- * extending <tt>TreeMap</tt>. This map can be set to use case-sensitive
- * or case-insensitive comparison when searching for the key.
- * Any keys put into this map will be converted to
- * a <tt>String</tt> using the <tt>toString()</tt> method,
- * since it is only intended to compare strings.
+ * Simple utility class that creates a map for string-based keys.
+ * This map can be set to use case-sensitive or case-insensitive
+ * comparison when searching for the key. Any keys put into this
+ * map will be converted to a <tt>String</tt> using the
+ * <tt>toString()</tt> method, since it is only intended to
+ * compare strings.
**/
-public class StringMap extends TreeMap
+public class StringMap implements Map
{
+ private TreeMap m_map;
+
public StringMap()
{
this(true);
@@ -37,7 +39,7 @@
public StringMap(boolean caseSensitive)
{
- super(new StringComparator(caseSensitive));
+ m_map = new TreeMap(new StringComparator(caseSensitive));
}
public StringMap(Map map, boolean caseSensitive)
@@ -46,11 +48,48 @@
putAll(map);
}
+ public boolean isCaseSensitive()
+ {
+ return ((StringComparator) m_map.comparator()).isCaseSensitive();
+ }
+
+ public void setCaseSensitive(boolean b)
+ {
+ TreeMap map = new TreeMap(new StringComparator(b));
+ map.putAll(m_map);
+ m_map = map;
+ }
+
+ public int size()
+ {
+ return m_map.size();
+ }
+
+ public boolean isEmpty()
+ {
+ return m_map.isEmpty();
+ }
+
+ public boolean containsKey(Object arg0)
+ {
+ return m_map.containsKey(arg0);
+ }
+
+ public boolean containsValue(Object arg0)
+ {
+ return m_map.containsValue(arg0);
+ }
+
+ public Object get(Object arg0)
+ {
+ return m_map.get(arg0);
+ }
+
public Object put(Object key, Object value)
{
- return super.put(key.toString(), value);
+ return m_map.put(key.toString(), value);
}
-
+
public void putAll(Map map)
{
for (Iterator it = map.entrySet().iterator(); it.hasNext(); )
@@ -60,19 +99,34 @@
}
}
- public boolean isCaseSensitive()
+ public Object remove(Object arg0)
{
- return ((StringComparator) comparator()).isCaseSensitive();
+ return m_map.remove(arg0);
}
- public void setCaseSensitive(boolean b)
+ public void clear()
{
- ((StringComparator) comparator()).setCaseSensitive(b);
+ m_map.clear();
+ }
+
+ public Set keySet()
+ {
+ return m_map.keySet();
+ }
+
+ public Collection values()
+ {
+ return m_map.values();
+ }
+
+ public Set entrySet()
+ {
+ return m_map.entrySet();
}
private static class StringComparator implements Comparator
{
- private boolean m_isCaseSensitive = true;
+ private final boolean m_isCaseSensitive;
public StringComparator(boolean b)
{
@@ -95,10 +149,5 @@
{
return m_isCaseSensitive;
}
-
- public void setCaseSensitive(boolean b)
- {
- m_isCaseSensitive = b;
- }
}
}
\ No newline at end of file