Repository: curator Updated Branches: refs/heads/CURATOR-397 4efc38f3d -> 019caeea6
added tree cache wrapper Project: http://git-wip-us.apache.org/repos/asf/curator/repo Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/019caeea Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/019caeea Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/019caeea Branch: refs/heads/CURATOR-397 Commit: 019caeea6aba36e77c64073003e66d62aa60b761 Parents: 4efc38f Author: randgalt <[email protected]> Authored: Sat Apr 8 22:14:06 2017 -0500 Committer: randgalt <[email protected]> Committed: Sat Apr 8 22:14:06 2017 -0500 ---------------------------------------------------------------------- .../details/recipes/ModeledNodeCacheImpl.java | 12 +- .../recipes/ModeledPathChildrenCacheImpl.java | 131 ++++++++------- .../details/recipes/ModeledTreeCacheImpl.java | 164 +++++++++++++++++++ .../modeled/recipes/ModeledCacheEvent.java | 28 ++++ .../modeled/recipes/ModeledCacheEventType.java | 57 +++++++ .../modeled/recipes/ModeledCacheListener.java | 24 +++ .../async/modeled/recipes/ModeledNodeCache.java | 8 +- .../recipes/ModeledPathChildrenCache.java | 40 ++--- .../recipes/ModeledPathChildrenCacheEvent.java | 28 ---- .../ModeledPathChildrenCacheListener.java | 24 --- .../async/modeled/recipes/ModeledTreeCache.java | 46 ++++++ 11 files changed, 416 insertions(+), 146 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/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 f704f77..991119f 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 @@ -18,13 +18,11 @@ */ package org.apache.curator.x.async.modeled.details.recipes; -import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.listen.Listenable; import org.apache.curator.framework.recipes.cache.ChildData; import org.apache.curator.framework.recipes.cache.NodeCache; import org.apache.curator.framework.recipes.cache.NodeCacheListener; import org.apache.curator.utils.CloseableUtils; -import org.apache.curator.x.async.api.CreateOption; import org.apache.curator.x.async.modeled.ModeledDetails; import org.apache.curator.x.async.modeled.recipes.ModeledCachedNode; import org.apache.curator.x.async.modeled.recipes.ModeledNodeCache; @@ -37,10 +35,16 @@ public class ModeledNodeCacheImpl<T> implements ModeledNodeCache<T> private final NodeCache cache; private final ModeledDetails<T> modeled; - public ModeledNodeCacheImpl(CuratorFramework client, ModeledDetails<T> modeled) + public ModeledNodeCacheImpl(ModeledDetails<T> modeled, NodeCache cache) { this.modeled = Objects.requireNonNull(modeled, "modeled cannot be null"); - cache = new NodeCache(client, modeled.getPath().fullPath(), modeled.getCreateOptions().contains(CreateOption.compress)); + this.cache = Objects.requireNonNull(cache, "cache cannot be null"); + } + + @Override + public NodeCache upwrap() + { + return cache; } @Override http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/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 5a5bdda..d0ee681 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 @@ -18,57 +18,45 @@ */ 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.CuratorFramework; import org.apache.curator.framework.listen.Listenable; import org.apache.curator.framework.recipes.cache.ChildData; import org.apache.curator.framework.recipes.cache.PathChildrenCache; import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent; import org.apache.curator.framework.recipes.cache.PathChildrenCacheListener; -import org.apache.curator.utils.CloseableExecutorService; import org.apache.curator.utils.CloseableUtils; -import org.apache.curator.x.async.api.CreateOption; import org.apache.curator.x.async.modeled.ModeledDetails; import org.apache.curator.x.async.modeled.ZPath; +import org.apache.curator.x.async.modeled.recipes.ModeledCacheEventType; import org.apache.curator.x.async.modeled.recipes.ModeledCachedNode; import org.apache.curator.x.async.modeled.recipes.ModeledPathChildrenCache; -import org.apache.curator.x.async.modeled.recipes.ModeledPathChildrenCacheEvent; -import org.apache.curator.x.async.modeled.recipes.ModeledPathChildrenCacheListener; +import org.apache.curator.x.async.modeled.recipes.ModeledCacheEvent; +import org.apache.curator.x.async.modeled.recipes.ModeledCacheListener; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executor; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.ThreadFactory; import java.util.stream.Collectors; public class ModeledPathChildrenCacheImpl<T> implements ModeledPathChildrenCache<T> { private final ModeledDetails<T> modeled; private final PathChildrenCache cache; - private final Map<ModeledPathChildrenCacheListener, PathChildrenCacheListener> listenerMap = new ConcurrentHashMap<>(); + private final Map<ModeledCacheListener, PathChildrenCacheListener> listenerMap = new ConcurrentHashMap<>(); - public ModeledPathChildrenCacheImpl(CuratorFramework client, ModeledDetails<T> modeled, boolean cacheData, ThreadFactory threadFactory, ExecutorService executorService, CloseableExecutorService closeableExecutorService) + public ModeledPathChildrenCacheImpl(PathChildrenCache cache, ModeledDetails<T> modeled) { - this.modeled = modeled; - PathChildrenCache localCache; - if ( threadFactory != null ) - { - localCache = new PathChildrenCache(client, modeled.getPath().fullPath(), cacheData, modeled.getCreateOptions().contains(CreateOption.compress), threadFactory); - } - else if ( executorService != null ) - { - localCache = new PathChildrenCache(client, modeled.getPath().fullPath(), cacheData, modeled.getCreateOptions().contains(CreateOption.compress), executorService); - } - else if ( closeableExecutorService != null ) - { - localCache = new PathChildrenCache(client, modeled.getPath().fullPath(), cacheData, modeled.getCreateOptions().contains(CreateOption.compress), closeableExecutorService); - } - else - { - localCache = new PathChildrenCache(client, modeled.getPath().fullPath(), cacheData, modeled.getCreateOptions().contains(CreateOption.compress), PathChildrenCache.defaultThreadFactory); - } - cache = localCache; + this.modeled = Objects.requireNonNull(modeled, "modeled cannot be null"); + this.cache = Objects.requireNonNull(cache, "cache cannot be null"); + } + + @Override + public PathChildrenCache unwrap() + { + return cache; } @Override @@ -111,11 +99,11 @@ public class ModeledPathChildrenCacheImpl<T> implements ModeledPathChildrenCache } @Override - public void rebuildNode(String fullPath) + public void rebuildNode(ZPath fullPath) { try { - cache.rebuildNode(fullPath); + cache.rebuildNode(fullPath.fullPath()); } catch ( Exception e ) { @@ -124,32 +112,32 @@ public class ModeledPathChildrenCacheImpl<T> implements ModeledPathChildrenCache } @Override - public Listenable<ModeledPathChildrenCacheListener> getListenable() + public Listenable<ModeledCacheListener<T>> getListenable() { - return new Listenable<ModeledPathChildrenCacheListener>() + return new Listenable<ModeledCacheListener<T>>() { @Override - public void addListener(ModeledPathChildrenCacheListener listener) + public void addListener(ModeledCacheListener<T> listener) { addListener(listener, MoreExecutors.sameThreadExecutor()); } @Override - public void addListener(ModeledPathChildrenCacheListener listener, Executor executor) + public void addListener(ModeledCacheListener<T> listener, Executor executor) { PathChildrenCacheListener pathChildrenCacheListener = (client, event) -> { - ModeledPathChildrenCacheEvent modeledEvent = new ModeledPathChildrenCacheEvent() + ModeledCacheEvent<T> modeledEvent = new ModeledCacheEvent<T>() { @Override - public PathChildrenCacheEvent.Type getType() + public ModeledCacheEventType getType() { - return event.getType(); + return toType(event.getType()); } @Override - public ModeledCachedNode getNode() + public Optional<ModeledCachedNode<T>> getNode() { - return from(event.getData()); + return Optional.ofNullable(from(modeled, event.getData())); } }; listener.event(modeledEvent); @@ -159,7 +147,7 @@ public class ModeledPathChildrenCacheImpl<T> implements ModeledPathChildrenCache } @Override - public void removeListener(ModeledPathChildrenCacheListener listener) + public void removeListener(ModeledCacheListener listener) { PathChildrenCacheListener pathChildrenCacheListener = listenerMap.remove(listener); if ( pathChildrenCacheListener != null ) @@ -174,36 +162,26 @@ public class ModeledPathChildrenCacheImpl<T> implements ModeledPathChildrenCache public List<ModeledCachedNode> getCurrentData() { return cache.getCurrentData().stream() - .map(this::from) + .map(data -> from(modeled, data)) .collect(Collectors.toList()); } - private ModeledCachedNode<T> from(ChildData data) - { - if ( data == null ) - { - return null; - } - T model = (data.getData() != null) ? modeled.getSerializer().deserialize(data.getData()) : null; - return new ModeledCachedNode<>(ZPath.parse(data.getPath()), model, data.getStat()); - } - @Override - public ModeledCachedNode getCurrentData(String fullPath) + public Optional<ModeledCachedNode> getCurrentData(String fullPath) { - return from(cache.getCurrentData(fullPath)); + return Optional.ofNullable(from(modeled, cache.getCurrentData(fullPath))); } @Override - public void clearDataBytes(String fullPath) + public void clearDataBytes(ZPath fullPath) { - cache.clearDataBytes(fullPath); + cache.clearDataBytes(fullPath.fullPath()); } @Override - public boolean clearDataBytes(String fullPath, int ifVersion) + public boolean clearDataBytes(ZPath fullPath, int ifVersion) { - return cache.clearDataBytes(fullPath, ifVersion); + return cache.clearDataBytes(fullPath.fullPath(), ifVersion); } @Override @@ -230,4 +208,43 @@ public class ModeledPathChildrenCacheImpl<T> implements ModeledPathChildrenCache { CloseableUtils.closeQuietly(cache); } + + static <T> ModeledCachedNode<T> from(ModeledDetails<T> modeled, ChildData data) + { + if ( data == null ) + { + return null; + } + T model = (data.getData() != null) ? modeled.getSerializer().deserialize(data.getData()) : null; + return new ModeledCachedNode<>(ZPath.parse(data.getPath()), model, data.getStat()); + } + + @VisibleForTesting + static ModeledCacheEventType toType(PathChildrenCacheEvent.Type type) + { + switch ( type ) + { + case CHILD_ADDED: + return ModeledCacheEventType.NODE_ADDED; + + case CHILD_UPDATED: + return ModeledCacheEventType.NODE_UPDATED; + + case CHILD_REMOVED: + return ModeledCacheEventType.NODE_REMOVED; + + case CONNECTION_SUSPENDED: + return ModeledCacheEventType.CONNECTION_SUSPENDED; + + case CONNECTION_RECONNECTED: + return ModeledCacheEventType.CONNECTION_RECONNECTED; + + case CONNECTION_LOST: + return ModeledCacheEventType.CONNECTION_LOST; + + case INITIALIZED: + return ModeledCacheEventType.INITIALIZED; + } + throw new UnsupportedOperationException("Unknown type: " + type); + } } http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/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 new file mode 100644 index 0000000..542ad23 --- /dev/null +++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledTreeCacheImpl.java @@ -0,0 +1,164 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +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.TreeCache; +import org.apache.curator.framework.recipes.cache.TreeCacheEvent; +import org.apache.curator.framework.recipes.cache.TreeCacheListener; +import org.apache.curator.utils.CloseableUtils; +import org.apache.curator.x.async.modeled.ModeledDetails; +import org.apache.curator.x.async.modeled.ZPath; +import org.apache.curator.x.async.modeled.recipes.ModeledCacheEvent; +import org.apache.curator.x.async.modeled.recipes.ModeledCacheEventType; +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.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executor; +import java.util.stream.Collectors; + +import static org.apache.curator.x.async.modeled.details.recipes.ModeledPathChildrenCacheImpl.from; + +public class ModeledTreeCacheImpl<T> implements ModeledTreeCache<T> +{ + private final ModeledDetails<T> modeled; + private final TreeCache cache; + private final Map<ModeledCacheListener, TreeCacheListener> listenerMap = new ConcurrentHashMap<>(); + + public ModeledTreeCacheImpl(ModeledDetails<T> modeled, TreeCache cache) + { + this.modeled = Objects.requireNonNull(modeled, "modeled cannot be null"); + this.cache = Objects.requireNonNull(cache, "cache cannot be null"); + } + + @Override + public void start() + { + try + { + cache.start(); + } + catch ( Exception e ) + { + throw new RuntimeException("Could not start", e); + } + } + + @Override + public void close() + { + CloseableUtils.closeQuietly(cache); + } + + @Override + public Listenable<ModeledCacheListener<T>> getListenable() + { + return new Listenable<ModeledCacheListener<T>>() + { + @Override + public void addListener(ModeledCacheListener<T> listener) + { + addListener(listener, MoreExecutors.sameThreadExecutor()); + } + + @Override + public void addListener(ModeledCacheListener<T> listener, Executor executor) + { + TreeCacheListener treeCacheListener = (client, event) -> { + ModeledCacheEvent<T> wrappedEvent = new ModeledCacheEvent<T>() + { + @Override + public ModeledCacheEventType getType() + { + return toType(event.getType()); + } + + @Override + public Optional<ModeledCachedNode<T>> getNode() + { + return Optional.ofNullable(from(modeled, event.getData())); + } + }; + }; + listenerMap.put(listener, treeCacheListener); + cache.getListenable().addListener(treeCacheListener, executor); + } + + @Override + public void removeListener(ModeledCacheListener<T> listener) + { + TreeCacheListener treeCacheListener = listenerMap.remove(listener); + if ( treeCacheListener != null ) + { + cache.getListenable().removeListener(treeCacheListener); + } + } + }; + } + + @Override + public Map<ZPath, ModeledCachedNode<T>> getCurrentChildren(ZPath fullPath) + { + return cache.getCurrentChildren(fullPath.fullPath()).entrySet().stream() + .map(entry -> new AbstractMap.SimpleEntry<>(ZPath.parse(entry.getKey()), from(modeled, entry.getValue()))) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + } + + @Override + public Optional<ModeledCachedNode<T>> getCurrentData(ZPath fullPath) + { + return Optional.ofNullable(from(modeled, cache.getCurrentData(fullPath.fullPath()))); + } + + @VisibleForTesting + static ModeledCacheEventType toType(TreeCacheEvent.Type type) + { + switch ( type ) + { + case NODE_ADDED: + return ModeledCacheEventType.NODE_ADDED; + + case NODE_UPDATED: + return ModeledCacheEventType.NODE_UPDATED; + + case NODE_REMOVED: + return ModeledCacheEventType.NODE_REMOVED; + + case CONNECTION_SUSPENDED: + return ModeledCacheEventType.CONNECTION_SUSPENDED; + + case CONNECTION_RECONNECTED: + return ModeledCacheEventType.CONNECTION_RECONNECTED; + + case CONNECTION_LOST: + return ModeledCacheEventType.CONNECTION_LOST; + + case INITIALIZED: + return ModeledCacheEventType.INITIALIZED; + } + throw new UnsupportedOperationException("Unknown type: " + type); + } +} http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/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 new file mode 100644 index 0000000..442e31c --- /dev/null +++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheEvent.java @@ -0,0 +1,28 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.curator.x.async.modeled.recipes; + +import java.util.Optional; + +public interface ModeledCacheEvent<T> +{ + ModeledCacheEventType getType(); + + Optional<ModeledCachedNode<T>> getNode(); +} http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheEventType.java ---------------------------------------------------------------------- diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheEventType.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheEventType.java new file mode 100644 index 0000000..bfdf57d --- /dev/null +++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheEventType.java @@ -0,0 +1,57 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.curator.x.async.modeled.recipes; + +public enum ModeledCacheEventType +{ + /** + * A child was added to the path + */ + NODE_ADDED, + + /** + * A child's data was changed + */ + NODE_UPDATED, + + /** + * A child was removed from the path + */ + NODE_REMOVED, + + /** + * Called when the connection has changed to {@link org.apache.curator.framework.state.ConnectionState#SUSPENDED} + */ + CONNECTION_SUSPENDED, + + /** + * Called when the connection has changed to {@link org.apache.curator.framework.state.ConnectionState#RECONNECTED} + */ + CONNECTION_RECONNECTED, + + /** + * Called when the connection has changed to {@link org.apache.curator.framework.state.ConnectionState#LOST} + */ + CONNECTION_LOST, + + /** + * Signals that the initial cache has been populated. + */ + INITIALIZED +} http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/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 new file mode 100644 index 0000000..88c7de0 --- /dev/null +++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheListener.java @@ -0,0 +1,24 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.curator.x.async.modeled.recipes; + +public interface ModeledCacheListener<T> +{ + void event(ModeledCacheEvent<T> event); +} http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/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 6da08c7..d5650b3 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 @@ -18,8 +18,8 @@ */ package org.apache.curator.x.async.modeled.recipes; -import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.listen.Listenable; +import org.apache.curator.framework.recipes.cache.NodeCache; import org.apache.curator.framework.recipes.cache.NodeCacheListener; import org.apache.curator.x.async.modeled.ModeledDetails; import org.apache.curator.x.async.modeled.details.recipes.ModeledNodeCacheImpl; @@ -28,11 +28,13 @@ import java.util.Optional; public interface ModeledNodeCache<T> extends Closeable { - static <T> ModeledNodeCache build(CuratorFramework client, ModeledDetails<T> modeled) + static <T> ModeledNodeCache wrap(ModeledDetails<T> modeled, NodeCache cache) { - return new ModeledNodeCacheImpl<>(client, modeled); + return new ModeledNodeCacheImpl<>(modeled, cache); } + NodeCache upwrap(); + void start(); void start(boolean buildInitial); http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/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 06fa345..fd27c12 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 @@ -18,43 +18,23 @@ */ package org.apache.curator.x.async.modeled.recipes; -import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.listen.Listenable; import org.apache.curator.framework.recipes.cache.PathChildrenCache; -import org.apache.curator.utils.CloseableExecutorService; import org.apache.curator.x.async.modeled.ModeledDetails; +import org.apache.curator.x.async.modeled.ZPath; import org.apache.curator.x.async.modeled.details.recipes.ModeledPathChildrenCacheImpl; import java.io.Closeable; import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.ThreadFactory; +import java.util.Optional; public interface ModeledPathChildrenCache<T> extends Closeable { - static <T> ModeledPathChildrenCache<T> build(CuratorFramework client, ModeledDetails<T> modeled) + static <T> ModeledPathChildrenCache<T> wrap(PathChildrenCache cache, ModeledDetails<T> modeled) { - return new ModeledPathChildrenCacheImpl<>(client, modeled, true, null, null, null); + return new ModeledPathChildrenCacheImpl<>(cache, modeled); } - static <T> ModeledPathChildrenCache<T> build(CuratorFramework client, ModeledDetails<T> modeled, boolean cacheData) - { - return new ModeledPathChildrenCacheImpl<>(client, modeled, cacheData, null, null, null); - } - - static <T> ModeledPathChildrenCache<T> build(CuratorFramework client, ModeledDetails<T> modeled, boolean cacheData, ThreadFactory threadFactory) - { - return new ModeledPathChildrenCacheImpl<>(client, modeled, cacheData, threadFactory, null, null); - } - - static <T> ModeledPathChildrenCache<T> build(CuratorFramework client, ModeledDetails<T> modeled, boolean cacheData, ExecutorService executorService) - { - return new ModeledPathChildrenCacheImpl<>(client, modeled, cacheData, null, executorService, null); - } - - static <T> ModeledPathChildrenCache<T> build(CuratorFramework client, ModeledDetails<T> modeled, boolean cacheData, CloseableExecutorService executorService) - { - return new ModeledPathChildrenCacheImpl<>(client, modeled, cacheData, null, null, executorService); - } + PathChildrenCache unwrap(); void start(); @@ -62,17 +42,17 @@ public interface ModeledPathChildrenCache<T> extends Closeable void rebuild(); - void rebuildNode(String fullPath); + void rebuildNode(ZPath fullPath); - Listenable<ModeledPathChildrenCacheListener> getListenable(); + Listenable<ModeledCacheListener<T>> getListenable(); List<ModeledCachedNode> getCurrentData(); - ModeledCachedNode getCurrentData(String fullPath); + Optional<ModeledCachedNode> getCurrentData(String fullPath); - void clearDataBytes(String fullPath); + void clearDataBytes(ZPath fullPath); - boolean clearDataBytes(String fullPath, int ifVersion); + boolean clearDataBytes(ZPath fullPath, int ifVersion); void clearAndRefresh(); http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCacheEvent.java ---------------------------------------------------------------------- diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCacheEvent.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCacheEvent.java deleted file mode 100644 index d2a9d71..0000000 --- a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCacheEvent.java +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.curator.x.async.modeled.recipes; - -import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent; - -public interface ModeledPathChildrenCacheEvent<T> -{ - PathChildrenCacheEvent.Type getType(); - - ModeledCachedNode<T> getNode(); -} http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCacheListener.java ---------------------------------------------------------------------- diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCacheListener.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCacheListener.java deleted file mode 100644 index 9379961..0000000 --- a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCacheListener.java +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.curator.x.async.modeled.recipes; - -public interface ModeledPathChildrenCacheListener -{ - void event(ModeledPathChildrenCacheEvent event); -} http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/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 new file mode 100644 index 0000000..ec49b8b --- /dev/null +++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledTreeCache.java @@ -0,0 +1,46 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.curator.x.async.modeled.recipes; + +import org.apache.curator.framework.listen.Listenable; +import org.apache.curator.framework.recipes.cache.TreeCache; +import org.apache.curator.x.async.modeled.ModeledDetails; +import org.apache.curator.x.async.modeled.ZPath; +import org.apache.curator.x.async.modeled.details.recipes.ModeledTreeCacheImpl; +import java.io.Closeable; +import java.util.Map; +import java.util.Optional; + +public interface ModeledTreeCache<T> extends Closeable +{ + static <T> ModeledTreeCache<T> wrap(ModeledDetails<T> modeled, TreeCache cache) + { + return new ModeledTreeCacheImpl<>(modeled, cache); + } + + void start(); + + void close(); + + Listenable<ModeledCacheListener<T>> getListenable(); + + Map<ZPath, ModeledCachedNode<T>> getCurrentChildren(ZPath fullPath); + + Optional<ModeledCachedNode<T>> getCurrentData(ZPath fullPath); +}
