Repository: curator
Updated Branches:
  refs/heads/CURATOR-397 019caeea6 -> e8c68188d


doc


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

Branch: refs/heads/CURATOR-397
Commit: e8c68188d04df30eb91751f09360bb267fbe1c25
Parents: 019caee
Author: randgalt <randg...@apache.org>
Authored: Sat Apr 8 22:35:33 2017 -0500
Committer: randgalt <randg...@apache.org>
Committed: Sat Apr 8 22:35:33 2017 -0500

----------------------------------------------------------------------
 .../curator/x/async/modeled/ModeledDetails.java |   3 +
 .../details/recipes/ModeledNodeCacheImpl.java   |   6 +-
 .../recipes/ModeledPathChildrenCacheImpl.java   |   4 +-
 .../details/recipes/ModeledTreeCacheImpl.java   |  15 ++-
 .../modeled/recipes/ModeledCacheEvent.java      |  13 +++
 .../modeled/recipes/ModeledCacheListener.java   |   3 +
 .../modeled/recipes/ModeledCachedNode.java      | 102 +++++--------------
 .../async/modeled/recipes/ModeledNodeCache.java |  40 +++++++-
 .../recipes/ModeledPathChildrenCache.java       |  66 +++++++++++-
 .../async/modeled/recipes/ModeledTreeCache.java |  44 ++++++++
 10 files changed, 209 insertions(+), 87 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/e8c68188/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/ModeledDetails.java
----------------------------------------------------------------------
diff --git 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/ModeledDetails.java
 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/ModeledDetails.java
index 65afc94..c9579d7 100644
--- 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/ModeledDetails.java
+++ 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/ModeledDetails.java
@@ -21,6 +21,9 @@ package org.apache.curator.x.async.modeled;
 import org.apache.curator.x.async.api.CreateOption;
 import java.util.Set;
 
