From c28c2dfe19b1d8b4d25d413bab69726a80f45e3a Mon Sep 17 00:00:00 2001 From: Michal Date: Sun, 16 Feb 2025 09:35:50 +0100 Subject: [PATCH] predelani object dialog do jframe --- config.properties | 14 + src/jnet/client/gui/MapView.java | 4 +- src/jnet/client/gui/MapViewAction.java | 9 +- src/jnet/client/gui/dialog/ObjectDialog.java | 607 ------------------ .../gui/dialog/object/ObjectDialog.java | 182 ++++++ .../client/gui/dialog/object/TabEvents.java | 82 +++ .../client/gui/dialog/object/TabInfo.java | 13 + .../client/gui/dialog/object/TabServices.java | 165 +++++ .../client/gui/dialog/object/TabSettings.java | 218 +++++++ 9 files changed, 681 insertions(+), 613 deletions(-) create mode 100644 config.properties delete mode 100644 src/jnet/client/gui/dialog/ObjectDialog.java create mode 100644 src/jnet/client/gui/dialog/object/ObjectDialog.java create mode 100644 src/jnet/client/gui/dialog/object/TabEvents.java create mode 100644 src/jnet/client/gui/dialog/object/TabInfo.java create mode 100644 src/jnet/client/gui/dialog/object/TabServices.java create mode 100644 src/jnet/client/gui/dialog/object/TabSettings.java diff --git a/config.properties b/config.properties new file mode 100644 index 0000000..da819fb --- /dev/null +++ b/config.properties @@ -0,0 +1,14 @@ +autoconnect = true +debug = true +port = 1225 +server = 10.5.5.49 +user = michal +volume = 75 +start_minimalized = false +password = Michal2407 +sound = true +debuger = true +sound_one_online=sound/schema1/one_online.wav +sound_next_offline=sound/schema1/next_offline.wav +sound_all_online = sound/schema1/all_online.wav +sound_first_offline=sound/schema1/first_offline.wav diff --git a/src/jnet/client/gui/MapView.java b/src/jnet/client/gui/MapView.java index c7e6ce1..6151175 100644 --- a/src/jnet/client/gui/MapView.java +++ b/src/jnet/client/gui/MapView.java @@ -35,8 +35,8 @@ public class MapView extends JPanel { paintObjects.clear(); try { - lockImage = ImageIO.read(new File("img/lock.png")); - unlockImage = ImageIO.read(new File("img/unlock.png")); + lockImage = ImageIO.read(getClass().getResourceAsStream("/img/lock.png")); + unlockImage = ImageIO.read(getClass().getResourceAsStream("/img/unlock.png")); } catch (IOException ex) { LogFile.printErr("File not found: " + ex); } diff --git a/src/jnet/client/gui/MapViewAction.java b/src/jnet/client/gui/MapViewAction.java index 4e9dd8a..9cdc4ab 100644 --- a/src/jnet/client/gui/MapViewAction.java +++ b/src/jnet/client/gui/MapViewAction.java @@ -1,6 +1,5 @@ package jnet.client.gui; -import jnet.client.gui.dialog.ObjectDialog; import jnet.client.Client; import jnet.client.ExtAppManager; import jnet.client.gui.dialog.DialogLocalPing; @@ -11,10 +10,10 @@ import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; -import java.util.Iterator; import javax.swing.ImageIcon; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; +import jnet.client.gui.dialog.object.ObjectDialog; import jnet.lib.Message; import jnet.lib.object.Map; import jnet.lib.object.MapObject; @@ -161,7 +160,8 @@ public class MapViewAction implements MouseMotionListener, MouseListener { for (Map map : Client.maps) { for (MapObject object : map.getObjects()) { if (object.getId() == id) { - new ObjectDialog(map.getId(), object, false); + //new ObjectDialog(map.getId(), object, false); + new ObjectDialog(object); break; } } @@ -200,7 +200,8 @@ public class MapViewAction implements MouseMotionListener, MouseListener { MapObject mo = new MapObject(); mo.setX(me.getX()); mo.setY(me.getY()); - new ObjectDialog(map.getId(), mo, true); + mo.setMap(map.getId()); + new ObjectDialog(mo, true); } }); itemAdd.setEnabled(!map.isLock()); diff --git a/src/jnet/client/gui/dialog/ObjectDialog.java b/src/jnet/client/gui/dialog/ObjectDialog.java deleted file mode 100644 index e24ee5e..0000000 --- a/src/jnet/client/gui/dialog/ObjectDialog.java +++ /dev/null @@ -1,607 +0,0 @@ -package jnet.client.gui.dialog; - -import jnet.client.Client; -import jnet.client.network.NettyClient; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.text.SimpleDateFormat; -import java.util.Collections; -import java.util.Date; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import javax.swing.BorderFactory; -import javax.swing.DefaultComboBoxModel; -import javax.swing.JButton; -import javax.swing.JCheckBox; -import javax.swing.JComboBox; -import javax.swing.JDialog; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JPasswordField; -import javax.swing.JScrollPane; -import javax.swing.JTabbedPane; -import javax.swing.JTable; -import javax.swing.JTextArea; -import javax.swing.JTextField; -import javax.swing.table.DefaultTableModel; -import jnet.lib.EventComparator; -import jnet.lib.LogFile; -import jnet.lib.Message; -import jnet.lib.Status; -import jnet.lib.object.Event; -import jnet.lib.object.MapObject; -import jnet.lib.object.ObjectType; -import jnet.lib.object.SnmpProfile; - -public class ObjectDialog extends JDialog { - - private MapObject obj; - private int mapId; - private Boolean newObject; - - private JTextField nazevText = new JTextField(); - private JLabel nazevWarning = new JLabel("Název musi mit min. 3 znaky"); - private JTextField ipText = new JTextField(); - private JLabel ipWarning = new JLabel("Neplatná IP adresa"); - private JComboBox typeComboBox = new JComboBox(); - private JTextField userText = new JTextField(); - private JPasswordField hesloText = new JPasswordField(); - private DefaultComboBoxModel snmpmodel = new DefaultComboBoxModel(); - private JCheckBox disableCheBox = new JCheckBox(); - private JTextField locationText = new JTextField(); - private JTextArea descriptionText = new JTextArea(); - - private JCheckBox winboxBox = new JCheckBox("Winbox"); - private JTextField portWinbox = new JTextField("8291"); - private JCheckBox sshBox = new JCheckBox("SSH"); - private JTextField portSsh = new JTextField("22"); - private JCheckBox wwwBox = new JCheckBox("Web"); - private JTextField portWww = new JTextField("80"); - private JComboBox wwwVerzeComboBox = new JComboBox(); - private JCheckBox telnetBox = new JCheckBox("Telnet"); - private JTextField portTelnet = new JTextField("23"); - private JCheckBox smstBox = new JCheckBox("Summit SMS"); - private JTextField portSms = new JTextField("5020"); - private JComboBox smsVerzeComboBox = new JComboBox(); - private JComboBox snmpProfileComboBox = new JComboBox(); - - public ObjectDialog(int mapId, MapObject obj, boolean newObject) { - - this.obj = obj; - this.mapId = mapId; - this.newObject = newObject; - - if (newObject) { - setTitle("Nový objekt"); - } else { - setTitle("Vlastnosti objektu"); - } - - 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); - - tabbedPane.addTab("Informace", tabInfo()); - tabbedPane.addTab("Nastaveni", tabNastaveni); - tabbedPane.addTab("Služby", tabSluzby()); - tabbedPane.addTab("Události", tabUdalosti()); - //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 - } - - add(tabbedPane, BorderLayout.CENTER); - - JPanel pane = new JPanel(); - JButton save = new JButton("Ulozit"); - save.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - // kontrola chyb - if (nazevText.getText().length() < 3) { - nazevWarning.setVisible(true); - return; - } - nazevWarning.setVisible(false); - if (!validateIp(ipText.getText())) { - ipWarning.setVisible(true); - return; - } - ipWarning.setVisible(false); - // ulozeni do objektu - obj.setMap(mapId); - obj.setName(nazevText.getText()); - obj.setIp(ipText.getText()); - obj.setUser(userText.getText()); - obj.setPassword(new String(hesloText.getPassword())); - for (int i = 0; i < Client.objectType.size(); i++) { - if (typeComboBox.getSelectedIndex() == i) { - obj.setObjectType(Client.objectType.get(i).getId()); - } - } - obj.setSnmpProfile(Client.snmpProfile.get(snmpProfileComboBox.getSelectedIndex()).getId()); - obj.setActive(disableCheBox.isSelected()); - obj.setDescription(descriptionText.getText()); - obj.setLocation(locationText.getText()); - - obj.setWinbox(winboxBox.isSelected()); - obj.setWinboxPort(portWinbox.getText()); - obj.setSsh(sshBox.isSelected()); - obj.setSshPort(portSsh.getText()); - obj.setWeb(wwwBox.isSelected()); - obj.setWebPort(portWww.getText()); - obj.setWebVerze(wwwVerzeComboBox.getSelectedIndex()); - obj.setTelnet(telnetBox.isSelected()); - obj.setTelnetPort(portTelnet.getText()); - obj.setSms(smstBox.isSelected()); - obj.setSmsPort(portSms.getText()); - obj.setSmsVerze(smsVerzeComboBox.getSelectedIndex()); - 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(); - } - }); - 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); - - // nacteni snmp profilu - for (SnmpProfile sp : Client.snmpProfile) { - snmpmodel.addElement(sp.getName()); - } - - // doplneni poli dialogu podle vybraneho objektu - if (!newObject) { - nazevText.setText(obj.getName()); - ipText.setText(obj.getIp()); - userText.setText(obj.getUser()); - hesloText.setText(obj.getPassword()); - for (int i = 0; i < Client.objectType.size() - 1; i++) { - if (obj.getObjectType() == Client.objectType.get(i).getId()) { - typeComboBox.setSelectedIndex(i); - } - } - - for (int i = 0; i < Client.snmpProfile.size(); i++) { - if (Client.snmpProfile.get(i).getId() == obj.getSnmpProfile()) { - snmpProfileComboBox.setSelectedIndex(i); - } - } - disableCheBox.setSelected(obj.isActive()); - descriptionText.setText(obj.getDescription()); - locationText.setText(obj.getLocation()); - winboxBox.setSelected(obj.isWinbox()); - portWinbox.setText(obj.getWinboxPort()); - sshBox.setSelected(obj.isSsh()); - portSsh.setText(obj.getSshPort()); - wwwBox.setSelected(obj.isWeb()); - portWww.setText(obj.getWebPort()); - wwwVerzeComboBox.setSelectedIndex(obj.getWebVerze()); - telnetBox.setSelected(obj.isTelnet()); - portTelnet.setText(obj.getTelnetPort()); - smstBox.setSelected(obj.isSms()); - portSms.setText(obj.getSmsPort()); - smsVerzeComboBox.setSelectedIndex(obj.getSmsVerze()); - } else { - disableCheBox.setSelected(true); - } - - show(); - - } - - private JPanel tabInfo() { - JPanel p = new JPanel(null); - /* - Map label = new HashMap(); - label.put("Popis", "1.3.6.1.2.1.1.1.0"); - label.put("Uptime", "1.3.6.1.2.1.1.3.0"); - label.put("Contact", "1.3.6.1.2.1.1.4.0"); - label.put("Name", "1.3.6.1.2.1.1.5.0"); - - if(!newObject){ /// TODO u objektu u kterych neni snmp protokol povolen vraci system err null - Thread ti = new Thread() { - @Override - public void run() { - super.run(); - // nacteni snmp profilu - String port = "161"; - String community = "public"; - int version = SNMPManager.version1; - for (SnmpProfile sp : Client.serverSettings.getSnmp()) { - if (obj.getSnmpProfile() == sp.getId()) { - port = sp.getPort(); - community = sp.getCommunity(); - version = sp.getVersion(); - break; - } - } - SNMPManager mngr = new SNMPManager(obj.getIp(), port, community, version); - try { - mngr.start(); - - } catch (Exception e) { - } - int y = 30; - for (Entry entry : label.entrySet()) { - try { - JLabel label = new JLabel(entry.getKey()); - label.setBounds(20, y, 90, 25); - JLabel value = new JLabel(mngr.getAsString(new OID(entry.getValue()))); - value.setBounds(100, y, 200, 25); - p.add(label); - p.add(value); - y += 30; - p.revalidate(); - p.repaint(); - } catch (Exception e) { - LogFile.printErr("Object dialog - SNMP error: " + e); - } - } - } - }; - ti.start(); - } - */ - return p; - } - - private JPanel tabNastaveni() { - JPanel p = new JPanel(); - - p.setLayout(null); - - JLabel nazevLabel = new JLabel("Název"); - nazevLabel.setBounds(20, 30, 80, 25); - p.add(nazevLabel); - - nazevText.setBounds(110, 30, 160, 25); - p.add(nazevText); - nazevWarning.setForeground(Color.red); - nazevWarning.setBounds(110, 55, 160, 25); - nazevWarning.setVisible(false); - p.add(nazevWarning); - - JLabel ipLabel = new JLabel("IP adresa"); - ipLabel.setBounds(300, 30, 80, 25); - p.add(ipLabel); - - ipText.setBounds(390, 30, 160, 25); - p.add(ipText); - ipWarning.setForeground(Color.red); - ipWarning.setBounds(390, 55, 160, 25); - ipWarning.setVisible(false); - p.add(ipWarning); - - JLabel typLabel = new JLabel("Typ"); - typLabel.setBounds(20, 130, 80, 25); - p.add(typLabel); - - DefaultComboBoxModel model = new DefaultComboBoxModel(); - for (ObjectType obj : Client.objectType) { - model.addElement(obj.getName()); - } - - typeComboBox.setModel(model); - typeComboBox.setBounds(110, 130, 160, 25); - p.add(typeComboBox); - - JLabel userLabel = new JLabel("Uživatel"); - userLabel.setBounds(20, 80, 80, 25); - p.add(userLabel); - - userText.setBounds(110, 80, 160, 25); - p.add(userText); - - JLabel hesloLabel = new JLabel("Heslo"); - hesloLabel.setBounds(300, 80, 80, 25); - p.add(hesloLabel); - - hesloText.setBounds(390, 80, 160, 25); - p.add(hesloText); - - JLabel snmpLabel = new JLabel("SNMP profil"); - snmpLabel.setBounds(300, 130, 80, 25); - p.add(snmpLabel); - - snmpProfileComboBox.setModel(snmpmodel); - snmpProfileComboBox.setBounds(390, 130, 160, 25); - p.add(snmpProfileComboBox); - - JLabel disableLabel = new JLabel("Aktivní"); - disableLabel.setBounds(20, 180, 80, 25); - p.add(disableLabel); - - disableCheBox.setBounds(110, 180, 160, 25); - p.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!!!! - - Thread testSnmp = new Thread() { - @Override - public void run() { - - try { - // nacteni snmp profilu - String port = "161"; - String community = "public"; - int version = SNMPManager.version1; - for (int i = 0; i < Client.serverSettings.getSnmp().size(); i++) { - if (snmpProfileComboBox.getSelectedIndex() == i) { - port = Client.serverSettings.getSnmp().get(i).getPort(); - community = Client.serverSettings.getSnmp().get(i).getCommunity(); - version = Client.serverSettings.getSnmp().get(i).getVersion(); - break; - } - } - SNMPManager mngr = new SNMPManager(ipText.getText(), port, community, version); - mngr.start(); - String desc = mngr.getSysDescr(); - JOptionPane.showMessageDialog(ObjectDialog.this, "Odpoved: " + desc, "SNMP test", JOptionPane.INFORMATION_MESSAGE); - } catch (Exception ex) { - JOptionPane.showMessageDialog(ObjectDialog.this, "SNMP se nepodařilo načíst", "SNMP test", JOptionPane.ERROR_MESSAGE); - System.err.println("SNMP test error: " + ex.getMessage()); - } - - } - }; - testSnmp.start(); - */ - } - }); - p.add(snmpTest); - - JLabel locLabel = new JLabel("Umístění"); - locLabel.setBounds(20, 230, 80, 25); - p.add(locLabel); - - locationText.setBounds(110, 230, 440, 25); - p.add(locationText); - - JLabel descLabel = new JLabel("Poznámka"); - descLabel.setBounds(20, 280, 80, 25); - p.add(descLabel); - - descriptionText.setBounds(110, 280, 440, 100); - descriptionText.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.BLACK), BorderFactory.createEmptyBorder(10, 10, 10, 10))); - p.add(descriptionText); - - return p; - } - - private JPanel tabSluzby() { - JPanel p = new JPanel(); - - p.setLayout(null); - - winboxBox.setBounds(20, 30, 80, 25); - p.add(winboxBox); - - JLabel winbox_port = new JLabel("port:"); - winbox_port.setBounds(130, 30, 60, 25); - p.add(winbox_port); - - portWinbox.setBounds(180, 30, 60, 25); - p.add(portWinbox); - - sshBox.setBounds(20, 60, 80, 25); - p.add(sshBox); - - JLabel ssh_port = new JLabel("port:"); - ssh_port.setBounds(130, 60, 60, 25); - p.add(ssh_port); - - portSsh.setBounds(180, 60, 60, 25); - p.add(portSsh); - - wwwBox.setBounds(20, 90, 80, 25); - p.add(wwwBox); - - JLabel www_port = new JLabel("port:"); - www_port.setBounds(130, 90, 60, 25); - p.add(www_port); - - portWww.setBounds(180, 90, 60, 25); - p.add(portWww); - - JLabel www_verze = new JLabel("verze:"); - www_verze.setBounds(260, 90, 60, 25); - p.add(www_verze); - - wwwVerzeComboBox.setModel(new DefaultComboBoxModel(new String[]{"HTTP", "HTTPS"})); - wwwVerzeComboBox.setBounds(320, 90, 80, 25); - p.add(wwwVerzeComboBox); - - telnetBox.setBounds(20, 120, 80, 25); - p.add(telnetBox); - - JLabel telnet_port = new JLabel("port:"); - telnet_port.setBounds(130, 120, 60, 25); - p.add(telnet_port); - - portTelnet.setBounds(180, 120, 60, 25); - p.add(portTelnet); - - smstBox.setBounds(20, 150, 80, 25); - p.add(smstBox); - - JLabel sms_port = new JLabel("port:"); - sms_port.setBounds(130, 150, 60, 25); - p.add(sms_port); - - portSms.setBounds(180, 150, 60, 25); - p.add(portSms); - - JLabel sms_verze = new JLabel("verze:"); - sms_verze.setBounds(260, 150, 60, 25); - p.add(sms_verze); - - smsVerzeComboBox.setModel(new DefaultComboBoxModel(new String[]{"SDV", "BT"})); - smsVerzeComboBox.setBounds(320, 150, 80, 25); - p.add(smsVerzeComboBox); - - return p; - } - - private JPanel tabUdalosti() { - - String column[] = {"Začátek", "Konec", "Stav"}; - DefaultTableModel tableModel = new DefaultTableModel(column, 0) { - - @Override - public boolean isCellEditable(int row, int column) { - //all cells false - return false; - } - }; - - try { - // TODO pri vytvareni noveho objektu to vyhodi chybu - Collections.sort(Client.events, new EventComparator()); - Collections.reverse(Client.events); - if (!newObject) { - for (Event e : Client.events) { - if (e.getObject() == obj.getId()) { - Object[] d = { - getDate(e.getStart()), - getDate(e.getEnd()), - e.getDescription()}; - tableModel.addRow(d); - } - - } - } - - } catch (Exception e) { - LogFile.printErr("Object log error: " + e.getMessage()); - } - - JTable table = new JTable(tableModel); - table.setPreferredScrollableViewportSize(new Dimension(500, 350)); // Šířka 500, výška 300 - - JButton btn = new JButton("Smazat události"); - btn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - tableModel.setRowCount(0); - NettyClient.send(Message.DELETE_LOG, obj.getId()); - } - }); - - JPanel panel = new JPanel(); - panel.add(new JScrollPane(table)); - panel.add(btn); - - return panel; - } - - private JPanel tabSondy() { - JPanel panel = new JPanel(); - - panel.setLayout(new BorderLayout()); - - String column[] = {"Popis", "OID", "Aktivni", "Zobrazit"}; - DefaultTableModel tableModel = new DefaultTableModel(column, 0); - if (!newObject) { -// try { -// for (SnmpProbe p : obj.getSnmpProbe()) { -// Object[] d = {p.getName(), p.getOid(), "", ""}; -// tableModel.addRow(d); -// } -// } catch (Exception e) { -// LogFile.printErr("Probe list " + e.getMessage()); -// } - } - - JScrollPane table = new JScrollPane(); - table.add(new JTable(tableModel)); - panel.add(new JTable(tableModel), BorderLayout.CENTER); - - JPanel jp = new JPanel(); - jp.add(new JLabel("Přidat: ")); - panel.add(jp, BorderLayout.PAGE_END); - - return panel; - } - - private boolean validateIp(String ip) { - Pattern pattern = Pattern.compile("^(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"); - Matcher matcher = pattern.matcher(ip); - return matcher.matches(); - } - - private boolean validatePort(String port) { - try { - int pNum = Integer.parseInt(port); - if ((pNum > 0) && (pNum < 65536)) { - return true; - } - } catch (NumberFormatException e) { - } - return false; - } - - private String getDate(long date) { - if (date != 0) { - SimpleDateFormat ft = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); - return ft.format(new Date(date)); - } - return ""; - } - - private String getStatus(int status) { - switch (status) { - case Status.OK: // online - return "online"; - case Status.WARNING: // warning - return "varování"; - case Status.OFFLINE: // offline - return "offline"; - default: // other - return "n/a"; - } - } - -} diff --git a/src/jnet/client/gui/dialog/object/ObjectDialog.java b/src/jnet/client/gui/dialog/object/ObjectDialog.java new file mode 100644 index 0000000..5f6d4f7 --- /dev/null +++ b/src/jnet/client/gui/dialog/object/ObjectDialog.java @@ -0,0 +1,182 @@ +package jnet.client.gui.dialog.object; + +import java.awt.BorderLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JTabbedPane; +import jnet.client.Client; +import jnet.client.network.NettyClient; +import jnet.lib.Message; +import jnet.lib.Status; +import jnet.lib.object.MapObject; + + +public class ObjectDialog extends JFrame { + + private MapObject obj; + private int mapId; + private Boolean newObject; + + public ObjectDialog(MapObject obj) { + this.obj = obj; + this.mapId = obj.getMap(); + this.newObject = false; + 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(); + +// JScrollPane tabNastaveni = new JScrollPane(tabNastaveni(), +// JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + + TabInfo tabInfo = new TabInfo(); + TabSettings tabSettings = new TabSettings(obj, newObject); + TabServices tabServices = new TabServices(obj, newObject); + TabEvents 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()); + + // 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 + } + + 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()); +// TODO validaci portu + obj.setWinbox(tabServices.isWinbox()); + obj.setWinboxPort(tabServices.getWinboxPort()); + obj.setSsh(tabServices.isSsh()); + obj.setSshPort(tabServices.getSshPort()); + obj.setWeb(tabServices.isWeb()); + obj.setWebPort(tabServices.getWebPort()); + obj.setWebVerze(tabServices.getWebVersion()); + obj.setTelnet(tabServices.isTelnet()); + obj.setTelnetPort(tabServices.getTelnetPort()); + obj.setSms(tabServices.isSms()); + obj.setSmsPort(tabServices.getSmsPort()); + 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(); + } + }); + 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); + + } + + + + + private boolean validatePort(String port) { + try { + int pNum = Integer.parseInt(port); + if ((pNum > 0) && (pNum < 65536)) { + return true; + } + } catch (NumberFormatException e) { + } + return false; + } + + + + private String getStatus(int status) { + switch (status) { + case Status.OK: // online + return "online"; + case Status.WARNING: // warning + return "varování"; + case Status.OFFLINE: // offline + return "offline"; + default: // other + return "n/a"; + } + } + + + + +} diff --git a/src/jnet/client/gui/dialog/object/TabEvents.java b/src/jnet/client/gui/dialog/object/TabEvents.java new file mode 100644 index 0000000..dddca06 --- /dev/null +++ b/src/jnet/client/gui/dialog/object/TabEvents.java @@ -0,0 +1,82 @@ +package jnet.client.gui.dialog.object; + +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.text.SimpleDateFormat; +import java.util.Collections; +import java.util.Date; +import javax.swing.JButton; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.table.DefaultTableModel; +import jnet.client.Client; +import jnet.client.network.NettyClient; +import jnet.lib.EventComparator; +import jnet.lib.LogFile; +import jnet.lib.Message; +import jnet.lib.object.Event; +import jnet.lib.object.MapObject; + +public class TabEvents extends JPanel { + + private MapObject obj; + + public TabEvents(MapObject obj) { + this.obj = obj; + + String column[] = {"Začátek", "Konec", "Stav"}; + DefaultTableModel tableModel = new DefaultTableModel(column, 0) { + + @Override + public boolean isCellEditable(int row, int column) { + //all cells false + return false; + } + }; + + try { + // TODO pri vytvareni noveho objektu to vyhodi chybu + Collections.sort(Client.events, new EventComparator()); + Collections.reverse(Client.events); + for (Event e : Client.events) { + if (e.getObject() == obj.getId()) { + Object[] d = { + getDate(e.getStart()), + getDate(e.getEnd()), + e.getDescription()}; + tableModel.addRow(d); + } + + } + + } catch (Exception e) { + LogFile.printErr("Object log error: " + e.getMessage()); + } + + JTable table = new JTable(tableModel); + table.setPreferredScrollableViewportSize(new Dimension(500, 350)); // Šířka 500, výška 300 + + JButton btn = new JButton("Smazat události"); + btn.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + tableModel.setRowCount(0); + NettyClient.send(Message.DELETE_LOG, obj.getId()); + } + }); + + this.add(new JScrollPane(table)); + this.add(btn); + } + + private String getDate(long date) { + if (date != 0) { + SimpleDateFormat ft = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); + return ft.format(new Date(date)); + } + return ""; + } + +} diff --git a/src/jnet/client/gui/dialog/object/TabInfo.java b/src/jnet/client/gui/dialog/object/TabInfo.java new file mode 100644 index 0000000..3f4bb29 --- /dev/null +++ b/src/jnet/client/gui/dialog/object/TabInfo.java @@ -0,0 +1,13 @@ +package jnet.client.gui.dialog.object; + +import javax.swing.JPanel; + + +public class TabInfo extends JPanel{ + + public TabInfo() { + } + + + +} diff --git a/src/jnet/client/gui/dialog/object/TabServices.java b/src/jnet/client/gui/dialog/object/TabServices.java new file mode 100644 index 0000000..e29791d --- /dev/null +++ b/src/jnet/client/gui/dialog/object/TabServices.java @@ -0,0 +1,165 @@ +package jnet.client.gui.dialog.object; + +import javax.swing.DefaultComboBoxModel; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; +import jnet.lib.object.MapObject; + +class TabServices extends JPanel { + + private MapObject obj; + private boolean newObject; + + private JCheckBox winboxBox = new JCheckBox("Winbox"); + private JTextField portWinbox = new JTextField("8291"); + private JCheckBox sshBox = new JCheckBox("SSH"); + private JTextField portSsh = new JTextField("22"); + private JCheckBox wwwBox = new JCheckBox("Web"); + private JTextField portWww = new JTextField("80"); + private JComboBox wwwVerzeComboBox = new JComboBox(); + private JCheckBox telnetBox = new JCheckBox("Telnet"); + private JTextField portTelnet = new JTextField("21"); + private JCheckBox smstBox = new JCheckBox("Summit SMS"); + private JTextField portSms = new JTextField("5020"); + private JComboBox smsVerzeComboBox = new JComboBox(); + + public TabServices(MapObject obj, boolean newObject) { + this.obj = obj; + this.newObject = newObject; + + this.setLayout(null); + + winboxBox.setBounds(20, 30, 80, 25); + this.add(winboxBox); + + JLabel winbox_port = new JLabel("port:"); + winbox_port.setBounds(130, 30, 60, 25); + this.add(winbox_port); + + portWinbox.setBounds(180, 30, 60, 25); + this.add(portWinbox); + + sshBox.setBounds(20, 60, 80, 25); + this.add(sshBox); + + JLabel ssh_port = new JLabel("port:"); + ssh_port.setBounds(130, 60, 60, 25); + this.add(ssh_port); + + portSsh.setBounds(180, 60, 60, 25); + this.add(portSsh); + + wwwBox.setBounds(20, 90, 80, 25); + this.add(wwwBox); + + JLabel www_port = new JLabel("port:"); + www_port.setBounds(130, 90, 60, 25); + this.add(www_port); + + portWww.setBounds(180, 90, 60, 25); + this.add(portWww); + + JLabel www_verze = new JLabel("verze:"); + www_verze.setBounds(260, 90, 60, 25); + this.add(www_verze); + + wwwVerzeComboBox.setModel(new DefaultComboBoxModel(new String[]{"HTTP", "HTTPS"})); + wwwVerzeComboBox.setBounds(320, 90, 80, 25); + this.add(wwwVerzeComboBox); + + telnetBox.setBounds(20, 120, 80, 25); + this.add(telnetBox); + + JLabel telnet_port = new JLabel("port:"); + telnet_port.setBounds(130, 120, 60, 25); + this.add(telnet_port); + + portTelnet.setBounds(180, 120, 60, 25); + this.add(portTelnet); + + smstBox.setBounds(20, 150, 80, 25); + this.add(smstBox); + + JLabel sms_port = new JLabel("port:"); + sms_port.setBounds(130, 150, 60, 25); + this.add(sms_port); + + portSms.setBounds(180, 150, 60, 25); + this.add(portSms); + + JLabel sms_verze = new JLabel("verze:"); + sms_verze.setBounds(260, 150, 60, 25); + this.add(sms_verze); + + smsVerzeComboBox.setModel(new DefaultComboBoxModel(new String[]{"SDV", "BT"})); + smsVerzeComboBox.setBounds(320, 150, 80, 25); + this.add(smsVerzeComboBox); + + // predvyplneni poli + if (!newObject) { + winboxBox.setSelected(obj.isWinbox()); + portWinbox.setText(obj.getWinboxPort()); + sshBox.setSelected(obj.isSsh()); + portSsh.setText(obj.getSshPort()); + wwwBox.setSelected(obj.isWeb()); + portWww.setText(obj.getWebPort()); + wwwVerzeComboBox.setSelectedIndex(obj.getWebVerze()); + telnetBox.setSelected(obj.isTelnet()); + portTelnet.setText(obj.getTelnetPort()); + smstBox.setSelected(obj.isSms()); + portSms.setText(obj.getSmsPort()); + smsVerzeComboBox.setSelectedIndex(obj.getSmsVerze()); + } + } + + public boolean isWinbox() { + return winboxBox.isSelected(); + } + + public String getWinboxPort() { + return portWinbox.getText(); + } + + public boolean isSsh() { + return sshBox.isSelected(); + } + + public String getSshPort() { + return portSsh.getText(); + } + + public boolean isWeb() { + return wwwBox.isSelected(); + } + + public String getWebPort() { + return portWww.getText(); + } + + public int getWebVersion() { + return wwwVerzeComboBox.getSelectedIndex(); + } + + public boolean isTelnet() { + return telnetBox.isSelected(); + } + + public String getTelnetPort() { + return portTelnet.getText(); + } + + public boolean isSms() { + return smstBox.isSelected(); + } + + public String getSmsPort() { + return portSms.getText(); + } + + public int getSmsVersion() { + return smsVerzeComboBox.getSelectedIndex(); + } +} diff --git a/src/jnet/client/gui/dialog/object/TabSettings.java b/src/jnet/client/gui/dialog/object/TabSettings.java new file mode 100644 index 0000000..e403a8c --- /dev/null +++ b/src/jnet/client/gui/dialog/object/TabSettings.java @@ -0,0 +1,218 @@ +package jnet.client.gui.dialog.object; + +import java.awt.Color; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import javax.swing.BorderFactory; +import javax.swing.DefaultComboBoxModel; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JPasswordField; +import javax.swing.JTextArea; +import javax.swing.JTextField; +import jnet.client.Client; +import jnet.lib.object.MapObject; +import jnet.lib.object.ObjectType; +import jnet.lib.object.SnmpProfile; + +public class TabSettings extends JPanel { + + private MapObject obj; + private boolean newObject; + + private JTextField nazevText = new JTextField(); + private JLabel nazevWarning = new JLabel("Název musi mit min. 3 znaky"); + private JTextField ipText = new JTextField(); + private JLabel ipWarning = new JLabel("Neplatná IP adresa"); + private JComboBox typeComboBox = new JComboBox(); + private JTextField userText = new JTextField(); + private JPasswordField hesloText = new JPasswordField(); + private DefaultComboBoxModel snmpmodel = new DefaultComboBoxModel(); + private JCheckBox disableCheBox = new JCheckBox(); + private JTextField locationText = new JTextField(); + private JTextArea descriptionText = new JTextArea(); + private JComboBox snmpProfileComboBox = new JComboBox(); + + public TabSettings(MapObject obj, boolean newObject) { + this.obj = obj; + this.newObject = newObject; + + this.setLayout(null); + + JLabel nazevLabel = new JLabel("Název"); + nazevLabel.setBounds(20, 30, 80, 25); + this.add(nazevLabel); + + nazevText.setBounds(110, 30, 160, 25); + this.add(nazevText); + + nazevWarning.setForeground(Color.red); + nazevWarning.setBounds(110, 55, 160, 25); + nazevWarning.setVisible(false); + this.add(nazevWarning); + + JLabel ipLabel = new JLabel("IP adresa"); + ipLabel.setBounds(300, 30, 80, 25); + this.add(ipLabel); + + ipText.setBounds(390, 30, 160, 25); + this.add(ipText); + ipWarning.setForeground(Color.red); + ipWarning.setBounds(390, 55, 160, 25); + ipWarning.setVisible(false); + this.add(ipWarning); + + JLabel typLabel = new JLabel("Typ"); + typLabel.setBounds(20, 130, 80, 25); + this.add(typLabel); + + DefaultComboBoxModel model = new DefaultComboBoxModel(); + for (ObjectType ot : Client.objectType) { + model.addElement(ot.getName()); + } + + typeComboBox.setModel(model); + typeComboBox.setBounds(110, 130, 160, 25); + this.add(typeComboBox); + + JLabel userLabel = new JLabel("Uživatel"); + userLabel.setBounds(20, 80, 80, 25); + this.add(userLabel); + + userText.setBounds(110, 80, 160, 25); + this.add(userText); + + JLabel hesloLabel = new JLabel("Heslo"); + hesloLabel.setBounds(300, 80, 80, 25); + this.add(hesloLabel); + + hesloText.setBounds(390, 80, 160, 25); + this.add(hesloText); + + JLabel snmpLabel = new JLabel("SNMP profil"); + snmpLabel.setBounds(300, 130, 80, 25); + this.add(snmpLabel); + + // nacteni snmp profilu + for (SnmpProfile sp : Client.snmpProfile) { + snmpmodel.addElement(sp.getName()); + } + snmpProfileComboBox.setModel(snmpmodel); + snmpProfileComboBox.setBounds(390, 130, 160, 25); + this.add(snmpProfileComboBox); + + JLabel disableLabel = new JLabel("Aktivní"); + disableLabel.setBounds(20, 180, 80, 25); + this.add(disableLabel); + + 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); + this.add(locLabel); + + locationText.setBounds(110, 230, 440, 25); + this.add(locationText); + + JLabel descLabel = new JLabel("Poznámka"); + descLabel.setBounds(20, 280, 80, 25); + this.add(descLabel); + + descriptionText.setBounds(110, 280, 440, 100); + descriptionText.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.BLACK), BorderFactory.createEmptyBorder(10, 10, 10, 10))); + this.add(descriptionText); + + // predvyplneni poli + if (!newObject) { + nazevText.setText(obj.getName()); + ipText.setText(obj.getIp()); + userText.setText(obj.getUser()); + hesloText.setText(obj.getPassword()); + for (int i = 0; i < Client.objectType.size() - 1; i++) { + if (obj.getObjectType() == Client.objectType.get(i).getId()) { + typeComboBox.setSelectedIndex(i); + } + } + + for (int i = 0; i < Client.snmpProfile.size(); i++) { + if (Client.snmpProfile.get(i).getId() == obj.getSnmpProfile()) { + snmpProfileComboBox.setSelectedIndex(i); + } + } + disableCheBox.setSelected(obj.isActive()); + descriptionText.setText(obj.getDescription()); + locationText.setText(obj.getLocation()); + } else { + disableCheBox.setSelected(true); + } + } + + private boolean validateIp(String ip) { + Pattern pattern = Pattern.compile("^(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"); + Matcher matcher = pattern.matcher(ip); + return matcher.matches(); + } + + public String getName() { + if (nazevText.getText().length() < 3) { + nazevWarning.setVisible(true); + return null; + } + return nazevText.getText(); + } + + public String getIp() { + if (!validateIp(ipText.getText())) { + ipWarning.setVisible(true); + return null; + } + return ipText.getText(); + } + + public String getUser() { + return userText.getText(); + } + + public char[] getPassword(){ + return hesloText.getPassword(); + } + + public int getObjType(){ + return typeComboBox.getSelectedIndex(); + } + + public int getSnmpProfile(){ + return snmpProfileComboBox.getSelectedIndex(); + } + + public String getDesc(){ + return descriptionText.getText(); + } + + public String getLoc() { + return locationText.getText(); + } + + public boolean isActive(){ + return disableCheBox.isSelected(); + } + +}