From 5fa95d2953d88874aadaa56f22da11887e4a8743 Mon Sep 17 00:00:00 2001 From: Nikita Date: Sat, 11 Apr 2015 13:45:25 +0300 Subject: [PATCH] renamenx and renamenxAsync methods added. #141 --- .../java/org/redisson/RedissonObject.java | 15 +++++++++ src/main/java/org/redisson/core/RObject.java | 33 ++++++++++++++++++- .../java/org/redisson/RedissonBucketTest.java | 14 ++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/redisson/RedissonObject.java b/src/main/java/org/redisson/RedissonObject.java index e57f7d3cf..2d40917b6 100644 --- a/src/main/java/org/redisson/RedissonObject.java +++ b/src/main/java/org/redisson/RedissonObject.java @@ -20,6 +20,7 @@ import io.netty.util.concurrent.Promise; import org.redisson.async.AsyncOperation; import org.redisson.async.OperationListener; +import org.redisson.async.ResultOperation; import org.redisson.connection.ConnectionManager; import org.redisson.core.RObject; @@ -66,6 +67,20 @@ abstract class RedissonObject implements RObject { } }); } + + public boolean renamenx(String newName) { + return connectionManager.get(renamenxAsync(newName)); + } + + public Future renamenxAsync(final String newName) { + return connectionManager.writeAsync(getName(), new ResultOperation() { + @Override + public Future execute(RedisAsyncConnection async) { + return async.renamenx(getName(), newName); + } + }); + } + public boolean delete() { return connectionManager.get(deleteAsync()); diff --git a/src/main/java/org/redisson/core/RObject.java b/src/main/java/org/redisson/core/RObject.java index 648809e3d..0c3fb18bd 100644 --- a/src/main/java/org/redisson/core/RObject.java +++ b/src/main/java/org/redisson/core/RObject.java @@ -39,8 +39,39 @@ public interface RObject { Future deleteAsync(); + /** + * Rename current object key to newName + * + * @param newName + * @return + */ boolean rename(String newName); - + + /** + * Rename current object key to newName + * in async mode + * + * @param newName + * @return + */ Future renameAsync(String newName); + + /** + * Rename current object key to newName + * only if new key is not exists + * + * @param newName + * @return + */ + boolean renamenx(String newName); + + /** + * Rename current object key to newName + * in async mode only if new key is not exists + * + * @param newName + * @return + */ + Future renamenxAsync(String newName); } diff --git a/src/test/java/org/redisson/RedissonBucketTest.java b/src/test/java/org/redisson/RedissonBucketTest.java index e38768525..5bf934fe2 100755 --- a/src/test/java/org/redisson/RedissonBucketTest.java +++ b/src/test/java/org/redisson/RedissonBucketTest.java @@ -10,6 +10,20 @@ import java.util.List; public class RedissonBucketTest extends BaseTest { + @Test + public void testRenamenx() { + RBucket bucket = redisson.getBucket("test"); + bucket.set("someValue"); + RBucket bucket2 = redisson.getBucket("test2"); + bucket2.set("someValue2"); + Assert.assertTrue(bucket.renamenx("test1")); + RBucket oldBucket = redisson.getBucket("test"); + Assert.assertNull(oldBucket.get()); + RBucket newBucket = redisson.getBucket("test1"); + Assert.assertEquals("someValue", newBucket.get()); + Assert.assertFalse(newBucket.renamenx("test2")); + } + @Test public void testRename() { RBucket bucket = redisson.getBucket("test");