/*
* (c) 2000-2009 Carlos G�mez Rodr�guez, todos los derechos reservados / all rights reserved.
* Licencia en license/bsd.txt / License in license/bsd.txt
*/
package eu.irreality.age.server;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import eu.irreality.age.PartidaEntry;
import eu.irreality.age.i18n.UIMessages;
import eu.irreality.age.swing.mdi.SwingAetheriaGUI;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
//Singleton
public class ServerConfigurationWindow extends JDialog
{
public ServerConfigurationOptions getEntrada ( )
{
int tPort,aPort;
try
{
tPort = Integer.valueOf ( tfTPort.getText() ).intValue();
}
catch ( NumberFormatException nfe )
{
tPort = 8010;
}
try
{
aPort = Integer.valueOf ( tfAPort.getText() ).intValue();
}
catch ( NumberFormatException nfe )
{
aPort = 8009;
}
//build irc server list, dedicated game list
java.util.List servList = new ArrayList();
java.util.List gList = new ArrayList();
for ( int i = 0 ; i < ircServerVector.size() ; i++ )
servList.add ( ircServerVector.get(i) );
for ( int i = 0 ; i < gameVector.size() ; i++ )
gList.add ( gameVector.get(i) );
return new ServerConfigurationOptions (
cbAge.isSelected(), cbTel.isSelected() , cbIrc.isSelected() , cbInitOnStartup.isSelected(),
tPort , aPort , servList , gList );
}
public void saveConfiguration() throws FileNotFoundException , IOException
{
ObjectOutputStream oos = new ObjectOutputStream ( new FileOutputStream ( configurationFile ) );
oos.writeObject ( getEntrada() );
ServerHandler.getInstance().setServerConfigurationOptions(getEntrada());
}
public static File configurationFile = new File("server.opt");
private JCheckBox cbTel // = new JCheckBox("Servir por Telnet, puerto:");
= new JCheckBox(UIMessages.getInstance().getMessage("serveroptions.serve.telnet"));
private JCheckBox cbAge // = new JCheckBox("Servir por AGE, puerto:");
= new JCheckBox(UIMessages.getInstance().getMessage("serveroptions.serve.age"));
private JCheckBox cbIrc // = new JCheckBox("Servir por IRC");
= new JCheckBox(UIMessages.getInstance().getMessage("serveroptions.serve.irc"));
private JCheckBox cbInitOnOK // = new JCheckBox("Arrancar las partidas dedicadas al pulsar Aceptar");
= new JCheckBox(UIMessages.getInstance().getMessage("serveroptions.init.on.ok"));
private JCheckBox cbInitOnStartup // = new JCheckBox("Arrancar las partidas dedicadas al iniciar AGE");
= new JCheckBox(UIMessages.getInstance().getMessage("serveroptions.init.on.startup"));
private JTextField tfTPort = new JTextField("8010") , tfAPort = new JTextField("8009") ;
private DefaultListModel ircServerVector = new DefaultListModel();
private JList ircServerList = new JList(ircServerVector);
private JButton islAdd // = new JButton("Agregar...");
= new JButton( UIMessages.getInstance().getMessage("serveroptions.ircserver.add") );
private JButton islRemove // = new JButton("Quitar");
= new JButton( UIMessages.getInstance().getMessage("serveroptions.ircserver.del") );
private JButton islConfig // = new JButton("Configurar");
= new JButton( UIMessages.getInstance().getMessage("serveroptions.ircserver.conf") );
private DefaultListModel gameVector = new DefaultListModel();
private JList gameList = new JList(gameVector);
private JButton gameAdd // = new JButton("Agregar...");
= new JButton( UIMessages.getInstance().getMessage("serveroptions.game.add") );
private JButton gameRemove // = new JButton("Quitar");
= new JButton( UIMessages.getInstance().getMessage("serveroptions.game.del") );
private JButton gameConfig //= new JButton("Configurar");
= new JButton( UIMessages.getInstance().getMessage("serveroptions.game.conf") );
private JButton botonAceptar = new JButton(UIMessages.getInstance().getMessage("button.ok"));
private JButton botonCancelar = new JButton(UIMessages.getInstance().getMessage("button.can"));
private static ServerConfigurationWindow theInstance;
private static JFrame madre;
public static void setMadre ( JFrame parent )
{
madre = parent;
}
public static ServerConfigurationWindow getInstance()
{
if ( theInstance == null )
{
try
{
ObjectInputStream ois = new ObjectInputStream ( new FileInputStream ( configurationFile ) );
ServerConfigurationOptions sco = (ServerConfigurationOptions) ois.readObject();
theInstance = new ServerConfigurationWindow ( sco );
}
catch ( Exception e )
{
theInstance = new ServerConfigurationWindow();
}
}
return theInstance;
}
private ServerConfigurationWindow ( ServerConfigurationOptions sco )
{
this();
cbAge.setSelected ( sco.sirveAge() );
cbTel.setSelected ( sco.sirveTelnet() );
cbIrc.setSelected ( sco.sirveIrc() );
cbInitOnStartup.setSelected ( sco.initOnStartup() );
cbInitOnOK.setSelected ( false ); //this is not an option, we don't init on OK unless explicitly told to do so.
tfTPort.setText( String.valueOf(sco.getPuertoTelnet()) );
tfAPort.setText( String.valueOf(sco.getPuertoAge()) );
java.util.List lIrc = sco.getListaServidoresIrc();
java.util.List lDed = sco.getListaPartidasDedicadas();
for ( int i = 0 ; i < lIrc.size() ; i++ )
ircServerVector.addElement ( lIrc.get(i) );
for ( int i = 0 ; i < lDed.size() ; i++ )
gameVector.addElement ( lDed.get(i) );
}
public void setVisible(boolean visible)
{
if(visible) cbInitOnOK.setSelected(false);
super.setVisible(visible);
}
private ServerConfigurationWindow ( )
{
super(madre,true);
setTitle( UIMessages.getInstance().getMessage("serveroptions.title") );
getContentPane().setLayout ( new BorderLayout() );
JPanel panelPrincipal = new JPanel ( new GridLayout ( 3 , 1 ) );
JPanel subPan1 = new JPanel();
subPan1.setLayout ( new GridLayout ( 6 , 1 ) );
JPanel subPan11 = new JPanel();
subPan11.add ( cbTel );
//subPan11.add ( new JLabel("Servir por Telnet, puerto:") );
subPan11.add ( tfTPort );
JPanel subPan12 = new JPanel();
subPan12.add ( cbAge );
//subPan12.add ( new JLabel("Servir por AGE, puerto:") );
subPan12.add ( tfAPort );
JPanel subPan13 = new JPanel();
subPan13.add ( cbIrc );
//subPan13.add ( new JLabel("Servir por IRC") );
JPanel subPan15 = new JPanel();
subPan15.add ( cbInitOnStartup );
JPanel subPan16 = new JPanel();
subPan16.add ( cbInitOnOK );
subPan1.add(subPan12);
subPan1.add(subPan11);
subPan1.add(subPan13);
subPan1.add(new JPanel());
subPan1.add(subPan15);
subPan1.add(subPan16);
subPan1.setBorder ( BorderFactory.createTitledBorder( UIMessages.getInstance().getMessage("serveroptions.servers") ) );
final JPanel subPan2 = new JPanel();
subPan2.setBorder ( BorderFactory.createTitledBorder( UIMessages.getInstance().getMessage("serveroptions.irc") ) );
subPan2.setLayout ( new BorderLayout() );
JPanel subPan21 = new JPanel();
subPan21.add ( new JScrollPane(ircServerList) ); //lista de IrcServerEntry
JPanel subPan22 = new JPanel();
subPan22.add ( islAdd );
subPan22.add ( islRemove );
subPan22.add ( islConfig );
subPan2.add ( subPan21 , BorderLayout.CENTER );
subPan2.add ( subPan22 , BorderLayout.SOUTH );
JPanel subPan3 = new JPanel();
subPan3.setBorder ( BorderFactory.createTitledBorder( UIMessages.getInstance().getMessage("serveroptions.dedicated") ) );
subPan3.setLayout ( new BorderLayout() );
JPanel subPan31 = new JPanel();
subPan31.add ( new JScrollPane(gameList) );
JPanel subPan32 = new JPanel();
subPan32.add ( gameAdd );
subPan32.add ( gameRemove );
subPan32.add ( gameConfig );
subPan3.add ( subPan31 , BorderLayout.CENTER );
subPan3.add ( subPan32 , BorderLayout.SOUTH );
panelPrincipal.add ( subPan1 );
panelPrincipal.add ( subPan2 );
panelPrincipal.add ( subPan3 );
JPanel panelBotones = new JPanel ( new GridLayout ( 1 , 4 ) );
panelBotones.add ( new JPanel() );
panelBotones.add ( new JPanel() );
panelBotones.add ( botonAceptar );
panelBotones.add ( botonCancelar );
panelPrincipal.setBorder ( BorderFactory.createEtchedBorder() );
getContentPane().add(panelPrincipal , BorderLayout.CENTER );
getContentPane().add(panelBotones , BorderLayout.SOUTH );
pack();
setLocationRelativeTo(madre);
islAdd.addActionListener
(
new ActionListener()
{
public void actionPerformed ( ActionEvent evt )
{
AddIrcNetworkWindow ainw = new AddIrcNetworkWindow( getInstance());
ainw.setVisible(true);
}
}
);
islConfig.addActionListener
(
new ActionListener()
{
public void actionPerformed ( ActionEvent evt )
{
IrcServerEntry ise = removeAndGetSelectedIrcServerEntry();
if ( ise == null ) return;
AddIrcNetworkWindow ainw = new AddIrcNetworkWindow( getInstance() , ise );
ainw.setVisible(true);
}
}
);
islRemove.addActionListener
(
new ActionListener()
{
public void actionPerformed ( ActionEvent evt )
{
removeSelectedIrcServerEntries();
}
}
);
gameAdd.addActionListener
(
new ActionListener()
{
public void actionPerformed ( ActionEvent evt )
{
AddGameWindow agw = new AddGameWindow( getInstance() );
agw.setVisible(true);
}
}
);
gameConfig.addActionListener
(
new ActionListener()
{
public void actionPerformed ( ActionEvent evt )
{
PartidaEntry pe = removeAndGetSelectedPartidaEntry();
if ( pe == null ) return;
AddGameWindow ainw = new AddGameWindow( getInstance() , pe );
ainw.setVisible(true);
}
}
);
gameRemove.addActionListener
(
new ActionListener()
{
public void actionPerformed ( ActionEvent evt )
{
removeSelectedPartidaEntries();
}
}
);
botonCancelar.addActionListener
(
new ActionListener()
{
public void actionPerformed ( ActionEvent evt )
{
dispose();
theInstance = new ServerConfigurationWindow ( ServerHandler.getInstance().getServerConfigurationOptions() );
}
}
);
botonAceptar.addActionListener
(
new ActionListener()
{
public void actionPerformed ( ActionEvent evt )
{
try
{
saveConfiguration();
if ( cbInitOnOK.isSelected() )
{
ServerHandler.getInstance().applyOptions(getEntrada());
ServerHandler.getInstance().initPartidasDedicadas(SwingAetheriaGUI.getInstance().getPanel());
}
}
catch ( Exception e )
{
JOptionPane.showMessageDialog ( null , UIMessages.getInstance().getMessage("serveroptions.cannot.save") + " " + e , "�Oops!" , JOptionPane.ERROR_MESSAGE );
}
finally
{
dispose();
}
}
}
);
cbIrc.addItemListener
(
new ItemListener()
{
public void itemStateChanged ( ItemEvent evt )
{
if ( evt.getStateChange() == ItemEvent.SELECTED )
{
subPan2.setEnabled(true);
islAdd.setEnabled(true);
islRemove.setEnabled(true);
islConfig.setEnabled(true);
}
else if ( evt.getStateChange() == ItemEvent.DESELECTED )
{
subPan2.setEnabled(false);
islAdd.setEnabled(false);
islRemove.setEnabled(false);
islConfig.setEnabled(false);
}
}
}
);
//init button state
islAdd.setEnabled(cbIrc.isSelected());
islRemove.setEnabled(cbIrc.isSelected());
islConfig.setEnabled(cbIrc.isSelected());
}
public void addIrcServerEntry ( IrcServerEntry ise )
{
ircServerVector.addElement ( ise );
ircServerList.repaint();
}
public void removeSelectedIrcServerEntries ( )
{
int[] indices = ircServerList.getSelectedIndices();
for ( int i = indices.length-1 ; i >= 0 ; i-- )
{
ircServerVector.removeElementAt(indices[i]);
}
}
public IrcServerEntry removeAndGetSelectedIrcServerEntry() //just one
{
int[] indices = ircServerList.getSelectedIndices();
if ( indices.length < 1 ) return null;
IrcServerEntry ise = (IrcServerEntry) ircServerVector.get(indices[0]);
ircServerVector.removeElementAt(indices[0]);
return ise;
}
public void addPartidaEntry ( PartidaEntry pe )
{
gameVector.addElement ( pe );
gameList.repaint();
}
public void removeSelectedPartidaEntries ( )
{
int[] indices = gameList.getSelectedIndices();
for ( int i = indices.length-1 ; i >= 0 ; i-- )
{
gameVector.removeElementAt(indices[i]);
}
}
public PartidaEntry removeAndGetSelectedPartidaEntry() //just one
{
int[] indices = gameList.getSelectedIndices();
if ( indices.length < 1 ) return null;
PartidaEntry pe = (PartidaEntry) gameVector.get(indices[0]);
gameVector.removeElementAt(indices[0]);
return pe;
}
}