Search in sources :

Example 61 with VertexRef

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;
}
Also used : VertexRef(org.opennms.features.topology.api.topo.VertexRef) Edge(org.opennms.features.topology.api.topo.Edge) HashSet(java.util.HashSet)

Example 62 with VertexRef

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());
}
Also used : Form(com.vaadin.ui.Form) ClickEvent(com.vaadin.ui.Button.ClickEvent) PropertysetItem(com.vaadin.data.util.PropertysetItem) NCSServiceCriteria(org.opennms.features.topology.plugins.ncs.NCSEdgeProvider.NCSServiceCriteria) NCSServicePathCriteria(org.opennms.features.topology.plugins.ncs.NCSPathEdgeProvider.NCSServicePathCriteria) Criteria(org.opennms.features.topology.api.topo.Criteria) NCSServicePathCriteria(org.opennms.features.topology.plugins.ncs.NCSPathEdgeProvider.NCSServicePathCriteria) FormFieldFactory(com.vaadin.ui.FormFieldFactory) PropertysetItem(com.vaadin.data.util.PropertysetItem) Item(com.vaadin.data.Item) NCSComponent(org.opennms.netmgt.model.ncs.NCSComponent) UI(com.vaadin.ui.UI) Button(com.vaadin.ui.Button) NCSComponent(org.opennms.netmgt.model.ncs.NCSComponent) Component(com.vaadin.ui.Component) ClickListener(com.vaadin.ui.Button.ClickListener) ConnectException(java.net.ConnectException) Window(com.vaadin.ui.Window) SelectionManager(org.opennms.features.topology.api.SelectionManager) OnmsNode(org.opennms.netmgt.model.OnmsNode) ComboBox(com.vaadin.ui.ComboBox) NCSServiceCriteria(org.opennms.features.topology.plugins.ncs.NCSEdgeProvider.NCSServiceCriteria) HttpOperationFailedException(org.apache.camel.component.http.HttpOperationFailedException) ConnectException(java.net.ConnectException) HttpOperationFailedException(org.apache.camel.component.http.HttpOperationFailedException) VertexRef(org.opennms.features.topology.api.topo.VertexRef) Validator(com.vaadin.data.Validator)

Example 63 with VertexRef

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;
    }
}
Also used : Vertex(org.opennms.features.topology.api.topo.Vertex) HashSet(java.util.HashSet) Set(java.util.Set) DefaultVertexRef(org.opennms.features.topology.api.topo.DefaultVertexRef) VertexRef(org.opennms.features.topology.api.topo.VertexRef) Edge(org.opennms.features.topology.api.topo.Edge) HashSet(java.util.HashSet)

Example 64 with VertexRef

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;
}
Also used : Vertex(org.opennms.features.topology.api.topo.Vertex) HashSet(java.util.HashSet) Set(java.util.Set) CollapsibleCriteria(org.opennms.features.topology.api.topo.CollapsibleCriteria) DefaultVertexRef(org.opennms.features.topology.api.topo.DefaultVertexRef) VertexRef(org.opennms.features.topology.api.topo.VertexRef) TreeMap(java.util.TreeMap) RefComparator(org.opennms.features.topology.api.topo.RefComparator)

Example 65 with VertexRef

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;
}
Also used : Vertex(org.opennms.features.topology.api.topo.Vertex) CollapsibleCriteria(org.opennms.features.topology.api.topo.CollapsibleCriteria) DefaultVertexRef(org.opennms.features.topology.api.topo.DefaultVertexRef) VertexRef(org.opennms.features.topology.api.topo.VertexRef) HashSet(java.util.HashSet)

Aggregations

VertexRef (org.opennms.features.topology.api.topo.VertexRef)105 DefaultVertexRef (org.opennms.features.topology.api.topo.DefaultVertexRef)33 Vertex (org.opennms.features.topology.api.topo.Vertex)31 Point (org.opennms.features.topology.api.Point)23 Criteria (org.opennms.features.topology.api.topo.Criteria)22 Edge (org.opennms.features.topology.api.topo.Edge)22 Test (org.junit.Test)21 List (java.util.List)20 ArrayList (java.util.ArrayList)19 Collectors (java.util.stream.Collectors)18 EdgeRef (org.opennms.features.topology.api.topo.EdgeRef)18 Map (java.util.Map)17 Status (org.opennms.features.topology.api.topo.Status)15 Collection (java.util.Collection)13 HashSet (java.util.HashSet)13 SparseGraph (edu.uci.ics.jung.graph.SparseGraph)12 HashMap (java.util.HashMap)12 Layout (org.opennms.features.topology.api.Layout)12 AbstractVertex (org.opennms.features.topology.api.topo.AbstractVertex)12 Lists (com.google.common.collect.Lists)11