/* ** This file is part of Filius, a network construction and simulation software. ** ** Originally created at the University of Siegen, Institute "Didactics of ** Informatics and E-Learning" by a students' project group: ** members (2006-2007): ** André Asschoff, Johannes Bade, Carsten Dittich, Thomas Gerding, ** Nadja Haßler, Ernst Johannes Klebert, Michell Weyer ** supervisors: ** Stefan Freischlad (maintainer until 2009), Peer Stechert ** Project is maintained since 2010 by Christian Eibl <filius@c.fameibl.de> ** and Stefan Freischlad ** Filius is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 2 of the License, or ** (at your option) version 3. ** ** Filius is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See the GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Filius. If not, see <http://www.gnu.org/licenses/>. */ package filius.gui.anwendungssicht; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Observable; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import filius.software.clientserver.ServerAnwendung; import filius.software.clientserver.ServerBaustein; /** * <p> * Diese Klasse stellt die Benutzungsoberflaeche fuer das Server-Programm einer * einfachen Client-Server-Anwendung zur Verfuegung. * </p> * <p> * Nachrichten von der Anwendung werden nach dem Beobachtermuster durch die * Benachrichtigung der Beobachter angenommen und verarbeitet. * </p> */ public class GUIApplicationServerBausteinWindow extends GUIApplicationWindow { private static final long serialVersionUID = 1L; /** * Textbereich zur Ausgabe von Log-Daten, die vom Server-Programm erzeugt * und durch Benachrichtigung der Beobachter an die graphische * Benutzungsoberflaeche weiter gegeben werden */ private JTextArea taLog; /** * Schaltflaeche zum Starten bzw. Stoppen des Server-Programms, d. h. zum * Starten bzw. Beenden der Verbindungsannahme durch den Server */ private JButton bStartStop; /** * Textfeld zur Eingabe des Ports, an dem der Server eingehende * Verbindungsanfragen entgegen nimmt. */ private JTextField tfPort; /** * Standard-Konstruktor, der automatisch zur Erzeugung der graphischen * Benutzungsoberflaeche fuer diese Anwendung aufgerufen wird. */ public GUIApplicationServerBausteinWindow(GUIDesktopPanel desktop, String appName) { super(desktop, appName); initialisiereKomponenten(); } /** Methode zur Initialisierung der graphischen Komponenten */ private void initialisiereKomponenten() { JPanel hauptPanel; JScrollPane spLogScroller; JLabel lbPort; Box hBox, vBox; hauptPanel = new JPanel(new BorderLayout()); vBox = Box.createVerticalBox(); vBox.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); vBox.add(Box.createVerticalStrut(5)); hBox = Box.createHorizontalBox(); bStartStop = new JButton(); bStartStop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("start")) { ((ServerAnwendung) holeAnwendung()).setPort(Integer .parseInt(tfPort.getText())); ((ServerAnwendung) holeAnwendung()).setAktiv(true); ((ServerAnwendung) holeAnwendung()).setPort(Integer .parseInt(tfPort.getText())); } else { ((ServerAnwendung) holeAnwendung()).setAktiv(false); } aktualisieren(); } }); hBox.add(bStartStop); hBox.add(Box.createHorizontalStrut(5)); lbPort = new JLabel(messages.getString("serverbaustein_msg1")); hBox.add(lbPort); tfPort = new JTextField("" + ((ServerAnwendung) holeAnwendung()).getPort()); hBox.add(tfPort); vBox.add(hBox); vBox.add(Box.createVerticalStrut(5)); taLog = new JTextArea(); taLog.setEditable(false); spLogScroller = new JScrollPane(taLog); spLogScroller.setPreferredSize(new Dimension(400, 400)); vBox.add(spLogScroller); vBox.add(Box.createVerticalStrut(5)); hauptPanel.add(vBox, BorderLayout.CENTER); getContentPane().add(hauptPanel); pack(); aktualisieren(); } /** * Methode zum aktualisieren der Komponenten der graphischen * Benutzungsoberflaeche in Abhaengigkeit vom Zustand der Anwendung */ public void aktualisieren() { ServerBaustein server; server = (ServerBaustein) holeAnwendung(); if (server.isAktiv()) { tfPort.setEditable(false); bStartStop.setText(messages.getString("serverbaustein_msg2")); bStartStop.setActionCommand("stop"); } else { bStartStop.setText(messages.getString("serverbaustein_msg3")); bStartStop.setActionCommand("start"); tfPort.setEditable(true); } } /** * Diese Methode wird automatisch ausgefuehrt, wenn der eine Nachricht an * den Beobachter der Anwendung gesendet wird. Der Parameter arg enthaelt * die Nachricht, die von der Anwendung verschickt wurde. */ public void update(Observable o, Object arg) { taLog.append(arg.toString() + "\n"); aktualisieren(); } }