Github user cammckenzie commented on a diff in the pull request:

    https://github.com/apache/curator/pull/41#discussion_r16638814
  
    --- Diff: 
curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/TreeCache.java
 ---
    @@ -65,6 +67,106 @@
     {
         private static final Logger LOG = 
LoggerFactory.getLogger(TreeCache.class);
     
    +    public static final class Builder {
    +        private final CuratorFramework client;
    +        private final String path;
    +        private boolean cacheData = true;
    +        private boolean dataIsCompressed = false;
    +        private CloseableExecutorService executorService = null;
    +
    +        private Builder(CuratorFramework client, String path) {
    +            this.client = checkNotNull(client);
    +            this.path = validatePath(path);
    +        }
    +
    +        /**
    +         * Builds the {@link TreeCache} based on configured values.
    +         */
    +        public TreeCache build()
    +        {
    +            CloseableExecutorService executor = executorService;
    +            if ( executor == null )
    +            {
    +                executor = new 
CloseableExecutorService(Executors.newSingleThreadExecutor(defaultThreadFactory));
    +            }
    +            return new TreeCache(client, path, cacheData, 
dataIsCompressed, executor);
    +        }
    +
    +        /**
    +         * Builds the {@link TreeCache} based on configured values, and 
starts it.
    +         */
    +        public TreeCache buildAndStart() throws Exception
    +        {
    +            TreeCache treeCache = build();
    +            treeCache.start();
    +            return treeCache;
    +        }
    +
    +        /**
    +         * Sets whether or not to cache byte data per node; default {@code 
true}.
    +         */
    +        public Builder setCacheData(boolean cacheData)
    +        {
    +            this.cacheData = cacheData;
    +            return this;
    +        }
    +
    +        /**
    +         * Sets whether or to decompress node data; default {@code false}.
    +         */
    +        public Builder setDataIsCompressed(boolean dataIsCompressed)
    +        {
    +            this.dataIsCompressed = dataIsCompressed;
    +            return this;
    +        }
    +
    +        /**
    +         * Sets the executor to publish events; a default executor will be 
created if not specified.
    +         */
    +        public Builder setExecutor(ThreadFactory threadFactory)
    +        {
    +            return setExecutor(new 
CloseableExecutorService(Executors.newSingleThreadExecutor(threadFactory)));
    +        }
    +
    +        /**
    +         * Sets the executor to publish events; a default executor will be 
created if not specified.
    +         */
    +        public Builder setExecutor(ExecutorService executorService)
    +        {
    +            if (executorService instanceof CloseableExecutorService) {
    +                return setExecutor((CloseableExecutorService) 
executorService);
    +            } else {
    +                return setExecutor(new 
CloseableExecutorService(executorService));
    +            }
    +        }
    +
    +        /**
    +         * Sets the executor to publish events; a default executor will be 
created if not specified.
    +         */
    +        public Builder setExecutor(CloseableExecutorService 
executorService)
    +        {
    +            this.executorService = checkNotNull(executorService);
    +            return this;
    +        }
    +    }
    +
    +    /**
    +     * Create a TreeCache builder for the given client and path to 
configure advanced options.
    +     *
    +     * If the client is namespaced, all operations on the resulting 
TreeCache will be in terms of
    +     * the namespace, including all published events.  The given path is 
the root at which the
    +     * TreeCache will watch and explore.  If no node exists at the given 
path, the TreeCache will
    +     * be initially empty.
    +     *
    +     * @param client the client to use; may be namespaced
    +     * @param path the path to the root node to watch/explore; this path 
need not actually exist on
    +     *             the server
    +     * @return a new builder
    +     */
    +    public static Builder newBuilder(CuratorFramework client, String path) 
{
    +        return new Builder(client, path);
    --- End diff --
    
    nit: formatting


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to