Newer
Older
ServerTester / src / main / java / info / istlab / ServerTester / RemoteHostsWindow.java
package info.istlab.ServerTester;

import java.awt.Color;
import java.awt.Desktop;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Hashtable;
import java.util.Iterator;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;

public class RemoteHostsWindow extends JPanel {

    public RemoteHostsWindow(Hashtable<String, String> receivedData) {
        JFrame frame = new JFrame();
        frame.setTitle("Remote Hosts (自動更新はしません)");
        frame.setSize(300, 200);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JTabbedPane tabbedPane = new JTabbedPane();
        frame.getContentPane().add(tabbedPane);
        Iterator<String> it = receivedData.keySet().iterator();
        while (it.hasNext()) {
            String key = it.next();
            String value = receivedData.get(key);
            tabbedPane.add(key, new RemoteHostPanel(key, value));
        }
        frame.setLocation(50,400);
        frame.pack();
        frame.setVisible(true);
    }
}

class RemoteHostPanel extends JPanel {
    String hostip;

    public RemoteHostPanel(String _hostip, String value) {
        hostip = _hostip;
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        // System.out.println(value);
        String[] servers = value.split("\n");
        for (String server : servers) {
            // ex: WebServer 8081 127.0.0.1 Running
            String[] info = server.split(" ");
            // System.out.println(server);
            JPanel panel = new JPanel();
            panel.add(new JLabel(info[0]));
            panel.add(new JLabel(info[1]));
            JLabel addressLabel = new JLabel(info[2]);
            if (info[2].equals("127.0.0.1")) {
                addressLabel.setForeground(Color.red);
            }
            panel.add(addressLabel);
            panel.add(new JLabel(info[3]));
            JButton button = new JButton("Connect");
            panel.add(button);
            if (info[3].equals("Running")) {
                button.setEnabled(true);
            } else {
                button.setEnabled(false);
            }
            button.addActionListener(e -> {
                // もしbind addressが0.0.0.0だったら、hostipを使う
                String target = info[2];
                if (target.equals("0.0.0.0")) {
                    target = hostip;
                }
                if (target.equals("127.0.0.1")) {
                    target = hostip;
                }
                if (info[0].startsWith("Web")) {
                    // open web browser
                    Desktop desktop = Desktop.getDesktop();
                    try {
                        desktop.browse(new URI("http://" + target + ":" + info[1]));
                    } catch (IOException | URISyntaxException e1) {
                    }
                } else if (info[0].startsWith("Echo") || info[0].startsWith("ThreadEcho")) {
                    new JExecutor("EchoClient", info[1] + " " + target);
                    // new EchoClient(info[1], target);
                } else if (info[0].startsWith("Time") || info[0].startsWith("ThreadTime")) {
                    new JExecutor("TimeClient", info[1] + " " + target);
                    // new TimeClient(info[1], target);
                } else if (info[0].startsWith("WhiteBoard")) {
                    new JExecutor("WhiteBoardClient", info[1] + " " + target);
                    // new WhiteBoardClient(info[1], target);
                }
            });
            add(panel);
        }
    }

}