/* * RomRaider Open-Source Tuning, Logging and Reflashing * Copyright (C) 2006-2012 RomRaider.com * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package com.romraider.net; import org.apache.log4j.Logger; import java.io.IOException; import java.lang.reflect.Method; import java.net.URI; public class BrowserControl { private static final Logger LOGGER = Logger.getLogger(BrowserControl.class); private BrowserControl() { throw new UnsupportedOperationException(); } public static void displayURL(String url) { try { Class<?> display = Class.forName("java.awt.Desktop"); Object getDesktopMethod = display.getDeclaredMethod("getDesktop").invoke(null); Method browseMethod = display.getDeclaredMethod("browse", java.net.URI.class); browseMethod.invoke(getDesktopMethod, new URI(url)); } catch (Exception e) { LOGGER.debug("Failed to display URL via java.awt.Desktop. Calling by OS depended method.", e); displayURLtraditional(url); } } private static void displayURLtraditional(String url) { boolean windows = isWindowsPlatform(); String cmd = null; try { if (windows) { // cmd = 'rundll32 url.dll,FileProtocolHandler http://...' cmd = WIN_PATH + " " + WIN_FLAG + " " + url; Runtime.getRuntime().exec(cmd); } else { cmd = UNIX_PATH + " " + UNIX_FLAG + "(" + url + ")"; Process p = Runtime.getRuntime().exec(cmd); try { int exitCode = p.waitFor(); if (exitCode != 0) { cmd = UNIX_PATH + " " + url; Runtime.getRuntime().exec(cmd); } } catch (InterruptedException x) { LOGGER.error("Error bringing up browser, command=" + cmd, x); } } } catch (IOException x) { // couldn't exec browser LOGGER.error("Could not invoke browser, command=" + cmd, x); } } public static boolean isWindowsPlatform() { String os = System.getProperty("os.name"); if (os != null && os.startsWith(WIN_ID)) { return true; } else { return false; } } private static final String WIN_ID = "Windows"; private static final String WIN_PATH = "rundll32"; private static final String WIN_FLAG = "url.dll,FileProtocolHandler"; private static final String UNIX_PATH = "netscape"; private static final String UNIX_FLAG = "-remote openURL"; }