import EnvironmentPluginAPI.Exceptions.CorruptConfigurationFileException;
import Models.ConfigurationListTableModel;
import ZeroTypes.Enumerations.SessionStatus;
import EnvironmentPluginAPI.Exceptions.TechnicalException;
import EnvironmentPluginAPI.Contract.TEnvironmentDescription;
import GameServerFacade.Interface.IServerFacade;
import GameServerFacade.Interface.ServerFacadeFactory;
import Models.ClientTableModel;
import Models.EnvironmentComboBoxModel;
import PluginLoader.Interface.Exceptions.PluginNotReadableException;
import ZeroTypes.Exceptions.ErrorMessages;
import ZeroTypes.Settings.SettingException;
import ZeroTypes.TransportTypes.TNetworkClient;
import ZeroTypes.TransportTypes.TSession;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.UnknownHostException;
import java.util.List;
import java.util.Observable;
import java.util.UUID;
/**
* User: chhuening
* Date: 18.05.12
* Time: 13:08
*/
public class SessionConfig extends Observable {
private JButton refreshButton;
private JButton addClientToSession;
private JButton removeClientFromSession;
private JPanel sessionConfigPanel;
private JTextField sessionNameTextField;
private JButton saveSessionButton;
private JButton cancelButton;
private JTextField gameNumberTextField;
private JPanel aiConfigButtonPanel;
private JPanel mainConfigPanel;
private JTextField mapSeedTextField;
private JTextField edgeFieldTextField;
private JTextField factoryFactorTextField;
private JTextField factorySizeFactorTextField;
private JComboBox mapSymmetryComboBox;
private JPanel aiClientConfigPanel;
private JTable clientsAvailableTable;
private JTable clientsInSessionTable;
private JTextField maximumFactorySizeTextField;
private JComboBox allMapsComboBox;
private JTextField mapNameTextField;
private JButton saveMapButton;
private JTable configurationList;
private JComboBox environmentComboBox;
private ClientTableModel clientsInSessionTableModel;
private ClientTableModel clientsAvailableTableModel;
private ConfigurationListTableModel configurationListTableModel;
private final IServerFacade facade;
private boolean mapEdited = false;
private EnvironmentComboBoxModel environmentComboBoxModel;
private List<TEnvironmentDescription> environmentDescriptions;
public SessionConfig() throws TechnicalException, SettingException, PluginNotReadableException {
this.facade = ServerFacadeFactory.getProductiveApplicationCore();
try {
environmentDescriptions = facade.listAvailableEnvironments();
} catch (TechnicalException e) {
e.printStackTrace();
} catch (PluginNotReadableException e) {
e.printStackTrace();
} catch (SettingException e) {
e.printStackTrace();
}
environmentComboBoxModel = new EnvironmentComboBoxModel();
environmentComboBox.setModel(environmentComboBoxModel);
environmentComboBoxModel.addEnvironmentDescriptions(environmentDescriptions);
sessionConfigPanel.setVisible(false);
clientsAvailableTable.setModel(new ClientTableModel());
clientsInSessionTable.setModel(new ClientTableModel());
configurationList.setModel(new ConfigurationListTableModel());
clientsInSessionTableModel = (ClientTableModel) clientsInSessionTable.getModel();
clientsAvailableTableModel = (ClientTableModel) clientsAvailableTable.getModel();
configurationListTableModel = (ConfigurationListTableModel) configurationList.getModel();
updateConfigurationList();
// TODO: Error Messages einsammeln und in einem Dialog anzeigen
addClientToSession.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
for (int index : clientsAvailableTable.getSelectedRows()) {
try {
TNetworkClient elem = clientsAvailableTableModel.removeClientAt(index);
clientsInSessionTableModel.addClient(elem);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
});
// TODO: Error Messages einsammeln und in einem Dialog anzeigen
removeClientFromSession.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
for (int index : clientsInSessionTable.getSelectedRows()) {
try {
TNetworkClient elem = clientsInSessionTableModel.removeClientAt(index);
clientsAvailableTableModel.addClient(elem);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
});
// TODO: Error Messages einsammeln und in einem Dialog anzeigen
saveSessionButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
try {
List<TNetworkClient> clients = clientsInSessionTableModel.getAllClients();
TSession session = new TSession(UUID.randomUUID(), sessionNameTextField.getText(),
SessionStatus.READY,
configurationListTableModel.get(configurationList.getSelectedRow()),
clientsInSessionTableModel.getRowCount(),
Integer.parseInt(gameNumberTextField.getText()),
clients,
environmentComboBoxModel.getEnvironmentDescription(environmentComboBox.getSelectedIndex()));
facade.createSession(session);
setChanged();
notifyObservers(session);
sessionConfigPanel.setVisible(false);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (PluginNotReadableException e) {
e.printStackTrace();
} catch (TechnicalException e) {
e.printStackTrace();
}
}
});
refreshButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
clientsAvailableTableModel.removeAllClients();
clientsAvailableTableModel.addClients(facade.getFreeClients());
}
});
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
sessionConfigPanel.setVisible(false);
}
});
}
private void updateConfigurationList() {
try {
configurationList.clearSelection();
configurationListTableModel.removeAllConfigurations();
if (environmentComboBox.getItemCount() > 0) {
TEnvironmentDescription env = environmentComboBoxModel.getEnvironmentDescription(environmentComboBox.getSelectedIndex());
configurationListTableModel.addConfigurations(facade.getAvailableConfigurations(env));
}
} catch (CorruptConfigurationFileException e) {
JOptionPane.showMessageDialog(null,
e.getMessage(),
"",
JOptionPane.ERROR_MESSAGE);
} catch (TechnicalException e) {
JOptionPane.showMessageDialog(null,
e.getMessage(),
"",
JOptionPane.ERROR_MESSAGE);
} catch (PluginNotReadableException e) {
JOptionPane.showMessageDialog(null,
e.getMessage(),
"",
JOptionPane.ERROR_MESSAGE);
} catch (AbstractMethodError e) {
JOptionPane.showMessageDialog(null,
ErrorMessages.get("pluginCompiledAgainstIncompatibleVersion", e.getMessage()),
"",
JOptionPane.ERROR_MESSAGE);
}
}
/**
* Clears SessionConfig GUI for new Session
*/
public void enableSessionConfig() {
this.gameNumberTextField.setText("");
this.sessionNameTextField.setText("");
this.clientsAvailableTableModel.removeAllClients();
this.clientsAvailableTableModel.addClients(facade.getFreeClients());
clientsInSessionTableModel.removeAllClients();
this.sessionConfigPanel.setVisible(true);
}
}