package io.fathom.cloud.persist; import io.fathom.cloud.state.ZookeeperStateStore.ZookeeperStateNode; import java.util.Map; import javax.persistence.EntityTransaction; import com.google.common.collect.Maps; public class ZookeeperEntityTransaction implements EntityTransaction { private boolean active; private boolean rollbackOnly; @Override public void begin() { if (active) { throw new IllegalStateException(); } this.rollbackOnly = false; this.roots.clear(); this.active = true; } @Override public void commit() { checkActive(); if (rollbackOnly) { throw new IllegalStateException(); } active = false; this.roots.clear(); } @Override public void rollback() { checkActive(); active = false; this.roots.clear(); } @Override public void setRollbackOnly() { checkActive(); rollbackOnly = true; } @Override public boolean getRollbackOnly() { checkActive(); return rollbackOnly; } @Override public boolean isActive() { return active; } final Map<String, ZookeeperStateNode> roots = Maps.newHashMap(); public void putRoot(String id, ZookeeperStateNode stateNode) { checkActive(); roots.put(id, stateNode); } public ZookeeperStateNode findRoot(String id) { checkActive(); return roots.get(id); } private void checkActive() { if (!active) { throw new IllegalStateException(); } } }