+/**
+ * Modeling options
+ */
 public interface ModeledDetails<T>
 {
     /**

http://git-wip-us.apache.org/repos/asf/curator/blob/e8c68188/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledNodeCacheImpl.java
----------------------------------------------------------------------
diff --git 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledNodeCacheImpl.java
 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledNodeCacheImpl.java
index 991119f..8270b78 100644
--- 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledNodeCacheImpl.java
+++ 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledNodeCacheImpl.java
@@ -42,7 +42,7 @@ public class ModeledNodeCacheImpl<T> implements 
ModeledNodeCache<T>
     }
 
     @Override
-    public NodeCache upwrap()
+    public NodeCache unwrap()
     {
         return cache;
     }
@@ -108,9 +108,9 @@ public class ModeledNodeCacheImpl<T> implements 
ModeledNodeCache<T>
         }
         if ( (data == null) || (data.length == 0) )
         {
-            return Optional.of(new ModeledCachedNode<T>(modeled.getPath(), 
null, stat));
+            return Optional.of(new ModeledCachedNodeImpl<T>(modeled.getPath(), 
null, stat));
         }
-        return Optional.of(new ModeledCachedNode<>(modeled.getPath(), 
modeled.getSerializer().deserialize(data), stat));
+        return Optional.of(new ModeledCachedNodeImpl<>(modeled.getPath(), 
modeled.getSerializer().deserialize(data), stat));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/curator/blob/e8c68188/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledPathChildrenCacheImpl.java
----------------------------------------------------------------------
diff --git 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledPathChildrenCacheImpl.java
 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledPathChildrenCacheImpl.java
index d0ee681..c8b569d 100644
--- 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledPathChildrenCacheImpl.java
+++ 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledPathChildrenCacheImpl.java
@@ -47,7 +47,7 @@ public class ModeledPathChildrenCacheImpl<T> implements 
ModeledPathChildrenCache
     private final PathChildrenCache cache;
     private final Map<ModeledCacheListener, PathChildrenCacheListener> 
listenerMap = new ConcurrentHashMap<>();
 
-    public ModeledPathChildrenCacheImpl(PathChildrenCache cache, 
ModeledDetails<T> modeled)
+    public ModeledPathChildrenCacheImpl(ModeledDetails<T> modeled, 
PathChildrenCache cache)
     {
         this.modeled = Objects.requireNonNull(modeled, "modeled cannot be 
null");
         this.cache = Objects.requireNonNull(cache, "cache cannot be null");
@@ -216,7 +216,7 @@ public class ModeledPathChildrenCacheImpl<T> implements 
ModeledPathChildrenCache
             return null;
         }
         T model = (data.getData() != null) ? 
modeled.getSerializer().deserialize(data.getData()) : null;
-        return new ModeledCachedNode<>(ZPath.parse(data.getPath()), model, 
data.getStat());
+        return new ModeledCachedNodeImpl<>(ZPath.parse(data.getPath()), model, 
data.getStat());
     }
 
     @VisibleForTesting

http://git-wip-us.apache.org/repos/asf/curator/blob/e8c68188/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledTreeCacheImpl.java
----------------------------------------------------------------------
diff --git 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledTreeCacheImpl.java
 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledTreeCacheImpl.java
index 542ad23..20a1bc7 100644
--- 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledTreeCacheImpl.java
+++ 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledTreeCacheImpl.java
@@ -21,6 +21,7 @@ package org.apache.curator.x.async.modeled.details.recipes;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.util.concurrent.MoreExecutors;
 import org.apache.curator.framework.listen.Listenable;
+import org.apache.curator.framework.recipes.cache.ChildData;
 import org.apache.curator.framework.recipes.cache.TreeCache;
 import org.apache.curator.framework.recipes.cache.TreeCacheEvent;
 import org.apache.curator.framework.recipes.cache.TreeCacheListener;
@@ -33,6 +34,7 @@ import 
org.apache.curator.x.async.modeled.recipes.ModeledCacheListener;
 import org.apache.curator.x.async.modeled.recipes.ModeledCachedNode;
 import org.apache.curator.x.async.modeled.recipes.ModeledTreeCache;
 import java.util.AbstractMap;
+import java.util.Collections;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
@@ -55,6 +57,12 @@ public class ModeledTreeCacheImpl<T> implements 
ModeledTreeCache<T>
     }
 
     @Override
+    public TreeCache unwrap()
+    {
+        return cache;
+    }
+
+    @Override
     public void start()
     {
         try
@@ -122,7 +130,12 @@ public class ModeledTreeCacheImpl<T> implements 
ModeledTreeCache<T>
     @Override
     public Map<ZPath, ModeledCachedNode<T>> getCurrentChildren(ZPath fullPath)
     {
-        return 
cache.getCurrentChildren(fullPath.fullPath()).entrySet().stream()
+        Map<String, ChildData> currentChildren = 
cache.getCurrentChildren(fullPath.fullPath());
+        if ( currentChildren == null )
+        {
+            return Collections.emptyMap();
+        }
+        return currentChildren.entrySet().stream()
             .map(entry -> new 
AbstractMap.SimpleEntry<>(ZPath.parse(entry.getKey()), from(modeled, 
entry.getValue())))
             .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
     }

http://git-wip-us.apache.org/repos/asf/curator/blob/e8c68188/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheEvent.java
----------------------------------------------------------------------
diff --git 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheEvent.java
 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheEvent.java
index 442e31c..b84b1c3 100644
--- 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheEvent.java
+++ 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheEvent.java
@@ -20,9 +20,22 @@ package org.apache.curator.x.async.modeled.recipes;
 
 import java.util.Optional;
 
+/**
+ * Abstracts a cache event
+ */
 public interface ModeledCacheEvent<T>
 {
+    /**
+     * The event type
+     *
+     * @return event type
+     */
     ModeledCacheEventType getType();
 
+    /**
+     * Cached node if appropriate for the event
+     *
+     * @return node
+     */
     Optional<ModeledCachedNode<T>> getNode();
 }

http://git-wip-us.apache.org/repos/asf/curator/blob/e8c68188/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheListener.java
----------------------------------------------------------------------
diff --git 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheListener.java
 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheListener.java
index 88c7de0..71a035f 100644
--- 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheListener.java
+++ 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheListener.java
@@ -18,6 +18,9 @@
  */
 package org.apache.curator.x.async.modeled.recipes;
 
+/**
+ * Event listener
+ */
 public interface ModeledCacheListener<T>
 {
     void event(ModeledCacheEvent<T> event);

http://git-wip-us.apache.org/repos/asf/curator/blob/e8c68188/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCachedNode.java
----------------------------------------------------------------------
diff --git 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCachedNode.java
 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCachedNode.java
index 8982396..3808029 100644
--- 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCachedNode.java
+++ 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCachedNode.java
@@ -20,85 +20,31 @@ package org.apache.curator.x.async.modeled.recipes;
 
 import org.apache.curator.x.async.modeled.ZPath;
 import org.apache.zookeeper.data.Stat;
-import java.util.Objects;
 import java.util.Optional;
 
-public class ModeledCachedNode<T>
+/**
+ * Abstracts a cached node
+ */
+public interface ModeledCachedNode<T>
 {
-    private final ZPath path;
-    private final Stat stat;
-    private final Optional<T> data;
-
-    public ModeledCachedNode(ZPath path)
-    {
-        this(path, null, new Stat());
-    }
-
-    public ModeledCachedNode(ZPath path, T data)
-    {
-        this(path, data, new Stat());
-    }
-
-    public ModeledCachedNode(ZPath path, T data, Stat stat)
-    {
-        this.path = Objects.requireNonNull(path, "path cannot be null");
-        this.data = Optional.ofNullable(data);
-        this.stat = Objects.requireNonNull(stat, "stat cannot be null");
-    }
-
-    public ZPath getPath()
-    {
-        return path;
-    }
-
-    public Stat getStat()
-    {
-        return stat;
-    }
-
-    public Optional<T> getData()
-    {
-        return data;
-    }
-
-    @Override
-    public boolean equals(Object o)
-    {
-        if ( this == o )
-        {
-            return true;
-        }
-        if ( o == null || getClass() != o.getClass() )
-        {
-            return false;
-        }
-
-        ModeledCachedNode<?> that = (ModeledCachedNode<?>)o;
-
-        if ( !path.equals(that.path) )
-        {
-            return false;
-        }
-        //noinspection SimplifiableIfStatement
-        if ( !stat.equals(that.stat) )
-        {
-            return false;
-        }
-        return data.equals(that.data);
-    }
-
-    @Override
-    public int hashCode()
-    {
-        int result = path.hashCode();
-        result = 31 * result + stat.hashCode();
-        result = 31 * result + data.hashCode();
-        return result;
-    }
-
-    @Override
-    public String toString()
-    {
-        return "ModeledCachedNode{" + "stat=" + stat + ", data=" + data + '}';
-    }
+    /**
+     * The path of the node
+     *
+     * @return path
+     */
+    ZPath getPath();
+
+    /**
+     * The node's last known stat if available
+     *
+     * @return stat
+     */
+    Stat getStat();
+
+    /**
+     * The node's current data
+     *
+     * @return data
+     */
+    Optional<T> getData();
 }

http://git-wip-us.apache.org/repos/asf/curator/blob/e8c68188/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledNodeCache.java
----------------------------------------------------------------------
diff --git 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledNodeCache.java
 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledNodeCache.java
index d5650b3..0a7064a 100644
--- 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledNodeCache.java
+++ 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledNodeCache.java
@@ -26,24 +26,62 @@ import 
org.apache.curator.x.async.modeled.details.recipes.ModeledNodeCacheImpl;
 import java.io.Closeable;
 import java.util.Optional;
 
+/**
+ * Wraps a {@link org.apache.curator.framework.recipes.cache.NodeCache} so that
+ * node data can be viewed as strongly typed models.
+ */
 public interface ModeledNodeCache<T> extends Closeable
 {
+    /**
+     * Return a newly wrapped cache
+     *
+     * @param modeled modeling options
+     * @param cache the cache to wrap
+     * @return new wrapped cache
+     */
     static <T> ModeledNodeCache wrap(ModeledDetails<T> modeled, NodeCache 
cache)
     {
         return new ModeledNodeCacheImpl<>(modeled, cache);
     }
 
-    NodeCache upwrap();
+    /**
+     * Return the original cache that was wrapped
+     *
+     * @return cache
+     */
+    NodeCache unwrap();
 
+    /**
+     * Forwards to {@link 
org.apache.curator.framework.recipes.cache.NodeCache#start()}
+     */
     void start();
 
+    /**
+     * Forwards to {@link 
org.apache.curator.framework.recipes.cache.NodeCache#start(boolean)}
+     */
     void start(boolean buildInitial);
 
+    /**
+     * Forwards to {@link 
org.apache.curator.framework.recipes.cache.NodeCache#rebuild()}
+     */
     void rebuild();
 
+    /**
+     * Forwards to {@link 
org.apache.curator.framework.recipes.cache.NodeCache#getListenable()}
+     */
     Listenable<NodeCacheListener> getListenable();
 
+    /**
+     * Return the modeled current data. There are no guarantees of accuracy. 
This is
+     * merely the most recent view of the data. If the node does not exist,
+     * this returns {@link java.util.Optional#empty()} is returned
+     *
+     * @return node data
+     */
     Optional<ModeledCachedNode<T>> getCurrentData();
 
+    /**
+     * Forwards to {@link 
org.apache.curator.framework.recipes.cache.NodeCache#close()}
+     */
     void close();
 }

http://git-wip-us.apache.org/repos/asf/curator/blob/e8c68188/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCache.java
----------------------------------------------------------------------
diff --git 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCache.java
 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCache.java
index fd27c12..f192dbf 100644
--- 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCache.java
+++ 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCache.java
@@ -27,36 +27,98 @@ import java.io.Closeable;
 import java.util.List;
 import java.util.Optional;
 
+/**
+ * Wraps a {@link 
org.apache.curator.framework.recipes.cache.PathChildrenCache} so that
+ * node data can be viewed as strongly typed models.
+ */
 public interface ModeledPathChildrenCache<T> extends Closeable
 {
-    static <T> ModeledPathChildrenCache<T> wrap(PathChildrenCache cache, 
ModeledDetails<T> modeled)
+    /**
+     * Return a newly wrapped cache
+     *
+     * @param modeled modeling options
+     * @param cache the cache to wrap
+     * @return new wrapped cache
+     */
+    static <T> ModeledPathChildrenCache<T> wrap(ModeledDetails<T> modeled, 
PathChildrenCache cache)
     {
-        return new ModeledPathChildrenCacheImpl<>(cache, modeled);
+        return new ModeledPathChildrenCacheImpl<>(modeled, cache);
     }
 
+    /**
+     * Return the original cache that was wrapped
+     *
+     * @return cache
+     */
     PathChildrenCache unwrap();
 
+    /**
+     * Forwards to {@link 
org.apache.curator.framework.recipes.cache.PathChildrenCache#start()}
+     */
     void start();
 
+    /**
+     * Forwards to {@link 
org.apache.curator.framework.recipes.cache.PathChildrenCache#start(org.apache.curator.framework.recipes.cache.PathChildrenCache.StartMode)}
+     */
     void start(PathChildrenCache.StartMode mode);
 
+    /**
+     * Forwards to {@link 
org.apache.curator.framework.recipes.cache.PathChildrenCache#rebuild()}
+     */
     void rebuild();
 
+    /**
+     * Forwards to {@link 
org.apache.curator.framework.recipes.cache.PathChildrenCache#rebuildNode(String)}
+     */
     void rebuildNode(ZPath fullPath);
 
+    /**
+     * Return the listener container so that you can add/remove listeners
+     *
+     * @return listener container
+     */
     Listenable<ModeledCacheListener<T>> getListenable();
 
+    /**
+     * Return the modeled current data. There are no guarantees of accuracy. 
This is
+     * merely the most recent view of the data. The data is returned in sorted 
order.
+     *
+     * @return list of children and data
+     */
     List<ModeledCachedNode> getCurrentData();
 
+    /**
+     * Return the modeled current data for the given path. There are no 
guarantees of accuracy. This is
+     * merely the most recent view of the data. If there is no child with that 
path
+     * {@link java.util.Optional#empty()} is returned.
+     *
+     * @param fullPath full path to the node to check
+     * @return data or null
+     */
     Optional<ModeledCachedNode> getCurrentData(String fullPath);
 
+    /**
+     * Forwards to {@link 
org.apache.curator.framework.recipes.cache.PathChildrenCache#clearDataBytes(String)}
+     */
     void clearDataBytes(ZPath fullPath);
 
+    /**
+     * Forwards to {@link 
org.apache.curator.framework.recipes.cache.PathChildrenCache#clearDataBytes(String,
 int)}
+     */
     boolean clearDataBytes(ZPath fullPath, int ifVersion);
 
+    /**
+     * Forwards to {@link 
org.apache.curator.framework.recipes.cache.PathChildrenCache#clearAndRefresh()}
+     */
     void clearAndRefresh();
 
+    /**
+     * Forwards to {@link 
org.apache.curator.framework.recipes.cache.PathChildrenCache#clear()}
+     */
     void clear();
 
+    /**
+     * Forwards to {@link 
org.apache.curator.framework.recipes.cache.PathChildrenCache#close()}
+     */
     void close();
 }

http://git-wip-us.apache.org/repos/asf/curator/blob/e8c68188/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledTreeCache.java
----------------------------------------------------------------------
diff --git 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledTreeCache.java
 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledTreeCache.java
index ec49b8b..2b6c817 100644
--- 
a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledTreeCache.java
+++ 
b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledTreeCache.java
@@ -27,20 +27,64 @@ import java.io.Closeable;
 import java.util.Map;
 import java.util.Optional;
 
+/**
+ * Wraps a {@link org.apache.curator.framework.recipes.cache.TreeCache} so that
+ * node data can be viewed as strongly typed models.
+ */
 public interface ModeledTreeCache<T> extends Closeable
 {
+    /**
+     * Return a newly wrapped cache
+     *
+     * @param modeled modeling options
+     * @param cache the cache to wrap
+     * @return new wrapped cache
+     */
     static <T> ModeledTreeCache<T> wrap(ModeledDetails<T> modeled, TreeCache 
cache)
     {
         return new ModeledTreeCacheImpl<>(modeled, cache);
     }
 
+    /**
+     * Return the original cache that was wrapped
+     *
+     * @return cache
+     */
+    TreeCache unwrap();
+
+    /**
+     * Forwards to {@link 
org.apache.curator.framework.recipes.cache.TreeCache#start()}
+     */
     void start();
 
+    /**
+     * Forwards to {@link 
org.apache.curator.framework.recipes.cache.TreeCache#close()}
+     */
     void close();
 
+    /**
+     * Return the listener container so that you can add/remove listeners
+     *
+     * @return listener container
+     */
     Listenable<ModeledCacheListener<T>> getListenable();
 
+    /**
+     * Return the modeled current set of children at the given path, mapped by 
child name. There are no
+     * guarantees of accuracy; this is merely the most recent view of the data.
+     *
+     * @param fullPath full path to the node to check
+     * @return a possibly-empty list of children if the node is alive, or null
+     */
     Map<ZPath, ModeledCachedNode<T>> getCurrentChildren(ZPath fullPath);
 
+    /**
+     * Return the modeled current data for the given path. There are no 
guarantees of accuracy. This is
+     * merely the most recent view of the data. If there is no node at the 
given path,
+     * {@link java.util.Optional#empty()} is returned.
+     *
+     * @param fullPath full path to the node to check
+     * @return data if the node is alive, or null
+     */
     Optional<ModeledCachedNode<T>> getCurrentData(ZPath fullPath);
 }

Reply via email to