use of org.opennms.features.topology.api.topo.VertexRef in project opennms by OpenNMS.
the class ShowNCSPathOperation method getVertexRefsForNCSService.
private Collection<VertexRef> getVertexRefsForNCSService(NCSServiceCriteria storedCriteria) {
List<Edge> edges = m_ncsEdgeProvider.getEdges(storedCriteria);
Set<VertexRef> vertRefList = new HashSet<>();
for (Edge edge : edges) {
vertRefList.add(edge.getSource().getVertex());
vertRefList.add(edge.getTarget().getVertex());
}
return vertRefList;
}
use of org.opennms.features.topology.api.topo.VertexRef in project opennms by OpenNMS.
the class ShowNCSPathOperation method execute.
@Override
public void execute(List<VertexRef> targets, final OperationContext operationContext) {
// Get the current NCS criteria from here you can get the foreignIds foreignSource and deviceA and Z
for (Criteria criterium : operationContext.getGraphContainer().getCriteria()) {
try {
NCSServiceCriteria ncsCriterium = (NCSServiceCriteria) criterium;
if (ncsCriterium.getServiceCount() > 0) {
m_storedCriteria = ncsCriterium;
break;
}
} catch (ClassCastException e) {
}
}
final VertexRef defaultVertRef = targets.get(0);
final SelectionManager selectionManager = operationContext.getGraphContainer().getSelectionManager();
// selectionManager.getSelectedVertexRefs();
final Collection<VertexRef> vertexRefs = getVertexRefsForNCSService(m_storedCriteria);
final UI mainWindow = operationContext.getMainWindow();
final Window ncsPathPrompt = new Window("Show NCS Path");
ncsPathPrompt.setModal(true);
ncsPathPrompt.setResizable(false);
ncsPathPrompt.setWidth("300px");
ncsPathPrompt.setHeight("220px");
// Items used in form field
final PropertysetItem item = new PropertysetItem();
item.addItemProperty("Device A", new ObjectProperty<String>("", String.class));
item.addItemProperty("Device Z", new ObjectProperty<String>("", String.class));
FormFieldFactory fieldFactory = new FormFieldFactory() {
private static final long serialVersionUID = 1L;
@Override
public Field<?> createField(Item item, Object propertyId, Component uiContext) {
String pid = (String) propertyId;
ComboBox select = new ComboBox();
for (VertexRef vertRef : vertexRefs) {
select.addItem(vertRef.getId());
select.setItemCaption(vertRef.getId(), vertRef.getLabel());
}
select.setNewItemsAllowed(false);
select.setNullSelectionAllowed(false);
select.setImmediate(true);
select.setScrollToSelectedItem(true);
if ("Device A".equals(pid)) {
select.setCaption("Device A");
} else {
select.setCaption("Device Z");
}
return select;
}
};
final Form promptForm = new Form() {
@Override
public void commit() {
String deviceA = (String) getField("Device A").getValue();
String deviceZ = (String) getField("Device Z").getValue();
if (deviceA.equals(deviceZ)) {
Notification.show("Device A and Device Z cannot be the same", Notification.Type.WARNING_MESSAGE);
throw new Validator.InvalidValueException("Device A and Device Z cannot be the same");
}
OnmsNode nodeA = m_nodeDao.get(Integer.valueOf(deviceA));
String deviceANodeForeignId = nodeA.getForeignId();
// Use nodeA's foreignSource, deviceZ should have the same foreignSource. It's an assumption
// which might need to changed in the future. Didn't want to hard code it it "space" if they
// change it in the future
String nodeForeignSource = nodeA.getForeignSource();
String deviceZNodeForeignId = m_nodeDao.get(Integer.valueOf(deviceZ)).getForeignId();
NCSComponent ncsComponent = m_dao.get(m_storedCriteria.getServiceIds().get(0));
String foreignSource = ncsComponent.getForeignSource();
String foreignId = ncsComponent.getForeignId();
String serviceName = ncsComponent.getName();
try {
NCSServicePath path = getNcsPathProvider().getPath(foreignId, foreignSource, deviceANodeForeignId, deviceZNodeForeignId, nodeForeignSource, serviceName);
if (path.getStatusCode() == 200) {
NCSServicePathCriteria criteria = new NCSServicePathCriteria(path.getEdges());
m_serviceManager.registerCriteria(criteria, operationContext.getGraphContainer().getSessionId());
// Select only the vertices in the path
selectionManager.setSelectedVertexRefs(path.getVertices());
} else {
LoggerFactory.getLogger(this.getClass()).warn("An error occured while retrieving the NCS Path, Juniper NetworkAppsApi send error code: " + path.getStatusCode());
mainWindow.showNotification("An error occurred while retrieving the NCS Path\nStatus Code: " + path.getStatusCode(), Notification.TYPE_ERROR_MESSAGE);
}
} catch (Exception e) {
if (e.getCause() instanceof ConnectException) {
LoggerFactory.getLogger(this.getClass()).warn("Connection Exception Occurred while retreiving path {}", e);
Notification.show("Connection Refused when attempting to reach the NetworkAppsApi", Notification.Type.TRAY_NOTIFICATION);
} else if (e.getCause() instanceof HttpOperationFailedException) {
HttpOperationFailedException httpException = (HttpOperationFailedException) e.getCause();
if (httpException.getStatusCode() == 401) {
LoggerFactory.getLogger(this.getClass()).warn("Authentication error when connecting to NetworkAppsApi {}", httpException);
Notification.show("Authentication error when connecting to NetworkAppsApi, please check the username and password", Notification.Type.TRAY_NOTIFICATION);
} else {
LoggerFactory.getLogger(this.getClass()).warn("An error occured while retrieving the NCS Path {}", httpException);
Notification.show("An error occurred while retrieving the NCS Path\n" + httpException.getMessage(), Notification.Type.TRAY_NOTIFICATION);
}
} else if (e.getCause() instanceof Validator.InvalidValueException) {
Notification.show(e.getMessage(), Notification.Type.ERROR_MESSAGE);
} else {
LoggerFactory.getLogger(this.getClass()).warn("Exception Occurred while retreiving path {}", e);
Notification.show("An error occurred while calculating the path please check the karaf.log file for the exception: \n" + e.getMessage(), Notification.Type.TRAY_NOTIFICATION);
}
}
}
};
promptForm.setBuffered(true);
promptForm.setFormFieldFactory(fieldFactory);
promptForm.setItemDataSource(item);
Button ok = new Button("OK");
ok.addClickListener(new ClickListener() {
private static final long serialVersionUID = -2742886456007926688L;
@Override
public void buttonClick(ClickEvent event) {
promptForm.commit();
mainWindow.removeWindow(ncsPathPrompt);
}
});
promptForm.getFooter().addComponent(ok);
Button cancel = new Button("Cancel");
cancel.addClickListener(new ClickListener() {
private static final long serialVersionUID = -9026067481179449095L;
@Override
public void buttonClick(ClickEvent event) {
mainWindow.removeWindow(ncsPathPrompt);
}
});
promptForm.getFooter().addComponent(cancel);
ncsPathPrompt.setContent(promptForm);
mainWindow.addWindow(ncsPathPrompt);
promptForm.getField("Device A").setValue(defaultVertRef.getId());
}
use of org.opennms.features.topology.api.topo.VertexRef in project opennms by OpenNMS.
the class VertexHopGraphProvider method collapseEdges.
/**
* This function assumes that all criteria passed in are marked as collapsed.
* @param edges
* @param criteria
* @return
*/
public static Set<Edge> collapseEdges(Set<Edge> edges, CollapsibleCriteria[] criteria) {
// Make a map of all of the vertices to their new collapsed representations
Map<VertexRef, Set<Vertex>> vertexToCollapsedVertices = getMapOfVerticesToCollapsedVertices(criteria);
if (vertexToCollapsedVertices.size() > 0) {
Set<Edge> retval = new HashSet<Edge>();
for (Edge edge : edges) {
// Add the original edge to retval unless we replace it with an edge that points to a
// collapsed vertex
boolean addOriginalEdge = true;
// If the source vertex is in the collapsed list...
Set<Vertex> collapsedSources = vertexToCollapsedVertices.get(edge.getSource().getVertex());
if (collapsedSources != null) {
for (VertexRef collapsedSource : collapsedSources) {
// Add a new edge with the source as the collapsed vertex
Edge newCollapsedEdge = edge.clone();
newCollapsedEdge.setId("collapsedSource-" + newCollapsedEdge.getId());
newCollapsedEdge.getSource().setVertex(collapsedSource);
retval.add(newCollapsedEdge);
}
// Since we just added a replacement edge, don't add the original
addOriginalEdge = false;
}
Set<Vertex> collapsedTargets = vertexToCollapsedVertices.get(edge.getTarget().getVertex());
if (collapsedTargets != null) {
for (VertexRef collapsedTarget : collapsedTargets) {
// Add a new edge with the target as the collapsed vertex
Edge newCollapsedEdge = edge.clone();
newCollapsedEdge.setId("collapsedTarget-" + newCollapsedEdge.getId());
newCollapsedEdge.getTarget().setVertex(collapsedTarget);
retval.add(newCollapsedEdge);
}
// Since we just added a replacement edge, don't add the original
addOriginalEdge = false;
}
//
if (collapsedSources != null && collapsedTargets != null) {
for (VertexRef collapsedEndpoint : collapsedSources) {
for (VertexRef collapsedTarget : collapsedTargets) {
// Add a new edge with the target as the collapsed vertex
Edge newCollapsedEdge = edge.clone();
newCollapsedEdge.setId("collapsed-" + newCollapsedEdge.getId());
newCollapsedEdge.getSource().setVertex(collapsedEndpoint);
newCollapsedEdge.getTarget().setVertex(collapsedTarget);
retval.add(newCollapsedEdge);
}
}
// Since we just added a replacement edge, don't add the original
addOriginalEdge = false;
}
// Add the original edge if it wasn't replaced with an edge to a collapsed vertex
if (addOriginalEdge) {
retval.add(edge);
}
}
return retval;
} else {
return edges;
}
}
use of org.opennms.features.topology.api.topo.VertexRef in project opennms by OpenNMS.
the class VertexHopGraphProvider method getMapOfVerticesToCollapsedVertices.
public static Map<VertexRef, Set<Vertex>> getMapOfVerticesToCollapsedVertices(CollapsibleCriteria[] criteria) {
// Make a map of all of the vertices to their new collapsed representations
Map<VertexRef, Set<Vertex>> vertexToCollapsedVertices = new TreeMap<VertexRef, Set<Vertex>>(new RefComparator());
for (CollapsibleCriteria criterium : criteria) {
Set<VertexRef> criteriaVertices = criterium.getVertices();
if (criteriaVertices.size() > 0) {
Vertex collapsedVertex = criterium.getCollapsedRepresentation();
for (VertexRef criteriaVertex : criteriaVertices) {
Set<Vertex> collapsedVertices = vertexToCollapsedVertices.get(criteriaVertex);
if (collapsedVertices == null) {
collapsedVertices = new HashSet<Vertex>();
vertexToCollapsedVertices.put(criteriaVertex, collapsedVertices);
}
collapsedVertices.add(collapsedVertex);
}
}
}
return vertexToCollapsedVertices;
}
use of org.opennms.features.topology.api.topo.VertexRef in project opennms by OpenNMS.
the class VertexHopGraphProvider method collapseVertices.
public static Set<Vertex> collapseVertices(Set<Vertex> vertices, CollapsibleCriteria[] criteria) {
final Set<Vertex> retval = new HashSet<>();
final Set<Vertex> verticesToProcess = new HashSet<>(vertices);
// Replace all vertices by its collapsed representation
for (CollapsibleCriteria collapsibleCriteria : criteria) {
if (collapsibleCriteria.isCollapsed()) {
final Set<VertexRef> verticesRepresentedByCollapsible = collapsibleCriteria.getVertices().stream().filter(vertices::contains).collect(Collectors.toSet());
verticesToProcess.removeAll(verticesRepresentedByCollapsible);
retval.add(collapsibleCriteria.getCollapsedRepresentation());
}
}
// Not all vertices may be represented by a collapsed version - either their criteria is not collapsed
// or it is a pure vertex - therefore those are added afterwards
retval.addAll(verticesToProcess);
verticesToProcess.clear();
return retval;
}
Aggregations