Author: rmannibucau
Date: Tue Oct 18 21:41:26 2011
New Revision: 1185884

URL: http://svn.apache.org/viewvc?rev=1185884&view=rev
Log:
adding unsensitive keyset for rest injected httpheaders (in ebjs)

Added:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/MultivaluedMapWithCaseInsensitiveKeySet.java
Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalHttpHeaders.java

Added: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/MultivaluedMapWithCaseInsensitiveKeySet.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/MultivaluedMapWithCaseInsensitiveKeySet.java?rev=1185884&view=auto
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/MultivaluedMapWithCaseInsensitiveKeySet.java
 (added)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/MultivaluedMapWithCaseInsensitiveKeySet.java
 Tue Oct 18 21:41:26 2011
@@ -0,0 +1,101 @@
+package org.apache.openejb.rest;
+
+import javax.ws.rs.core.MultivaluedMap;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+/**
+ * @author rmannibucau
+ */
+public class MultivaluedMapWithCaseInsensitiveKeySet<V> implements 
MultivaluedMap<String, V> {
+    private MultivaluedMap<String, V> delegate;
+
+    public MultivaluedMapWithCaseInsensitiveKeySet(MultivaluedMap<String, V> 
map) {
+        delegate = map;
+    }
+
+    @Override public void add(String key, V value) {
+        delegate.add(key, value);
+    }
+
+    @Override public V getFirst(String key) {
+        return delegate.getFirst(realKey(key));
+    }
+
+    @Override public void putSingle(String key, V value) {
+        delegate.putSingle(key, value);
+    }
+
+    @Override public int size() {
+        return delegate.size();
+    }
+
+    @Override public boolean isEmpty() {
+        return delegate.isEmpty();
+    }
+
+    @Override public boolean containsKey(Object key) {
+        return 
getInsensitiveKeySet(delegate.keySet()).contains(key.toString());
+    }
+
+    @Override public boolean containsValue(Object value) {
+        return delegate.containsValue(value);
+    }
+
+    @Override public List<V> get(Object key) {
+        return delegate.get(realKey(key));
+    }
+
+    @Override public List<V> put(String key, List<V> value) {
+        return delegate.put(key, value);
+    }
+
+    @Override public List<V> remove(Object key) {
+        return delegate.remove(realKey(key));
+    }
+
+    @Override public void putAll(Map<? extends String, ? extends List<V>> m) {
+        delegate.putAll(m);
+    }
+
+    @Override public void clear() {
+        delegate.clear();
+    }
+
+    @Override public Set<String> keySet() {
+        return getInsensitiveKeySet(delegate.keySet());
+    }
+
+    @Override public Collection<List<V>> values() {
+        return delegate.values();
+    }
+
+    @Override public Set<Entry<String, List<V>>> entrySet() {
+        return delegate.entrySet();
+    }
+
+    private static Set<String> getInsensitiveKeySet(Set<String> values) {
+        Set<String> set = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
+        set.addAll(values);
+        return set;
+    }
+
+    private static Object lowerCase(Object key) {
+        if (key instanceof String ) {
+            return ((String) key).toLowerCase();
+        }
+        return key;
+    }
+
+    private String realKey(Object key) {
+        for (Map.Entry<String, ?> entry : delegate.entrySet()) {
+            if (entry.getKey().toLowerCase().equals(lowerCase(key))) {
+                return entry.getKey();
+            }
+        }
+        return null;
+    }
+}

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalHttpHeaders.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalHttpHeaders.java?rev=1185884&r1=1185883&r2=1185884&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalHttpHeaders.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalHttpHeaders.java
 Tue Oct 18 21:41:26 2011
@@ -47,7 +47,7 @@ public class ThreadLocalHttpHeaders exte
     }
 
     public MultivaluedMap<String, String> getRequestHeaders() {
-        return get().getRequestHeaders();
+        return new 
MultivaluedMapWithCaseInsensitiveKeySet<String>(get().getRequestHeaders());
     }
 
     public List<Locale> getAcceptableLanguages() {


Reply via email to