package nl.helixsoft.graph; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import edu.uci.ics.jung.graph.DirectedGraph; import edu.uci.ics.jung.graph.DirectedSparseGraph; /** * Helper class for reading and writing {@link Network}s in SIF format. */ public class SifFormat { public DirectedGraph<String, Edge> readFromFile2(File f) throws IOException { DirectedGraph<String, Edge> result = new DirectedSparseGraph<String, Edge>(); int lineNo = 0; BufferedReader reader = new BufferedReader(new FileReader (f)); String line; while ((line = reader.readLine()) != null) { lineNo ++; String [] fields = line.split("\\s+"); if (fields.length < 3) throw new IOException("Not valid SIF at line " + lineNo); String src = fields[0]; String dest = fields[2]; result.addVertex(src); result.addVertex(dest); result.addEdge (new EdgeImpl(fields[1]), src, dest); } reader.close(); return result; } public Network readFromFile(File f) throws IOException { Network result = new NetworkImpl(); int lineNo = 0; BufferedReader reader = new BufferedReader(new FileReader (f)); String line; while ((line = reader.readLine()) != null) { lineNo ++; String [] fields = line.split("\\s+"); if (fields.length < 3) throw new IOException("Not valid SIF at line " + lineNo); NodeImpl src = result.createOrGetNode(fields[0]); NodeImpl dest = result.createOrGetNode(fields[2]); result.createEdge (src, dest, fields[1]); } reader.close(); return result; } public void writeToFile (Network net, File out) throws IOException { FileWriter writer = new FileWriter (out); write (net, writer); writer.close(); } public void write (Network net, Writer writer) throws IOException { for (Edge e : net.getEdges()) { writer.write("" + e.getSrc().getId()); writer.write ('\t'); writer.write(e.getPredicate()); writer.write ('\t'); writer.write("" + e.getDest().getId()); writer.write ('\n'); } } public void write (DirectedGraph<String, Edge> net, Writer writer) throws IOException { for (Edge e : net.getEdges()) { writer.write("" + net.getSource(e)); writer.write ('\t'); writer.write(e.getPredicate()); writer.write ('\t'); writer.write("" + net.getDest(e)); writer.write ('\n'); } } }