// Path: src/net/sf/wraplog/AbstractLogger.java
// public abstract class AbstractLogger {
// 
//     private int level = Level.DEBUG;
// 
//     private int loggedMessageCount;
// 
//     protected void checkLevel(int logLevel, String name) {
//         String actualName;
//         if (name == null) {
//             actualName = "level";
//         }
//         else {
//             actualName = name;
//         }
//         if ((logLevel < Level.DEBUG) || (logLevel > Level.ERROR)) {
//             throw new IllegalArgumentException(actualName
//                                                +
//                     " must be one of: Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR");
//         }
//     }
// 
//     public void debug(String message) {
//         debug(message, null);
//     }
// 
//     public void debug(String message, Throwable error) {
//         log(Level.DEBUG, message, error);
//     }
// 
//     public void error(String message) {
//         error(message, null);
//     }
// 
//     public void error(String message, Throwable error) {
//         log(Level.ERROR, message, error);
//     }
// 
//     public int getLevel() {
//         return level;
//     }
// 
//     /** Count of how many messages have been logged. */
//     public int getLoggedMessageCount() {
//         return loggedMessageCount;
//     }
// 
//     public void info(String message) {
//         info(message, null);
//     }
// 
//     public void info(String message, Throwable error) {
//         log(Level.INFO, message, error);
//     }
// 
//     public boolean isEnabled(int logLevel) {
//         checkLevel(level, null);
//         return logLevel >= level;
//     }
// 
//     /**
//      * Logs a message and optional error details.
//      *
//      * @param logLevel one of: Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR
//      * @param message the actual message; this will never be <code>null</code>
//      * @param error an error that is related to the message; unless <code>null</code>, the name and stack trace of the error are logged
//      */
//     protected abstract void reallyLog(int logLevel, String message,
//                                       Throwable error)
//             throws Exception;
// 
//     /**
//      * Provided that <code>getLevel()</code> accepts it, log
//      * <code>message</code>. Otherwise, do nothing.
//      */
//     public void log(int logLevel, String message) {
//         log(logLevel, message, null);
//     }
// 
//     /**
//      * Provided that <code>getLevel()</code> accepts it, log
//      * <code>message</code> and <code>error</code>. Otherwise, do nothing.
//      */
//     public void log(int logLevel, String message, Throwable error) {
//         if (isEnabled(logLevel)) {
//             try {
//                 reallyLog(logLevel, message, error);
//                 loggedMessageCount += 1;
//             }
//             catch (Exception error2) {
//                 throw new LoggingException("cannot log message: " + message,
//                                            error2);
//             }
//         }
//     }
// 
//     public void setLevel(int newLevel) {
//         if ((level >= Level.DEBUG) || (level <= Level.ERROR)) {
//             level = newLevel;
//         }
//         else {
//             throw new IllegalArgumentException(
//                     "newLevel must be one of: Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR");
//         }
//     }
// 
//     public void warn(String message) {
//         warn(message, null);
//     }
// 
//     public boolean isDebugEnabled() {
//         return isEnabled(Level.DEBUG);
//     }
// 
//     public boolean isInfoEnabled() {
//         return isEnabled(Level.INFO);
//     }
// 
//     public boolean isWarnEnabled() {
//         return isEnabled(Level.WARN);
//     }
// 
//     public boolean isErrorEnabled() {
//         return isEnabled(Level.ERROR);
//     }
// 
//     public void warn(String message, Throwable error) {
//         log(Level.WARN, message, error);
//     }
// }
// 
// Path: src/edu/stanford/ejalbert/launching/utils/LaunchingUtils.java
// public class LaunchingUtils {
//     private static final String REPLACE_BROWSER = "<browser>";
//     private static final String REPLACE_URL = "<url>";
// 
//     public static String replaceArgs(String commands,
//                                      String browserArg,
//                                      String urlArg) {
//         // replace <browser> placeholder if browserArg passed
//         if(browserArg != null) {
//             commands = commands.replaceAll(REPLACE_BROWSER, browserArg);
//         }
//         // replace <url> placeholder if urlArg passed
//         if(urlArg != null) {
//             int urlPos = commands.indexOf(REPLACE_URL);
//             StringBuffer buf = new StringBuffer();
//             while (urlPos > 0) {
//                 buf.append(commands.substring(0, urlPos));
//                 buf.append(urlArg);
//                 buf.append(commands.substring(urlPos + REPLACE_URL.length()));
//                 commands = buf.toString();
//                 urlPos = commands.indexOf(REPLACE_URL);
//                 buf.setLength(0);
//             }
//         }
//         return commands;
//     }
// }


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import net.sf.wraplog.AbstractLogger;
import edu.stanford.ejalbert.launching.utils.LaunchingUtils;

    /**
     * Returns the command line arguments for starting a new browser
     * instance.
     *
     * @param urlString String
     * @return String[]
     */
    public String[] getArgsForStartingBrowser(String urlString) {
        return getCommandLineArgs(argsForStartBrowser, urlString);
    }

    public String[] getArgsForForcingNewBrowserWindow(String urlString) {
        return getCommandLineArgs(argsForForcedBrowserWindow, urlString);
    }

    /**
     * Returns true if the browser is available, ie which command finds it.
     *
     * @param logger AbstractLogger
     * @return boolean
     */
    public boolean isBrowserAvailable(AbstractLogger logger) {
        boolean isAvailable = false;
        try {
            Process process = Runtime.getRuntime().exec(new String[] {"which",
                    browserArgName});
            InputStream errStream = process.getErrorStream();
            InputStream inStream = process.getInputStream();
            BufferedReader errIn
// Path: src/net/sf/wraplog/AbstractLogger.java
// public abstract class AbstractLogger {
// 
//     private int level = Level.DEBUG;
// 
//     private int loggedMessageCount;
// 
//     protected void checkLevel(int logLevel, String name) {
//         String actualName;
//         if (name == null) {
//             actualName = "level";
//         }
//         else {
//             actualName = name;
//         }
//         if ((logLevel < Level.DEBUG) || (logLevel > Level.ERROR)) {
//             throw new IllegalArgumentException(actualName
//                                                +
//                     " must be one of: Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR");
//         }
//     }
// 
//     public void debug(String message) {
//         debug(message, null);
//     }
// 
//     public void debug(String message, Throwable error) {
//         log(Level.DEBUG, message, error);
//     }
// 
//     public void error(String message) {
//         error(message, null);
//     }
// 
//     public void error(String message, Throwable error) {
//         log(Level.ERROR, message, error);
//     }
// 
//     public int getLevel() {
//         return level;
//     }
// 
//     /** Count of how many messages have been logged. */
//     public int getLoggedMessageCount() {
//         return loggedMessageCount;
//     }
// 
//     public void info(String message) {
//         info(message, null);
//     }
// 
//     public void info(String message, Throwable error) {
//         log(Level.INFO, message, error);
//     }
// 
//     public boolean isEnabled(int logLevel) {
//         checkLevel(level, null);
//         return logLevel >= level;
//     }
// 
//     /**
//      * Logs a message and optional error details.
//      *
//      * @param logLevel one of: Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR
//      * @param message the actual message; this will never be <code>null</code>
//      * @param error an error that is related to the message; unless <code>null</code>, the name and stack trace of the error are logged
//      */
//     protected abstract void reallyLog(int logLevel, String message,
//                                       Throwable error)
//             throws Exception;
// 
//     /**
//      * Provided that <code>getLevel()</code> accepts it, log
//      * <code>message</code>. Otherwise, do nothing.
//      */
//     public void log(int logLevel, String message) {
//         log(logLevel, message, null);
//     }
// 
//     /**
//      * Provided that <code>getLevel()</code> accepts it, log
//      * <code>message</code> and <code>error</code>. Otherwise, do nothing.
//      */
//     public void log(int logLevel, String message, Throwable error) {
//         if (isEnabled(logLevel)) {
//             try {
//                 reallyLog(logLevel, message, error);
//                 loggedMessageCount += 1;
//             }
//             catch (Exception error2) {
//                 throw new LoggingException("cannot log message: " + message,
//                                            error2);
//             }
//         }
//     }
// 
//     public void setLevel(int newLevel) {
//         if ((level >= Level.DEBUG) || (level <= Level.ERROR)) {
//             level = newLevel;
//         }
//         else {
//             throw new IllegalArgumentException(
//                     "newLevel must be one of: Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR");
//         }
//     }
// 
//     public void warn(String message) {
//         warn(message, null);
//     }
// 
//     public boolean isDebugEnabled() {
//         return isEnabled(Level.DEBUG);
//     }
// 
//     public boolean isInfoEnabled() {
//         return isEnabled(Level.INFO);
//     }
// 
//     public boolean isWarnEnabled() {
//         return isEnabled(Level.WARN);
//     }
// 
//     public boolean isErrorEnabled() {
//         return isEnabled(Level.ERROR);
//     }
// 
//     public void warn(String message, Throwable error) {
//         log(Level.WARN, message, error);
//     }
// }
// 
// Path: src/edu/stanford/ejalbert/launching/utils/LaunchingUtils.java
// public class LaunchingUtils {
//     private static final String REPLACE_BROWSER = "<browser>";
//     private static final String REPLACE_URL = "<url>";
// 
//     public static String replaceArgs(String commands,
//                                      String browserArg,
//                                      String urlArg) {
//         // replace <browser> placeholder if browserArg passed
//         if(browserArg != null) {
//             commands = commands.replaceAll(REPLACE_BROWSER, browserArg);
//         }
//         // replace <url> placeholder if urlArg passed
//         if(urlArg != null) {
//             int urlPos = commands.indexOf(REPLACE_URL);
//             StringBuffer buf = new StringBuffer();
//             while (urlPos > 0) {
//                 buf.append(commands.substring(0, urlPos));
//                 buf.append(urlArg);
//                 buf.append(commands.substring(urlPos + REPLACE_URL.length()));
//                 commands = buf.toString();
//                 urlPos = commands.indexOf(REPLACE_URL);
//                 buf.setLength(0);
//             }
//         }
//         return commands;
//     }
// }


// Path: src/edu/stanford/ejalbert/launching/misc/StandardUnixBrowser.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import net.sf.wraplog.AbstractLogger;
import edu.stanford.ejalbert.launching.utils.LaunchingUtils;


    /**
     * Returns the command line arguments for starting a new browser
     * instance.
     *
     * @param urlString String
     * @return String[]
     */
    public String[] getArgsForStartingBrowser(String urlString) {
        return getCommandLineArgs(argsForStartBrowser, urlString);
    }

    public String[] getArgsForForcingNewBrowserWindow(String urlString) {
        return getCommandLineArgs(argsForForcedBrowserWindow, urlString);
    }

    /**
     * Returns true if the browser is available, ie which command finds it.
     *
     * @param logger AbstractLogger
     * @return boolean
     */
    public boolean isBrowserAvailable(AbstractLogger logger) {
        boolean isAvailable = false;
        try {
            Process process = Runtime.getRuntime().exec(new String[] {"which",
                    browserArgName});
            InputStream errStream = process.getErrorStream();
            InputStream inStream = process.getInputStream();
            BufferedReader errIn
                    = new BufferedReader(new InputStreamReader(errStream));