Search in sources :

Example 26 with Edge

use of org.opennms.features.topology.api.topo.Edge in project opennms by OpenNMS.

the class HierarchyLayoutAlgorithm method applyLayoutPositions.

private void applyLayoutPositions(final Collection<? extends Vertex> vertices, final HierarchyLayout<VertexRef, Edge> layout, final Layout graphLayout) {
    final List<VertexRef> displayVertices = vertices.stream().map(v -> (VertexRef) v).collect(Collectors.toList());
    layout.horizontalSqueeze(displayVertices);
    for (VertexRef v : displayVertices) {
        Point2D p = layout.transform(v);
        graphLayout.setLocation(v, new Point(p.getX(), p.getY()));
    }
}
Also used : Logger(org.slf4j.Logger) DirectedOrderedSparseMultigraph(edu.uci.ics.jung.graph.DirectedOrderedSparseMultigraph) Point2D(java.awt.geom.Point2D) Edge(org.opennms.features.topology.api.topo.Edge) Collection(java.util.Collection) Vertex(org.opennms.features.topology.api.topo.Vertex) LoggerFactory(org.slf4j.LoggerFactory) Graph(org.opennms.features.topology.api.Graph) Collectors(java.util.stream.Collectors) List(java.util.List) Point(org.opennms.features.topology.api.Point) Layout(org.opennms.features.topology.api.Layout) LevelAware(org.opennms.features.topology.api.topo.LevelAware) LayoutAlgorithm(org.opennms.features.topology.api.LayoutAlgorithm) Comparator(java.util.Comparator) VertexRef(org.opennms.features.topology.api.topo.VertexRef) Point2D(java.awt.geom.Point2D) Point(org.opennms.features.topology.api.Point) VertexRef(org.opennms.features.topology.api.topo.VertexRef)

Example 27 with Edge

use of org.opennms.features.topology.api.topo.Edge in project opennms by OpenNMS.

the class DefaultGraph method updateLayout.

private void updateLayout(Collection<Vertex> displayVertices, Collection<Edge> displayEdges) {
    m_displayVertices.clear();
    m_displayVertices.addAll(displayVertices);
    m_displayEdges.clear();
    m_displayEdges.addAll(displayEdges);
    for (Iterator<Edge> itr = m_displayEdges.iterator(); itr.hasNext(); ) {
        Edge edge = itr.next();
        if (new RefComparator().compare(edge.getSource().getVertex(), edge.getTarget().getVertex()) == 0) {
            LOG.debug("Discarding edge whose source and target are the same: {}", edge);
            itr.remove();
        } else if (m_displayVertices.contains(edge.getSource().getVertex())) {
            if (m_displayVertices.contains(edge.getTarget().getVertex())) {
            // This edge is OK, it is attached to two vertices that are in the graph
            } else {
                LOG.debug("Discarding edge that is not attached to 2 vertices in the graph: {}", edge);
                itr.remove();
            }
        } else {
            LOG.debug("Discarding edge that is not attached to 2 vertices in the graph: {}", edge);
            itr.remove();
        }
    }
    LOG.debug("Created a graph with {} vertices and {} edges", m_displayVertices.size(), m_displayEdges.size());
}
Also used : Edge(org.opennms.features.topology.api.topo.Edge) RefComparator(org.opennms.features.topology.api.topo.RefComparator)

Example 28 with Edge

use of org.opennms.features.topology.api.topo.Edge in project opennms by OpenNMS.

the class DefaultGraph method visit.

@Override
public void visit(GraphVisitor visitor) throws Exception {
    visitor.visitGraph(this);
    for (Vertex v : m_displayVertices) {
        visitor.visitVertex(v);
    }
    for (Edge e : m_displayEdges) {
        visitor.visitEdge(e);
    }
    visitor.completeGraph(this);
}
Also used : Vertex(org.opennms.features.topology.api.topo.Vertex) Edge(org.opennms.features.topology.api.topo.Edge)

Example 29 with Edge

use of org.opennms.features.topology.api.topo.Edge in project opennms by OpenNMS.

the class SpringLayoutAlgorithm method updateLayout.

