/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package Sirius.server.registry.monitor; import Sirius.server.*; import Sirius.server.naming.*; import Sirius.server.newuser.*; import Sirius.server.registry.*; import Sirius.server.registry.events.*; import Sirius.util.*; import java.awt.*; import java.awt.event.*; import java.rmi.*; import java.rmi.server.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.table.*; /** * Der RegistryMonitor ist ein Frontend fuer die Registry (Sirius.Registry) Der Monitor stellt die Server, die beim der * Registry registriert sind, in einer Tabelle dar. Dabei fragt der Monitor die Registry zyklisch ab, um die * Anzeigetabellen aktuell zu halten. Das UpdateIntervall ist einstellbar. Ausserdem ist ein manuelles Update jederzeit * m\u00F6glich. * * @author Bernd Kiefer, Rene Wendling * @version 1.0 * * <p>letzte Aenderung: 24.10.2000</p> */ public class RegistryMonitor extends JPanel implements Runnable { //~ Instance fields -------------------------------------------------------- /** Referenz auf den NameServer der Registry.* */ private NameServer nameServer; /** Referenz auf den UserServer der Registry.* */ private UserServer userServer; /** die IP-Adresse der Registry.* */ private String registryIP; /** Die Tabellenueberschriften fuer die Anzeigetabellen Server.* */ private java.lang.Object[] columnnamesForServer = { "Name", "IP", "Port" }; // NOI18N /** Die Tabellenueberschriften fuer die Anzeigetabelle User.* */ private java.lang.Object[] columnnamesForUser = { "ID", "Name", "local Servername", "Usergroup", "Admin" }; // NOI18N /** umgewandelter Typ: Sirius.Server.Server[] nach java.lang.Object[][] * */ private Server[] callServer; /** umgewandelter Typ: Sirius.Server.Server[] nach java.lang.Object[][] * */ private Server[] localServer; /** umgewandelter Typ: Sirius.Server.Server[] nach java.lang.Object[][] * */ private Server[] protocolServer; /** umgewandelter Typ: Sirius.Server.Server[] nach java.lang.Object[][] * */ private Server[] translServer; /** Tabelle die alle aktiven CallServer anzeigt.* */ private JTable callServerTable; /** Tabelle die alle aktiven LocalServer anzeigt.* */ private JTable localServerTable; /** Tabelle die alle aktiven ProtocolServer anzeigt.* */ private JTable protocolServerTable; /** Tabelle, die alle registrierten TranslationServer anzeigt.* */ // private JTable translServerTable; /** Tabelle, die alle registrierten User anzeigt.* */ private JTable userTable; /** Vector der die User enth\u00E4lt.* */ private Vector users; /** zeigt eventuell auftretende Fehlermeldungen an.* */ private JLabel messageLabel; /** Wert fuer das UpdateIntervall.* */ private int updateIntervall = 60; /** Ueberschrift fuer den CentralServerMonitor.* */ private String panelHeader; // ---------------------------------------------------------------------------------------- //~ Constructors ----------------------------------------------------------- /** * Konstruktor. * * @param registryIP args[0] die IP-Adresse des CentralServers * */ public RegistryMonitor(final String registryIP) { this.registryIP = registryIP; // MessageLabel setzen messageLabel = new JLabel(); // ueberschrift fuer den Monitor panelHeader = org.openide.util.NbBundle.getMessage( RegistryMonitor.class, "RegistryMonitor.panelHeader", registryIP); // NOI18N try { // Referenz auf NameServer und UserServer der Registry erzeugen nameServer = (NameServer)Naming.lookup("rmi://" + registryIP + "/nameServer"); // NOI18N userServer = (UserServer)nameServer; // (UserServer) // Naming.lookup("rmi://"+registryIP+"/userServer"); // abfragen der aktiven Server callServer = nameServer.getServers(ServerType.CALLSERVER); localServer = nameServer.getServers(ServerType.LOCALSERVER); protocolServer = nameServer.getServers(ServerType.PROTOCOLSERVER); // translServer = nameServer.getServers(ServerType.TRANSLATIONSERVER); // abfragen der aktiven User users = new Vector(userServer.getUsers()); // Layout initialisieren initMainPanel(); // update-Schleife starten new Thread(this, "updateThread").start(); // NOI18N } catch (Exception e) { // wenn CentralServer auf IP-Adresse nicht vorhanden, Panel wird trotzdem initialisiert messageLabel.setText(org.openide.util.NbBundle.getMessage( RegistryMonitor.class, "RegistryMonitor.messageLabel.text.noregistry", registryIP)); // NOI18N initMainPanel(); // start der update-Schleife new Thread(this, "updateThread").start(); // NOI18N } } //~ Methods ---------------------------------------------------------------- /** * ---------------------------------------------------------------------------------------- * * @param intervall DOCUMENT ME! */ public void setUpdateIntervall(final int intervall) { this.updateIntervall = intervall; } // ---------------------------------------------------------------------------------------- /** * fragt die SiriusRegisty/NameServer nach aktuellen Servern ab. * */ private void update() { try { // Referenz wird neu angelegt, um zu pr\u00FCfen, ob der SiriusRegistry noch laeuft nameServer = (NameServer)Naming.lookup("rmi://" + registryIP + "/nameServer"); // NOI18N // get all Servers callServer = nameServer.getServers(ServerType.CALLSERVER); localServer = nameServer.getServers(ServerType.LOCALSERVER); protocolServer = nameServer.getServers(ServerType.PROTOCOLSERVER); // translServer = nameServer.getServers(ServerType.TRANSLATIONSERVER); users = new Vector(userServer.getUsers()); } catch (Exception e) { messageLabel.setForeground(Color.red); message(org.openide.util.NbBundle.getMessage( RegistryMonitor.class, "RegistryMonitor.messageLabel.text.registrydown", registryIP)); // NOI18N } } // ---------------------------------------------------------------------------------------- /** * fragt SiriusRegistry/NameServer nach aktuellen Servern ab und aktualisiert die Tabellen.* */ public void updateTables() { update(); try { final MonitorTableModel tmLocalServers = (MonitorTableModel)localServerTable.getModel(); final MonitorTableModel tmCallServers = (MonitorTableModel)callServerTable.getModel(); final MonitorTableModel tmProtocolServers = (MonitorTableModel)protocolServerTable.getModel(); // MonitorTableModel tmTranslServers = (MonitorTableModel)translServerTable.getModel(); final MonitorTableModel tmUserServers = (MonitorTableModel)userTable.getModel(); tmLocalServers.setDataVector(MonitorTableModel.convertToMatrix(localServer), columnnamesForServer); tmCallServers.setDataVector(MonitorTableModel.convertToMatrix(callServer), columnnamesForServer); tmProtocolServers.setDataVector(MonitorTableModel.convertToMatrix(protocolServer), columnnamesForServer); // tmTranslServers.setDataVector(MonitorTableModel.convertToMatrix(translServer),columnnamesForServer); tmUserServers.setDataVector(MonitorTableModel.convertToMatrix(users), columnnamesForUser); message(org.openide.util.NbBundle.getMessage( RegistryMonitor.class, "RegistryMonitor.messageLabel.text.lastupdate", new Date(System.currentTimeMillis()))); // NOI18N } catch (IllegalArgumentException e) { localServerTable.setModel(new MonitorTableModel()); callServerTable.setModel(new MonitorTableModel()); protocolServerTable.setModel(new MonitorTableModel()); // translServerTable.setModel(new MonitorTableModel()); userTable.setModel(new MonitorTableModel()); } } // ---------------------------------------------------------------------------------------- /** * Funktion zum initialisieren des Layouts.* */ private void initMainPanel() { // es wird versucht die Tabellen zu initialisiern. Ist kein CentralServer vorhanden, // k\u00F6nnen die Variablen call-, local- und protocolServer nicht initialisiert werden, // Exception wird ausgeworfen. Dann wird ein TableModel ohne Parameter zugewiesen try { callServerTable = new JTable( new MonitorTableModel(MonitorTableModel.convertToMatrix(callServer), columnnamesForServer)); localServerTable = new JTable( new MonitorTableModel(MonitorTableModel.convertToMatrix(localServer), columnnamesForServer)); protocolServerTable = new JTable( new MonitorTableModel(MonitorTableModel.convertToMatrix(protocolServer), columnnamesForServer)); // translServerTable = new JTable(new // MonitorTableModel(MonitorTableModel.convertToMatrix(translServer),columnnamesForServer)); userTable = new JTable(new MonitorTableModel(MonitorTableModel.convertToMatrix(users), columnnamesForUser)); } catch (IllegalArgumentException e) { callServerTable = new JTable(new MonitorTableModel()); localServerTable = new JTable(new MonitorTableModel()); protocolServerTable = new JTable(new MonitorTableModel()); // translServerTable = new JTable (new MonitorTableModel()); userTable = new JTable(new MonitorTableModel()); } catch (Exception e) { e.printStackTrace(); System.err.println("initmainPanel"); // NOI18N } // JTabbedPane erzeugen und Tabellen hinzufuegen final JTabbedPane allServerPane = new JTabbedPane(); allServerPane.add( org.openide.util.NbBundle.getMessage( RegistryMonitor.class, "RegistryMonitor.initMainPanel().allServerPane.tab1.title"), // NOI18N new JScrollPane(localServerTable)); allServerPane.add( org.openide.util.NbBundle.getMessage( RegistryMonitor.class, "RegistryMonitor.initMainPanel().allServerPane.tab2.title"), // NOI18N new JScrollPane(callServerTable)); // allServerPane.add("TranslationServers", new JScrollPane(translServerTable)); allServerPane.add( org.openide.util.NbBundle.getMessage( RegistryMonitor.class, "RegistryMonitor.initMainPanel().allServerPane.tab3.title"), // NOI18N new JScrollPane(protocolServerTable)); allServerPane.add( org.openide.util.NbBundle.getMessage( RegistryMonitor.class, "RegistryMonitor.initMainPanel().allServerPane.tab4.title"), // NOI18N new JScrollPane(userTable)); // UpdateButton fuer manuelles Update final JButton updateButton = new JButton(org.openide.util.NbBundle.getMessage( RegistryMonitor.class, "RegistryMonitor.initMainPanel().updateButton.text")); // NOI18N updateButton.addActionListener(new MonitorUpdateListener(this)); // Panel fuer updateIntervall Einstellungen final JPanel timePanel = new JPanel(); final ButtonGroup buttonGroup = new ButtonGroup(); final JRadioButton oneMin = (new JRadioButton( org.openide.util.NbBundle.getMessage( RegistryMonitor.class, "RegistryMonitor.initMainPanel().oneMin.text"))); // NOI18N final JRadioButton fiveMin = new JRadioButton(org.openide.util.NbBundle.getMessage( RegistryMonitor.class, "RegistryMonitor.initMainPanel().fiveMin.text")); // NOI18N final JRadioButton tenMin = new JRadioButton(org.openide.util.NbBundle.getMessage( RegistryMonitor.class, "RegistryMonitor.initMainPanel().tenMin.text")); // NOI18N final MonitorIntervallListener il = new MonitorIntervallListener(this); oneMin.addActionListener(il); fiveMin.addActionListener(il); tenMin.addActionListener(il); oneMin.setSelected(true); buttonGroup.add(oneMin); buttonGroup.add(fiveMin); buttonGroup.add(tenMin); timePanel.add(oneMin); timePanel.add(fiveMin); timePanel.add(tenMin); timePanel.setBorder(BorderFactory.createTitledBorder( org.openide.util.NbBundle.getMessage( RegistryMonitor.class, "RegistryMonitor.initMainPanel().timePanel.border.title"))); // NOI18N // MessageLabel und MessagePanel final JPanel messagePanel = new JPanel(); messagePanel.setBorder(BorderFactory.createTitledBorder( org.openide.util.NbBundle.getMessage( RegistryMonitor.class, "RegistryMonitor.initMainPanel().messagePanel.border.title"))); // NOI18N messagePanel.add(messageLabel); final JPanel buttonAndMessagePanel = new JPanel(); buttonAndMessagePanel.setLayout(new BorderLayout()); buttonAndMessagePanel.add(updateButton, BorderLayout.NORTH); buttonAndMessagePanel.add(messagePanel, BorderLayout.CENTER); // HauptPaneleistellungen setLayout(new BorderLayout()); setBorder(BorderFactory.createTitledBorder(panelHeader)); add(timePanel, BorderLayout.NORTH); add(allServerPane, BorderLayout.CENTER); add(buttonAndMessagePanel, BorderLayout.SOUTH); } // ---------------------------------------------------------------------------------------- /** * Schleife zum automatischen aktualisieren der Tabellen, Intervall kann ueber Variable updateIntervall gesetzt * werden. * */ @Override public void run() { while (true) { try { final Thread t = Thread.currentThread(); messageLabel.setForeground(new Color(102, 102, 153)); message(org.openide.util.NbBundle.getMessage( RegistryMonitor.class, "RegistryMonitor.messageLabel.text.lastupdate", new Date(System.currentTimeMillis()))); // NOI18N t.sleep(updateIntervall * 1000); updateTables(); } catch (InterruptedException e) { } } } /** * ---------------------------------------------------------------------------------------- * * @param message DOCUMENT ME! */ public void message(final String message) { messageLabel.setText(message); } // ---------------------------------------------------------------------------------------- /** * MainFunktion zum testen des CentralServerMonitor.* * * @param args DOCUMENT ME! */ public static void main(final String[] args) { // RegistryMonitor monitor = new RegistryMonitor(args[0]); final RegistryMonitor monitor = new RegistryMonitor("192.168.0.1"); // NOI18N final JFrame frame = new JFrame(org.openide.util.NbBundle.getMessage( RegistryMonitor.class, "RegistryMonitor.main(String[]).frame.title")); // NOI18N frame.getContentPane().add(monitor); frame.setSize(400, 400); frame.setVisible(true); } }