Added getChildren

Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/6188fe6c
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/6188fe6c
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/6188fe6c

Branch: refs/heads/CURATOR-397
Commit: 6188fe6cee6b2a433f1c686adc660216a0aa1648
Parents: e512b5e
Author: randgalt <randg...@apache.org>
Authored: Tue Apr 18 09:43:48 2017 -0500
Committer: randgalt <randg...@apache.org>
Committed: Tue Apr 18 09:43:48 2017 -0500

----------------------------------------------------------------------
 .../async/modeled/ModeledCuratorFramework.java  | 23 +++++++++-----
 .../x/async/modeled/details/ModelStage.java     | 21 ++++++++++++-
 .../details/ModeledCuratorFrameworkImpl.java    | 32 ++++++++++++++------
 .../modeled/TestModeledCuratorFramework.java    | 15 +++++++++
 4 files changed, 74 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/6188fe6c/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/ModeledCuratorFramework.java
----------------------------------------------------------------------
diff --git 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/ModeledCuratorFramework.java
 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/ModeledCuratorFramework.java
index 249e505..00335d4 100644
--- 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/ModeledCuratorFramework.java
+++ 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/ModeledCuratorFramework.java
@@ -24,6 +24,7 @@ import org.apache.curator.x.async.AsyncStage;
 import org.apache.curator.x.async.api.CreateOption;
 import org.apache.curator.x.async.api.DeleteOption;
 import org.apache.zookeeper.data.Stat;
+import java.util.List;
 import java.util.Set;
 
 public interface ModeledCuratorFramework<T>
@@ -140,27 +141,35 @@ public interface ModeledCuratorFramework<T>
     AsyncStage<Stat> update(T model, int version);
 
     /**
-     * Check to see if the ZNode at this instance's path exists
+     * Delete the ZNode at this instance's path passing -1 for the delete 
version
      *
      * @return AsyncStage
      * @see org.apache.curator.x.async.AsyncStage
      */
-    AsyncStage<Stat> checkExists();
+    AsyncStage<Void> delete();
 
     /**
-     * Delete the ZNode at this instance's path passing -1 for the delete 
version
+     * Delete the ZNode at this instance's path passing the given delete 
version
      *
+     * @param version update version to use
      * @return AsyncStage
      * @see org.apache.curator.x.async.AsyncStage
      */
-    AsyncStage<Void> delete();
+    AsyncStage<Void> delete(int version);
 
     /**
-     * Delete the ZNode at this instance's path passing the given delete 
version
+     * Check to see if the ZNode at this instance's path exists
      *
-     * @param version update version to use
      * @return AsyncStage
      * @see org.apache.curator.x.async.AsyncStage
      */
-    AsyncStage<Void> delete(int version);
+    AsyncStage<Stat> checkExists();
+
+    /**
+     * Return the child paths of this instance's paths (in no particular order)
+     *
+     * @return AsyncStage
+     * @see org.apache.curator.x.async.AsyncStage
+     */
+    AsyncStage<List<ZPath>> getChildren();
 }

http://git-wip-us.apache.org/repos/asf/curator/blob/6188fe6c/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModelStage.java
----------------------------------------------------------------------
diff --git 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModelStage.java
 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModelStage.java
index 077bbb0..41523cc 100644
--- 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModelStage.java
+++ 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModelStage.java
@@ -19,8 +19,27 @@
 package org.apache.curator.x.async.modeled.details;
 
 import org.apache.curator.x.async.AsyncStage;
+import org.apache.zookeeper.WatchedEvent;
 import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionStage;
 
-abstract class ModelStage<T> extends CompletableFuture<T> implements 
AsyncStage<T>
+class ModelStage<T> extends CompletableFuture<T> implements AsyncStage<T>
 {
+    private final CompletionStage<WatchedEvent> event;
+
+    ModelStage()
+    {
+        this(null);
+    }
+
+    ModelStage(CompletionStage<WatchedEvent> event)
+    {
+        this.event = event;
+    }
+
+    @Override
+    public CompletionStage<WatchedEvent> event()
+    {
+        return event;
+    }
 }

http://git-wip-us.apache.org/repos/asf/curator/blob/6188fe6c/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCuratorFrameworkImpl.java
----------------------------------------------------------------------
diff --git 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCuratorFrameworkImpl.java
 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCuratorFrameworkImpl.java
index 1dd04db..6898b2d 100644
--- 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCuratorFrameworkImpl.java
+++ 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCuratorFrameworkImpl.java
@@ -34,6 +34,7 @@ import org.apache.curator.x.async.api.DeleteOption;
 import org.apache.curator.x.async.api.WatchableAsyncCuratorFramework;
 import org.apache.curator.x.async.modeled.ModelSerializer;
 import org.apache.curator.x.async.modeled.ModeledCuratorFramework;
