001    package org.server;
002    
003    import java.util.*;
004    import java.io.*;
005    import java.net.*;
006    import java.awt.*;
007    import java.awt.event.*;
008    import javax.swing.*;
009    import javax.swing.event.*;
010    import org.server.motion.*;
011    
012    public class DummyServerGUI extends JPanel {
013    
014            private JPanel state_panel_;
015            private JPanel player_panel_;
016            private JTextArea log_area_;
017            private DummyServer server_;
018            private SoccerField field_;
019            private JComboBox motion_simulator_list_;
020    
021            public DummyServerGUI(DummyServer server) {
022                    server_ = server;
023                    player_panel_ = new JPanel();
024                    player_panel_.setPreferredSize(new Dimension(200, 200));
025                    player_panel_.setLayout(new BoxLayout(player_panel_, BoxLayout.Y_AXIS));
026    
027                    motion_simulator_list_ = new JComboBox(new String[]{"None", "org.server.motion.SimpleMotionSimulator"});
028                    motion_simulator_list_.setEditable(true);
029                    motion_simulator_list_.addActionListener(new ActionListener(){
030                            public void actionPerformed(ActionEvent e) {
031                                    JComboBox c = (JComboBox)e.getSource();
032                                    String item = (String)c.getSelectedItem();
033                                    try{
034                                            if("None".equals(item)) {
035                                                    server_.setMotionSimulator(null);
036                                            } else {
037                                                    server_.setMotionSimulator((MotionSimulator)(Class.forName(item).newInstance()));
038                                            }
039                                    }catch(Exception exc){
040                                            exc.printStackTrace();
041                                    }
042                            }
043                    });
044                    
045                    JPanel control_panel_ = new JPanel();
046                    control_panel_.setLayout(new BoxLayout(control_panel_, BoxLayout.Y_AXIS));
047                    control_panel_.add(motion_simulator_list_);
048    
049                    state_panel_ = new JPanel();
050                    state_panel_.setLayout(new BoxLayout(state_panel_, BoxLayout.Y_AXIS));
051                    state_panel_.add(player_panel_);
052                    
053                    field_ = new SoccerField(server);
054                    field_.createAndShowGUI();
055                    
056                    server_.addDummyServerListener(new DummyServerListener(){
057                            public void connectionDetected(InetSocketAddress address) {
058                                    player_panel_.add(new JLabel(address.toString()));
059                                    player_panel_.revalidate();
060                                    alert(address);
061                            }
062                            public void failedToConnect(InetSocketAddress address, String message) {
063                                    alert(address+","+message);
064                            }
065                            public void update() {
066                                    field_.update();
067                            }
068                            public void log(String message) {
069                                    log_area_.append(message+"\n");
070                                    log_area_.setCaretPosition(log_area_.getDocument().getLength());
071                            }
072                    });
073                    log_area_ = new JTextArea();
074                    setLayout(new BorderLayout());
075                    add(control_panel_, BorderLayout.NORTH);
076                    add(state_panel_, BorderLayout.CENTER);
077                    JScrollPane sp = new JScrollPane(log_area_);
078                    sp.setPreferredSize(new Dimension(100, 100));
079                    add(sp, BorderLayout.SOUTH);
080                    
081                    JFrame frame = new JFrame("Dummy Server");
082                    frame.setContentPane(this);
083                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
084                    frame.setSize(500, 500);
085                    frame.setVisible(true);
086            }
087            
088            public static void alert(Object message) {
089                    System.out.println(message);
090                    // javax.swing.JOptionPane.showMessageDialog(null, message);
091            }
092    }