import java.io.IOException; 

/** 
 * A simple, static class to display a URL in the system browser.
 * 
 * Under Unix, the system browser is hard-coded to be 'netscape'. 
 * Netscape must be in your PATH for this to work. This has been 
 * tested with the following platforms: AIX, HP-UX and Solaris.
 * 
 * Under Windows, this will bring up the default browser under windows, 
 * usually either Netscape or Microsoft IE. The default browser is 
 * determined by the OS. This has been tested under Windows 95/98/NT.
 * 
 * Examples:
 * BrowserControl.displayURL("http://www.javaworld.com") 
 * BrowserControl.displayURL("file://c:\\docs\\index.html") 
 * BrowserContorl.displayURL("file:///user/joe/index.html"); 
 * 
 * Note - you must include the url type -- either "http://" or 
 * "file://". 
 */ 
public class BrowserControl 
{ 
	// Used to identify the windows platform. 
	private static final String WIN_ID = "Windows"; 

	// The default system browser under windows. 
	private static final String WIN_PATH = "rundll32"; 

	// The flag to display a url. 
	private static final String WIN_FLAG = "url.dll,FileProtocolHandler"; 

	// The default browser under unix. 
	private static final String UNIX_PATH = "netscape"; 

	// The flag to display a url. 
	private static final String UNIX_FLAG = "-remote openURL"; 
/** 
 * Display a file in the system browser. If you want to display a 
 * file, you must include the absolute path name. 
 * 
 * @param url the file's url (the url must start with either "http://" or 
 * "file://"). 
 */
public static void displayURL(String url) {
	boolean windows = isWindowsPlatform();
	String cmd = null;
	try {
		if (windows) {
			// cmd = 'rundll32 url.dll,FileProtocolHandler http://...' 
			cmd = WIN_PATH + " " + WIN_FLAG + " " + url;
			Process p = Runtime.getRuntime().exec(cmd);
		} else {
			// Under Unix, Netscape has to be running for the "-remote" 
			// command to work. So, we try sending the command and 
			// check for an exit value. If the exit command is 0, 
			// it worked, otherwise we need to start the browser. 

			// cmd = 'netscape -remote openURL(http://www.javaworld.com)' 
			cmd = UNIX_PATH + " " + UNIX_FLAG + "(" + url + ")";
			Process p = Runtime.getRuntime().exec(cmd);
			try {
				// wait for exit code -- if it's 0, command worked, 
				// otherwise we need to start the browser up. 
				int exitCode = p.waitFor();
				if (exitCode != 0) {
					// Command failed, start up the browser 

					// cmd = 'netscape http://www.javaworld.com' 
					cmd = UNIX_PATH + " " + url;
					p = Runtime.getRuntime().exec(cmd);
				}
			} catch (InterruptedException x) {
				System.err.println("Error bringing up browser, cmd='" + cmd + "'");
				System.err.println("Caught: " + x);
			}
		}
	} catch (IOException x) {
		// couldn't exec browser 
		System.err.println("Could not invoke browser, command=" + cmd);
		System.err.println("Caught: " + x);
	}
}
/** 
 * Try to determine whether this application is running under Windows 
 * or some other platform by examing the "os.name" property. 
 * 
 * @return true if this application is running under a Windows OS 
 */
public static boolean isWindowsPlatform() {
	String os = System.getProperty("os.name");
	if (os != null && os.startsWith(WIN_ID))
		return true;
	else
		return false;
}
	/** 
	 * Simple example. 
	 */ 
	public static void main(String[] args) 
	{ 
		//displayURL("http://www.lycos.fr/cgi-bin/pursuit?matchmode=and&lang=fr&mtemp=main.sites&query=\"depeche+midi\"&cat=fr");
		String s = java.io.File.separator;
		displayURL("file://c:" + s + "jdk1.2" + s + "docs" + s + "api" + s + "index.html"); 
	}
}
