diff --git a/src/jnet/client/ClientMessageParser.java b/src/jnet/client/ClientMessageParser.java index 7aca45a..bc37407 100644 --- a/src/jnet/client/ClientMessageParser.java +++ b/src/jnet/client/ClientMessageParser.java @@ -19,6 +19,7 @@ import jnet.lib.object.SnmpProfile; import jnet.lib.object.User; import jnet.lib.snmp.DeviceInfo; import jnet.lib.snmp.Interface; +import jnet.lib.snmp.SNMPTester; public class ClientMessageParser { @@ -49,7 +50,8 @@ public class ClientMessageParser { handlers.put(Message.DELETE_LOG, ClientMessageParser::handleDeleteLog); handlers.put(Message.SERVER_CONFIG, ClientMessageParser::handleServerConfig); handlers.put(Message.SNMP_OBJECT_INFO, ClientMessageParser::handleSnmpObjectInfo); - handlers.put(Message.SNMP_OBJECT_INTERFACE, ClientMessageParser:: handleSnmpObjectInterface); + handlers.put(Message.SNMP_OBJECT_INTERFACE, ClientMessageParser::handleSnmpObjectInterface); + handlers.put(Message.SNMP_TEST, ClientMessageParser::handleSnmpTest); } public static void parse(Message msg) { @@ -228,4 +230,11 @@ public class ClientMessageParser { List iface = (List) msg_obj[1]; UIUpdater.updateObjectInterface(frame, iface); } + + private static void handleSnmpTest(Message msg) { + Object[] msg_obj = (Object[]) msg.getMsg(); + String frame = (String) msg_obj[0]; + boolean result = (boolean) msg_obj[1]; + UIUpdater.showResultSnmpTest(frame, result); + } } diff --git a/src/jnet/client/gui/UIUpdater.java b/src/jnet/client/gui/UIUpdater.java index e366db8..c618b64 100644 --- a/src/jnet/client/gui/UIUpdater.java +++ b/src/jnet/client/gui/UIUpdater.java @@ -55,5 +55,16 @@ public class UIUpdater { } } } + + public static void showResultSnmpTest(String frameName, boolean result) { + for (Window w : JFrame.getWindows()) { + if (w instanceof JFrame && frameName.equals(w.getName())) { + SwingUtilities.invokeLater(() -> { + ((ObjectDialog) w).showResultSnmpTest(result); + }); + return; + } + } + } } diff --git a/src/jnet/client/gui/dialog/object/ObjectDialog.java b/src/jnet/client/gui/dialog/object/ObjectDialog.java index f794455..72b7c52 100644 --- a/src/jnet/client/gui/dialog/object/ObjectDialog.java +++ b/src/jnet/client/gui/dialog/object/ObjectDialog.java @@ -1,13 +1,23 @@ package jnet.client.gui.dialog.object; import java.awt.BorderLayout; +import java.awt.Dialog; +import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; import javax.swing.JButton; +import javax.swing.JDialog; import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JOptionPane; import javax.swing.JPanel; +import javax.swing.JProgressBar; import javax.swing.JTabbedPane; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import jnet.client.Client; import jnet.client.network.NettyClient; import jnet.lib.Message; @@ -17,7 +27,7 @@ import jnet.lib.snmp.DeviceInfo; import jnet.lib.snmp.Interface; public class ObjectDialog extends JFrame { - + private MapObject obj; private int mapId; private Boolean newObject; @@ -26,7 +36,11 @@ public class ObjectDialog extends JFrame { private TabSettings tabSettings; private TabServices tabServices; private TabEvents tabEvents; - + + private JButton snmpTest = new JButton("Test SNMP"); + private JButton btnRefresh = new JButton("Obnovit"); + private JDialog progress; + public ObjectDialog(MapObject obj) { this.obj = obj; this.mapId = obj.getMap(); @@ -36,142 +50,182 @@ public class ObjectDialog extends JFrame { this.setName("object_detail_" + obj.getId()); init(); } - + public ObjectDialog(MapObject obj, boolean newObject) { this.obj = new MapObject(); this.mapId = obj.getMap(); this.newObject = newObject; init(); } - + private void init() { - - if (newObject) { - setTitle("Nový objekt"); - } else { - setTitle(obj.getName()); - } - - setSize(600, 520); - setLocationRelativeTo(null); - setVisible(true); - setAlwaysOnTop(false); - setResizable(false); - - setLayout(new BorderLayout()); - - JTabbedPane tabbedPane = new JTabbedPane(); + + if (newObject) { + setTitle("Nový objekt"); + } else { + setTitle(obj.getName()); + } + + setSize(600, 520); + setLocationRelativeTo(null); + setVisible(true); + setAlwaysOnTop(false); + setResizable(false); + + setLayout(new BorderLayout()); + + JTabbedPane tabbedPane = new JTabbedPane(); // JScrollPane tabNastaveni = new JScrollPane(tabNastaveni(), // JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); - tabInfo = new TabInfo(this.getName(), obj); - tabSettings = new TabSettings(obj, newObject); - tabServices = new TabServices(obj, newObject); - tabEvents = new TabEvents(obj); + tabInfo = new TabInfo(this.getName(), obj); + tabSettings = new TabSettings(obj, newObject); + tabServices = new TabServices(obj, newObject); + tabEvents = new TabEvents(obj); + + tabbedPane.addTab("Informace", tabInfo); + tabbedPane.addTab("Nastaveni", tabSettings); + tabbedPane.addTab("Služby", tabServices); + tabbedPane.addTab("Události", tabEvents); + //tabbedPane.addTab("Sondy", tabSondy()); - tabbedPane.addTab("Informace", tabInfo); - tabbedPane.addTab("Nastaveni", tabSettings); - tabbedPane.addTab("Služby", tabServices); - tabbedPane.addTab("Události", tabEvents); - //tabbedPane.addTab("Sondy", tabSondy()); - - // pokud se jedna o novy objekt - if (newObject) { - tabbedPane.setSelectedIndex(1); // prepne na kartu nastaveni - tabbedPane.setEnabledAt(0, false); // vypne kartu informace - tabbedPane.setEnabledAt(3, false); // vypne kartu udalosti + // Přidání listeneru na změnu tabu + tabbedPane.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + int selectedIndex = tabbedPane.getSelectedIndex(); + if (selectedIndex == 1) { // pokud je zobrazena zalozka nastaveni zobrazit tlačítko test snmp + snmpTest.setVisible(true); + } else { + snmpTest.setVisible(false); + } + if (selectedIndex == 0) { // pokud je zobrazena karta info zobrazit tlačítko refresh + btnRefresh.setVisible(true); + } else { + btnRefresh.setVisible(false); + } } + }); - add(tabbedPane, BorderLayout.CENTER); - - JPanel pane = new JPanel(); - JButton save = new JButton("Ulozit"); - save.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - // kontrola chyb - String nazev = tabSettings.getName(); - if (nazev == null) { - return; - } - String ip = tabSettings.getIp(); - if (ip == null) { - return; - } - // ulozeni do objektu - obj.setMap(mapId); - obj.setName(nazev); - obj.setIp(ip); - obj.setUser(tabSettings.getUser()); - obj.setPassword(new String(tabSettings.getPassword())); - obj.setObjectType(Client.objectType.get(tabSettings.getObjType()).getId()); - obj.setSnmpProfile(Client.snmpProfile.get(tabSettings.getSnmpProfile()).getId()); - obj.setActive(tabSettings.isActive()); - obj.setDescription(tabSettings.getDesc()); - obj.setLocation(tabSettings.getLoc()); - - obj.setWinbox(tabServices.isWinbox()); - String winboxPort = tabServices.getWinboxPort(); - if (winboxPort == null) { - return; - } - obj.setWinboxPort(winboxPort); - obj.setSsh(tabServices.isSsh()); - String sshPort = tabServices.getSshPort(); - if (sshPort == null) { - return; - } - obj.setSshPort(sshPort); - obj.setWeb(tabServices.isWeb()); - String webPort = tabServices.getWebPort(); - if (webPort == null) { - return; - } - obj.setWebPort(webPort); - obj.setWebVerze(tabServices.getWebVersion()); - obj.setTelnet(tabServices.isTelnet()); - String telnetPort = tabServices.getTelnetPort(); - if (telnetPort == null) { - return; - } - obj.setTelnetPort(telnetPort); - obj.setSms(tabServices.isSms()); - String smsPort = tabServices.getSmsPort(); - if (smsPort == null) { - return; - } - obj.setSmsPort(smsPort); - obj.setSmsVerze(tabServices.getSmsVersion()); - - if (!obj.isActive() || newObject) { - obj.setStatus(Status.NA); - } + // pokud se jedna o novy objekt + if (newObject) { + tabbedPane.setSelectedIndex(1); // prepne na kartu nastaveni + tabbedPane.setEnabledAt(0, false); // vypne kartu informace + tabbedPane.setEnabledAt(3, false); // vypne kartu udalosti + } else { + // pokud se nejsedna o novy objekt odeslat snmp pozadavek na ziskani informaci o zarizeni + snmpRequest(); + } + + + add(tabbedPane, BorderLayout.CENTER); + + JPanel pane = new JPanel(); + JButton save = new JButton("Ulozit"); + save.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + // kontrola chyb + String nazev = tabSettings.getName(); + if (nazev == null) { + return; + } + String ip = tabSettings.getIp(); + if (ip == null) { + return; + } + // ulozeni do objektu + obj.setMap(mapId); + obj.setName(nazev); + obj.setIp(ip); + obj.setUser(tabSettings.getUser()); + obj.setPassword(new String(tabSettings.getPassword())); + obj.setObjectType(Client.objectType.get(tabSettings.getObjType()).getId()); + obj.setSnmpProfile(Client.snmpProfile.get(tabSettings.getSnmpProfile()).getId()); + obj.setActive(tabSettings.isActive()); + obj.setDescription(tabSettings.getDesc()); + obj.setLocation(tabSettings.getLoc()); + + obj.setWinbox(tabServices.isWinbox()); + String winboxPort = tabServices.getWinboxPort(); + if (winboxPort == null) { + return; + } + obj.setWinboxPort(winboxPort); + obj.setSsh(tabServices.isSsh()); + String sshPort = tabServices.getSshPort(); + if (sshPort == null) { + return; + } + obj.setSshPort(sshPort); + obj.setWeb(tabServices.isWeb()); + String webPort = tabServices.getWebPort(); + if (webPort == null) { + return; + } + obj.setWebPort(webPort); + obj.setWebVerze(tabServices.getWebVersion()); + obj.setTelnet(tabServices.isTelnet()); + String telnetPort = tabServices.getTelnetPort(); + if (telnetPort == null) { + return; + } + obj.setTelnetPort(telnetPort); + obj.setSms(tabServices.isSms()); + String smsPort = tabServices.getSmsPort(); + if (smsPort == null) { + return; + } + obj.setSmsPort(smsPort); + obj.setSmsVerze(tabServices.getSmsVersion()); + + if (!obj.isActive() || newObject) { + obj.setStatus(Status.NA); + } // ArrayList probe = new ArrayList<>(); // if (!newObject) { // probe.addAll(obj.getSnmpProbe()); // } // obj.setSnmpProbe(probe); - if (newObject) { - NettyClient.send(Message.ADD_OBJECT, obj); - } else { - NettyClient.send(Message.UPDATE_OBJECT, obj); - } - - // zavreni dialogu - dispose(); + if (newObject) { + NettyClient.send(Message.ADD_OBJECT, obj); + } else { + NettyClient.send(Message.UPDATE_OBJECT, obj); } - }); - pane.add(save); - - JButton cancel = new JButton("Zrusit"); - cancel.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - dispose(); - } - }); - pane.add(cancel); - - add(pane, BorderLayout.PAGE_END); + } + }); + pane.add(save); + + JButton cancel = new JButton("Zavřít"); + cancel.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + dispose(); + } + }); + pane.add(cancel); + + // tlačítko snmp test na zalozce nastaveni + snmpTest.setVisible(false); + snmpTest.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Object[] o = {getName(), obj}; + NettyClient.send(Message.SNMP_TEST, o); + progress = showProgress(); + } + }); + pane.add(snmpTest); + + // tlačítko obnovit na info zalozce + btnRefresh.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + snmpRequest(); + } + }); + pane.add(btnRefresh); + + add(pane, BorderLayout.PAGE_END); } private String getStatus(int status) { @@ -187,15 +241,52 @@ public class ObjectDialog extends JFrame { } } - public void setDeviceInfo(DeviceInfo di){ + public void setDeviceInfo(DeviceInfo di) { this.tabInfo.setName(di.getSysName()); this.tabInfo.setDesc(di.getSysDescr()); this.tabInfo.setUptime(di.getSysUptime()); this.tabInfo.setVendor(di.getSysObjectID()); } - public void setDeviceInterface(List iface){ + public void setDeviceInterface(List iface) { this.tabInfo.setInterface(iface); } + + public void showResultSnmpTest(boolean result) { + progress.dispose(); + if (result) { + JOptionPane.showMessageDialog(null, "SNMP funkční", "SNMP test", JOptionPane.INFORMATION_MESSAGE); + } else { + JOptionPane.showMessageDialog(null, "SNMP nefunkční", "SNMP test", JOptionPane.ERROR_MESSAGE); + } + + + } + + private JDialog showProgress(){ + JDialog dialog = new JDialog((Frame) null, "Testování", true); + SwingUtilities.invokeLater(() -> { + dialog.setSize(200, 100); + dialog.setLayout(new BorderLayout()); + JLabel label = new JLabel("Prosím, čekejte...", SwingConstants.CENTER); + JProgressBar progressBar = new JProgressBar(); + progressBar.setIndeterminate(true); // Animace nekonečného načítání + + dialog.add(label, BorderLayout.NORTH); + dialog.add(progressBar, BorderLayout.CENTER); + + dialog.setLocationRelativeTo(null); + dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); + dialog.setVisible(true); + }); + return dialog; + } + + private void snmpRequest() { + Object[] data = {getName(), this.obj}; + NettyClient.send(Message.SNMP_OBJECT_INFO, data); + NettyClient.send(Message.SNMP_OBJECT_INTERFACE, data); + } + } diff --git a/src/jnet/client/gui/dialog/object/TabInfo.java b/src/jnet/client/gui/dialog/object/TabInfo.java index b8b2c14..10e0f44 100644 --- a/src/jnet/client/gui/dialog/object/TabInfo.java +++ b/src/jnet/client/gui/dialog/object/TabInfo.java @@ -27,8 +27,7 @@ public class TabInfo extends JPanel { this.frameName = frameName; init(); - // odeslani SNMP dotazu na server - snmpRequest(); + } private void init() { @@ -92,12 +91,6 @@ public class TabInfo extends JPanel { } - private void snmpRequest() { - Object[] data = {frameName, this.obj}; - NettyClient.send(Message.SNMP_OBJECT_INFO, data); - NettyClient.send(Message.SNMP_OBJECT_INTERFACE, data); - } - public void setName(String name) { this.name.setText(name); } @@ -115,6 +108,7 @@ public class TabInfo extends JPanel { } public void setInterface(List iface) { + tableModel.setRowCount(0); for (Interface i : iface) { Object[] d = { i.getDescription(), diff --git a/src/jnet/client/gui/dialog/object/TabSettings.java b/src/jnet/client/gui/dialog/object/TabSettings.java index e403a8c..d8f7cd7 100644 --- a/src/jnet/client/gui/dialog/object/TabSettings.java +++ b/src/jnet/client/gui/dialog/object/TabSettings.java @@ -16,6 +16,8 @@ import javax.swing.JPasswordField; import javax.swing.JTextArea; import javax.swing.JTextField; import jnet.client.Client; +import jnet.client.network.NettyClient; +import jnet.lib.Message; import jnet.lib.object.MapObject; import jnet.lib.object.ObjectType; import jnet.lib.object.SnmpProfile; @@ -113,17 +115,7 @@ public class TabSettings extends JPanel { disableCheBox.setBounds(110, 180, 160, 25); this.add(disableCheBox); - JButton snmpTest = new JButton("Test SNMP"); - snmpTest.setBounds(390, 180, 160, 25); - snmpTest.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - /* TODO idealne at test provede server (ten bude osesilat informace o snmp pozadavky!!!! - - */ - } - }); - this.add(snmpTest); + JLabel locLabel = new JLabel("Umístění"); locLabel.setBounds(20, 230, 80, 25);