// This appears in Core Web Programming from // Prentice Hall Publishers, and may be freely used // or adapted. 1997 Marty Hall, hall@apl.jhu.edu. // Modified by Nong Lin, Nov. 1999 import java.awt.*; import java.util.*; public class searchClient extends QuittableFrame implements Runnable, Interruptable { public static void main(String[] args) { searchClient wc = new searchClient("Search Client"); wc.resize(600, 700); wc.show(); } private LabeledTextField hostField, portField, requestLineField; private TextArea resultArea, summaryArea; private String host, requestLine; private int port; private summaryResult summaryresult; private Button submitButton, interruptButton; private boolean interrupted = false; public searchClient(String title) { super(title); setBackground(Color.lightGray); setLayout(new BorderLayout(5, 30)); int fontSize = 14; Font labelFont = new Font("TimesRoman", Font.BOLD, fontSize); Font headingFont = new Font("Helvetica", Font.BOLD, fontSize+4); Font textFont = new Font("Courier", Font.BOLD, fontSize-2); // for data input Panel inputPanel = new Panel(); inputPanel.setLayout(new BorderLayout()); Panel labelPanel = new Panel(); labelPanel.setLayout(new GridLayout(3,1)); hostField = new LabeledTextField("Host:", labelFont, 30, textFont); portField = new LabeledTextField("Port:", labelFont, "80", 5, textFont); requestLineField = new LabeledTextField("Request Line:", labelFont, "GET / HTTP/1.0", 50, textFont); labelPanel.add(hostField); labelPanel.add(portField); labelPanel.add(requestLineField); inputPanel.add("North", labelPanel); Panel buttonPanel = new Panel(); submitButton = new Button("Submit Request"); submitButton.setFont(labelFont); buttonPanel.add(submitButton); inputPanel.add("South", buttonPanel); //? add("North", inputPanel); //labelPanel.add(summaryLabel); Panel summaryPanel = new Panel(); summaryPanel.setLayout(new BorderLayout()); Label summaryLabel = new Label("Summary Result:"); summaryLabel.setFont(labelFont); summaryPanel.add("North", summaryLabel); summaryArea = new TextArea(5,80); summaryArea.setFont(textFont); summaryPanel.add("South", summaryArea); add("Center", summaryPanel); Panel resultPanel = new Panel(); resultPanel.setLayout(new BorderLayout()); Label resultLabel = new Label("Results", Label.CENTER); resultLabel.setFont(headingFont); resultPanel.add("North", resultLabel); resultArea = new TextArea(); resultArea.setFont(textFont); resultPanel.add("Center", resultArea); Panel interruptPanel = new Panel(); interruptButton = new Button("Interrupt Download"); interruptButton.setFont(labelFont); interruptPanel.add(interruptButton); resultPanel.add("South", interruptPanel); add("South", resultPanel); } public boolean action(Event event, Object object) { if (event.target == submitButton) { Thread downloader = new Thread(this); System.out.println("Client action start"); downloader.start(); return(true); } else if (event.target == interruptButton) { interrupted = true; return(true); } else return(false); } //System.out.println("searchClient before run"); public void run() { interrupted = false; System.out.println("searchClient before run"); if (checkArgs()) new HttpClient(host, port, requestLine, summaryArea, resultArea, this); System.out.println("searchClient run"); } public boolean interrupted() { return(interrupted); } private boolean checkArgs() { host = hostField.getTextField().getText(); System.out.println("check host:" + host); if (host.length() == 0) { report("Missing hostname"); return(false); } String portString = portField.getTextField().getText(); if (portString.length() == 0) { report("Missing port number"); return(false); } try { port = Integer.parseInt(portString); System.out.println("check port"); } catch(NumberFormatException nfe) { report("Illegal port number: " + portString); return(false); } requestLine = requestLineField.getTextField().getText(); System.out.println("check requestLine: " + requestLine); if (requestLine.length() == 0) { report("Missing request line"); return(false); } return(true); } private void report(String s) { resultArea.setText(s); }