| /******************************************************************************* |
| * Copyright (c) 2003, 2005 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - Initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.ui.internal.browser; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.eclipse.core.runtime.IExtensionRegistry; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.ui.plugin.AbstractUIPlugin; |
| import org.osgi.framework.BundleContext; |
| /** |
| * The main web browser plugin class. |
| */ |
| public class WebBrowserUIPlugin extends AbstractUIPlugin { |
| // Web browser plugin id |
| public static final String PLUGIN_ID = "org.eclipse.ui.browser"; //$NON-NLS-1$ |
| |
| // singleton instance of this class |
| private static WebBrowserUIPlugin singleton; |
| |
| // cached copy of all browsers |
| private static List browsers; |
| |
| /** |
| * Create the WebBrowserUIPlugin |
| */ |
| public WebBrowserUIPlugin() { |
| super(); |
| singleton = this; |
| } |
| |
| /** |
| * Returns the singleton instance of this plugin. |
| * |
| * @return org.eclipse.ui.internal.browser.WebBrowserPlugin |
| */ |
| public static WebBrowserUIPlugin getInstance() { |
| return singleton; |
| } |
| |
| /** |
| * Shuts down this plug-in and saves all plug-in state. |
| * |
| * @exception Exception |
| */ |
| public void stop(BundleContext context) throws Exception { |
| super.stop(context); |
| BrowserManager.safeDispose(); |
| } |
| |
| /** |
| * Returns an array of all known browers. |
| * <p> |
| * A new array is returned on each call, so clients may store or modify the result. |
| * </p> |
| * |
| * @return a possibly-empty array of browser instances {@link IClient} |
| */ |
| public static IBrowserExt[] getBrowsers() { |
| if (browsers == null) |
| loadBrowsers(); |
| IBrowserExt[] c = new IBrowserExt[browsers.size()]; |
| browsers.toArray(c); |
| return c; |
| } |
| |
| public static IBrowserExt findBrowsers(String executable) { |
| IBrowserExt[] browsers2 = getBrowsers(); |
| if (browsers2 == null || executable == null) |
| return null; |
| |
| int ind1 = executable.lastIndexOf("/"); //$NON-NLS-1$ |
| int ind2 = executable.lastIndexOf("\\"); //$NON-NLS-1$ |
| if (ind2 > ind1) |
| ind1 = ind2; |
| executable = executable.substring(ind1 + 1); |
| |
| String os = Platform.getOS(); |
| int size = browsers2.length; |
| for (int i = 0; i < size; i++) { |
| if (browsers2[i].getOS().toLowerCase().indexOf(os) != -1) { |
| if (browsers2[i].isAvailable()) { |
| String executable2 = browsers2[i].getExecutable(); |
| if (executable.startsWith(executable2)) |
| return browsers2[i]; |
| } |
| } |
| } |
| return null; |
| } |
| |
| /** |
| * Load the browsers extension point. |
| */ |
| private static synchronized void loadBrowsers() { |
| if (browsers != null) |
| return; |
| Trace.trace(Trace.CONFIG, "->- Loading .browsers extension point ->-"); //$NON-NLS-1$ |
| IExtensionRegistry registry = Platform.getExtensionRegistry(); |
| IConfigurationElement[] cf = registry.getConfigurationElementsFor(PLUGIN_ID, "browsers"); //$NON-NLS-1$ |
| |
| int size = cf.length; |
| browsers = new ArrayList(size); |
| for (int i = 0; i < size; i++) { |
| try { |
| browsers.add(new BrowserExt(cf[i])); |
| Trace.trace(Trace.CONFIG, " Loaded browser: " + cf[i].getAttribute("id")); //$NON-NLS-1$ //$NON-NLS-2$ |
| } catch (Throwable t) { |
| Trace.trace(Trace.SEVERE, " Could not load browser: " + cf[i].getAttribute("id"), t); //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| } |
| Trace.trace(Trace.CONFIG, "-<- Done loading .browsers extension point -<-"); //$NON-NLS-1$ |
| } |
| |
| /** |
| * Logs an Error message with an exception. Note that the message should |
| * already be localized to proper locale. ie: Resources.getString() should |
| * already have been called |
| */ |
| public static synchronized void logError(String message, Throwable ex) { |
| if (message == null) |
| message = ""; //$NON-NLS-1$ |
| Status errorStatus = new Status(IStatus.ERROR, PLUGIN_ID, IStatus.OK, |
| message, ex); |
| WebBrowserUIPlugin.getInstance().getLog().log(errorStatus); |
| } |
| |
| /** |
| * Logs a Warning message with an exception. Note that the message should |
| * already be localized to proper local. ie: Resources.getString() should |
| * already have been called |
| */ |
| /*public static synchronized void logWarning(String message) { |
| if (WebBrowserUIPlugin.DEBUG) { |
| if (message == null) |
| message = ""; //$NON-NLS-1$ |
| Status warningStatus = new Status(IStatus.WARNING, PLUGIN_ID, |
| IStatus.OK, message, null); |
| WebBrowserUIPlugin.getInstance().getLog().log(warningStatus); |
| } |
| }*/ |
| } |