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>

Reply via email to