+import org.apache.curator.x.async.modeled.ZPath;
 import org.apache.zookeeper.CreateMode;
 import org.apache.zookeeper.WatchedEvent;
 import org.apache.zookeeper.data.ACL;
@@ -42,14 +43,15 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
-import java.util.concurrent.CompletionStage;
 import java.util.function.UnaryOperator;
+import java.util.stream.Collectors;
 
 public class ModeledCuratorFrameworkImpl<T> implements 
ModeledCuratorFramework<T>
 {
     private final AsyncCuratorFramework client;
     private final WatchableAsyncCuratorFramework watchableClient;
     private final String path;
+    private final ZPath zPath;
     private final ModelSerializer<T> serializer;
     private final WatchMode watchMode;
     private final UnaryOperator<WatchedEvent> watcherFilter;
@@ -79,6 +81,7 @@ public class ModeledCuratorFrameworkImpl<T> implements 
ModeledCuratorFramework<T
 
         dslClient = this.client.with(this.watchMode, unhandledErrorListener, 
resultFilter, watcherFilter);
         watchableClient = localIsWatched ? dslClient.watched() : dslClient;
+        zPath = ZPath.parse(path);
     }
 
     @Override
@@ -119,14 +122,7 @@ public class ModeledCuratorFrameworkImpl<T> implements 
ModeledCuratorFramework<T
             next = (storingStatIn != null) ? 
watchableClient.getData().storingStatIn(storingStatIn) : 
watchableClient.getData();
         }
         AsyncStage<byte[]> asyncStage = next.forPath(path);
-        ModelStage<T> modelStage = new ModelStage<T>()
-        {
-            @Override
-            public CompletionStage<WatchedEvent> event()
-            {
-                return asyncStage.event();
-            }
-        };
+        ModelStage<T> modelStage = new ModelStage<>(asyncStage.event());
         asyncStage.whenComplete((value, e) -> {
             if ( e != null )
             {
@@ -173,6 +169,24 @@ public class ModeledCuratorFrameworkImpl<T> implements 
ModeledCuratorFramework<T
     }
 
     @Override
+    public AsyncStage<List<ZPath>> getChildren()
+    {
+        AsyncStage<List<String>> asyncStage = 
watchableClient.getChildren().forPath(path);
+        ModelStage<List<ZPath>> modelStage = new 
ModelStage<>(asyncStage.event());
+        asyncStage.whenComplete((children, e) -> {
+            if ( e != null )
+            {
+                modelStage.completeExceptionally(e);
+            }
+            else
+            {
+                
modelStage.complete(children.stream().map(zPath::at).collect(Collectors.toList()));
+            }
+        });
+        return modelStage;
+    }
+
+    @Override
     public ModeledCuratorFramework<T> at(String child)
     {
         String childPath = ZKPaths.makePath(path, child);

http://git-wip-us.apache.org/repos/asf/curator/blob/6188fe6c/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestModeledCuratorFramework.java
----------------------------------------------------------------------
diff --git 
a/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestModeledCuratorFramework.java
 
b/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestModeledCuratorFramework.java
index 8e76536..ac4c607 100644
--- 
a/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestModeledCuratorFramework.java
+++ 
b/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestModeledCuratorFramework.java
@@ -18,6 +18,7 @@
  */
 package org.apache.curator.x.async.modeled;
 
+import com.google.common.collect.Sets;
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.CuratorFrameworkFactory;
 import org.apache.curator.retry.RetryOneTime;
@@ -31,6 +32,7 @@ import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 import java.math.BigInteger;
+import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 
 public class TestModeledCuratorFramework extends CompletableBaseClassForTests
@@ -99,4 +101,17 @@ public class TestModeledCuratorFramework extends 
CompletableBaseClassForTests
         client.create(new TestModel());
         Assert.assertTrue(timing.awaitLatch(latch));
     }
+
+    @Test
+    public void testGetChildren()
+    {
+        TestModel model = new TestModel("John", "Galt", "1 Galt's Gulch", 42, 
BigInteger.valueOf(1));
+        ModeledCuratorFramework<TestModel> client = 
ModeledCuratorFramework.builder(rawClient, path, serializer).build();
+        complete(client.at("one").create(model));
+        complete(client.at("two").create(model));
+        complete(client.at("three").create(model));
+
+        Set<ZPath> expected = Sets.newHashSet(path.at("one"), path.at("two"), 
path.at("three"));
+        complete(client.getChildren(), (children, e) -> 
Assert.assertEquals(Sets.newHashSet(children), expected));
+    }
 }

Reply via email to