package org.opennms.features.node.list.gwt.client;
import java.util.List;
import org.opennms.features.node.list.gwt.client.events.IpInterfaceSelectionEvent;
import org.opennms.features.node.list.gwt.client.events.IpInterfaceSelectionHandler;
import org.opennms.features.node.list.gwt.client.events.PhysicalInterfaceSelectionEvent;
import org.opennms.features.node.list.gwt.client.events.PhysicalInterfaceSelectionHandler;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Node;
import com.google.gwt.dom.client.Style.Overflow;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.Response;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.cellview.client.SimplePager;
import com.google.gwt.user.cellview.client.SimplePager.Resources;
import com.google.gwt.user.cellview.client.SimplePager.TextLocation;
import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.Window.Location;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.ProvidesResize;
import com.google.gwt.user.client.ui.TabLayoutPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.ListDataProvider;
public class PageableNodeList extends Composite implements ProvidesResize, PhysicalInterfaceSelectionHandler, IpInterfaceSelectionHandler {
public class SnmpInterfacesRequestCallback implements RequestCallback {
@Override
public void onResponseReceived(Request request, Response response) {
if(response.getStatusCode() == 200) {
updatePhysicalInterfaceList(NodeRestResponseMapper.createSnmpInterfaceData(response.getText()));
}else {
//updatePhysicalInterfaceList(NodeRestResponseMapper.createSnmpInterfaceData(DefaultNodeService.SNMP_INTERFACES_TEST_RESPONSE));
showErrorDialogBox("Error attempting to get SnmpInterfaces");
}
}
@Override
public void onError(Request request, Throwable exception) {
showErrorDialogBox("Error attempting to get SnmpInterfaces");
}
}
public class IpInterfacesRequestCallback implements RequestCallback {
@Override
public void onResponseReceived(Request request, Response response) {
if(response.getStatusCode() == 200) {
updateIpInterfaceList(NodeRestResponseMapper.createIpInterfaceData(response.getText()));
} else {
//updateIpInterfaceList(NodeRestResponseMapper.createIpInterfaceData(DefaultNodeService.IP_INTERFACES_TEST_RESPONSE));
showErrorDialogBox("Error attempting to get IpInterfaces");
}
}
@Override
public void onError(Request request, Throwable exception) {
showErrorDialogBox("Error attempting to get IpInterfaces");
}
}
private static PageableNodeListUiBinder uiBinder = GWT.create(PageableNodeListUiBinder.class);
interface PageableNodeListUiBinder extends UiBinder<Widget, PageableNodeList> {}
public static final String COOKIE = "hideNodePageErrorDialog";
@UiField
TabLayoutPanel m_tabLayoutPanel;
@UiField
IpInterfaceTable m_ipInterfaceTable;
@UiField
PhysicalInterfaceTable m_physicalInterfaceTable;
@UiField
FlowPanel m_ipTableDiv;
@UiField
FlowPanel m_physTableDiv;
@UiField
Button m_ipSearchBtn;
@UiField
Button m_physSearchBtn;
@UiField
ListBox m_ipSearchList;
@UiField
TextBox m_ipTextBox;
@UiField
ListBox m_physSearchList;
@UiField
TextBox m_physTextBox;
@UiField
FlowPanel m_ipInterfaceTableDiv;
@UiField
FlowPanel m_physicalTableDiv;
ErrorDialogBox m_errorDialog;
NodeService m_nodeService = new DefaultNodeService();
private ListDataProvider<IpInterface> m_ipIfaceDataProvider;
private ListDataProvider<PhysicalInterface> m_physicalIfaceDataProvider;
private int m_nodeId;
public PageableNodeList() {
initWidget(uiBinder.createAndBindUi(this));
getNodeIdFromPage();
initializeTabBar();
initializeTables();
initializeListBoxes();
}
public void showErrorDialogBox(String errorMsg) {
if(m_errorDialog == null) {
m_errorDialog = new ErrorDialogBox();
}
if(!Boolean.parseBoolean(Cookies.getCookie(COOKIE))) {
m_errorDialog.setPopupPosition(getAbsoluteLeft(), getAbsoluteTop());
m_errorDialog.setWidth("" + (getOffsetWidth()-12) + "px");
m_errorDialog.setErrorMessageAndShow(errorMsg);
}
}
public int extractNodeIdFromLocation() {
if(Location.getParameter("node") != null) {
return Integer.valueOf(Location.getParameter("node"));
}else {
return -1;
}
}
public void setNodeId(int nodeId) {
if(nodeId == -1) {
nodeId = extractNodeIdFromLocation();
}
m_nodeId = nodeId;
m_nodeService.getAllIpInterfacesForNode(nodeId, new IpInterfacesRequestCallback());
m_nodeService.getAllSnmpInterfacesForNode(nodeId, new SnmpInterfacesRequestCallback());
}
public int getNodeId() {
return m_nodeId;
}
public native void getNodeIdFromPage()/*-{
this.@org.opennms.features.node.list.gwt.client.PageableNodeList::setNodeId(I)($wnd.nodeId == undefined? -1 : $wnd.nodeId);
}-*/;
public void updateIpInterfaceList(List<IpInterface> ipInterfaces) {
m_ipIfaceDataProvider.setList(ipInterfaces);
}
public void updatePhysicalInterfaceList(List<PhysicalInterface> physicalInterfaces) {
m_physicalIfaceDataProvider.setList(physicalInterfaces);
}
private void initializeListBoxes() {
m_ipSearchList.addItem("IP Address", "ipAddress");
m_ipSearchList.addItem("IP Host Name", "ipHostName");
m_physSearchList.addItem("index", "ifIndex");
m_physSearchList.addItem("SNMP ifDescr", "ifDescr");
m_physSearchList.addItem("SNMP ifName","ifName");
m_physSearchList.addItem("SNMP ifAlias","ifAlias");
m_physSearchList.addItem("SNMP ifSpeed","ifSpeed");
m_physSearchList.addItem("IP Address","ipAddress");
m_physSearchList.addItem("SNMP ifPhysAddr","physAddr");
}
private void initializeTables() {
m_ipInterfaceTable.setPageSize(19);
m_ipInterfaceTable.addSelectEventHandler(this);
m_ipIfaceDataProvider = new ListDataProvider<IpInterface>();
m_ipIfaceDataProvider.addDataDisplay(m_ipInterfaceTable);
SimplePager ipSimplePager = new SimplePager(TextLocation.CENTER, (Resources) GWT.create(OnmsSimplePagerResources.class), true, 1000, false);
ipSimplePager.setWidth("100%");
ipSimplePager.setDisplay(m_ipInterfaceTable);
ipSimplePager.startLoading();
m_ipTableDiv.add(ipSimplePager);
m_physicalInterfaceTable.setPageSize(20);
m_physicalInterfaceTable.addSelectEventHandler(this);
m_physicalIfaceDataProvider = new ListDataProvider<PhysicalInterface>();
m_physicalIfaceDataProvider.addDataDisplay(m_physicalInterfaceTable);
SimplePager physicalSimplePager = new SimplePager(TextLocation.CENTER, (Resources) GWT.create(OnmsSimplePagerResources.class), true, 1000, false);
physicalSimplePager.setWidth("100%");
physicalSimplePager.setDisplay(m_physicalInterfaceTable);
physicalSimplePager.startLoading();
m_physTableDiv.add(physicalSimplePager);
m_ipInterfaceTableDiv.getElement().getStyle().setOverflow(Overflow.AUTO);
m_physicalTableDiv.getElement().getStyle().setOverflow(Overflow.AUTO);
}
private void initializeTabBar() {
m_tabLayoutPanel.setSize("100%", "520px");
Node node = m_tabLayoutPanel.getElement().getChild(1);
Element element = Element.as(node);
element.getStyle().setHeight(100, Unit.EM);
}
@UiHandler("m_ipSearchBtn")
public void handleIpSearchBtnClick(ClickEvent event) {
String parameter = m_ipSearchList.getValue(m_ipSearchList.getSelectedIndex());
String value = m_ipTextBox.getText();
m_nodeService.findIpInterfacesMatching(m_nodeId, parameter, value, new IpInterfacesRequestCallback());
}
@UiHandler("m_physSearchBtn")
public void handlePhysSearchClick(ClickEvent event) {
String parameter = m_physSearchList.getValue(m_physSearchList.getSelectedIndex());
String value = m_physTextBox.getText();
m_nodeService.findSnmpInterfacesMatching(getNodeId(), parameter, value, new SnmpInterfacesRequestCallback());
}
public void onResize() {
m_tabLayoutPanel.onResize();
}
@Override
public void onPhysicalInterfaceSelected(PhysicalInterfaceSelectionEvent event) {
StringBuilder urlBuilder = new StringBuilder();
urlBuilder.append(getBaseHref() + "element/snmpinterface.jsp");
urlBuilder.append("?node=" + getNodeId());
urlBuilder.append("&ifindex=" + event.getIfIndex());
Location.assign(urlBuilder.toString());
}
@Override
public void onIpInterfaceSelection(IpInterfaceSelectionEvent event) {
StringBuilder urlBuilder = new StringBuilder();
urlBuilder.append(getBaseHref() + "element/interface.jsp");
urlBuilder.append("?ipinterfaceid=" + event.getIpInterfaceId());
Location.assign(urlBuilder.toString());
}
public native final String getBaseHref() /*-{
try{
return $wnd.getBaseHref();
}catch(err){
return "";
}
}-*/;
}