use of org.opennms.features.topology.plugins.ncs.NCSEdgeProvider.NCSServiceCriteria 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());
}
Aggregations