/*
* $Id$
*
* Copyright (c) 2000-2009 by Rodney Kinney, Brent Easton
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License (LGPL) as published by the Free Software Foundation.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, copies are available
* at http://www.opensource.org.
*/
package VASSAL.chat.ui;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.net.URL;
import javax.swing.AbstractAction;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JToolBar;
import VASSAL.build.GameModule;
import VASSAL.chat.ChatServerConnection;
import VASSAL.chat.HttpMessageServer;
import VASSAL.chat.ServerStatus;
import VASSAL.chat.messageboard.MessageBoard;
import VASSAL.chat.messageboard.MessageBoardControls;
import VASSAL.chat.peer2peer.PeerPoolInfo;
import VASSAL.i18n.Resources;
import VASSAL.tools.menu.MenuManager;
/**
* Description?
*/
public class ShowServerStatusAction extends AbstractAction {
private static final long serialVersionUID = 1L;
private static Window frame;
public ShowServerStatusAction(ServerStatus status, URL iconURL) {
this(status, iconURL, true);
}
public ShowServerStatusAction(ServerStatus status, URL iconURL, boolean includeMessageControls) {
if (frame == null) {
frame = new Window(status, includeMessageControls);
}
if (iconURL == null) {
putValue(NAME, Resources.getString("Chat.server_status")); //$NON-NLS-1$
}
else {
putValue(SMALL_ICON, new ImageIcon(iconURL));
}
putValue(SHORT_DESCRIPTION, Resources.getString("Chat.display_connections")); //$NON-NLS-1$
}
public void actionPerformed(ActionEvent e) {
frame.refresh();
}
private static class Window extends JFrame implements PropertyChangeListener {
private static final long serialVersionUID = 1L;
private ServerStatusView view;
private MessageBoardControls messageMgr;
public Window(ServerStatus status, boolean includeMessageControls) {
super(Resources.getString("Chat.server_status")); //$NON-NLS-1$
setJMenuBar(MenuManager.getInstance().getMenuBarFor(this));
view = new ServerStatusView(status);
view.addPropertyChangeListener(ServerStatusView.SELECTION_PROPERTY,this);
add(view);
if (includeMessageControls) {
messageMgr = new MessageBoardControls();
final JToolBar toolbar = new JToolBar();
toolbar.setFloatable(false);
toolbar.add(messageMgr.getCheckMessagesAction());
toolbar.add(messageMgr.getPostMessageAction());
add(toolbar, BorderLayout.NORTH);
}
pack();
setSize(Math.max(getSize().width,400),Math.max(getSize().height,300));
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
setLocation(d.width / 2 - getSize().width / 2,
d.height / 2 - getSize().height / 2);
}
public void refresh() {
if (!isVisible()) {
setVisible(true);
}
else {
toFront();
}
view.refresh();
}
public void propertyChange(PropertyChangeEvent evt) {
MessageBoard server = null;
String name = null;
if (evt.getNewValue() instanceof ServerStatus.ModuleSummary) {
final String moduleName = ((ServerStatus.ModuleSummary) evt.getNewValue()).getModuleName();
server = new HttpMessageServer(new PeerPoolInfo() {
public String getModuleName() {
return moduleName;
}
public String getUserName() {
return ((ChatServerConnection) GameModule.getGameModule().getServer()).getUserInfo().getName();
}
});
}
if (messageMgr != null) {
messageMgr.setServer(server, name);
}
}
}
}