/* /* * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code 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 * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.tools.visualvm.core.ui; import java.awt.Desktop; import java.io.File; import java.io.IOException; import java.net.URI; /** * Support for java.awt.Desktop * * @author Jiri Sedlacek */ public final class DesktopUtils { private static final Object allowDesktopOpen = System.getProperty("com.sun.tools.visualvm.core.ui.DesktopUtils.allowDesktopOpen"); // NOI18N private static boolean desktopSupported; private static boolean desktopSupportedInitialized = false; private static boolean browseAvailable; private static boolean browseAvailableInitialized = false; private static boolean openAvailable; private static boolean openAvailableInitialized = false; /** * Returns true if java.awt.Desktop is supported on host platform. * * @return true if java.awt.Desktop is supported on host platform, false otherwise. */ public synchronized static boolean isDesktopSupported() { if (!desktopSupportedInitialized) { desktopSupported = Desktop.isDesktopSupported(); desktopSupportedInitialized = true; } return desktopSupported; } // NOTE: should always return true if in NetBeans IDE (uses its own user-customizable mechanism) /** * Returns true if opening a www address in a web browser is supported on host platform. * * @return true if opening a www address in a web browser is supported on host platform, false otherwise. */ public synchronized static boolean isBrowseAvailable() { if (!browseAvailableInitialized) { if (!isDesktopSupported()) browseAvailable = false; else browseAvailable = Desktop.getDesktop().isSupported(Desktop.Action.BROWSE); browseAvailableInitialized = true; } return browseAvailable; } /** * Returns true if opening a file in native displayer is supported on host platform. * * @return true if opening a file in native displayer is supported on host platform, false otherwise. */ public synchronized static boolean isOpenAvailable() { if (!openAvailableInitialized) { // NOTE: Open is disabled by default, crashes the VM at least on Windows if ("true".equals(allowDesktopOpen) && isDesktopSupported()) openAvailable = Desktop.getDesktop().isSupported(Desktop.Action.OPEN); // NOI18N else openAvailable = false; openAvailableInitialized = true; } return openAvailable; } // NOTE: If in NetBeans IDE use HtmlBrowser.URLDisplayer.showURL(URL u) /** * Performs Desktop.getDesktop().browse(URI). * * @param uri URI to open. * @throws java.io.IOException */ public static void browse(URI uri) throws IOException { Desktop.getDesktop().browse(uri); } /** * Performs Desktop.getDesktop().open(File). * * @param file File to open. * @throws java.io.IOException */ public static void open(File file) throws IOException { Desktop.getDesktop().open(file); } }