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 {