You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2015/05/03 16:05:37 UTC
camel git commit: CAMEL-8735 Camel-Hazelcast: Add putIfAbsent
operation to map producer
Repository: camel
Updated Branches:
refs/heads/master e100e0fb6 -> c8b617940
CAMEL-8735 Camel-Hazelcast: Add putIfAbsent 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/c8b61794
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/c8b61794
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/c8b61794
Branch: refs/heads/master
Commit: c8b6179407c6b88bb937540859092ab3a2ab4594
Parents: e100e0f
Author: Andrea Cosentino <an...@gmail.com>
Authored: Sun May 3 16:03:23 2015 +0200
Committer: Andrea Cosentino <an...@gmail.com>
Committed: Sun May 3 16:03:23 2015 +0200
----------------------------------------------------------------------
.../component/hazelcast/HazelcastConstants.java | 1 +
.../hazelcast/map/HazelcastMapProducer.java | 28 ++++++++++++++++++--
.../hazelcast/HazelcastMapProducerTest.java | 21 +++++++++++++++
3 files changed, 48 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/c8b61794/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 ecc63e3..056caa5 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
@@ -60,6 +60,7 @@ public final class HazelcastConstants {
public static final int QUERY_OPERATION = 5;
public static final int GET_ALL_OPERATION = 6;
public static final int CLEAR_OPERATION = 7;
+ public static final int PUT_IF_ABSENT_OPERATION = 8;
// multimap
public static final int REMOVEVALUE_OPERATION = 10;
http://git-wip-us.apache.org/repos/asf/camel/blob/c8b61794/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 d0911ff..75de1d2 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
@@ -64,7 +64,7 @@ public class HazelcastMapProducer extends HazelcastDefaultProducer {
}
if (headers.containsKey(HazelcastConstants.TTL_UNIT)) {
- ttlUnit = headers.get(HazelcastConstants.TTL_UNIT);
+ ttlUnit = headers.get(HazelcastConstants.TTL_UNIT);
}
if (headers.containsKey(HazelcastConstants.QUERY)) {
@@ -78,7 +78,15 @@ public class HazelcastMapProducer extends HazelcastDefaultProducer {
if (ObjectHelper.isEmpty(ttl) && ObjectHelper.isEmpty(ttlUnit)) {
this.put(oid, exchange);
} else {
- this.put(oid, ttl, ttlUnit, exchange);
+ this.put(oid, ttl, ttlUnit, exchange);
+ }
+ break;
+
+ case HazelcastConstants.PUT_IF_ABSENT_OPERATION:
+ if (ObjectHelper.isEmpty(ttl) && ObjectHelper.isEmpty(ttlUnit)) {
+ this.putIfAbsent(oid, exchange);
+ } else {
+ this.putIfAbsent(oid, ttl, ttlUnit, exchange);
}
break;
@@ -190,6 +198,22 @@ public class HazelcastMapProducer extends HazelcastDefaultProducer {
}
/**
+ * if the specified key is not already associated with a value, associate it with the given value.
+ */
+ private void putIfAbsent(Object oid, Exchange exchange) {
+ Object body = exchange.getIn().getBody();
+ this.cache.putIfAbsent(oid, body);
+ }
+
+ /**
+ * Puts an entry into this map with a given ttl (time to live) value if the specified key is not already associated with a value.
+ */
+ private void putIfAbsent(Object oid, Object ttl, Object ttlUnit, Exchange exchange) {
+ Object body = exchange.getIn().getBody();
+ this.cache.putIfAbsent(oid, body, (long) ttl, (TimeUnit) ttlUnit);
+ }
+
+ /**
* Clear all the entries
*/
private void clear(Exchange exchange) {
http://git-wip-us.apache.org/repos/asf/camel/blob/c8b61794/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 2879843..a821303 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
@@ -180,6 +180,24 @@ public class HazelcastMapProducerTest extends HazelcastCamelTestSupport implemen
}
@Test
+ public void testPutIfAbsent() throws InterruptedException {
+ Map<String, Object> headers = new HashMap<String, Object>();
+ headers.put(HazelcastConstants.OBJECT_ID, "4711");
+ template.sendBodyAndHeaders("direct:putIfAbsent", "replaced", headers);
+ verify(map).putIfAbsent("4711", "replaced");
+ }
+
+ @Test
+ public void testPutIfAbsentWithTtl() throws InterruptedException {
+ Map<String, Object> headers = new HashMap<String, Object>();
+ headers.put(HazelcastConstants.OBJECT_ID, "4711");
+ headers.put(HazelcastConstants.TTL_VALUE, new Long(1));
+ headers.put(HazelcastConstants.TTL_UNIT, TimeUnit.MINUTES);
+ template.sendBodyAndHeaders("direct:putIfAbsent", "replaced", headers);
+ verify(map).putIfAbsent("4711", "replaced", new Long(1), TimeUnit.MINUTES);
+ }
+
+ @Test
public void testClear() throws InterruptedException {
template.sendBody("direct:clear", "test");
verify(map).clear();
@@ -194,6 +212,9 @@ public class HazelcastMapProducerTest extends HazelcastCamelTestSupport implemen
from("direct:putInvalid").setHeader(HazelcastConstants.OPERATION, constant("bogus")).to(String.format("hazelcast:%sfoo", HazelcastConstants.MAP_PREFIX));
from("direct:put").setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.PUT_OPERATION)).to(String.format("hazelcast:%sfoo", HazelcastConstants.MAP_PREFIX));
+
+ from("direct:putIfAbsent").setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.PUT_IF_ABSENT_OPERATION))
+ .to(String.format("hazelcast:%sfoo", HazelcastConstants.MAP_PREFIX));
from("direct:update").setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.UPDATE_OPERATION)).to(String.format("hazelcast:%sfoo", HazelcastConstants.MAP_PREFIX));