VASSAL.tools.BrowserSupport.java Source code

Java tutorial

Introduction

Here is the source code for VASSAL.tools.BrowserSupport.java

Source

/*
 * $Id$
 *
 * Copyright (c) 2000-2011 by Rodney Kinney, Joel Uckelman
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License (LGPL) as published by the Free Software Foundation.
 *
 * This library 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
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, copies are available
 * at http://www.opensource.org.
 */
package VASSAL.tools;

import java.awt.Desktop;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;

import edu.stanford.ejalbert.BrowserLauncher;
import edu.stanford.ejalbert.exception.BrowserLaunchingInitializingException;
import edu.stanford.ejalbert.exception.UnsupportedOperatingSystemException;

import org.apache.commons.lang.SystemUtils;

// FIXME: Remove BrowserLauncher when we move to Java 1.6+.

/**
 * Utility class for displaying an external browser window.
 *
 * @author rkinney
 */
public class BrowserSupport {

    private static final BrowserLauncher browserLauncher;

    static {
        BrowserLauncher bl = null;

        if (SystemUtils.IS_JAVA_1_5) {
            try {
                bl = new BrowserLauncher();
            } catch (BrowserLaunchingInitializingException e) {
                ErrorDialog.bug(e);
            } catch (UnsupportedOperatingSystemException e) {
                ErrorDialog.bug(e);
            }
        }

        browserLauncher = bl;
    }

    public static void openURL(String url) {
        //
        // This method is irritatingly complex, because:
        // * There is no java.awt.Desktop in Java 1.5.
        // * java.awt.Desktop seems not to work sometimes on Windows.
        // * BrowserLauncher failes sometimes on Linux, and isn't supported
        //   anymore.
        //
        if (!SystemUtils.IS_JAVA_1_5) {
            if (Desktop.isDesktopSupported()) {
                final Desktop desktop = Desktop.getDesktop();
                if (desktop.isSupported(Desktop.Action.BROWSE)) {
                    try {
                        desktop.browse(new URI(url));
                        return;
                    } catch (IOException e) {
                        // We ignore this on Windows, because Desktop seems flaky
                        if (!SystemUtils.IS_OS_WINDOWS) {
                            ReadErrorDialog.error(e, url);
                            return;
                        }
                    } catch (IllegalArgumentException e) {
                        ErrorDialog.bug(e);
                        return;
                    } catch (URISyntaxException e) {
                        ErrorDialog.bug(e);
                        return;
                    }
                }
            }
        }

        if (browserLauncher != null) {
            browserLauncher.openURLinBrowser(url);
        } else {
            ErrorDialog.show("BrowserSupport.unable_to_launch", url);
        }
    }

    private static final HyperlinkListener listener = new HyperlinkListener() {
        public void hyperlinkUpdate(HyperlinkEvent e) {
            if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
                openURL(e.getURL().toString());
            }
        }
    };

    public static HyperlinkListener getListener() {
        return listener;
    }
}