387208: basic utilities for case insensitivity improvements
diff --git a/org.eclipse.virgo.util.common/src/main/java/org/eclipse/virgo/util/common/CaseInsensitiveMap.java b/org.eclipse.virgo.util.common/src/main/java/org/eclipse/virgo/util/common/CaseInsensitiveMap.java
index 27edf0e..f2a78d4 100644
--- a/org.eclipse.virgo.util.common/src/main/java/org/eclipse/virgo/util/common/CaseInsensitiveMap.java
+++ b/org.eclipse.virgo.util.common/src/main/java/org/eclipse/virgo/util/common/CaseInsensitiveMap.java
@@ -346,6 +346,9 @@
 
     }
 
+    public CaseInsensitiveMap(CaseInsensitiveMap<? extends V> map) {
+        this.map.putAll(map.map);
+    }
     /**
      * {@inheritDoc}
      */
diff --git a/org.eclipse.virgo.util.common/src/main/java/org/eclipse/virgo/util/common/IteratorToEnumerationAdapter.java b/org.eclipse.virgo.util.common/src/main/java/org/eclipse/virgo/util/common/IteratorToEnumerationAdapter.java
new file mode 100644
index 0000000..8b264ee
--- /dev/null
+++ b/org.eclipse.virgo.util.common/src/main/java/org/eclipse/virgo/util/common/IteratorToEnumerationAdapter.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2012 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package org.eclipse.virgo.util.common;
+
+import java.util.Enumeration;
+import java.util.Iterator;
+
+/**
+ * {@link IteratorToEnumerationAdapter} adapts an {@link Iterator} to conform to the {@link Enumeration} interface.
+ * <p />
+ * 
+ * <strong>Concurrent Semantics</strong><br />
+ * Thread safe.
+ */
+public class IteratorToEnumerationAdapter<T> implements Enumeration<T> {
+
+    private final Iterator<T> iterator;
+
+    public IteratorToEnumerationAdapter(Iterator<T> iterator) {
+        this.iterator = iterator;
+    }
+
+    @Override
+    public boolean hasMoreElements() {
+        return iterator.hasNext();
+    }
+
+    @Override
+    public T nextElement() {
+        // TODO Auto-generated method stub
+        return iterator.next();
+    }
+
+}
diff --git a/org.eclipse.virgo.util.common/src/main/java/org/eclipse/virgo/util/common/MapToDictionaryAdapter.java b/org.eclipse.virgo.util.common/src/main/java/org/eclipse/virgo/util/common/MapToDictionaryAdapter.java
new file mode 100644
index 0000000..85216f6
--- /dev/null
+++ b/org.eclipse.virgo.util.common/src/main/java/org/eclipse/virgo/util/common/MapToDictionaryAdapter.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2012 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package org.eclipse.virgo.util.common;
+
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.Map;
+
+/**
+ * {@link MapToDictionaryAdapter} adapts a {@link Map} instance to conform to the {@link Dictionary} interface.
+ * <p />
+ *
+ * <strong>Concurrent Semantics</strong><br />
+ * Thread safe.
+ */
+public class MapToDictionaryAdapter<K, V> extends Dictionary<K, V> {
+    
+    private final Map<K, V> map;
+
+    public MapToDictionaryAdapter(Map<K, V> map) {
+        this.map = map;
+    }
+
+    @Override
+    public int size() {
+        return map.size();
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return map.isEmpty();
+    }
+
+    @Override
+    public Enumeration<K> keys() {
+        return new IteratorToEnumerationAdapter<K>(map.keySet().iterator());
+    }
+
+    @Override
+    public Enumeration<V> elements() {
+        return new IteratorToEnumerationAdapter<V>(map.values().iterator());
+    }
+
+    @Override
+    public V get(Object key) {
+        return this.map.get(key);
+    }
+
+    @Override
+    public V put(K key, V value) {
+        return this.map.put(key, value);
+    }
+
+    @Override
+    public V remove(Object key) {
+        return this.map.remove(key);
+    }
+
+}
diff --git a/org.eclipse.virgo.util.osgi.manifest/src/main/java/org/eclipse/virgo/util/osgi/manifest/internal/StandardBundleManifest.java b/org.eclipse.virgo.util.osgi.manifest/src/main/java/org/eclipse/virgo/util/osgi/manifest/internal/StandardBundleManifest.java
index 0bb7645..e56e461 100755
--- a/org.eclipse.virgo.util.osgi.manifest/src/main/java/org/eclipse/virgo/util/osgi/manifest/internal/StandardBundleManifest.java
+++ b/org.eclipse.virgo.util.osgi.manifest/src/main/java/org/eclipse/virgo/util/osgi/manifest/internal/StandardBundleManifest.java
@@ -334,10 +334,7 @@
     public Dictionary<String, String> toDictionary() {
         synchroniseContentsWithHeaders();
 
-        Hashtable<String, String> output = new Hashtable<String, String>();
-        output.putAll(this.contents);
-
-        return output;
+        return new MapToDictionaryAdapter(new CaseInsensitiveMap<String>(this.contents));
     }
 
     /**