import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class WhoisGUI extends JFrame {
private JTextField searchString = new JTextField(30);
private JTextArea names = new JTextArea(15, 80);
private JButton findButton = new JButton("Find");;
private ButtonGroup searchIn = new ButtonGroup();
private ButtonGroup searchFor = new ButtonGroup();
private JCheckBox exactMatch = new JCheckBox("Exact Match", true);
private JTextField chosenServer = new JTextField();
private Whois server;
public WhoisGUI(Whois whois) {
super("Whois");
this.server = whois;
Container pane = this.getContentPane();
// whois.internic.net assumes a monospaced font, 72 columns across
Font f = new Font("Monospaced", Font.PLAIN, 12);
names.setFont(f);
names.setEditable(false);
JPanel centerPanel = new JPanel();
centerPanel.setLayout(new GridLayout(1, 1, 10, 10));
JScrollPane jsp = new JScrollPane(names);
centerPanel.add(jsp);
pane.add("Center", centerPanel);
// You don't want the buttons in the south and north
// to fill the entire sections so add Panels there
// and use FlowLayouts in the Panel
JPanel northPanel = new JPanel();
JPanel northPanelTop = new JPanel();
northPanelTop.setLayout(new FlowLayout(FlowLayout.LEFT));
northPanelTop.add(new JLabel("Whois: "));
northPanelTop.add("North", searchString);
northPanelTop.add(exactMatch);
northPanelTop.add(findButton);
northPanel.setLayout(new BorderLayout(2,1));
northPanel.add("North", northPanelTop);
JPanel northPanelBottom = new JPanel();
northPanelBottom.setLayout(new GridLayout(1,3,5,5));
northPanelBottom.add(initRecordType());
northPanelBottom.add(initSearchFields());
northPanelBottom.add(initServerChoice());
northPanel.add("Center", northPanelBottom);
pane.add("North", northPanel);
ActionListener al = new LookupNames();
findButton.addActionListener(al);
searchString.addActionListener(al);
}
private JPanel initRecordType() {
JPanel p = new JPanel();
p.setLayout(new GridLayout(6, 2, 5, 2));
p.add(new JLabel("Search for:"));
p.add(new JLabel(""));
JRadioButton any = new JRadioButton("Any", true);
any.setActionCommand("Any");
searchFor.add(any);
p.add(any);
p.add(this.makeRadioButton("Network"));
p.add(this.makeRadioButton("Person"));
p.add(this.makeRadioButton("Host"));
p.add(this.makeRadioButton("Domain"));
p.add(this.makeRadioButton("Organization"));
p.add(this.makeRadioButton("Group"));
p.add(this.makeRadioButton("Gateway"));
p.add(this.makeRadioButton("ASN"));
return p;
}
private JRadioButton makeRadioButton(String label) {
JRadioButton button = new JRadioButton(label, false);
button.setActionCommand(label);
searchFor.add(button);
return button;
}
private JRadioButton makeSearchInRadioButton(String label) {
JRadioButton button = new JRadioButton(label, false);
button.setActionCommand(label);
searchIn.add(button);
return button;
}
private JPanel initSearchFields() {
JPanel p = new JPanel();
p.setLayout(new GridLayout(6, 1, 5, 2));
p.add(new JLabel("Search In: "));
JRadioButton all = new JRadioButton("All", true);
all.setActionCommand("All");
searchIn.add(all);
p.add(all);
p.add(this.makeSearchInRadioButton("Name"));
p.add(this.makeSearchInRadioButton("Mailbox"));
p.add(this.makeSearchInRadioButton("Handle"));
return p;
}
private JPanel initServerChoice() {
JPanel p = new JPanel();
p.setLayout(new GridLayout(6, 1, 5, 2));
p.add(new JLabel("Search At: "));
chosenServer.setText(server.getHost().getHostName());
p.add(chosenServer);
chosenServer.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent evt) {
try {
InetAddress newHost
= InetAddress.getByName(chosenServer.getText());
Whois newServer = new Whois(newHost);
server = newServer;
}
catch (Exception e) {
// should use an error dialog here, but that
// doesn't teach much about networking
chosenServer.setText(server.getHost().getHostName());
}
}
} );
return p;
}
class LookupNames implements ActionListener {
public void actionPerformed(ActionEvent evt) {
Whois.SearchIn group = Whois.SearchIn.ALL;
Whois.SearchFor category = Whois.SearchFor.ANY;
String searchForLabel = searchFor.getSelection().getActionCommand();
String searchInLabel = searchIn.getSelection().getActionCommand();
if (searchInLabel.equals("Name")) group = Whois.SearchIn.NAME;
else if (searchInLabel.equals("Mailbox")) {
group = Whois.SearchIn.MAILBOX;
}
else if (searchInLabel.equals("Handle")) {
group = Whois.SearchIn.HANDLE;
}
if (searchForLabel.equals("Network")) {
category = Whois.SearchFor.NETWORK;
}
else if (searchForLabel.equals("Person")) {
category = Whois.SearchFor.PERSON;
}
else if (searchForLabel.equals("Host")) {
category = Whois.SearchFor.HOST;
}
else if (searchForLabel.equals("Domain")) {
category = Whois.SearchFor.DOMAIN;
}
else if (searchForLabel.equals("Organization")) {
category = Whois.SearchFor.ORGANIZATION;
}
else if (searchForLabel.equals("Group")) {
category = Whois.SearchFor.GROUP;
}
else if (searchForLabel.equals("Gateway")) {
category = Whois.SearchFor.GATEWAY;
}
else if (searchForLabel.equals("ASN")) {
category = Whois.SearchFor.ASN;
}
try {
names.setText("");
String result = server.lookUpNames(searchString.getText(),
category, group, exactMatch.isSelected());
names.setText(result);
}
catch (IOException e) {
names.setText("Lookup failed due to " + e);
}
}
}
public static void main(String[] args) {
try {
Whois server = new Whois();
WhoisGUI a = new WhoisGUI(server);
a.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
a.pack();
a.show();
}
catch (UnknownHostException e) {
System.err.println("Error: Could not locate default host "
+ Whois.DEFAULT_HOST);
System.err.println("Check to make sure you're connected to the"
+ " Internet and that DNS is funtioning");
System.err.println("Usage: java WhoisGUI");
return;
}
}
} |