Author: davsclaus
Date: Fri Aug  7 09:40:03 2009
New Revision: 801918

URL: http://svn.apache.org/viewvc?rev=801918&view=rev
Log:
CAMEL-1886: Lookup headers is now key name case agnostic (case insensitive).

Added:
    
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageCaseAgnosticLookupHeaderTest.java
   (with props)
Modified:
    
camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
    
camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
    
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/processor/RemoveHeaderTest.java

Modified: 
camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
URL: 
http://svn.apache.org/viewvc/camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java?rev=801918&r1=801917&r2=801918&view=diff
==============================================================================
--- 
camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
 (original)
+++ 
camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
 Fri Aug  7 09:40:03 2009
@@ -811,13 +811,20 @@
 
     @SuppressWarnings("unchecked")
     protected void performAssertions(Exchange exchange) throws Exception {
-        // must use a copy of the in message
+        // Must create a new instance and populate from the source
+        // as this is snapshot based and must not alter in case the source
+        // is altered later during routing
+        // This has the implications that received exchanges/messages on mocks
+        // are always default based and not specific types such as 
org.apache.camel.component.jms.JmsMessage
+
         Exchange copy = new DefaultExchange(exchange);
         copy.setExchangeId(exchange.getExchangeId());
 
         if (exchange.hasProperties()) {
             copy.getProperties().putAll(exchange.getProperties());
         }
+
+        // snapshot bodies
         if (exchange.hasOut()) {
             copy.getOut().copyFrom(exchange.getOut());
         }

Modified: 
camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
URL: 
http://svn.apache.org/viewvc/camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java?rev=801918&r1=801917&r2=801918&view=diff
==============================================================================
--- 
camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
 (original)
+++ 
camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
 Fri Aug  7 09:40:03 2009
@@ -33,6 +33,7 @@
 public class DefaultMessage extends MessageSupport {
     private boolean fault;
     private Map<String, Object> headers;
+    private Map<String, Object> lowerCaseHeaders;
     private Map<String, DataHandler> attachments;
 
     @Override
@@ -55,11 +56,25 @@
     }
     
     public Object getHeader(String name) {
-        return getHeaders().get(name);
+        Object answer = getHeaders().get(name);
+        if (answer != null) {
+            return answer;
+        }
+
+        // not found then try a lower case lookup
+        if (!getHeaders().isEmpty()) {
+            return getLowerCaseHeaders().get(name.toLowerCase());
+        }
+
+        // not found
+        return null;
     }
 
     public <T> T getHeader(String name, Class<T> type) {
         Object value = getHeader(name);
+        if (value == null) {
+            return null;
+        }
 
         // eager same instance type test to avoid the overhead of invoking the 
type converter
         // if already same type
@@ -80,10 +95,19 @@
             headers = createHeaders();
         }
         headers.put(name, value);
+
+        // keep lower case in sync
+        if (lowerCaseHeaders != null) {
+            lowerCaseHeaders.put(name.toLowerCase(), value);
+        }
     }
 
     public Object removeHeader(String name) {
         if (headers != null) {
+            // keep lower case in sync
+            if (lowerCaseHeaders != null) {
+                lowerCaseHeaders.remove(name.toLowerCase());
+            }
             return headers.remove(name);
         } else {
             return null;
@@ -99,6 +123,11 @@
 
     public void setHeaders(Map<String, Object> headers) {
         this.headers = headers;
+
+        if (this.lowerCaseHeaders != null) {
+            this.lowerCaseHeaders.clear();
+        }
+        this.lowerCaseHeaders = null;
     }
 
     public boolean hasHeaders() {
@@ -212,4 +241,15 @@
     public String createExchangeId() {
         return null;
     }
+
+    protected Map getLowerCaseHeaders() {
+        if (lowerCaseHeaders == null) {
+            lowerCaseHeaders = new HashMap<String, Object>(headers.size());
+            for (Map.Entry<String, Object> entry : headers.entrySet()) {
+                lowerCaseHeaders.put(entry.getKey().toLowerCase(), 
entry.getValue());
+            }
+        }
+        return lowerCaseHeaders;
+    }
+
 }

Added: 
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageCaseAgnosticLookupHeaderTest.java
URL: 
http://svn.apache.org/viewvc/camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageCaseAgnosticLookupHeaderTest.java?rev=801918&view=auto
==============================================================================
--- 
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageCaseAgnosticLookupHeaderTest.java
 (added)
+++ 
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageCaseAgnosticLookupHeaderTest.java
 Fri Aug  7 09:40:03 2009
@@ -0,0 +1,99 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.impl;
+
+import junit.framework.TestCase;
+import org.apache.camel.Message;
+
+/**
+ * @version $Revision$
+ */
+public class DefaultMessageCaseAgnosticLookupHeaderTest extends TestCase {
+
+    public void testLookupCaseAgnostic() {
+        Message msg = new DefaultMessage();
+        assertNull(msg.getHeader("foo"));
+
+        msg.setHeader("foo", "cheese");
+
+        assertEquals("cheese", msg.getHeader("foo"));
+        assertEquals("cheese", msg.getHeader("Foo"));
+        assertEquals("cheese", msg.getHeader("FOO"));
+    }
+
+    public void testLookupCaseAgnosticAddHeader() {
+        Message msg = new DefaultMessage();
+        assertNull(msg.getHeader("foo"));
+
+        msg.setHeader("foo", "cheese");
+
+        assertEquals("cheese", msg.getHeader("foo"));
+        assertEquals("cheese", msg.getHeader("Foo"));
+        assertEquals("cheese", msg.getHeader("FOO"));
+        assertNull(msg.getHeader("unknown"));
+
+        msg.setHeader("bar", "beer");
+
+        assertEquals("beer", msg.getHeader("bar"));
+        assertEquals("beer", msg.getHeader("Bar"));
+        assertEquals("beer", msg.getHeader("BAR"));
+        assertNull(msg.getHeader("unknown"));
+    }
+
+    public void testLookupCaseAgnosticAddHeader2() {
+        Message msg = new DefaultMessage();
+        assertNull(msg.getHeader("foo"));
+
+        msg.setHeader("foo", "cheese");
+
+        assertEquals("cheese", msg.getHeader("FOO"));
+        assertEquals("cheese", msg.getHeader("foo"));
+        assertEquals("cheese", msg.getHeader("Foo"));
+        assertNull(msg.getHeader("unknown"));
+
+        msg.setHeader("bar", "beer");
+
+        assertEquals("beer", msg.getHeader("BAR"));
+        assertEquals("beer", msg.getHeader("bar"));
+        assertEquals("beer", msg.getHeader("Bar"));
+        assertNull(msg.getHeader("unknown"));
+    }
+
+    public void testLookupCaseAgnosticAddHeaderRemoveHeader() {
+        Message msg = new DefaultMessage();
+        assertNull(msg.getHeader("foo"));
+
+        msg.setHeader("foo", "cheese");
+
+        assertEquals("cheese", msg.getHeader("foo"));
+        assertEquals("cheese", msg.getHeader("Foo"));
+        assertEquals("cheese", msg.getHeader("FOO"));
+        assertNull(msg.getHeader("unknown"));
+
+        msg.setHeader("bar", "beer");
+
+        assertEquals("beer", msg.getHeader("bar"));
+        assertEquals("beer", msg.getHeader("Bar"));
+        assertEquals("beer", msg.getHeader("BAR"));
+        assertNull(msg.getHeader("unknown"));
+
+        msg.removeHeader("bar");
+        assertNull(msg.getHeader("bar"));
+        assertNull(msg.getHeader("unknown"));
+    }
+
+}

Propchange: 
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageCaseAgnosticLookupHeaderTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageCaseAgnosticLookupHeaderTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/processor/RemoveHeaderTest.java
URL: 
http://svn.apache.org/viewvc/camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/processor/RemoveHeaderTest.java?rev=801918&r1=801917&r2=801918&view=diff
==============================================================================
--- 
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/processor/RemoveHeaderTest.java
 (original)
+++ 
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/processor/RemoveHeaderTest.java
 Fri Aug  7 09:40:03 2009
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.processor;
 
 import java.util.List;


Reply via email to