CAMEL-8750 Camel-Infinispan: Add Remove, RemoveAsync, Replace, ReplaceAsync 
operation for a specific value


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ff1c9598
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ff1c9598
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ff1c9598

Branch: refs/heads/master
Commit: ff1c9598c4faa21874ef0ef634516acbba0ba204
Parents: 40ac149
Author: Andrea Cosentino <anco...@gmail.com>
Authored: Wed May 6 13:55:21 2015 +0200
Committer: Andrea Cosentino <anco...@gmail.com>
Committed: Wed May 6 18:04:02 2015 +0200

----------------------------------------------------------------------
 .../infinispan/InfinispanOperation.java         | 14 ++++++-
 .../infinispan/InfinispanProducerTest.java      | 40 ++++++++++++++++++++
 2 files changed, 52 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/ff1c9598/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanOperation.java
----------------------------------------------------------------------
diff --git 
a/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanOperation.java
 
b/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanOperation.java
index efbd876..14fd363 100644
--- 
a/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanOperation.java
+++ 
b/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/InfinispanOperation.java
@@ -194,13 +194,23 @@ public class InfinispanOperation {
         }, REMOVE {
             @Override
             void execute(BasicCache<Object, Object> cache, Exchange exchange) {
-                Object result = cache.remove(getKey(exchange));
+                Object result;
+                if (ObjectHelper.isEmpty(getValue(exchange))) {
+                    result = cache.remove(getKey(exchange));
+                } else {
+                    result = cache.remove(getKey(exchange), 
getValue(exchange));
+                }
                 setResult(result, exchange);
             }
         }, REMOVEASYNC {
             @Override
             void execute(BasicCache<Object, Object> cache, Exchange exchange) {
-                NotifyingFuture result = cache.removeAsync(getKey(exchange));
+                NotifyingFuture result;
+                if (ObjectHelper.isEmpty(getValue(exchange))) {
+                    result = cache.removeAsync(getKey(exchange));
+                } else {
+                    result = cache.removeAsync(getKey(exchange), 
getValue(exchange));
+                }
                 setResult(result, exchange);
             }
         }, REPLACE {

http://git-wip-us.apache.org/repos/asf/camel/blob/ff1c9598/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/InfinispanProducerTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/InfinispanProducerTest.java
 
b/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/InfinispanProducerTest.java
index 8910493..8993fdd 100644
--- 
a/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/InfinispanProducerTest.java
+++ 
b/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/InfinispanProducerTest.java
@@ -964,6 +964,46 @@ public class InfinispanProducerTest extends 
InfinispanTestSupport {
         Object value = currentCache().get(KEY_ONE);
         assertEquals(value, null);
     }
+    
+    @Test
+    public void deletesExistingValueByKeyWithValue() throws Exception {
+        currentCache().put(KEY_ONE, VALUE_ONE);
+
+        Exchange exchange = template.request("direct:start", new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(InfinispanConstants.KEY, KEY_ONE);
+                exchange.getIn().setHeader(InfinispanConstants.VALUE, 
VALUE_ONE);
+                exchange.getIn().setHeader(InfinispanConstants.OPERATION, 
InfinispanConstants.REMOVE);
+            }
+        });
+
+        assertEquals(exchange.getIn().getHeader(InfinispanConstants.RESULT, 
Boolean.class), true);
+
+        Object value = currentCache().get(KEY_ONE);
+        assertEquals(value, null);
+    }
+    
+    @Test
+    public void deletesExistingValueByKeyAsyncWithValue() throws Exception {
+        currentCache().put(KEY_ONE, VALUE_ONE);
+
+        Exchange exchange = template.request("direct:removeasync", new 
Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(InfinispanConstants.KEY, KEY_ONE);
+                exchange.getIn().setHeader(InfinispanConstants.VALUE, 
VALUE_ONE);
+                exchange.getIn().setHeader(InfinispanConstants.OPERATION, 
InfinispanConstants.REMOVE_ASYNC);
+            }
+        });
+
+        Thread.sleep(100);
+        NotifyingFuture fut = 
exchange.getIn().getHeader(InfinispanConstants.RESULT, NotifyingFuture.class);
+        assertEquals(fut.isDone(), Boolean.TRUE);
+
+        Object value = currentCache().get(KEY_ONE);
+        assertEquals(value, null);
+    }
 
     @Test
     public void clearsAllValues() throws Exception {

Reply via email to