CAMEL-8872 Camel-Hazelcast: Add new operations to HazelcastAtomicNumber producer, add getAndAdd Operation
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/11883ff7 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/11883ff7 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/11883ff7 Branch: refs/heads/master Commit: 11883ff788da1bfcff752f0d8ce3d3fa459ffcc6 Parents: 68c62b6 Author: Andrea Cosentino <anco...@gmail.com> Authored: Mon Jun 15 14:31:32 2015 +0200 Committer: Andrea Cosentino <anco...@gmail.com> Committed: Mon Jun 15 17:29:42 2015 +0200 ---------------------------------------------------------------------- .../component/hazelcast/HazelcastComponentHelper.java | 1 + .../camel/component/hazelcast/HazelcastConstants.java | 1 + .../atomicnumber/HazelcastAtomicnumberProducer.java | 9 +++++++++ .../HazelcastAtomicnumberProducerForSpringTest.java | 9 ++++++++- .../hazelcast/HazelcastAtomicnumberProducerTest.java | 11 +++++++++++ .../META-INF/spring/test-camel-context-atomicnumber.xml | 8 ++++++++ 6 files changed, 38 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/11883ff7/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastComponentHelper.java ---------------------------------------------------------------------- diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastComponentHelper.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastComponentHelper.java index cad9f64..9c281cf 100644 --- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastComponentHelper.java +++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastComponentHelper.java @@ -111,6 +111,7 @@ public final class HazelcastComponentHelper { addMapping("setvalue", HazelcastConstants.SETVALUE_OPERATION); addMapping("destroy", HazelcastConstants.DESTROY_OPERATION); addMapping("compareAndSet", HazelcastConstants.COMPARE_AND_SET_OPERATION); + addMapping("getAndAdd", HazelcastConstants.GET_AND_ADD); // queue addMapping("add", HazelcastConstants.ADD_OPERATION); http://git-wip-us.apache.org/repos/asf/camel/blob/11883ff7/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastConstants.java ---------------------------------------------------------------------- diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastConstants.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastConstants.java index a8f15c3..8d5a9e3 100644 --- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastConstants.java +++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastConstants.java @@ -79,6 +79,7 @@ public final class HazelcastConstants { public static final int SETVALUE_OPERATION = 22; public static final int DESTROY_OPERATION = 23; public static final int COMPARE_AND_SET_OPERATION = 24; + public static final int GET_AND_ADD = 25; // queue public static final int ADD_OPERATION = 31; http://git-wip-us.apache.org/repos/asf/camel/blob/11883ff7/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/atomicnumber/HazelcastAtomicnumberProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/atomicnumber/HazelcastAtomicnumberProducer.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/atomicnumber/HazelcastAtomicnumberProducer.java index a4827ee..fd42b7a 100644 --- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/atomicnumber/HazelcastAtomicnumberProducer.java +++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/atomicnumber/HazelcastAtomicnumberProducer.java @@ -62,6 +62,10 @@ public class HazelcastAtomicnumberProducer extends HazelcastDefaultProducer { case HazelcastConstants.COMPARE_AND_SET_OPERATION: this.compare(expectedValue, exchange); break; + + case HazelcastConstants.GET_AND_ADD: + this.getAndAdd(exchange); + break; case HazelcastConstants.SETVALUE_OPERATION: this.set(exchange); @@ -102,6 +106,11 @@ public class HazelcastAtomicnumberProducer extends HazelcastDefaultProducer { } exchange.getOut().setBody(this.atomicnumber.compareAndSet(expected, update)); } + + private void getAndAdd(Exchange exchange) { + long delta = exchange.getIn().getBody(Long.class); + exchange.getOut().setBody(this.atomicnumber.getAndAdd(delta)); + } private void set(Exchange exchange) { this.atomicnumber.set(exchange.getIn().getBody(Long.class)); http://git-wip-us.apache.org/repos/asf/camel/blob/11883ff7/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerForSpringTest.java ---------------------------------------------------------------------- diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerForSpringTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerForSpringTest.java index 3f7105d..13f682b 100644 --- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerForSpringTest.java +++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerForSpringTest.java @@ -109,5 +109,12 @@ public class HazelcastAtomicnumberProducerForSpringTest extends HazelcastCamelSp verify(atomicNumber).compareAndSet(1233L, 1235L); assertEquals(false, result); } - + + @Test + public void testGetAndAdd() { + when(atomicNumber.getAndAdd(12L)).thenReturn(13L); + long result = template.requestBody("direct:getAndAdd", 12L, Long.class); + verify(atomicNumber).getAndAdd(12L); + assertEquals(13L, result); + } } http://git-wip-us.apache.org/repos/asf/camel/blob/11883ff7/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerTest.java index a7bf3ad..53f4f8c 100644 --- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerTest.java +++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerTest.java @@ -118,6 +118,14 @@ public class HazelcastAtomicnumberProducerTest extends HazelcastCamelTestSupport verify(atomicNumber).compareAndSet(1233L, 1235L); assertEquals(false, result); } + + @Test + public void testGetAndAdd() { + when(atomicNumber.getAndAdd(12L)).thenReturn(13L); + long result = template.requestBody("direct:getAndAdd", 12L, Long.class); + verify(atomicNumber).getAndAdd(12L); + assertEquals(13L, result); + } @Override protected RouteBuilder createRouteBuilder() throws Exception { @@ -144,6 +152,9 @@ public class HazelcastAtomicnumberProducerTest extends HazelcastCamelTestSupport from("direct:compareAndSet").setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.COMPARE_AND_SET_OPERATION)).to( String.format("hazelcast:%sfoo", HazelcastConstants.ATOMICNUMBER_PREFIX)); + + from("direct:getAndAdd").setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.GET_AND_ADD)).to( + String.format("hazelcast:%sfoo", HazelcastConstants.ATOMICNUMBER_PREFIX)); from("direct:setWithOperationNumber").toF("hazelcast:%sfoo?operation=%s", HazelcastConstants.ATOMICNUMBER_PREFIX, HazelcastConstants.SETVALUE_OPERATION); from("direct:setWithOperationName").toF("hazelcast:%sfoo?operation=setvalue", HazelcastConstants.ATOMICNUMBER_PREFIX); http://git-wip-us.apache.org/repos/asf/camel/blob/11883ff7/components/camel-hazelcast/src/test/resources/META-INF/spring/test-camel-context-atomicnumber.xml ---------------------------------------------------------------------- diff --git a/components/camel-hazelcast/src/test/resources/META-INF/spring/test-camel-context-atomicnumber.xml b/components/camel-hazelcast/src/test/resources/META-INF/spring/test-camel-context-atomicnumber.xml index 949d808..4c7b859 100644 --- a/components/camel-hazelcast/src/test/resources/META-INF/spring/test-camel-context-atomicnumber.xml +++ b/components/camel-hazelcast/src/test/resources/META-INF/spring/test-camel-context-atomicnumber.xml @@ -64,6 +64,14 @@ </route> <route> + <from uri="direct:getAndAdd" /> + <setHeader headerName="CamelHazelcastOperationType"> + <constant>getAndAdd</constant> + </setHeader> + <to uri="hazelcast:atomicvalue:foo" /> + </route> + + <route> <from uri="direct:destroy" /> <setHeader headerName="CamelHazelcastOperationType"> <constant>destroy</constant>