/* * Galaxy * Copyright (c) 2012-2014, Parallel Universe Software Co. All rights reserved. * * This program and the accompanying materials are dual-licensed under * either the terms of the Eclipse Public License v1.0 as published by * the Eclipse Foundation * * or (per the licensee's choosing) * * under the terms of the GNU Lesser General Public License version 3.0 * as published by the Free Software Foundation. */ package co.paralleluniverse.galaxy.jgroups; import co.paralleluniverse.galaxy.cluster.DistributedTree; import co.paralleluniverse.galaxy.jgroups.ReplicatedTree.ReplicatedTreeListener; import java.io.PrintStream; import java.util.List; /** * * @author pron */ class DistributedTreeAdapter implements DistributedTree { private final ReplicatedTree tree; public DistributedTreeAdapter(ReplicatedTree tree) { this.tree = tree; } @Override public void addListener(String node, final Listener listener) { tree.addListener(node, new ListenerAdapter(listener)); List<String> children = tree.getChildren(node); if (children == null) return; for (String child : children) { listener.nodeChildAdded(node, child); } } @Override public void removeListener(String node, final Listener listener) { tree.removeListener(node, new ListenerAdapter(listener)); } @Override public void create(String node, boolean ephemeral) { tree.create(node, ephemeral); } @Override public void createEphemeralOrdered(String node) { tree.create(node, true); } @Override public void set(String node, byte[] data) { tree.set(node, data); } @Override public void delete(String node) { tree.remove(node); } @Override public void flush() { tree.flush(); } @Override public boolean exists(String node) { return tree.exists(node); } @Override public byte[] get(String node) { return tree.get(node); } @Override public List<String> getChildren(String node) { return tree.getChildren(node); } @Override public void print(String node, PrintStream out) { out.println(tree.toString(node)); } @Override public void shutdown() { } private static class ListenerAdapter implements ReplicatedTreeListener { private final Listener listener; public ListenerAdapter(Listener listener) { this.listener = listener; } @Override public void nodeAdded(String fqn) { listener.nodeAdded(fqn); } @Override public void nodeRemoved(String fqn) { listener.nodeDeleted(fqn); } @Override public void nodeUpdated(String fqn) { listener.nodeUpdated(fqn); } @Override public void nodeChildAdded(String parentFqn, String childName) { listener.nodeChildAdded(parentFqn, childName); } @Override public void nodeChildRemoved(String parentFqn, String childName) { listener.nodeChildDeleted(parentFqn, childName); } @Override public void nodeChildUpdated(String parentFqn, String childName) { listener.nodeChildUpdated(parentFqn, childName); } @Override public boolean equals(Object obj) { if (obj == null) return false; if (!(obj instanceof ListenerAdapter)) return false; return this.listener == ((ListenerAdapter) obj).listener; } @Override public int hashCode() { return listener.hashCode(); } } }