Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added Lab1-master/lab1/bin/lab1/GraphViz.class
Binary file not shown.
Binary file added Lab1-master/lab1/bin/lab1/Proba.class
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added Lab1-master/lab1/bin/lab1/ReadFromFile.class
Binary file not shown.
Binary file not shown.
Binary file not shown.
284 changes: 284 additions & 0 deletions Lab1-master/lab1/src/lab1/GraphViz.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,284 @@
package lab1;

//GraphViz.java - a simple API to call dot from Java programs
/*$Id$*/
/*
******************************************************************************
* *
* (c) Copyright 2003 Laszlo Szathmary *
* *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as published by *
* the Free Software Foundation; either version 2.1 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public *
* License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with this program; if not, write to the Free Software Foundation, *
* Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
* *
******************************************************************************
*/

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;

/**
* <dl>
* <dt>Purpose: GraphViz Java API
* <dd>
*
* <dt>Description:
* <dd> With this Java class you can simply call dot
* from your Java programs
* <dt>Example usage:
* <dd>
* <pre>
* GraphViz gv = new GraphViz();
* gv.addln(gv.start_graph());
* gv.addln("A -> B;");
* gv.addln("A -> C;");
* gv.addln(gv.end_graph());
* System.out.println(gv.getDotSource());
*
* String type = "gif";
* File out = new File("out." + type); // out.gif in this example
* gv.writeGraphToFile( gv.getGraph( gv.getDotSource(), type ), out );
* </pre>
* </dd>
*
* </dl>
*
* @version v0.4, 2011/02/05 (February) -- Patch of Keheliya Gallaba is added. Now you
* can specify the type of the output file: gif, dot, fig, pdf, ps, svg, png, etc.
* @version v0.3, 2010/11/29 (November) -- Windows support + ability
* to read the graph from a text file
* @version v0.2, 2010/07/22 (July) -- bug fix
* @version v0.1, 2003/12/04 (December) -- first release
* @author Laszlo Szathmary (<a href="jabba.laci@gmail.com">jabba.laci@gmail.com</a>)
*/
public class GraphViz
{
/**
* The dir. where temporary files will be created.
*/
//private static String TEMP_DIR = "/tmp"; // Linux
private static String TEMP_DIR = "c:/Temp"; // Windows

/**
* Where is your dot program located? It will be called externally.
*/
// private static String DOT = "/usr/bin/dot"; // Linux
private static String DOT = "C:/Program Files (x86)/Graphviz2.38/bin/dot.exe"; // Windows

/**
* The source of the graph written in dot language.
*/
private StringBuilder graph = new StringBuilder();

/**
* Constructor: creates a new GraphViz object that will contain
* a graph.
*/
public GraphViz() {
}

/**
* Returns the graph's source description in dot language.
* @return Source of the graph in dot language.
*/
public String getDotSource() {
return graph.toString();
}

/**
* Adds a string to the graph's source (without newline).
*/
public void add(String line) {
graph.append(line);
}

/**
* Adds a string to the graph's source (with newline).
*/
public void addln(String line) {
graph.append(line + "\n");
}

/**
* Adds a newline to the graph's source.
*/
public void addln() {
graph.append('\n');
}

/**
* Returns the graph as an image in binary format.
* @param dot_source Source of the graph to be drawn.
* @param type Type of the output image to be produced, e.g.: gif, dot, fig, pdf, ps, svg, png.
* @return A byte array containing the image of the graph.
*/
public byte[] getGraph(String dot_source, String type)
{
File dot;
byte[] img_stream = null;

try {
dot = writeDotSourceToFile(dot_source);
if (dot != null)
{
img_stream = get_img_stream(dot, type);
if (dot.delete() == false)
System.err.println("Warning: " + dot.getAbsolutePath() + " could not be deleted!");
return img_stream;
}
return null;
} catch (java.io.IOException ioe) { return null; }
}

/**
* Writes the graph's image in a file.
* @param img A byte array containing the image of the graph.
* @param file Name of the file to where we want to write.
* @return Success: 1, Failure: -1
*/
public int writeGraphToFile(byte[] img, String file)
{
File to = new File(file);
return writeGraphToFile(img, to);
}

/**
* Writes the graph's image in a file.
* @param img A byte array containing the image of the graph.
* @param to A File object to where we want to write.
* @return Success: 1, Failure: -1
*/
public int writeGraphToFile(byte[] img, File to)
{
try {
FileOutputStream fos = new FileOutputStream(to);
fos.write(img);
fos.close();
} catch (java.io.IOException ioe) { ioe.printStackTrace();return -1; }
return 1;
}

/**
* It will call the external dot program, and return the image in
* binary format.
* @param dot Source of the graph (in dot language).
* @param type Type of the output image to be produced, e.g.: gif, dot, fig, pdf, ps, svg, png.
* @return The image of the graph in .gif format.
*/
private byte[] get_img_stream(File dot, String type)
{
File img;
byte[] img_stream = null;

try {
img = File.createTempFile("graph_", "."+type, new File(GraphViz.TEMP_DIR));
Runtime rt = Runtime.getRuntime();

// patch by Mike Chenault
String[] args = {DOT, "-T"+type, dot.getAbsolutePath(), "-o", img.getAbsolutePath()};
Process p = rt.exec(args);

p.waitFor();

FileInputStream in = new FileInputStream(img.getAbsolutePath());
img_stream = new byte[in.available()];
in.read(img_stream);
// Close it if we need to
if( in != null ) in.close();

if (img.delete() == false)
System.err.println("Warning: " + img.getAbsolutePath() + " could not be deleted!");
}
catch (java.io.IOException ioe) {
System.err.println("Error: in I/O processing of tempfile in dir " + GraphViz.TEMP_DIR+"\n");
System.err.println(" or in calling external command");
ioe.printStackTrace();
}
catch (java.lang.InterruptedException ie) {
System.err.println("Error: the execution of the external program was interrupted");
ie.printStackTrace();
}

return img_stream; }
/**
* Writes the source of the graph in a file, and returns the written file
* as a File object.
* @param str Source of the graph (in dot language).
* @return The file (as a File object) that contains the source of the graph.
*/
public File writeDotSourceToFile(String str) throws java.io.IOException
{
File temp;
try {
temp = File.createTempFile("graph_", ".dot.tmp", new File(GraphViz.TEMP_DIR));
FileWriter fout = new FileWriter(temp);
fout.write(str);
fout.close();
}
catch (Exception e) {
System.err.println("Error: I/O error while writing the dot source to temp file!");
return null;
}
return temp;
}

/**
* Returns a string that is used to start a graph.
* @return A string to open a graph.
*/
public String start_graph() {
return "digraph G {" ;
}

/**
* Returns a string that is used to end a graph.
* @return A string to close a graph.
*/
public String end_graph() {
return "}";
}

/**
* Read a DOT graph from a text file.
*
* @param input Input text file containing the DOT graph
* source.
*/
public void readSource(String input)
{
StringBuilder sb = new StringBuilder();

try
{
FileInputStream fis = new FileInputStream(input);
DataInputStream dis = new DataInputStream(fis);
BufferedReader br = new BufferedReader(new InputStreamReader(dis));
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
dis.close();
}
catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}

this.graph = sb;
}

}
99 changes: 99 additions & 0 deletions Lab1-master/lab1/src/lab1/Proba.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
package lab1;

