pridáno tlačítko na SNMP test a refres infa o objektu

main
Michal 2025-02-18 22:17:05 +01:00
parent 4b7d0e3e8f
commit 1e7bc533b0
5 changed files with 237 additions and 140 deletions

View File

@ -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<Interface> iface = (List<Interface>) 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);
}
}

View File

@ -56,4 +56,15 @@ 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;
}
}
}
}

View File

@ -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;
@ -27,6 +37,10 @@ public class ObjectDialog extends JFrame {
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();
@ -46,132 +60,172 @@ public class ObjectDialog extends JFrame {
private void init() {
if (newObject) {
setTitle("Nový objekt");
} else {
setTitle(obj.getName());
}
if (newObject) {
setTitle("Nový objekt");
} else {
setTitle(obj.getName());
}
setSize(600, 520);
setLocationRelativeTo(null);
setVisible(true);
setAlwaysOnTop(false);
setResizable(false);
setSize(600, 520);
setLocationRelativeTo(null);
setVisible(true);
setAlwaysOnTop(false);
setResizable(false);
setLayout(new BorderLayout());
setLayout(new BorderLayout());
JTabbedPane tabbedPane = new JTabbedPane();
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);
// 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();
}
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());
add(tabbedPane, BorderLayout.CENTER);
if (!obj.isActive() || newObject) {
obj.setStatus(Status.NA);
}
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<SnmpProbe> 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);
}
});
pane.add(save);
JButton cancel = new JButton("Zrusit");
cancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
pane.add(cancel);
JButton cancel = new JButton("Zavřít");
cancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
pane.add(cancel);
add(pane, BorderLayout.PAGE_END);
// 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<Interface> iface){
public void setDeviceInterface(List<Interface> 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);
}
}

View File

@ -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<Interface> iface) {
tableModel.setRowCount(0);
for (Interface i : iface) {
Object[] d = {
i.getDescription(),

View File

@ -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);