@Override
public void updateLayout(final Graph graph) {
    final Layout graphLayout = graph.getLayout();
    SparseGraph<VertexRef, EdgeRef> jungGraph = new SparseGraph<VertexRef, EdgeRef>();
    Collection<? extends Vertex> vertices = graph.getDisplayVertices();
    for (VertexRef v : vertices) {
        jungGraph.addVertex(v);
    }
    Collection<? extends Edge> edges = graph.getDisplayEdges();
    for (Edge e : edges) {
        jungGraph.addEdge(e, e.getSource().getVertex(), e.getTarget().getVertex());
    }
    SpringLayout<VertexRef, EdgeRef> layout = new SpringLayout<VertexRef, EdgeRef>(jungGraph);
    layout.setForceMultiplier(SPRING_FORCE_MULTIPLIER);
    layout.setRepulsionRange(SPRING_LAYOUT_REPULSION);
    layout.setInitializer(initializer(graphLayout));
    layout.setSize(selectLayoutSize(graph));
    int count = 0;
    while (!layout.done() && count < 700) {
        layout.step();
        count++;
    }
    for (VertexRef v : vertices) {
        graphLayout.setLocation(v, new Point(layout.getX(v), layout.getY(v)));
    }
}
Also used : SparseGraph(edu.uci.ics.jung.graph.SparseGraph) Layout(org.opennms.features.topology.api.Layout) SpringLayout(edu.uci.ics.jung.algorithms.layout.SpringLayout) SpringLayout(edu.uci.ics.jung.algorithms.layout.SpringLayout) EdgeRef(org.opennms.features.topology.api.topo.EdgeRef) Point(org.opennms.features.topology.api.Point) VertexRef(org.opennms.features.topology.api.topo.VertexRef) Edge(org.opennms.features.topology.api.topo.Edge) Point(org.opennms.features.topology.api.Point)

Example 30 with Edge

use of org.opennms.features.topology.api.topo.Edge in project opennms by OpenNMS.

the class ISOMLayoutAlgorithm method updateLayout.

@Override
public void updateLayout(final Graph graph) {
    final Layout graphLayout = graph.getLayout();
    SparseGraph<VertexRef, EdgeRef> jungGraph = new SparseGraph<VertexRef, EdgeRef>();
    Collection<? extends Vertex> vertices = graph.getDisplayVertices();
    for (Vertex v : vertices) {
        jungGraph.addVertex(v);
    }
    Collection<? extends Edge> edges = graph.getDisplayEdges();
    for (Edge e : edges) {
        jungGraph.addEdge(e, e.getSource().getVertex(), e.getTarget().getVertex());
    }
    NonStupidISOMLayout layout = new NonStupidISOMLayout(jungGraph, graphLayout);
    layout.setInitializer(initializer(graphLayout));
    layout.setSize(selectLayoutSize(graph));
    while (!layout.done()) {
        layout.step();
    }
    for (Vertex v : vertices) {
        graphLayout.setLocation(v, new Point(layout.getX(v), layout.getY(v)));
    }
}
Also used : SparseGraph(edu.uci.ics.jung.graph.SparseGraph) Vertex(org.opennms.features.topology.api.topo.Vertex) ISOMLayout(edu.uci.ics.jung.algorithms.layout.ISOMLayout) Layout(org.opennms.features.topology.api.Layout) EdgeRef(org.opennms.features.topology.api.topo.EdgeRef) Point(org.opennms.features.topology.api.Point) VertexRef(org.opennms.features.topology.api.topo.VertexRef) Edge(org.opennms.features.topology.api.topo.Edge)

Aggregations

Edge (org.opennms.features.topology.api.topo.Edge)37 Vertex (org.opennms.features.topology.api.topo.Vertex)22 VertexRef (org.opennms.features.topology.api.topo.VertexRef)22 EdgeRef (org.opennms.features.topology.api.topo.EdgeRef)11 SparseGraph (edu.uci.ics.jung.graph.SparseGraph)10 Layout (org.opennms.features.topology.api.Layout)10 Point (org.opennms.features.topology.api.Point)8 ArrayList (java.util.ArrayList)7 Dimension (java.awt.Dimension)5 HashSet (java.util.HashSet)5 AbstractEdge (org.opennms.features.topology.api.topo.AbstractEdge)5 AbstractVertex (org.opennms.features.topology.api.topo.AbstractVertex)5 Set (java.util.Set)4 Test (org.junit.Test)4 DefaultVertexRef (org.opennms.features.topology.api.topo.DefaultVertexRef)4 SimpleLeafVertex (org.opennms.features.topology.api.topo.SimpleLeafVertex)4 HashMap (java.util.HashMap)3 CollapsibleCriteria (org.opennms.features.topology.api.topo.CollapsibleCriteria)3 Criteria (org.opennms.features.topology.api.topo.Criteria)3 FRLayout (edu.uci.ics.jung.algorithms.layout.FRLayout)2