package edu.brown.graphs; import java.io.File; import java.io.IOException; import java.util.List; import java.util.Set; import org.apache.log4j.Logger; import org.json.JSONException; import org.json.JSONObject; import org.json.JSONStringer; import org.voltdb.catalog.CatalogType; import org.voltdb.catalog.Database; import edu.brown.utils.CollectionUtil; import edu.brown.utils.JSONUtil; import edu.uci.ics.jung.graph.DelegateForest; public abstract class AbstractDirectedTree<V extends AbstractVertex, E extends AbstractEdge> extends DelegateForest<V, E> implements IGraph<V, E> { protected static final Logger LOG = Logger.getLogger(AbstractDirectedTree.class.getName()); private static final long serialVersionUID = 5267919528011628037L; /** * Inner state information about the graph */ private final InnerGraphInformation<V, E> inner; /** * Constructor * @param catalog_db */ public AbstractDirectedTree(Database catalog_db) { super(); this.inner = new InnerGraphInformation<V, E>(this, catalog_db); } // ---------------------------------------------------------------------------- // INNER DELEGATION METHODS // ---------------------------------------------------------------------------- @Override public int getGraphId() { return this.inner.getGraphId(); } public Set<V> getDescendants(V vertex) { return (this.inner.getDescendants(vertex)); } public List<V> getAncestors(V vertex) { return (this.inner.getAncestors(vertex)); } public Set<V> getRoots() { return (this.inner.getRoots()); } public V getRoot(V V) { return (CollectionUtil.first(this.inner.getRoots())); } public Database getDatabase() { return (this.inner.getDatabase()); } @Override public void setVerbose(boolean verbose) { this.inner.setVerbose(verbose); } @Override public void setEdgeVerbose(boolean verbose) { this.inner.setEdgeVerbose(verbose); } @Override public void setVertexVerbose(boolean verbose) { this.inner.setVertexVerbose(verbose); } @Override public void enableDirtyChecks() { this.inner.enableDirtyChecks(); } @Override public List<E> getPath(V source, V target) { return (this.inner.getPath(source, target)); } @Override public List<E> getPath(List<V> path) { return (this.inner.getPath(path)); } @Override public String getName() { return (this.inner.getName()); } @Override public void setName(String name) { this.inner.setName(name); } @Override public boolean addVertex(V v) { this.inner.addVertx(v); return super.addVertex(v); } @Override public V getVertex(String catalog_key) { return (this.inner.getVertex(catalog_key)); } @Override public V getVertex(CatalogType catalog_item) { return (this.inner.getVertex(catalog_item)); } @Override public V getVertex(Long element_id) { return (this.inner.getVertex(element_id)); } @Override public void pruneIsolatedVertices() { this.inner.pruneIsolatedVertices(); } // @Override // public E findEdge(V v1, V v2) { // return (this.inner.findEdge(v1, v2)); // } @Override public String toString(E e, boolean verbose) { return (this.inner.toString(e, verbose)); } @Override public String toString() { return (this.getClass().getSimpleName() + "@" + this.hashCode()); } public String debug() { return super.toString(); } // ---------------------------------------------------------------------------- // SERIALIZATION METHODS // ---------------------------------------------------------------------------- @Override public void load(File input_path, Database catalog_db) throws IOException { GraphUtil.load(this, catalog_db, input_path); } @Override public void save(File output_path) throws IOException { GraphUtil.save(this, output_path); } @Override public String toJSONString() { return (JSONUtil.toJSONString(this)); } @Override public void toJSON(JSONStringer stringer) throws JSONException { GraphUtil.serialize(this, stringer); } @Override public void fromJSON(JSONObject jsonObject, Database catalog_db) throws JSONException { int id = GraphUtil.deserialize(this, catalog_db, jsonObject); this.inner.setGraphId(id); } }