private Map computeEdgeLengths()

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;
  }