package edu.nd.nina.io;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import edu.nd.nina.DirectedGraph;
import edu.nd.nina.Graph;
import edu.nd.nina.graph.ClassBasedEdgeFactory;
import edu.nd.nina.graph.SimpleGraph;
public class EdgeList {
public static <V extends Comparable<V>, E> void save(Graph<V, E> graph,
String fileName, String desc) {
PrintWriter pw = null;
try {
pw = new PrintWriter(fileName);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
return;
}
if (graph instanceof DirectedGraph) {
pw.printf("# Directed graph: %s \n", fileName);
} else {
pw.printf(
"# Undirected graph (each unordered pair of nodes is saved once): %s\n",
fileName);
}
if (!desc.isEmpty()) {
pw.printf("# %s\n", desc);
}
pw.printf("# Nodes: %d Edges: %d\n", graph.vertexSet().size(), graph
.edgeSet().size());
if (graph instanceof DirectedGraph) {
pw.printf("# FromNodeId\tToNodeId\n");
} else {
pw.printf("# NodeId\tNodeId\n");
}
for (E e : graph.edgeSet()) {
pw.printf("%s\t%s\n", graph.getEdgeSource(e),
graph.getEdgeTarget(e));
}
pw.close();
}
public static <V extends Comparable<V>, E> Graph<V, E> load(
String fileName, String desc) {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(fileName));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String line = "";
SimpleGraph<V,E> graph = new SimpleGraph<V,E>(new ClassBasedEdgeFactory<V,E>());
try {
while((line = br.readLine()) != null){
String[] lineDiv = line.split("\t");
V src = (V) lineDiv[0];
V dest = (V) lineDiv[1];
graph.addVertex(src);
graph.addVertex(dest);
graph.addEdge(src, dest);
}
} catch (IOException e) {
e.printStackTrace();
}
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
return graph;
}
}