package edu.brown.markov;
import java.io.File;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.voltdb.catalog.Procedure;
import edu.brown.graphs.GraphvizExport;
import edu.brown.markov.containers.MarkovGraphsContainerUtil;
import edu.brown.markov.containers.MarkovGraphsContainer;
import edu.brown.utils.ArgumentsParser;
public class MarkovGraphvizExport {
/**
* @param args
*/
public static void main(String vargs[]) throws Exception {
ArgumentsParser args = ArgumentsParser.load(vargs);
args.require(ArgumentsParser.PARAM_CATALOG, ArgumentsParser.PARAM_MARKOV);
File input_path = args.getFileParam(ArgumentsParser.PARAM_MARKOV);
boolean full_output = true;
boolean vldb_output = false;
Set<Procedure> procedures = new HashSet<Procedure>();
for (String proc_name : args.getOptParam(0).split(",")) {
if (proc_name.equals("*")) {
for (Procedure catalog_proc : args.catalog_db.getProcedures()) {
if (catalog_proc.getSystemproc()) continue;
procedures.add(catalog_proc);
} // FOR
} else {
Procedure catalog_proc = args.catalog_db.getProcedures().getIgnoreCase(proc_name);
assert(catalog_proc != null) : "Invalid procedure '" + proc_name + "'";
procedures.add(catalog_proc);
}
} // FOR
assert(procedures.size() > 0) : "No procedures";
Map<Integer, MarkovGraphsContainer> m = MarkovGraphsContainerUtil.loadProcedures(args.catalogContext,
input_path, procedures);
for (Procedure catalog_proc : procedures) {
MarkovGraphsContainer markovs = null;
if (m.containsKey(MarkovUtil.GLOBAL_MARKOV_CONTAINER_ID)) {
markovs = m.get(MarkovUtil.GLOBAL_MARKOV_CONTAINER_ID);
} else {
assert(args.getOptParamCount() > 1) : "Missing partition argument";
int partition = args.getIntOptParam(1);
markovs = m.get(partition);
}
Map<Integer, MarkovGraph> markov_set = markovs.getAll(catalog_proc);
if (markov_set == null || markov_set.isEmpty()) {
System.err.println("Skipping " + catalog_proc + " because there is no Markov graph");
continue;
}
for (Entry<Integer, MarkovGraph> e : markov_set.entrySet()) {
MarkovGraph markov = e.getValue();
assert(markov.isValid()) : "The graph for " + catalog_proc + " is not initialized!";
GraphvizExport<MarkovVertex, MarkovEdge> gv = MarkovUtil.exportGraphviz(markov, full_output, vldb_output, false, null);
File f = null;
if (markov_set.size() == 1) {
f = gv.writeToTempFile(catalog_proc);
} else {
f = gv.writeToTempFile(catalog_proc, e.getKey());
}
System.err.println("WROTE FILE: " + f);
} // FOR
} // FOR
}
}