use of org.opennms.features.topology.api.Graph in project opennms by OpenNMS.
the class OSGiVerticesUpdateManagerTest method createGraph.
private GraphContainer createGraph(int... vertIds) {
final List<Vertex> vertexRefsWithIds = createVerticsWithIds(vertIds);
final Graph graphMock = EasyMock.createNiceMock(Graph.class);
final GraphContainer graphContainerMock = EasyMock.createNiceMock(GraphContainer.class);
EasyMock.expect(graphMock.getDisplayVertices()).andReturn(vertexRefsWithIds).anyTimes();
EasyMock.expect(graphContainerMock.getGraph()).andReturn(graphMock).anyTimes();
EasyMock.replay(graphMock, graphContainerMock);
return graphContainerMock;
}
use of org.opennms.features.topology.api.Graph in project opennms by OpenNMS.
the class LayoutManager method isPersistedLayoutEqualToCurrentLayout.
public boolean isPersistedLayoutEqualToCurrentLayout(Graph graph) {
LayoutEntity layoutEntity = loadLayout(graph);
if (layoutEntity != null) {
// If we have a layout persisted, we verify if it is equal.
final Map<VertexRef, Point> persistedLocations = layoutEntity.getVertexPositions().stream().collect(Collectors.toMap((Function<VertexPositionEntity, VertexRef>) vertexPositionEntity -> {
VertexRefEntity vertexRefEntity = vertexPositionEntity.getVertexRef();
return new DefaultVertexRef(vertexRefEntity.getNamespace(), vertexRefEntity.getId());
}, vertexPositionEntity -> {
PointEntity position = vertexPositionEntity.getPosition();
return new Point(position.getX(), position.getY());
}));
// The locations may contain elements currently not visible, we filter them
final Map<VertexRef, Point> manualLocations = new HashMap<>();
graph.getLayout().getLocations().forEach((key, value) -> {
if (persistedLocations.containsKey(key)) {
// layoutEntity stores int coordinates, but manualLocations are stored as double.
// Convert to int to make it comparable.
manualLocations.put(key, new Point((int) value.getX(), (int) value.getY()));
}
});
final boolean layoutIsEqual = manualLocations.equals(persistedLocations);
return layoutIsEqual;
}
// We don't have anything persisted, so they are not equal
return false;
}
use of org.opennms.features.topology.api.Graph in project opennms by OpenNMS.
the class ManualLayoutAlgorithm method updateLayout.
@Override
public void updateLayout(Graph graph) {
final LayoutEntity layoutEntity = layoutManager != null ? layoutManager.loadLayout(graph) : null;
if (layoutEntity != null) {
// if we have a persisted layout, we apply it ...
final Layout layout = graph.getLayout();
final Collection<Vertex> vertices = graph.getDisplayVertices();
for (Vertex vertex : vertices) {
PointEntity pointEntity = layoutEntity.getPosition(vertex.getNamespace(), vertex.getId());
layout.setLocation(vertex, new Point(pointEntity.getX(), pointEntity.getY()));
}
} else {
// otherwise we apply the manual layout ...
final Collection<Vertex> vertices = graph.getDisplayVertices();
final Layout layout = graph.getLayout();
final long notLayedOutCount = vertices.stream().filter(v -> {
Point location = layout.getLocation(v);
return location.getX() == 0 && location.getY() == 0;
}).count();
final long noVertexLocationCount = vertices.stream().filter(v -> {
boolean hasNoX = v.getX() == null || v.getX().intValue() == 0;
boolean hasNoY = v.getY() == null || v.getY().intValue() == 0;
return hasNoX && hasNoY;
}).count();
// manually apply the Grid Layout
if (notLayedOutCount == vertices.size() && noVertexLocationCount == vertices.size()) {
new GridLayoutAlgorithm().updateLayout(graph);
} else if (noVertexLocationCount != vertices.size()) {
// If we have at least one vertex with coordinates != (0,0), we apply them to the layout
for (Vertex vertex : vertices) {
layout.setLocation(vertex, new Point(vertex.getX(), vertex.getY()));
}
} else {
// This is only done when the user explicitly saves the layout
for (Vertex vertex : vertices) {
Point p = layout.getLocation(vertex);
layout.setLocation(vertex, p);
}
}
}
}
use of org.opennms.features.topology.api.Graph in project opennms by OpenNMS.
the class TopologyComponent method graphChanged.
@Override
public void graphChanged(GraphContainer container) {
Graph graph = container.getGraph();
setGraph(graph);
if (!m_blockSelectionEvents) {
computeBoundsForSelected(m_graphContainer.getSelectionManager());
}
updateGraph();
}
use of org.opennms.features.topology.api.Graph in project opennms by OpenNMS.
the class TopologyComponent method updateGraph.
public void updateGraph() {
BoundingBox boundingBox = getBoundingBox();
getState().setBoundX(boundingBox.getX());
getState().setBoundY(boundingBox.getY());
getState().setBoundWidth(boundingBox.getWidth());
getState().setBoundHeight(boundingBox.getHeight());
getState().setActiveTool(m_activeTool);
Graph graph = getGraph();
GraphVisitor painter = new GraphPainter(m_graphContainer, graph.getLayout(), m_iconRepoManager, getState());
try {
graph.visit(painter);
} catch (Exception e) {
LoggerFactory.getLogger(getClass()).error(e.getMessage(), e);
}
}
Aggregations