[
https://issues.apache.org/jira/browse/CURATOR-144?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14108630#comment-14108630
]
ASF GitHub Bot commented on CURATOR-144:
----------------------------------------
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
> TreeCache should use a builder for advanced options
> ---------------------------------------------------
>
> Key: CURATOR-144
> URL: https://issues.apache.org/jira/browse/CURATOR-144
> Project: Apache Curator
> Issue Type: Improvement
> Components: Recipes
> Reporter: Scott Blum
> Priority: Minor
> Original Estimate: 24h
> Remaining Estimate: 24h
>
--
This message was sent by Atlassian JIRA
(v6.2#6252)