in graphLayout/jetbrains.mps.graphLayout.orthogonalLayout/source_gen/jetbrains/mps/graphLayout/internal/flowOrthogonalLayout/EdgeLengthComputer.java [52:111]
private Map<Edge, Integer> computeEdgeLengths(EmbeddedGraph embeddedGraph, final Map<Dart, Direction2D> directions, final Direction2D direction, Map<Edge, Integer> predefinedLengths) {
Graph graph = embeddedGraph.getGraph();
Graph network = new Graph();
Map<Edge, Edge> edgeMap = MapSequence.fromMap(new HashMap<Edge, Edge>());
Map<Face, Node> faceMap = MapSequence.fromMap(new HashMap<Face, Node>());
Node source = network.createNode();
Node target = network.createNode();
for (Face face : ListSequence.fromList(embeddedGraph.getFaces())) {
if (!(embeddedGraph.isOuterFace(face))) {
MapSequence.fromMap(faceMap).put(face, network.createDummyNode());
}
}
Map<Edge, Integer> low = MapSequence.fromMap(new HashMap<Edge, Integer>());
Map<Edge, Integer> capacity = MapSequence.fromMap(new HashMap<Edge, Integer>());
Map<Edge, Integer> cost = MapSequence.fromMap(new HashMap<Edge, Integer>());
Edge backEdge = network.connect(target, source);
MapSequence.fromMap(low).put(backEdge, 0);
MapSequence.fromMap(capacity).put(backEdge, Integer.MAX_VALUE / 2);
MapSequence.fromMap(cost).put(backEdge, 0);
for (Edge edge : ListSequence.fromList(graph.getEdges())) {
Dart dart = ListSequence.fromList(embeddedGraph.getDarts(edge)).findFirst(new IWhereFilter<Dart>() {
public boolean accept(Dart dart) {
return MapSequence.fromMap(directions).get(dart) == direction;
}
});
if (dart != null) {
Face targetFace = embeddedGraph.getFace(dart);
Face sourceFace = embeddedGraph.getFace(embeddedGraph.getOpposite(dart));
Node sourceNode;
Node targetNode;
if (embeddedGraph.isOuterFace(sourceFace)) {
sourceNode = source;
} else {
sourceNode = MapSequence.fromMap(faceMap).get(sourceFace);
}
if (embeddedGraph.isOuterFace(targetFace)) {
targetNode = target;
} else {
targetNode = MapSequence.fromMap(faceMap).get(targetFace);
}
Edge newEdge = network.connect(sourceNode, targetNode);
MapSequence.fromMap(edgeMap).put(edge, newEdge);
if (MapSequence.fromMap(predefinedLengths).containsKey(edge)) {
MapSequence.fromMap(low).put(newEdge, MapSequence.fromMap(predefinedLengths).get(edge));
} else {
MapSequence.fromMap(low).put(newEdge, myUnitLength);
}
MapSequence.fromMap(capacity).put(newEdge, Integer.MAX_VALUE / 2);
MapSequence.fromMap(cost).put(newEdge, 1);
}
}
Map<Edge, Integer> circulation = MinCostCirculation.getCirculation(network, low, capacity, cost);
Map<Edge, Integer> edgeLength = MapSequence.fromMap(new HashMap<Edge, Integer>());
for (Edge edge : ListSequence.fromList(graph.getEdges())) {
if (MapSequence.fromMap(edgeMap).containsKey(edge)) {
MapSequence.fromMap(edgeLength).put(edge, MapSequence.fromMap(circulation).get(MapSequence.fromMap(edgeMap).get(edge)));
}
}
return edgeLength;
}