I have a graph that i want to compress by creating a new graph. So the vertexes are "Topological Nodes" and the edges are different objects but they have the same parent class. Now in the example i want to delete all edges with type b.
The vertices "Topological Nodes" have a Number (1,2,3). Nothing more so very simple. The edges have a reference to these nodes.
Example:
Graph {
//uncompressed Graph
1 -- 2 [label="a1"];
2 -- 3 [label="b1"];
3 -- 4 [label="b2"];
4 -- 5 [label="b3"];
5 -- 1 [label="a2"];
}
Graph {
//compressed Graph
5 -- 1 [label="a2"];
5 -- 1 [label="a1"];
}
What i have so far is this:
public void compression(Graph<TopologicalNode, IdentifiedObject> unCompressedGraph){
Set<SubGeographicalRegion> networks = datamodel.equipmentProfile.keySet();
for (SubGeographicalRegion subGeographicalRegion : networks) {
Graph<TopologicalNode, IdentifiedObject> compressedGraph = GraphTypeBuilder
.<TopologicalNode, IdentifiedObject>undirected().allowingSelfLoops(true)
.edgeClass(IdentifiedObject.class).buildGraph();
ArrayList<PowerTransformer> powerTransformers = getPTsFromSubnet(subGeographicalRegion);
for(PowerTransformer powerTransformer :powerTransformers) {
for (PowerTransformerEnd powerTransformerEnd : powerTransformer.getEnds()) {
if (unCompressedGraph.vertexSet().stream().filter(r -> r.equals(powerTransformerEnd.getTerminal().getTopologicalNode())).findAny().isPresent()) {
TopologicalNode start = unCompressedGraph.vertexSet().stream().filter(r -> r.equals(powerTransformerEnd.getTerminal().getTopologicalNode())).findAny().get();
compressedGraph.addVertex(start);
ArrayList<TopologicalNode> nodesToBeCompressed = new ArrayList<>();
Iterator<TopologicalNode> iterator = new DepthFirstIterator<>(unCompressedGraph, start);
while (iterator.hasNext()) {
TopologicalNode nextNode = iterator.next();
Set<IdentifiedObject> eqs = unCompressedGraph.edgesOf(nextNode);
//TODO: How to go on?
}
}
}
}
}
}
So i dont really know how to go on and i am new to JGraphT.