// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea // Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com // Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology // Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/ // GraphTea Project: http://github.com/graphtheorysoftware/GraphTea // Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com // Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology // Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/ package graphtea.extensions.io.g6format; import graphtea.extensions.G6Format; import graphtea.graph.graph.Edge; import graphtea.graph.graph.GraphModel; import graphtea.graph.graph.Vertex; import graphtea.plugins.graphgenerator.core.PositionGenerators; import graphtea.plugins.main.saveload.SaveLoadPluginMethods; import graphtea.plugins.main.saveload.core.GraphIOException; import graphtea.plugins.main.saveload.core.extension.GraphReaderExtension; import java.awt.*; import java.io.*; import java.util.Scanner; public class LoadGraph6Format implements GraphReaderExtension { @Override public boolean accepts(File file) { return SaveLoadPluginMethods.getExtension(file).equals(getExtension()); } public String getName() { return "Graph6 Format"; } public String getExtension() { return "g6"; } @Override public GraphModel read(File file) throws GraphIOException { String g6 = ""; try { Scanner sc = new Scanner(file); g6 = sc.nextLine(); } catch (FileNotFoundException e) { e.printStackTrace(); } GraphModel g = G6Format.stringToGraphModel(g6); Point pp[] = PositionGenerators.circle(200, 400, 250, g.numOfVertices()); int tmpcnt = 0; for (Vertex v : g) { v.setLocation(pp[tmpcnt]); tmpcnt++; } return g; } public GraphModel next(BufferedReader bri) { String g = ""; try { bri.readLine(); g=bri.readLine(); } catch (IOException e) { e.printStackTrace(); } String tmp = g.substring(g.indexOf("order")); tmp = tmp.substring(tmp.indexOf(" "),tmp.length()-1); int numOfVertices = Integer.parseInt(tmp.trim()); g+= "\n"; for (int i = 0; i < numOfVertices; i++) { try { g += bri.readLine() + "\n"; } catch (IOException e) { e.printStackTrace(); return new GraphModel(); } } return parseGraph(new Scanner(g)); } public String getDescription() { return "Graph6 File Format"; } public static ProcessBuilder getShowGProcess(String file) { String cur = null; try { cur = new java.io.File(".").getCanonicalPath(); } catch (IOException e) { e.printStackTrace(); } ProcessBuilder process; if(System.getProperty("os.name").contains("Win")) { cur =cur + "\\graphs\\"; process = new ProcessBuilder(cur + "showg_win32.exe", file); } else { cur = cur + "/graphs/"; process = new ProcessBuilder(cur + "showg.out",file); } return process; } public static BufferedReader showG(File file) { try { ProcessBuilder process = getShowGProcess(file.getAbsolutePath()); Process p = process.start(); return new BufferedReader(new InputStreamReader(p.getInputStream())); } catch (IOException e) { e.printStackTrace(); } return null; } public static GraphModel parseGraph(Scanner sc) { GraphModel g = new GraphModel(); g.setDirected(false); //sc.nextLine(); String order = sc.nextLine(); order = order.substring(order.lastIndexOf("r") + 1, order.lastIndexOf(".")); order = order.trim(); int ord = Integer.parseInt(order); for (int i = 0; i < ord; i++) g.addVertex(new Vertex()); for (int i = 0; i < ord; i++) { String tmp = sc.nextLine(); int first = Integer.parseInt(tmp.substring(0,tmp.indexOf(":")-1).trim()); tmp = tmp.substring(tmp.indexOf(":") + 1); Scanner sc2 = new Scanner(tmp.trim()); while (sc2.hasNext()) { String num = sc2.next(); if (num.contains(";")) num = num.substring(0, num.indexOf(";")); int id = Integer.parseInt(num.trim()); if (!g.isEdge(g.getVertex(first), g.getVertex(id))) { g.addEdge(new Edge(g.getVertex(first), g.getVertex(id))); } } } return g; } }