rewrite GraphML importer/exporter
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
import org.jgrapht.graph.DefaultWeightedEdge;
|
||||||
import org.jgrapht.graph.SimpleWeightedGraph;
|
import org.jgrapht.graph.SimpleWeightedGraph;
|
||||||
import org.jgrapht.nio.graphml.GraphMLImporter;
|
import org.jgrapht.nio.graphml.GraphMLImporter;
|
||||||
|
|
||||||
@@ -21,7 +22,12 @@ public class GraphMLFileReader {
|
|||||||
try(//don't need to close reader bc of try-with-resources auto-closing
|
try(//don't need to close reader bc of try-with-resources auto-closing
|
||||||
BufferedReader reader = Files.newBufferedReader(Path.of(filename));
|
BufferedReader reader = Files.newBufferedReader(Path.of(filename));
|
||||||
){
|
){
|
||||||
GraphMLImporter<SimpleWeightedGraph, BufferedReader> importer = new GraphMLImporter<>();
|
GraphMLImporter<Vertex, DefaultWeightedEdge> importer = new GraphMLImporter<>();
|
||||||
|
importer.addVertexWithAttributesConsumer((vertex, attributes) -> {
|
||||||
|
vertex.setType(attributes.get("type").getValue());
|
||||||
|
vertex.setSequence(attributes.get("sequence").getValue());
|
||||||
|
vertex.setOccupancy((attributes.get("occupancy").getValue()));
|
||||||
|
});
|
||||||
importer.importGraph(graph, reader);
|
importer.importGraph(graph, reader);
|
||||||
}
|
}
|
||||||
catch (IOException ex) {
|
catch (IOException ex) {
|
||||||
|
|||||||
@@ -1,12 +1,18 @@
|
|||||||
|
import org.jgrapht.graph.DefaultWeightedEdge;
|
||||||
import org.jgrapht.graph.SimpleWeightedGraph;
|
import org.jgrapht.graph.SimpleWeightedGraph;
|
||||||
import org.jgrapht.nio.dot.DOTExporter;
|
import org.jgrapht.nio.Attribute;
|
||||||
|
import org.jgrapht.nio.AttributeType;
|
||||||
|
import org.jgrapht.nio.DefaultAttribute;
|
||||||
import org.jgrapht.nio.graphml.GraphMLExporter;
|
import org.jgrapht.nio.graphml.GraphMLExporter;
|
||||||
|
import org.jgrapht.nio.graphml.GraphMLExporter.AttributeCategory;
|
||||||
|
|
||||||
import java.io.BufferedWriter;
|
import java.io.BufferedWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.StandardOpenOption;
|
import java.nio.file.StandardOpenOption;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class GraphMLFileWriter {
|
public class GraphMLFileWriter {
|
||||||
|
|
||||||
@@ -14,7 +20,7 @@ public class GraphMLFileWriter {
|
|||||||
SimpleWeightedGraph graph;
|
SimpleWeightedGraph graph;
|
||||||
|
|
||||||
|
|
||||||
public GraphMLFileWriter(String filename, SimpleWeightedGraph graph) {
|
public GraphMLFileWriter(String filename, SimpleWeightedGraph<Vertex, DefaultWeightedEdge> graph) {
|
||||||
if(!filename.matches(".*\\.graphml")){
|
if(!filename.matches(".*\\.graphml")){
|
||||||
filename = filename + ".graphml";
|
filename = filename + ".graphml";
|
||||||
}
|
}
|
||||||
@@ -25,7 +31,23 @@ public class GraphMLFileWriter {
|
|||||||
public void writeGraphToFile() {
|
public void writeGraphToFile() {
|
||||||
try(BufferedWriter writer = Files.newBufferedWriter(Path.of(filename), StandardOpenOption.CREATE_NEW);
|
try(BufferedWriter writer = Files.newBufferedWriter(Path.of(filename), StandardOpenOption.CREATE_NEW);
|
||||||
){
|
){
|
||||||
GraphMLExporter<SimpleWeightedGraph, BufferedWriter> exporter = new GraphMLExporter<>();
|
//create exporter. Let the vertex labels be the unique ids for the vertices
|
||||||
|
GraphMLExporter<Vertex, SimpleWeightedGraph<Vertex, DefaultWeightedEdge>> exporter = new GraphMLExporter<>(Vertex::getVertexLabel);
|
||||||
|
//set to export weights
|
||||||
|
exporter.setExportEdgeWeights(true);
|
||||||
|
//set type, sequnce, and occupancy attributes for each vertex
|
||||||
|
exporter.setVertexAttributeProvider( v -> {
|
||||||
|
Map<String, Attribute> attributes = new HashMap<>();
|
||||||
|
attributes.put("type", DefaultAttribute.createAttribute(v.getType()));
|
||||||
|
attributes.put("sequence", DefaultAttribute.createAttribute(v.getSequence()));
|
||||||
|
attributes.put("occupancy", DefaultAttribute.createAttribute(v.getOccupancy()));
|
||||||
|
return attributes;
|
||||||
|
});
|
||||||
|
//register the attributes
|
||||||
|
exporter.registerAttribute("type", AttributeCategory.NODE, AttributeType.STRING);
|
||||||
|
exporter.registerAttribute("sequence", AttributeCategory.NODE, AttributeType.STRING);
|
||||||
|
exporter.registerAttribute("occupancy", AttributeCategory.NODE, AttributeType.STRING);
|
||||||
|
//export the graph
|
||||||
exporter.exportGraph(graph, writer);
|
exporter.exportGraph(graph, writer);
|
||||||
} catch(IOException ex){
|
} catch(IOException ex){
|
||||||
System.out.println("Could not make new file named "+filename);
|
System.out.println("Could not make new file named "+filename);
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
|
|
||||||
|
|
||||||
public class Vertex {
|
public class Vertex {
|
||||||
private final SequenceType type;
|
private SequenceType type;
|
||||||
private final Integer vertexLabel;
|
private Integer vertexLabel;
|
||||||
private final Integer sequence;
|
private Integer sequence;
|
||||||
private final Integer occupancy;
|
private Integer occupancy;
|
||||||
|
|
||||||
|
public Vertex(String vertexLabel) {
|
||||||
|
this.vertexLabel = Integer.parseInt((vertexLabel));
|
||||||
|
}
|
||||||
|
|
||||||
public Vertex(SequenceType type, Integer sequence, Integer occupancy, Integer vertexLabel) {
|
public Vertex(SequenceType type, Integer sequence, Integer occupancy, Integer vertexLabel) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
@@ -13,15 +17,73 @@ public class Vertex {
|
|||||||
this.occupancy = occupancy;
|
this.occupancy = occupancy;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SequenceType getType() { return type; }
|
|
||||||
|
|
||||||
public Integer getVertexLabel() { return vertexLabel; }
|
public String getType() {
|
||||||
|
return type.name();
|
||||||
public Integer getSequence() {
|
|
||||||
return sequence;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getOccupancy() {
|
public void setType(String type) {
|
||||||
return occupancy;
|
this.type = SequenceType.valueOf(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getVertexLabel() {
|
||||||
|
return vertexLabel.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVertexLabel(String label) {
|
||||||
|
this.vertexLabel = Integer.parseInt(label);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSequence() {
|
||||||
|
|
||||||
|
return sequence.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSequence(String sequence) {
|
||||||
|
this.sequence = Integer.parseInt(sequence);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOccupancy() {
|
||||||
|
return occupancy.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOccupancy(String occupancy) {
|
||||||
|
this.occupancy = Integer.parseInt(occupancy);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override //adapted from JGraphT example code
|
||||||
|
public int hashCode()
|
||||||
|
{
|
||||||
|
return (sequence == null) ? 0 : sequence.hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override //adapted from JGraphT example code
|
||||||
|
public boolean equals(Object obj)
|
||||||
|
{
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
Vertex other = (Vertex) obj;
|
||||||
|
if (sequence == null) {
|
||||||
|
return other.sequence == null;
|
||||||
|
} else {
|
||||||
|
return sequence.equals(other.sequence);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override //adapted from JGraphT example code
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("(").append(vertexLabel)
|
||||||
|
.append(", Type: ").append(type.name())
|
||||||
|
.append(", Sequence: ").append(sequence)
|
||||||
|
.append(", Occupancy: ").append(occupancy).append(")");
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user