Author: davsclaus
Date: Wed Apr 28 08:44:19 2010
New Revision: 938819

URL: http://svn.apache.org/viewvc?rev=938819&view=rev
Log:
CAMEL-2603: camel-cache now supports GET operation. Refactored code to properly 
shutdown cache manager. Applied patch with thanks to Volodymyr Buell.

Added:
    
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConstants.java
   (with props)
    
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheManagerFactory.java
   (contents, props changed)
      - copied, changed from r938776, 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/factory/CacheManagerFactory.java
Removed:
    
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/factory/
Modified:
    
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheComponent.java
    
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConfiguration.java
    
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConsumer.java
    
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEndpoint.java
    
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheProducer.java
    
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedMessageBodyReplacer.java
    
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedTokenReplacer.java
    
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedXPathReplacer.java
    
camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheConsumerTest.java
    
camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheProducerTest.java

Modified: 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheComponent.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheComponent.java?rev=938819&r1=938818&r2=938819&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheComponent.java
 (original)
+++ 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheComponent.java
 Wed Apr 28 08:44:19 2010
@@ -22,9 +22,11 @@ import java.util.Map;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.impl.DefaultComponent;
+import org.apache.camel.util.ServiceHelper;
 
 public class CacheComponent extends DefaultComponent {
-    CacheConfiguration config;
+    private CacheConfiguration config;
+    private CacheManagerFactory cacheManagerFactory = new 
CacheManagerFactory();
     
     public CacheComponent() {
         config = new CacheConfiguration();
@@ -40,9 +42,28 @@ public class CacheComponent extends Defa
     protected Endpoint createEndpoint(String uri, String remaining, Map 
parameters) throws Exception {
         config.parseURI(new URI(uri));
         
-        CacheEndpoint cacheEndpoint = new CacheEndpoint(uri, this, config);
+        CacheEndpoint cacheEndpoint = new CacheEndpoint(uri, this, config, 
cacheManagerFactory);
         setProperties(cacheEndpoint.getConfig(), parameters);
         return cacheEndpoint;
     }
 
+    public CacheManagerFactory getCacheManagerFactory() {
+        return cacheManagerFactory;
+    }
+
+    public void setCacheManagerFactory(CacheManagerFactory 
cacheManagerFactory) {
+        this.cacheManagerFactory = cacheManagerFactory;
+    }
+
+    @Override
+    protected void doStart() throws Exception {
+        super.doStart();
+        ServiceHelper.startService(cacheManagerFactory);
+    }
+
+    @Override
+    protected void doStop() throws Exception {
+        ServiceHelper.stopService(cacheManagerFactory);
+        super.doStop();
+    }
 }

Modified: 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConfiguration.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConfiguration.java?rev=938819&r1=938818&r2=938819&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConfiguration.java
 (original)
+++ 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConfiguration.java
 Wed Apr 28 08:44:19 2010
@@ -44,7 +44,6 @@ public class CacheConfiguration {
 
     public CacheConfiguration(URI uri) throws Exception {
         parseURI(uri);
-        
     }
     
     public void parseURI(URI uri) throws Exception {

Added: 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConstants.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConstants.java?rev=938819&view=auto
==============================================================================
--- 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConstants.java
 (added)
+++ 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConstants.java
 Wed Apr 28 08:44:19 2010
@@ -0,0 +1,34 @@
+/**
+ * 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.component.cache;
+
+/**
+ * Constants used in this module
+ */
+public interface CacheConstants {
+
+    String CACHE_OPERATION = "CACHE_OPERATION";
+    String CACHE_KEY = "CACHE_KEY";
+    String CACHE_ELEMENT_WAS_FOUND = "CACHE_ELEMENT_WAS_FOUND";
+
+    String CACHE_OPERATION_ADD = "ADD";
+    String CACHE_OPERATION_UPDATE = "UPDATE";
+    String CACHE_OPERATION_DELETE = "DELETE";
+    String CACHE_OPERATION_DELETEALL = "DELETEALL";
+    String CACHE_OPERATION_GET = "GET";
+    String CACHE_OPERATION_CHECK = "CHECK";
+}

Propchange: 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConstants.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConstants.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConsumer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConsumer.java?rev=938819&r1=938818&r2=938819&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConsumer.java
 (original)
+++ 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheConsumer.java
 Wed Apr 28 08:44:19 2010
@@ -22,7 +22,6 @@ import net.sf.ehcache.Ehcache;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Processor;
-import org.apache.camel.component.cache.factory.CacheManagerFactory;
 import org.apache.camel.impl.DefaultConsumer;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -30,14 +29,12 @@ import org.apache.commons.logging.LogFac
 public class CacheConsumer extends DefaultConsumer {
 
     private static final transient Log LOG = 
LogFactory.getLog(CacheConsumer.class);
-    CacheEndpoint endpoint;
-    CacheConfiguration config;
-    Ehcache cache;
-    CacheManager cacheManager;
-    
+    private CacheConfiguration config;
+    private Ehcache cache;
+    private CacheManager cacheManager;
+
     public CacheConsumer(Endpoint endpoint, Processor processor, 
CacheConfiguration config) {
         super(endpoint, processor);
-        this.endpoint = (CacheEndpoint) endpoint;
         this.config = config;
     }
 
@@ -55,11 +52,11 @@ public class CacheConsumer extends Defau
 
     @Override
     public CacheEndpoint getEndpoint() {
-        return endpoint;
+        return (CacheEndpoint) super.getEndpoint();
     }
     
     protected void createConsumerCacheConnection() {
-        cacheManager = new CacheManagerFactory().instantiateCacheManager();
+        cacheManager = 
getEndpoint().getCacheManagerFactory().instantiateCacheManager();
         CacheEventListener cacheEventListener = new 
CacheEventListenerFactory().createCacheEventListener(null);
         cacheEventListener.setCacheConsumer(this);
 
@@ -89,9 +86,6 @@ public class CacheConsumer extends Defau
     
     protected void removeConsumerCacheConnection() {
         cacheManager.removeCache(config.getCacheName());
-        if (cacheManager.getCacheNames().length == 0) {
-            cacheManager.shutdown();
-        }
     }
 
 }

Modified: 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEndpoint.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEndpoint.java?rev=938819&r1=938818&r2=938819&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEndpoint.java
 (original)
+++ 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheEndpoint.java
 Wed Apr 28 08:44:19 2010
@@ -25,28 +25,36 @@ import org.apache.camel.Producer;
 import org.apache.camel.impl.DefaultEndpoint;
 import org.apache.camel.impl.DefaultExchange;
 import org.apache.camel.impl.DefaultMessage;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.apache.camel.util.ObjectHelper;
 
 public class CacheEndpoint extends DefaultEndpoint {
-    private static final transient Log LOG = 
LogFactory.getLog(CacheEndpoint.class);
-    CacheConfiguration config;
-    
-    public CacheEndpoint(String endpointUri, Component component, 
CacheConfiguration config) {
+    private CacheConfiguration config;
+    private CacheManagerFactory cacheManagerFactory;
+
+    public CacheEndpoint() {
+    }
+
+    public CacheEndpoint(String endpointUri, Component component, 
CacheConfiguration config,
+                         CacheManagerFactory cacheManagerFactory) {
         super(endpointUri, component);
         this.config = config;
+        this.cacheManagerFactory = cacheManagerFactory;
     }
 
     public Consumer createConsumer(Processor processor) throws Exception {
+        ObjectHelper.notNull(config, "config");
+        ObjectHelper.notNull(cacheManagerFactory, "cacheManagerFactory");
         return new CacheConsumer(this, processor, config);
     }
 
     public Producer createProducer() throws Exception {
+        ObjectHelper.notNull(config, "config");
+        ObjectHelper.notNull(cacheManagerFactory, "cacheManagerFactory");
         return new CacheProducer(this, config);
     }
 
     public boolean isSingleton() {
-        return false;
+        return true;
     }
 
     public CacheConfiguration getConfig() {
@@ -57,6 +65,14 @@ public class CacheEndpoint extends Defau
         this.config = config;
     }
 
+    public CacheManagerFactory getCacheManagerFactory() {
+        return cacheManagerFactory;
+    }
+
+    public void setCacheManagerFactory(CacheManagerFactory 
cacheManagerFactory) {
+        this.cacheManagerFactory = cacheManagerFactory;
+    }
+
     public Exchange createCacheExchange(String operation, String key, Object 
value) {
         Exchange exchange = new DefaultExchange(this.getCamelContext(), 
getExchangePattern());
         Message message = new DefaultMessage();

Copied: 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheManagerFactory.java
 (from r938776, 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/factory/CacheManagerFactory.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheManagerFactory.java?p2=camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheManagerFactory.java&p1=camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/factory/CacheManagerFactory.java&r1=938776&r2=938819&rev=938819&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/factory/CacheManagerFactory.java
 (original)
+++ 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheManagerFactory.java
 Wed Apr 28 08:44:19 2010
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.cache.factory;
+package org.apache.camel.component.cache;
 
 import net.sf.ehcache.CacheManager;
+import org.apache.camel.impl.ServiceSupport;
 
-public class CacheManagerFactory {
-
+public class CacheManagerFactory extends ServiceSupport {
     private CacheManager cacheManager;
 
     public synchronized CacheManager instantiateCacheManager() {
@@ -30,4 +30,15 @@ public class CacheManagerFactory {
         return cacheManager;
     }
 
+    @Override
+    protected void doStart() throws Exception {
+    }
+
+    @Override
+    protected void doStop() throws Exception {
+        // shutdown cache manager when stopping
+        if (cacheManager != null) {
+            cacheManager.shutdown();
+        }
+    }
 }

Propchange: 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheManagerFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheManagerFactory.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheManagerFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheProducer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheProducer.java?rev=938819&r1=938818&r2=938819&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheProducer.java
 (original)
+++ 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/component/cache/CacheProducer.java
 Wed Apr 28 08:44:19 2010
@@ -25,72 +25,77 @@ import net.sf.ehcache.CacheException;
 import net.sf.ehcache.CacheManager;
 import net.sf.ehcache.Ehcache;
 import net.sf.ehcache.Element;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
-import org.apache.camel.component.cache.factory.CacheManagerFactory;
 import org.apache.camel.impl.DefaultProducer;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 public class CacheProducer extends DefaultProducer {
     private static final transient Log LOG = 
LogFactory.getLog(CacheProducer.class);
-    Endpoint endpoint;
-    CacheConfiguration config;
-    CacheManager cacheManager;
-    Ehcache cache;
-    
+    private CacheConfiguration config;
+    private CacheManager cacheManager;
+    private Ehcache cache;
+
     public CacheProducer(Endpoint endpoint, CacheConfiguration config) throws 
Exception {
         super(endpoint);
-        this.endpoint = endpoint;
         this.config = config;
     }
 
+    @Override
+    protected void doStart() throws Exception {
+        cacheManager = 
getEndpoint().getCacheManagerFactory().instantiateCacheManager();
+        super.doStart();
+    }
+
+    @Override
+    public CacheEndpoint getEndpoint() {
+        return (CacheEndpoint) super.getEndpoint();
+    }
+
     public void process(Exchange exchange) throws Exception {
-         
-        cacheManager = new CacheManagerFactory().instantiateCacheManager();
-        
         if (LOG.isTraceEnabled()) {
             LOG.trace("Cache Name: " + config.getCacheName());
         }
+
         if (cacheManager.cacheExists(config.getCacheName())) {
             if (LOG.isTraceEnabled()) {
                 LOG.trace("Found an existing cache: " + config.getCacheName());
-                LOG.trace("Cache " + config.getCacheName() + " currently 
contains " + cacheManager.getCache(config.getCacheName()).getSize() + " 
elements");
+                LOG.trace("Cache " + config.getCacheName() + " currently 
contains "
+                        + 
cacheManager.getCache(config.getCacheName()).getSize() + " elements");
             }
             cache = cacheManager.getCache(config.getCacheName());
         } else {
-            cache = new Cache(config.getCacheName(), 
+            cache = new Cache(config.getCacheName(),
                     config.getMaxElementsInMemory(),
-                    config.getMemoryStoreEvictionPolicy(), 
-                    config.isOverflowToDisk(), 
-                    config.getDiskStorePath(), 
-                    config.isEternal(), 
-                    config.getTimeToLiveSeconds(), 
-                    config.getTimeToIdleSeconds(), 
-                    config.isDiskPersistent(), 
-                    config.getDiskExpiryThreadIntervalSeconds(), 
+                    config.getMemoryStoreEvictionPolicy(),
+                    config.isOverflowToDisk(),
+                    config.getDiskStorePath(),
+                    config.isEternal(),
+                    config.getTimeToLiveSeconds(),
+                    config.getTimeToIdleSeconds(),
+                    config.isDiskPersistent(),
+                    config.getDiskExpiryThreadIntervalSeconds(),
                     null);
             cacheManager.addCache(cache);
             if (LOG.isDebugEnabled()) {
                 LOG.debug("Added a new cache: " + cache.getName());
             }
         }
-       
-        
-        String key = (String) exchange.getIn().getHeader("CACHE_KEY");
-        String operation = (String) 
exchange.getIn().getHeader("CACHE_OPERATION");
+
+        String key = exchange.getIn().getHeader(CacheConstants.CACHE_KEY, 
String.class);
+        String operation = 
exchange.getIn().getHeader(CacheConstants.CACHE_OPERATION, String.class);
+
         if (operation == null) {
-            throw new CacheException("Operation property is not specified in 
the incoming exchange header."
-                + "A valid Operation property must be set to ADD, UPDATE, 
DELETE, DELETEALL");
+            throw new CacheException("Operation not specified in the message 
header [" + CacheConstants.CACHE_KEY + "]");
         }
-        if ((key == null) && (!operation.equalsIgnoreCase("DELETEALL"))) {
-            throw new CacheException("Cache Key is not specified in exchange 
either header or URL. Unable to add objects to the cache without a Key");
+        if ((key == null) && 
(!operation.equalsIgnoreCase(CacheConstants.CACHE_OPERATION_DELETEALL))) {
+            throw new CacheException("Cache Key is not specified in message 
header header or endpoint URL.");
         }
-        
+
         performCacheOperation(exchange, operation, key);
     }
-    
+
     private void performCacheOperation(Exchange exchange, String operation, 
String key) throws Exception {
         Object element;
 
@@ -99,37 +104,51 @@ public class CacheProducer extends Defau
             element = body;
         } else {
             InputStream is = 
exchange.getContext().getTypeConverter().mandatoryConvertTo(InputStream.class, 
body);
-
             // Read InputStream into a byte[] buffer
-            byte[] buffer = new byte[is.available()];
-            int n = is.available();
-            for (int j = 0; j < n; j++) {
-                buffer[j] = (byte)is.read();
-            }
-
-            element = buffer;
+            element = 
exchange.getContext().getTypeConverter().mandatoryConvertTo(byte[].class, is);
         }
 
-        if (operation.equalsIgnoreCase("ADD")) {
+        if (operation.equalsIgnoreCase(CacheConstants.CACHE_OPERATION_ADD)) {
             if (LOG.isDebugEnabled()) {
                 LOG.debug("Adding an element with key " + key + " into the 
Cache");
             }
             cache.put(new Element(key, element), true);
-        } else if (operation.equalsIgnoreCase("UPDATE")) {
+        } else if 
(operation.equalsIgnoreCase(CacheConstants.CACHE_OPERATION_UPDATE)) {
             if (LOG.isDebugEnabled()) {
                 LOG.debug("Updating an element with key " + key + " into the 
Cache");
             }
             cache.put(new Element(key, element), true);
-        } else if (operation.equalsIgnoreCase("DELETEALL")) {
+        } else if 
(operation.equalsIgnoreCase(CacheConstants.CACHE_OPERATION_DELETEALL)) {
             if (LOG.isDebugEnabled()) {
                 LOG.debug("Deleting All elements from the Cache");
             }
             cache.removeAll();
-        } else if (operation.equalsIgnoreCase("DELETE")) {
+        } else if 
(operation.equalsIgnoreCase(CacheConstants.CACHE_OPERATION_DELETE)) {
             if (LOG.isDebugEnabled()) {
                 LOG.debug("Deleting an element with key " + key + " into the 
Cache");
             }
             cache.remove(key, true);
+        } else if 
(operation.equalsIgnoreCase(CacheConstants.CACHE_OPERATION_GET)) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Quering an element with key " + key + " from the 
Cache");
+            }
+            if (cache.isKeyInCache(key)) {
+                
exchange.getIn().setHeader(CacheConstants.CACHE_ELEMENT_WAS_FOUND, true);
+                exchange.getIn().setBody(cache.get(key).getValue());
+            } else {
+                
exchange.getIn().removeHeader(CacheConstants.CACHE_ELEMENT_WAS_FOUND);
+            }
+        } else if 
(operation.equalsIgnoreCase(CacheConstants.CACHE_OPERATION_CHECK)) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Querying an element with key " + key + " from the 
Cache");
+            }
+            if (cache.isKeyInCache(key)) {
+                
exchange.getIn().setHeader(CacheConstants.CACHE_ELEMENT_WAS_FOUND, true);
+            } else {
+                
exchange.getIn().removeHeader(CacheConstants.CACHE_ELEMENT_WAS_FOUND);
+            }
+        } else {
+            throw new CacheException("Operation " + operation + " is not 
supported.");
         }
     }
 

Modified: 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedMessageBodyReplacer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedMessageBodyReplacer.java?rev=938819&r1=938818&r2=938819&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedMessageBodyReplacer.java
 (original)
+++ 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedMessageBodyReplacer.java
 Wed Apr 28 08:44:19 2010
@@ -21,7 +21,7 @@ import net.sf.ehcache.Ehcache;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
-import org.apache.camel.component.cache.factory.CacheManagerFactory;
+import org.apache.camel.component.cache.CacheManagerFactory;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 

Modified: 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedTokenReplacer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedTokenReplacer.java?rev=938819&r1=938818&r2=938819&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedTokenReplacer.java
 (original)
+++ 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedTokenReplacer.java
 Wed Apr 28 08:44:19 2010
@@ -23,7 +23,7 @@ import net.sf.ehcache.Ehcache;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
-import org.apache.camel.component.cache.factory.CacheManagerFactory;
+import org.apache.camel.component.cache.CacheManagerFactory;
 import org.apache.camel.converter.IOConverter;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.commons.logging.Log;

Modified: 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedXPathReplacer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedXPathReplacer.java?rev=938819&r1=938818&r2=938819&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedXPathReplacer.java
 (original)
+++ 
camel/trunk/components/camel-cache/src/main/java/org/apache/camel/processor/cache/CacheBasedXPathReplacer.java
 Wed Apr 28 08:44:19 2010
@@ -30,9 +30,10 @@ import org.w3c.dom.Document;
 
 import net.sf.ehcache.CacheManager;
 import net.sf.ehcache.Ehcache;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
-import org.apache.camel.component.cache.factory.CacheManagerFactory;
+import org.apache.camel.component.cache.CacheManagerFactory;
 import org.apache.camel.converter.IOConverter;
 import org.apache.camel.converter.jaxp.XmlConverter;
 import org.apache.camel.util.ObjectHelper;

Modified: 
camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheConsumerTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheConsumerTest.java?rev=938819&r1=938818&r2=938819&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheConsumerTest.java
 (original)
+++ 
camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheConsumerTest.java
 Wed Apr 28 08:44:19 2010
@@ -48,16 +48,16 @@ public class CacheConsumerTest extends C
         resultEndpoint.expectedMessageCount(3);
 
         List<String> operations = new ArrayList<String>();
-        operations.add("ADD");
-        operations.add("UPDATE");
-        operations.add("DELETE");
+        operations.add(CacheConstants.CACHE_OPERATION_ADD);
+        operations.add(CacheConstants.CACHE_OPERATION_UPDATE);
+        operations.add(CacheConstants.CACHE_OPERATION_DELETE);
         for (final String operation : operations) {
             producerTemplate.send(new Processor() {
                 public void process(Exchange exchange) throws Exception {
                     exchange.setProperty(Exchange.CHARSET_NAME, "UTF-8");
                     Message in = exchange.getIn();
-                    in.setHeader("CACHE_OPERATION", operation);
-                    in.setHeader("CACHE_KEY", "greeting");
+                    in.setHeader(CacheConstants.CACHE_OPERATION, operation);
+                    in.setHeader(CacheConstants.CACHE_KEY, "greeting");
                     in.setBody("Hello World");
                 }
             });
@@ -74,20 +74,20 @@ public class CacheConsumerTest extends C
         resultEndpoint.expectedMessageCount(3);
 
         List<String> operations = new ArrayList<String>();
-        operations.add("ADD");
-        operations.add("UPDATE");
-        operations.add("DELETE");
+        operations.add(CacheConstants.CACHE_OPERATION_ADD);
+        operations.add(CacheConstants.CACHE_OPERATION_UPDATE);
+        operations.add(CacheConstants.CACHE_OPERATION_DELETE);
         for (final String operation : operations) {
             producerTemplate.send(new Processor() {
                 public void process(Exchange exchange) throws Exception {
                     Poetry p = new Poetry();
                     p.setPoet("Ralph Waldo Emerson");
                     p.setPoem("Brahma");
-                    
+
                     exchange.setProperty(Exchange.CHARSET_NAME, "UTF-8");
                     Message in = exchange.getIn();
-                    in.setHeader("CACHE_OPERATION", operation);
-                    in.setHeader("CACHE_KEY", "poetry");
+                    in.setHeader(CacheConstants.CACHE_OPERATION, operation);
+                    in.setHeader(CacheConstants.CACHE_KEY, "poetry");
                     in.setBody(p);
                 }
             });
@@ -96,15 +96,15 @@ public class CacheConsumerTest extends C
         resultEndpoint.assertIsSatisfied();
         LOG.debug("Completed Test ---> testReceivingFileFromCache()");
     }
-    
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() {
                 from("cache://TestCache1").process(new Processor() {
                     public void process(Exchange exchange) throws Exception {
-                        String operation = 
(String)exchange.getIn().getHeader("CACHE_OPERATION");
-                        String key = 
(String)exchange.getIn().getHeader("CACHE_KEY");
+                        String operation = (String) 
exchange.getIn().getHeader(CacheConstants.CACHE_OPERATION);
+                        String key = (String) 
exchange.getIn().getHeader(CacheConstants.CACHE_KEY);
                         Object body = exchange.getIn().getBody();
                         String data = 
exchange.getContext().getTypeConverter().convertTo(String.class, body);
 

Modified: 
camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheProducerTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheProducerTest.java?rev=938819&r1=938818&r2=938819&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheProducerTest.java
 (original)
+++ 
camel/trunk/components/camel-cache/src/test/java/org/apache/camel/component/cache/CacheProducerTest.java
 Wed Apr 28 08:44:19 2010
@@ -21,10 +21,13 @@ import java.io.BufferedInputStream;
 import java.io.FileInputStream;
 import java.io.InputStream;
 
+import net.sf.ehcache.CacheException;
+import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.converter.IOConverter;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.apache.commons.logging.Log;
@@ -32,48 +35,59 @@ import org.apache.commons.logging.LogFac
 import org.junit.Test;
 
 public class CacheProducerTest extends CamelTestSupport {
+
+    private static final String FILEPATH_UPDATEDTEST_TXT = 
"./src/test/resources/updatedtest.txt";
+
+    private static final String FILEPATH_TEST_TXT = 
"./src/test/resources/test.txt";
+
     private static final transient Log LOG = 
LogFactory.getLog(CacheProducerTest.class);
-    
+
+    @EndpointInject(uri = "mock:CacheProducerTest.result")
+    protected MockEndpoint resultEndpoint;
+
+    @EndpointInject(uri = "mock:CacheProducerTest.exception")
+    protected MockEndpoint exceptionEndpoint;
+
     @Override
     public boolean isUseRouteBuilder() {
         return false;
     }
 
-    private void sendFile() throws Exception {
+    private void sendFile(final String path) throws Exception {
         template.send("direct:a", new Processor() {
             public void process(Exchange exchange) throws Exception {
-             // Read from an input stream
+                // Read from an input stream
                 InputStream is = new BufferedInputStream(
-                    new FileInputStream("./src/test/resources/test.txt"));
+                        new FileInputStream(path));    // 
"./src/test/resources/test.txt"));
 
                 byte buffer[] = IOConverter.toBytes(is);
                 is.close();
-                
+
                 // Set the property of the charset encoding
                 exchange.setProperty(Exchange.CHARSET_NAME, "UTF-8");
                 Message in = exchange.getIn();
                 in.setBody(buffer);
-            }            
+            }
         });
     }
-    
-    private void sendUpdatedFile() throws Exception {
-        template.send("direct:a", new Processor() {
-            public void process(Exchange exchange) throws Exception {
-             // Read from an input stream
-                InputStream is = new BufferedInputStream(
-                    new 
FileInputStream("./src/test/resources/updatedtest.txt"));
 
-                byte buffer[] = IOConverter.toBytes(is);
-                is.close();
-                
-                // Set the property of the charset encoding
-                exchange.setProperty(Exchange.CHARSET_NAME, "UTF-8");
-                Message in = exchange.getIn();
-                in.setBody(buffer);
-            }            
-        });
-    }    
+    private byte[] getFileAsByteArray(String path) throws Exception {
+        // Read from an input stream
+        InputStream is = new BufferedInputStream(new FileInputStream(path));
+
+        byte[] buffer = IOConverter.toBytes(is);
+        is.close();
+
+        return buffer;
+    }
+
+    private void sendOriginalFile() throws Exception {
+        sendFile(FILEPATH_TEST_TXT);
+    }
+
+    private void sendUpdatedFile() throws Exception {
+        sendFile(FILEPATH_UPDATEDTEST_TXT);
+    }
 
     private void sendSerializedData() throws Exception {
         template.send("direct:a", new Processor() {
@@ -81,94 +95,173 @@ public class CacheProducerTest extends C
                 Poetry p = new Poetry();
                 p.setPoet("Ralph Waldo Emerson");
                 p.setPoem("Brahma");
-                
+
                 // Set the property of the charset encoding
                 exchange.setProperty(Exchange.CHARSET_NAME, "UTF-8");
                 Message in = exchange.getIn();
                 in.setBody(p);
-            }            
+            }
         });
     }
-    
+
     @Test
     public void testAddingDataToCache() throws Exception {
         context.addRoutes(new RouteBuilder() {
             public void configure() {
-                from("direct:b").
-                    setHeader("CACHE_OPERATION", constant("ADD")).
-                    setHeader("CACHE_KEY", constant("Ralph_Waldo_Emerson")).
-                    to("cache://TestCache1");
+                from("direct:a").
+                        setHeader(CacheConstants.CACHE_OPERATION, 
constant(CacheConstants.CACHE_OPERATION_ADD)).
+                        setHeader(CacheConstants.CACHE_KEY, 
constant("Ralph_Waldo_Emerson")).
+                        to("cache://TestCache1");
             }
         });
         context.start();
         LOG.debug("------------Beginning CacheProducer Add 
Test---------------");
-        sendFile();
+        sendOriginalFile();
     }
 
     @Test
     public void testAddingSerializableDataToCache() throws Exception {
         context.addRoutes(new RouteBuilder() {
             public void configure() {
-                from("direct:b").
-                    setHeader("CACHE_OPERATION", constant("ADD")).
-                    setHeader("CACHE_KEY", constant("Ralph_Waldo_Emerson")).
-                    to("cache://TestCache1");
+                from("direct:a").
+                        setHeader(CacheConstants.CACHE_OPERATION, 
constant(CacheConstants.CACHE_OPERATION_ADD)).
+                        setHeader(CacheConstants.CACHE_KEY, 
constant("Ralph_Waldo_Emerson")).
+                        to("cache://TestCache1");
             }
         });
         context.start();
         LOG.debug("------------Beginning CacheProducer Add 
Test---------------");
-        sendFile();
+        sendOriginalFile();
     }
+
     @Test
     public void testUpdatingDataInCache() throws Exception {
         context.addRoutes(new RouteBuilder() {
             public void configure() {
-                from("direct:b").
-                    setHeader("CACHE_OPERATION", constant("UPDATE")).
-                    setHeader("CACHE_KEY", constant("Ralph_Waldo_Emerson")).
-                    to("cache://TestCache1");
+                from("direct:a").
+                        setHeader(CacheConstants.CACHE_OPERATION, 
constant(CacheConstants.CACHE_OPERATION_UPDATE)).
+                        setHeader(CacheConstants.CACHE_KEY, 
constant("Ralph_Waldo_Emerson")).
+                        to("cache://TestCache1");
             }
         });
         context.start();
         LOG.debug("------------Beginning CacheProducer Update 
Test---------------");
         sendSerializedData();
     }
-    
+
     @Test
     public void testDeletingDataFromCache() throws Exception {
         context.addRoutes(new RouteBuilder() {
             public void configure() {
-                from("direct:c").
-                    setHeader("CACHE_OPERATION", constant("DELETE")).
-                    setHeader("CACHE_KEY", constant("Ralph_Waldo_Emerson")).
-                    to("cache://TestCache1");
+                from("direct:a").
+                        setHeader(CacheConstants.CACHE_OPERATION, 
constant(CacheConstants.CACHE_OPERATION_DELETE)).
+                        setHeader(CacheConstants.CACHE_KEY, 
constant("Ralph_Waldo_Emerson")).
+                        to("cache://TestCache1");
             }
         });
         context.start();
         LOG.debug("------------Beginning CacheProducer Delete 
Test---------------");
         sendUpdatedFile();
     }
-    
+
     @Test
     public void testDeletingAllDataFromCache() throws Exception {
         context.addRoutes(new RouteBuilder() {
             public void configure() {
                 from("direct:a").
-                    setHeader("CACHE_OPERATION", constant("ADD")).
-                    setHeader("CACHE_KEY", constant("Ralph_Waldo_Emerson")).
-                    to("cache://TestCache1");
-                from("direct:b").
-                    setHeader("CACHE_OPERATION", constant("ADD")).
-                    setHeader("CACHE_KEY", constant("Ralph_Waldo_Emerson2")).
-                    to("cache://TestCache1");
-                from("direct:c").
-                    setHeader("CACHE_OPERATION", constant("DELETEALL")).
-                    to("cache://TestCache1");
+                        setHeader(CacheConstants.CACHE_OPERATION, 
constant(CacheConstants.CACHE_OPERATION_DELETEALL)).
+                        to("cache://TestCache1");
             }
         });
         context.start();
         LOG.debug("------------Beginning CacheProducer Delete All Elements 
Test---------------");
         sendUpdatedFile();
-    }    
-    
+    }
+
+    @Test
+    public void testUnknownOperation() throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            public void configure() {
+                onException(CacheException.class).
+                        handled(true).
+                        to("log:*** LOGGER").
+                        to("mock:CacheProducerTest.exception");
+
+                from("direct:a").
+                        setHeader(CacheConstants.CACHE_OPERATION, 
constant("UNKNOWN")).
+                        setHeader(CacheConstants.CACHE_KEY, 
constant("Ralph_Waldo_Emerson")).
+                        to("cache://TestCache1").
+                        to("mock:CacheProducerTest.result");
+            }
+        });
+        resultEndpoint.expectedMessageCount(0);
+        exceptionEndpoint.expectedMessageCount(1);
+        context.start();
+        LOG.debug("------------Beginning CacheProducer Query An Elements 
Test---------------");
+        sendUpdatedFile();
+        resultEndpoint.assertIsSatisfied();
+        exceptionEndpoint.assertIsSatisfied();
+    }
+
+    @Test
+    public void testQueringNonExistingDataFromCache() throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            public void configure() {
+                onException(CacheException.class).
+                        handled(true).
+                        to("log:*** LOGGER").
+                        to("mock:CacheProducerTest.exception");
+
+                from("direct:a").
+                        setHeader(CacheConstants.CACHE_OPERATION, 
constant(CacheConstants.CACHE_OPERATION_DELETEALL)).
+                        to("cache://TestCache1").
+                        setHeader(CacheConstants.CACHE_OPERATION, 
constant(CacheConstants.CACHE_OPERATION_GET)).
+                        setHeader(CacheConstants.CACHE_KEY, 
constant("Ralph_Waldo_Emerson")).
+                        to("cache://TestCache1").
+                        
choice().when(header(CacheConstants.CACHE_ELEMENT_WAS_FOUND).isNotNull()).
+                        to("mock:CacheProducerTest.result").end();
+            }
+        });
+        resultEndpoint.expectedMessageCount(0);
+        exceptionEndpoint.expectedMessageCount(0);
+        context.start();
+        LOG.debug("------------Beginning CacheProducer Query An Elements 
Test---------------");
+        sendUpdatedFile();
+        resultEndpoint.assertIsSatisfied();
+        exceptionEndpoint.assertIsSatisfied();
+    }
+
+    @Test
+    public void testQueringDataFromCache() throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            public void configure() {
+                onException(CacheException.class).
+                        handled(true).
+                        to("log:*** LOGGER").
+                        to("mock:CacheProducerTest.exception");
+
+                from("direct:a").
+                        setHeader(CacheConstants.CACHE_OPERATION, 
constant(CacheConstants.CACHE_OPERATION_ADD)).
+                        setHeader(CacheConstants.CACHE_KEY, 
constant("Ralph_Waldo_Emerson")).
+                        to("cache://TestCache1").
+                        setBody(constant("Don't care. This body will be 
overridden.")).
+                        setHeader(CacheConstants.CACHE_OPERATION, 
constant(CacheConstants.CACHE_OPERATION_GET)).
+                        setHeader(CacheConstants.CACHE_KEY, 
constant("Ralph_Waldo_Emerson")).
+                        to("cache://TestCache1").
+                        
choice().when(header(CacheConstants.CACHE_ELEMENT_WAS_FOUND).isNotNull()).
+                        to("mock:CacheProducerTest.result").end();
+            }
+        });
+
+        resultEndpoint.expectedMessageCount(1);
+        exceptionEndpoint.expectedMessageCount(0);
+        String body = new String(getFileAsByteArray(FILEPATH_UPDATEDTEST_TXT), 
"UTF-8");
+        resultEndpoint.expectedBodiesReceived(body);
+        context.start();
+        LOG.debug("------------Beginning CacheProducer Query An Elements 
Test---------------");
+        sendUpdatedFile();
+        resultEndpoint.assertIsSatisfied();
+        exceptionEndpoint.assertIsSatisfied();
+    }
+
 }


Reply via email to