package edu.uw.zookeeper.data; import java.util.Map; import com.google.common.base.MoreObjects; import com.google.common.base.Supplier; import edu.uw.zookeeper.data.NameTrie.Pointer; public class ValueNode<V> extends AbstractNameTrie.SimpleNode<ValueNode<V>> implements Supplier<V> { public static <V> ValueNode<V> root(V value) { return new ValueNode<V>(value, AbstractNameTrie.<ValueNode<V>>rootPointer()); } public static <V> ValueNode<V> child(V value, ZNodeName name, ValueNode<V> parent) { return new ValueNode<V>(value, AbstractNameTrie.weakPointer(name, parent)); } private final V value; protected ValueNode( V value, Pointer<? extends ValueNode<V>> parent) { super(parent); this.value = value; } protected ValueNode( V value, Pointer<? extends ValueNode<V>> parent, Map<ZNodeName, ValueNode<V>> children) { super(parent, children); this.value = value; } protected ValueNode( V value, ZNodePath path, Pointer<? extends ValueNode<V>> parent, Map<ZNodeName, ValueNode<V>> children) { super(path, parent, children); this.value = value; } @Override public V get() { return value; } @Override public String toString() { return MoreObjects.toStringHelper("") .add("path", path()) .add("children", keySet()) .add("value", get()) .toString(); } }