Repository: camel
Updated Branches:
  refs/heads/master 9c628c284 -> 8af7e6517


CAMEL-8730 Camel-Hazelcast: Add replace operation to map producer


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

Branch: refs/heads/master
Commit: 8af7e65170f6fe70969f0a75484269186b85cbc1
Parents: 9c628c2
Author: Andrea Cosentino <anco...@gmail.com>
Authored: Sun May 3 10:12:25 2015 +0200
Committer: Andrea Cosentino <anco...@gmail.com>
Committed: Sun May 3 10:12:25 2015 +0200

----------------------------------------------------------------------
 .../component/hazelcast/HazelcastConstants.java |  3 +-
 .../hazelcast/map/HazelcastMapProducer.java     | 42 ++++++++------------
 .../hazelcast/HazelcastMapProducerTest.java     | 14 ++-----
 3 files changed, 21 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/8af7e651/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 84521c3..dcdcf6f 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
@@ -57,8 +57,7 @@ public final class HazelcastConstants {
     public static final int UPDATE_OPERATION = 4;
     public static final int QUERY_OPERATION = 5;
     public static final int GET_ALL_OPERATION = 6;
-    public static final int REPLACE_OPERATION = 7;
-    public static final int CLEAR_OPERATION = 8;
+    public static final int CLEAR_OPERATION = 7;
 
     // multimap
     public static final int REMOVEVALUE_OPERATION = 10;

http://git-wip-us.apache.org/repos/asf/camel/blob/8af7e651/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/map/HazelcastMapProducer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/map/HazelcastMapProducer.java
 
b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/map/HazelcastMapProducer.java
index ab59a6a..dfc917c 100644
--- 
a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/map/HazelcastMapProducer.java
+++ 
b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/map/HazelcastMapProducer.java
@@ -80,21 +80,17 @@ public class HazelcastMapProducer extends 
HazelcastDefaultProducer {
             break;
 
         case HazelcastConstants.UPDATE_OPERATION:
-            this.update(oid, exchange);
-            break;
-
-        case HazelcastConstants.QUERY_OPERATION:
-            this.query(query, exchange);
-            break;
-
-        case HazelcastConstants.REPLACE_OPERATION:
             if (ObjectHelper.isEmpty(ovalue)) {
-                this.replace(oid, exchange);
+                this.update(oid, exchange);
             } else {
-                this.replace(oid, ovalue, exchange);
+                this.update(oid, ovalue, exchange);
             }
             break;
 
+        case HazelcastConstants.QUERY_OPERATION:
+            this.query(query, exchange);
+            break;
+            
         case HazelcastConstants.CLEAR_OPERATION:
             this.clear(exchange);
             break;
@@ -130,6 +126,16 @@ public class HazelcastMapProducer extends 
HazelcastDefaultProducer {
         this.cache.replace(oid, body);
         this.cache.unlock(oid);
     }
+    
+    /**
+     * Replaces the entry for given id with a specific value in the body, only 
if currently mapped to a given value
+     */
+    private void update(Object oid, Object ovalue, Exchange exchange) {
+        Object body = exchange.getIn().getBody();
+        this.cache.lock(oid);
+        this.cache.replace(oid, ovalue, body);
+        this.cache.unlock(oid);
+    }
 
     /**
      * remove an object from the cache
@@ -162,22 +168,6 @@ public class HazelcastMapProducer extends 
HazelcastDefaultProducer {
     }
     
     /**
-     * replace a value related to a specific key
-     */
-    private void replace(Object oid, Exchange exchange) {
-        Object body = exchange.getIn().getBody();
-        this.cache.replace(oid, body);
-    }
-    
-    /**
-     * Replaces the entry for given id with a specific value in the body, only 
if currently mapped to a given value
-     */
-    private void replace(Object oid, Object ovalue, Exchange exchange) {
-        Object body = exchange.getIn().getBody();
-        this.cache.replace(oid, ovalue, body);
-    }
-    
-    /**
      * Clear all the entries
      */
     private void clear(Exchange exchange) {

http://git-wip-us.apache.org/repos/asf/camel/blob/8af7e651/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerTest.java
 
b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerTest.java
index ff11057..e820420 100644
--- 
a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerTest.java
+++ 
b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerTest.java
@@ -158,18 +158,14 @@ public class HazelcastMapProducerTest extends 
HazelcastCamelTestSupport implemen
     }
     
     @Test
-    public void testReplace() throws InterruptedException {
-        template.sendBodyAndHeader("direct:replace", "replaced", 
HazelcastConstants.OBJECT_ID, "4711");
-        verify(map).replace("4711", "replaced");
-    }
-    
-    @Test
-    public void testReplaceOldValue() throws InterruptedException {
+    public void testUpdateOldValue() throws InterruptedException {
         Map<String, Object> headers = new HashMap<String, Object>();
         headers.put(HazelcastConstants.OBJECT_ID, "4711");
         headers.put(HazelcastConstants.OBJECT_VALUE, "my-foo");
-        template.sendBodyAndHeaders("direct:replace", "replaced", headers);
+        template.sendBodyAndHeaders("direct:update", "replaced", headers);
+        verify(map).lock("4711");
         verify(map).replace("4711", "my-foo", "replaced");
+        verify(map).unlock("4711");
     }
     
     @Test
@@ -200,8 +196,6 @@ public class HazelcastMapProducerTest extends 
HazelcastCamelTestSupport implemen
 
                 from("direct:query").setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastConstants.QUERY_OPERATION)).to(String.format("hazelcast:%sfoo",
 HazelcastConstants.MAP_PREFIX))
                         .to("seda:out");
-                
-                from("direct:replace").setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastConstants.REPLACE_OPERATION)).to(String.format("hazelcast:%sfoo",
 HazelcastConstants.MAP_PREFIX));
 
                 from("direct:clear").setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastConstants.CLEAR_OPERATION)).to(String.format("hazelcast:%sfoo",
 HazelcastConstants.MAP_PREFIX));
                 

Reply via email to