import java.io.File;

import lab1.ReadFromFile.ListNDG;

public class Proba {
void showgraph(ReadFromFile pg1, String[] text, int textSize, String[][] edges) {
ListNDG pg = pg1.new ListNDG(text, textSize, edges);
// Proba p = new Proba();
this.start(pg, null);
// p.start2();
}

/**
* Construct
* a DOT graph in memory, convert it to image and store the image in
* the file system.
*
*/
void start(ListNDG pg, String[] outpot) {
GraphViz gv = new GraphViz();
gv.addln(gv.start_graph());
for (int i = 0; i < pg.size; i++) {
ReadFromFile.ListNDG.Vertex node = pg.vertexLists[i];
if (outpot == null) {
while (node.next != null) {

gv.addln(node.ch + " -> " + node.next.ch);
node = node.next;
}
} else {
int count = 0;
int sign = 0;
for (count = 0; count < 100; count++) {
if (outpot[count] == null) {
break;
}
}
ReadFromFile.ListNDG.Vertex x = node;
while (x.next != null) {
sign = 0;
for (int j = count - 1; j > 0; j--) {
if (node.ch.equals(outpot[j])
&& x.next.ch.equals(outpot[j - 1])) {
gv.addln(node.ch + " -> "
+ x.next.ch + "[color=\"red\"];");
x = x.next;
sign = 1;
break;
}
}
if (sign == 0) {
gv.addln(node.ch + " -> "
+ x.next.ch + ";");
x = x.next;
}

}
}
}
gv.addln(gv.end_graph());
System.out.println(gv.getDotSource());

String type = "gif";
// String type = "dot";
// String type = "fig"; // open with xfig
// String type = "pdf";
// String type = "ps";
// String type = "svg"; // open with inkscape
// String type = "png";
// String type = "plain";
File out = new File("c:/Temp/out." + type); // Linux
// File out = new File("c:/eclipse.ws/graphviz-java-api/out." + type); //
// Windows
gv.writeGraphToFile(gv.getGraph(gv.getDotSource(), type), out);
}

/**
* Read the DOT source from a file, convert to image and store the image in the
* file system.
*/
/*
* private void start2() { // String dir =
* "/home/jabba/eclipse2/laszlo.sajat/graphviz-java-api"; // Linux // String
* input = dir + "/sample/simple.dot"; String input =
* "c:/eclipse.ws/graphviz-java-api/sample/simple.dot"; // Windows
*
* GraphViz gv = new GraphViz(); gv.readSource(input);
* System.out.println(gv.getDotSource());
*
* String type = "gif"; // String type = "dot"; // String type = "fig"; // open
* with xfig // String type = "pdf"; // String type = "ps"; // String type =
* "svg"; // open with inkscape // String type = "png"; // String type =
* "plain"; File out = new File("c:/Temp/simple." + type); // Linux // File out
* = new File("c:/eclipse.ws/graphviz-java-api/tmp/simple." + type); // Windows
* gv.writeGraphToFile( gv.getGraph( gv.getDotSource(), type ), out ); }
*/
}
Loading