Repository: camel
Updated Branches:
  refs/heads/master b5f05a366 -> 18dec0331


Resolve CAMEL-8686 Camel-Infinispan Replace operation can use options Lifespan 
and Max Idle Time


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

Branch: refs/heads/master
Commit: 18dec0331f9e06d842032b6be1eeb3d4e5094bc6
Parents: b5f05a3
Author: ancosen <anco...@gmail.com>
Authored: Wed Apr 22 17:17:56 2015 +0200
Committer: ancosen <anco...@gmail.com>
Committed: Wed Apr 22 17:17:56 2015 +0200

----------------------------------------------------------------------
 .../infinispan/InfinispanOperation.java         | 16 ++++-
 .../infinispan/InfinispanProducerTest.java      | 63 +++++++++++++++++++-
 2 files changed, 77 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/18dec033/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 e53c715..7cd5a2a 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
@@ -139,7 +139,21 @@ public class InfinispanOperation {
         }, REPLACE {
             @Override
             void execute(BasicCache<Object, Object> cache, Exchange exchange) {
-                Object result = cache.replace(getKey(exchange), 
getValue(exchange));
+                Object result;
+                if 
(!ObjectHelper.isEmpty(exchange.getIn().getHeader(InfinispanConstants.LIFESPAN_TIME))
 && 
!ObjectHelper.isEmpty(exchange.getIn().getHeader(InfinispanConstants.LIFESPAN_TIME_UNIT)))
 {
+                    long lifespan = 
exchange.getIn().getHeader(InfinispanConstants.LIFESPAN_TIME, long.class);
+                    String timeUnit =  
exchange.getIn().getHeader(InfinispanConstants.LIFESPAN_TIME_UNIT, 
String.class);
+                    if 
(!ObjectHelper.isEmpty(exchange.getIn().getHeader(InfinispanConstants.MAX_IDLE_TIME))
 
+                        && 
!ObjectHelper.isEmpty(exchange.getIn().getHeader(InfinispanConstants.MAX_IDLE_TIME_UNIT)))
 {
+                        long maxIdle = 
exchange.getIn().getHeader(InfinispanConstants.MAX_IDLE_TIME, long.class);
+                        String maxIdleTimeUnit =  
exchange.getIn().getHeader(InfinispanConstants.MAX_IDLE_TIME_UNIT, 
String.class);
+                        result = cache.replace(getKey(exchange), 
getValue(exchange), lifespan, TimeUnit.valueOf(timeUnit), maxIdle, 
TimeUnit.valueOf(maxIdleTimeUnit));
+                    } else {
+                        result = cache.replace(getKey(exchange), 
getValue(exchange), lifespan, TimeUnit.valueOf(timeUnit));
+                    }
+                } else {
+                    result = cache.replace(getKey(exchange), 
getValue(exchange));
+                }
                 setResult(result, exchange);
             }
         }, CLEAR {

http://git-wip-us.apache.org/repos/asf/camel/blob/18dec033/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 26d6d9e..ca38e2b 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
@@ -142,7 +142,6 @@ public class InfinispanProducerTest extends 
InfinispanTestSupport {
         });
 
         assertEquals(currentCache().size(), 2);
-        Object value = currentCache().get(KEY_ONE);
         
         Thread.sleep(10000);
         
@@ -346,6 +345,68 @@ public class InfinispanProducerTest extends 
InfinispanTestSupport {
         assertEquals(exchange.getIn().getHeader(InfinispanConstants.RESULT, 
String.class), VALUE_ONE);
         assertEquals(currentCache().get(KEY_ONE), VALUE_TWO);
     }
+    
+    @Test
+    public void replaceAValueByKeyWithLifespan() throws Exception {
+        currentCache().put(KEY_ONE, VALUE_ONE);
+
+        Exchange exchange = template.request("direct:replace", new Processor() 
{
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(InfinispanConstants.KEY, KEY_ONE);
+                exchange.getIn().setHeader(InfinispanConstants.VALUE, 
VALUE_TWO);
+                exchange.getIn().setHeader(InfinispanConstants.LIFESPAN_TIME, 
new Long(LIFESPAN_TIME));
+                
exchange.getIn().setHeader(InfinispanConstants.LIFESPAN_TIME_UNIT, 
TimeUnit.SECONDS.toString());
+                exchange.getIn().setHeader(InfinispanConstants.OPERATION, 
InfinispanConstants.REPLACE);
+            }
+        });
+
+        assertEquals(exchange.getIn().getHeader(InfinispanConstants.RESULT, 
String.class), VALUE_ONE);
+        assertEquals(currentCache().get(KEY_ONE), VALUE_TWO);
+        
+        Thread.sleep(LIFESPAN_TIME * 1000);
+        
+        exchange = template.send("direct:get", new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(InfinispanConstants.KEY, KEY_ONE);
+            }
+        });
+        String resultGet = 
exchange.getIn().getHeader(InfinispanConstants.RESULT, String.class);
+        assertEquals(null, resultGet);
+    }
+    
+    @Test
+    public void replaceAValueByKeyWithLifespanAndMaxIdleTime() throws 
Exception {
+        currentCache().put(KEY_ONE, VALUE_ONE);
+
+        Exchange exchange = template.request("direct:replace", new Processor() 
{
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(InfinispanConstants.KEY, KEY_ONE);
+                exchange.getIn().setHeader(InfinispanConstants.VALUE, 
VALUE_TWO);
+                exchange.getIn().setHeader(InfinispanConstants.LIFESPAN_TIME, 
new Long(LIFESPAN_FOR_MAX_IDLE));
+                
exchange.getIn().setHeader(InfinispanConstants.LIFESPAN_TIME_UNIT, 
TimeUnit.SECONDS.toString());
+                exchange.getIn().setHeader(InfinispanConstants.MAX_IDLE_TIME, 
new Long(MAX_IDLE_TIME));
+                
exchange.getIn().setHeader(InfinispanConstants.MAX_IDLE_TIME_UNIT, 
TimeUnit.SECONDS.toString());
+                exchange.getIn().setHeader(InfinispanConstants.OPERATION, 
InfinispanConstants.REPLACE);
+            }
+        });
+
+        assertEquals(exchange.getIn().getHeader(InfinispanConstants.RESULT, 
String.class), VALUE_ONE);
+        assertEquals(currentCache().get(KEY_ONE), VALUE_TWO);
+        
+        Thread.sleep(10000);
+        
+        exchange = template.send("direct:get", new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(InfinispanConstants.KEY, KEY_ONE);
+            }
+        });
+        String resultGet = 
exchange.getIn().getHeader(InfinispanConstants.RESULT, String.class);
+        assertEquals(null, resultGet);
+    }
 
     @Test
     public void deletesExistingValueByKey() throws Exception {

Reply via email to