package io.fathom.cloud.state; import java.util.List; import java.util.Map; import com.google.common.collect.Maps; import com.google.common.util.concurrent.SettableFuture; import com.google.protobuf.ByteString; public abstract class StateStore { public static abstract class StateNode { protected final Map<String, StateNode> children = Maps.newHashMap(); public abstract List<String> getChildrenKeys() throws StateStoreException; public final StateNode child(String key) { StateNode child = children.get(key); if (child == null) { child = buildChild0(key); children.put(key, child); } return child; } protected abstract StateNode buildChild0(String key); public boolean hasChild(String key) throws StateStoreException { StateNode child = child(key); return child.exists(); } public abstract boolean exists() throws StateStoreException; public abstract ByteString read(SettableFuture<Object> watch) throws StateStoreException; public abstract List<StateNode> getChildren() throws StateStoreException; public abstract String getPath(); public abstract boolean create(ByteString data) throws StateStoreException; public abstract void update(ByteString data) throws StateStoreException; public abstract boolean delete() throws StateStoreException; public abstract Long getChildrenChangeCount() throws StateStoreException; } public abstract StateNode getRoot(String id); public abstract IdProvider getIdProvider(String name); }