import java.applet.Applet; import java.awt.*; import java.net.URL; import java.net.MalformedURLException; import java.util.Vector; import java.util.Enumeration; import java.util.Hashtable; import com.extropia.net.JavaCGIBridge; import com.extropia.net.JavaCGIBridgeExtension; import com.extropia.net.JavaCGIBridgeTimeOutException; public class Example8Applet extends Applet implements Runnable { private Example8ProgressPanel _progressPanel = new Example8ProgressPanel(100); private Button _callCGIButton = new Button("Call CGI Script"); private JavaCGIBridgeExtension _threadJCBE; private String _cgiURL = null; public void init() { this.setBackground(Color.white); setLayout(new BorderLayout()); add("Center", _progressPanel); add("South", _callCGIButton); getSetupFile(); } // end of init method public boolean handleEvent(Event e) { if (e.id == Event.ACTION_EVENT && e.target == _callCGIButton) { clicked_cgiButton(); } return super.handleEvent(e); } public void run() { int count = 0; Vector v; try { while (null != (v = _threadJCBE.fetchNextRecord())) { count++; _progressPanel.setCurrentRecord(count); // System.out.println(v.lastElement()); try { Thread.sleep(10); } catch (InterruptedException e) {} } } catch (JavaCGIBridgeTimeOutException e) { System.out.println("JavaCGIBridgeTimeOutException Thrown!!"); } } // run method private void clicked_cgiButton() { JavaCGIBridgeExtension jcbe = new JavaCGIBridgeExtension(); URL u = null; try { if (_cgiURL.startsWith("http")) { u = new URL(_cgiURL); } else { u = new URL(getDocumentBase(), _cgiURL); } jcbe.callOneWay(u, true);// true for fetching data // We call up a new thread because the repaints won't // occur if we are still stuck inside the AWT thread // processing the clicked event! _threadJCBE = jcbe; Thread t = new Thread(this); t.start(); // Note, since this is an asynchronous call to the // JavaCGIBridge, we can't catch JavaCGIBridgeTimeOutExceptions } catch (MalformedURLException e) { System.out.println("Malformed URL Exception:" + e); } } private void getSetupFile() { JavaCGIBridge jcb = new JavaCGIBridge(); // Since we are reading a setup file, we just want // to make it into a variable=value format instead of the // funky ~|~ seperator that is the default. This makes the // setup file easier to read at the risk of making sure a // particular variable does not have an equal symbol in its // value. jcb.setFieldSeparator("="); jcb.setRecordSeparator("\n"); Vector returnedDataSet = null; Hashtable keyValuePairs = null; try { URL u = new URL(getDocumentBase(), "setup.html"); returnedDataSet = jcb.getParsedData(u); if (returnedDataSet == null) { System.out.println("returned data set is null for some reason, probably a missing setup file"); } // We call the function below since the vectors that // are returned contain setup information in the form of // the first field being a key (variable) and the second // field being a value to the key keyValuePairs = jcb.getKeyValuePairs(returnedDataSet); } catch (MalformedURLException e) { System.out.println("Malformed URL Exception:" + e); } catch (JavaCGIBridgeTimeOutException e) { System.out.println("JavaCGIBridge Timed Out:" + e); } _cgiURL = (String)keyValuePairs.get("cgiURL"); } // end of getSetupFile } // end of ExampleApplet