/*
* GraphExporter.java
*
* Created on October 26, 2005, 8:57 AM
*
* To change this template, choose Tools | Options and locate the template under
* the Source Creation and Management node. Right-click the template and choose
* Open. You can then make changes to the template in the Source Editor.
*/
package org.tgdb.util.graph;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
/**
*
* @author lami
*/
public class GraphExporter implements Serializable {
private BufferedWriter out;
/** Creates a new instance of GraphExporter */
public GraphExporter() {
}
public String exportGML(Graph g) {
ArrayList edges = g.getEdges();
ArrayList nodes = g.getNodes();
Iterator i = nodes.iterator();
DirectedEdge edge = null;
Node node = null;
String message = "graph [\n";
// Write nodes
while(i.hasNext()) {
node = (Node)i.next();
if(node != null) {
message += "\tnode [\n";
message += "\t\tid "+node.getId()+"\n";
message += "\t\tlabel \""+node.getContents()+"\"\n";
message += "\t]\n";
}
}
i = edges.iterator();
// Write edges
while(i.hasNext()) {
edge = (DirectedEdge)i.next();
if(edge != null) {
// Root
if(edge.getFrom() != null) {
message += "\tedge [\n";
message += "\t\tlabel \""+edge.getLabel()+"\"\n";
message += "\t\tsource "+edge.getFrom().getId()+"\n";
message += "\t\ttarget "+edge.getTo().getId()+"\n";
message += "\t]\n";
}
}
}
message += "]";
return message;
}
public void exportGML(Graph g, String fileName) throws GraphException {
try {
ArrayList edges = g.getEdges();
ArrayList nodes = g.getNodes();
Iterator i = nodes.iterator();
DirectedEdge edge = null;
Node node = null;
out = new BufferedWriter(new FileWriter(fileName));
write("graph [", 0);
// Write nodes
while(i.hasNext()) {
node = (Node)i.next();
if(node != null) {
write("node [", 1);
write("id "+node.getId(), 2);
write("label \""+node.getContents()+"\"", 2);
String shape = node.getShape();
if(shape != null && shape.length() > 0) {
write("graphics [", 2);
write("type \""+node.getShape()+"\"", 3);
write("fill \""+node.getColor()+"\"", 3);
write("]", 2);
}
write("]", 1);
}
}
i = edges.iterator();
// Write edges
while(i.hasNext()) {
edge = (DirectedEdge)i.next();
if(edge != null) {
write("edge [", 1);
// Root
if(edge.getFrom() != null) {
write("source "+edge.getFrom().getId(), 2);
write("target "+edge.getTo().getId(), 2);
}
else {
write("target "+edge.getTo().getId(), 2);
}
write("label \""+edge.getLabel()+"\"", 2);
write("LabelGraphics [", 2);
write("text \""+edge.getLabel()+"\"", 3);
write("fontSize 12", 3);
write("fontName \"Dialog\"", 3);
write("model \"siz_pos\"", 3);
write("postion \"tail\"", 3);
write("]", 2);
write("]", 1);
}
}
write("]", 0);
out.close();
} catch(IOException ioe) {
throw new GraphException("Failed to export graph!\nCause: \n\t"+ioe.getMessage());
}
}
private void write(String line, int indentLevel) throws IOException {
for(int i=0;i<indentLevel;i++)
out.write("\t");
out.write(line);
out.newLine();
}
private String append(String line, int indentLevel) {
String indent = "";
for(int i=0;i<indentLevel;i++)
indent += "\t";
return indent+line+"\n";
}
public void exportGXL(Graph g, String fileName) throws GraphException {
try {
ArrayList edges = g.getEdges();
ArrayList nodes = g.getNodes();
Iterator i = nodes.iterator();
DirectedEdge edge = null;
Node node = null;
out = new BufferedWriter(new FileWriter(fileName));
String header = "";
header += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
header += "<!DOCTYPE gxl SYSTEM \"http://www.gupro.de/GXL/gxl-1.0.dtd\">\n";
header += "<!-- Graph -->\n";
header += "<gxl xmlns:xlink=\" http://www.w3.org/1999/xlink\">\n";
header += "<graph id=\"IndividualRelationGraph\" edgeids=\"true\" edgemode=\"directed\" hypergraph=\"false\">";
write(header, 0);
// Write nodes
while(i.hasNext()) {
node = (Node)i.next();
if(node != null) {
write("<node id=\""+node.getId()+"\">", 1);
String shape = node.getShape();
if(shape != null && shape.length() > 0) {
write("<attr name=\"type\">", 2);
write("<string>"+node.getShape()+"</string>", 3);
write("</attr>", 2);
write("<attr name=\"fill\">", 2);
write("<string>"+node.getColor()+"</string>", 3);
write("</attr>", 2);
}
write("</node>", 1);
}
}
i = edges.iterator();
int edgeId = 0;
// Write edges
while(i.hasNext()) {
edge = (DirectedEdge)i.next();
if(edge != null) {
// Root
if(edge.getFrom() != null) {
write("<edge id=\""+edgeId+"\" to=\""+edge.getTo().getId()+"\" from=\""+edge.getFrom().getId()+"\">", 1);
}
else {
write("<edge id=\""+edgeId+"\" to=\""+edge.getTo().getId()+"\">", 1);
}
write("</edge>", 1);
}
edgeId++;
}
write("</graph>", 0);
write("</gxl>", 0);
out.close();
} catch(IOException ioe) {
throw new GraphException("Failed to export graph!\nCause: \n\t"+ioe.getMessage());
}
}
public void exportXGML(Graph g, String fileName) throws GraphException {
try {
ArrayList edges = g.getEdges();
ArrayList nodes = g.getNodes();
Iterator i = nodes.iterator();
DirectedEdge edge = null;
Node node = null;
out = new BufferedWriter(new FileWriter(fileName));
String header = "<section name=\"xgml\">\n";
header += "\t<attribute key=\"Creator\" type=\"String\">Arx graph exporter</attribute>\n";
header += "\t<attribute key=\"Version\" type=\"String\">1.0.0</attribute>\n";
header += "\t<section name=\"graph\">\n";
header += "\t\t<attribute key=\"hierarchic\" type=\"int\">1</attribute>\n";
header += "\t\t<attribute key=\"directed\" type=\"int\">1</attribute>";
write(header, 0);
// Write nodes
while(i.hasNext()) {
node = (Node)i.next();
if(node != null) {
write("<section name=\"node\">", 2);
write("<attribute key=\"id\" type=\"int\">"+node.getId()+"</attribute>", 3);
write("<attribute key=\"label\" type=\"String\">"+node.getContents()+"</attribute>", 3);
String shape = node.getShape();
if(shape != null && shape.length() > 0) {
write("<section name=\"graphics\">", 3);
write("<attribute key=\"type\" type=\"String\">"+shape+"</attribute>", 4);
write("<attribute key=\"fill\" type=\"String\">"+node.getColor()+"</attribute>", 4);
write("</section>", 3);
}
write("</section>", 2);
}
}
i = edges.iterator();
// Write edges
while(i.hasNext()) {
edge = (DirectedEdge)i.next();
if(edge != null) {
write("<section name=\"edge\">", 2);
write("<attribute key=\"label\" type=\"String\">"+edge.getLabel()+"</attribute>", 3);
// Root
if(edge.getFrom() != null) {
write("<attribute key=\"target\" type=\"int\">"+edge.getTo().getId()+"</attribute>", 3);
write("<attribute key=\"source\" type=\"int\">"+edge.getFrom().getId()+"</attribute>", 3);
}
else {
write("<attribute key=\"target\" type=\"int\">"+edge.getTo().getId()+"</attribute>", 3);
}
write("</section>", 2);
}
}
write("</section>", 1);
write("</section>", 0);
out.close();
} catch(IOException ioe) {
throw new GraphException("Failed to export graph!\nCause: \n\t"+ioe.getMessage());
}
}
public String exportXGML(Graph g) throws GraphException {
try {
g.makeConnectedOnly();
ArrayList edges = g.getEdges();
ArrayList nodes = g.getNodes();
Iterator i = nodes.iterator();
DirectedEdge edge = null;
Node node = null;
String output = "";
String header = "<section name=\"xgml\">\n";
header += "\t<attribute key=\"Creator\" type=\"String\">Arx graph exporter</attribute>\n";
header += "\t<attribute key=\"Version\" type=\"String\">1.0.0</attribute>\n";
header += "\t<section name=\"graph\">\n";
header += "\t\t<attribute key=\"hierarchic\" type=\"int\">1</attribute>\n";
header += "\t\t<attribute key=\"directed\" type=\"int\">1</attribute>";
output += append(header, 0);
// Write nodes
while(i.hasNext()) {
node = (Node)i.next();
if(node != null) {
output += append("<section name=\"node\">", 2);
output += append("<attribute key=\"id\" type=\"int\">"+node.getId()+"</attribute>", 3);
output += append("<attribute key=\"label\" type=\"String\">"+node.getContents()+"</attribute>", 3);
String shape = node.getShape();
if(shape != null && shape.length() > 0) {
output += append("<section name=\"graphics\">", 3);
output += append("<attribute key=\"type\" type=\"String\">"+shape+"</attribute>", 4);
output += append("<attribute key=\"fill\" type=\"String\">"+node.getColor()+"</attribute>", 4);
output += append("</section>", 3);
}
output += append("</section>", 2);
}
}
i = edges.iterator();
// Write edges
while(i.hasNext()) {
edge = (DirectedEdge)i.next();
if(edge != null) {
output += append("<section name=\"edge\">", 2);
output += append("<attribute key=\"label\" type=\"String\">"+edge.getLabel()+"</attribute>", 3);
// Root
if(edge.getFrom() != null) {
output += append("<attribute key=\"target\" type=\"int\">"+edge.getTo().getId()+"</attribute>", 3);
output += append("<attribute key=\"source\" type=\"int\">"+edge.getFrom().getId()+"</attribute>", 3);
}
else {
output += append("<attribute key=\"target\" type=\"int\">"+edge.getTo().getId()+"</attribute>", 3);
}
output += append("</section>", 2);
}
}
output += append("</section>", 1);
output += append("</section>", 0);
return output;
} catch(Exception ioe) {
throw new GraphException("Failed to export graph!\nCause: \n\t"+ioe.getMessage());
}
}
public String exportGXL(Graph g) throws GraphException {
try {
ArrayList edges = g.getEdges();
ArrayList nodes = g.getNodes();
Iterator i = nodes.iterator();
DirectedEdge edge = null;
Node node = null;
String out = "";
String header = "";
header += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
header += "<!DOCTYPE gxl SYSTEM \"http://www.gupro.de/GXL/gxl-1.0.dtd\">\n";
header += "<!-- Graph -->\n";
header += "<gxl xmlns:xlink=\" http://www.w3.org/1999/xlink\">\n";
header += "<graph id=\"IndividualRelationGraph\" edgeids=\"true\" edgemode=\"directed\" hypergraph=\"false\">";
out += append(header, 0);
// Write nodes
while(i.hasNext()) {
node = (Node)i.next();
if(node != null) {
out += append("<node id=\""+node.getId()+"\">", 1);
String shape = node.getShape();
if(shape != null && shape.length() > 0) {
out += append("<attr name=\"type\">", 2);
out += append("<string>"+node.getShape()+"</string>", 3);
out += append("</attr>", 2);
out += append("<attr name=\"fill\">", 2);
out += append("<string>"+node.getColor()+"</string>", 3);
out += append("</attr>", 2);
}
out += append("</node>", 1);
}
}
i = edges.iterator();
int edgeId = 0;
// Write edges
while(i.hasNext()) {
edge = (DirectedEdge)i.next();
if(edge != null) {
// Root
if(edge.getFrom() != null) {
out += append("<edge id=\""+edgeId+"\" to=\""+edge.getTo().getId()+"\" from=\""+edge.getFrom().getId()+"\">", 1);
}
else {
out += append("<edge id=\""+edgeId+"\" to=\""+edge.getTo().getId()+"\">", 1);
}
out += append("</edge>", 1);
}
edgeId++;
}
out += append("</graph>", 0);
out += append("</gxl>", 0);
return out;
} catch(Exception e) {
throw new GraphException("Failed to export graph!\nCause: \n\t"+e.getMessage());
}
}
public void exportGraphML(Graph g, String fileName) throws GraphException {
try {
ArrayList edges = g.getEdges();
ArrayList nodes = g.getNodes();
Iterator i = nodes.iterator();
DirectedEdge edge = null;
Node node = null;
BufferedWriter out = new BufferedWriter(new FileWriter(fileName));
String header = "";
header += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
header += "<!-- Graph -->\n";
header += "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" \n";
header += "<xmlns:xsi=\" http://www.w3.org/2001/XMLSchema-instance\">\n";
header += "xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns\n";
header += "http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd>\n";
header += "\t<key id=\"d0\" for=\"node\" attr.name=\"color\" attr.type=\"string\">yellow</key>\n";
header += "\t<key id=\"d1\" for=\"node\" attr.name=\"type\" attr.type=\"string\">rectangle</key>\n";
header += "\t<graph id=\"IndividualRelationGraph\" edgeDefaut=\"directed\">";
write(header, 0);
// Write nodes
while(i.hasNext()) {
node = (Node)i.next();
if(node != null) {
write("<node id=\""+node.getId()+"\">", 1);
String shape = node.getShape();
if(shape != null && shape.length() > 0) {
write("<data key=\"d0\">"+node.getShape()+"</data>", 2);
write("<data key=\"d1\">"+node.getColor()+"</data>", 2);
}
write("</node>", 1);
}
}
i = edges.iterator();
int edgeId = 0;
// Write edges
while(i.hasNext()) {
edge = (DirectedEdge)i.next();
if(edge != null) {
// Root
if(edge.getFrom() != null) {
write("<edge id=\""+edgeId+"\" directed=\"true\" target=\""+edge.getTo().getId()+"\" source=\""+edge.getFrom().getId()+"\">", 1);
}
else {
write("<edge id=\""+edgeId+"\" directed=\"true\" target=\""+edge.getTo().getId()+"\">", 1);
}
write("</edge>", 1);
}
edgeId++;
}
write("</graph>", 1);
write("</graphml>", 0);
out.close();
} catch(Exception e) {
throw new GraphException("Failed to export graph!\nCause: \n\t"+e.getMessage());
}
}
public String exportGraphML(Graph g) throws GraphException {
try {
ArrayList edges = g.getEdges();
ArrayList nodes = g.getNodes();
Iterator i = nodes.iterator();
DirectedEdge edge = null;
Node node = null;
String out = "";
String header = "";
header += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
header += "<!-- Graph -->\n";
header += "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" \n";
header += "<xmlns:xsi=\" http://www.w3.org/2001/XMLSchema-instance\">\n";
header += "xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns\n";
header += "http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd>\n";
header += "\t<key id=\"d0\" for=\"node\" attr.name=\"color\" attr.type=\"string\">yellow</key>\n";
header += "\t<key id=\"d1\" for=\"node\" attr.name=\"type\" attr.type=\"string\">rectangle</key>\n";
header += "\t<graph id=\"IndividualRelationGraph\" edgeDefaut=\"directed\">";
out += append(header, 0);
// Write nodes
while(i.hasNext()) {
node = (Node)i.next();
if(node != null) {
out += append("<node id=\""+node.getId()+"\">", 1);
String shape = node.getShape();
if(shape != null && shape.length() > 0) {
out += append("<data key=\"d0\">"+node.getShape()+"</data>", 2);
out += append("<data key=\"d1\">"+node.getColor()+"</data>", 2);
}
out += append("</node>", 1);
}
}
i = edges.iterator();
int edgeId = 0;
// Write edges
while(i.hasNext()) {
edge = (DirectedEdge)i.next();
if(edge != null) {
// Root
if(edge.getFrom() != null) {
out += append("<edge id=\""+edgeId+"\" directed=\"true\" target=\""+edge.getTo().getId()+"\" source=\""+edge.getFrom().getId()+"\">", 1);
}
else {
out += append("<edge id=\""+edgeId+"\" directed=\"true\" target=\""+edge.getTo().getId()+"\">", 1);
}
out += append("</edge>", 1);
}
edgeId++;
}
out += append("</graph>", 1);
out += append("</graphml>", 0);
return out;
} catch(Exception e) {
throw new GraphException("Failed to export graph!\nCause: \n\t"+e.getMessage());
}
}
}