/******************************************************************* * Copyright (c) 2006-2013, Cloudsmith Inc. * The code, documentation and other materials contained herein * are the sole and exclusive property of Cloudsmith Inc. and may * not be disclosed, used, modified, copied or distributed without * prior written consent or license from Cloudsmith Inc. ******************************************************************/ package org.eclipse.buckminster.generic.ui.actions; import org.eclipse.buckminster.generic.ui.GenericUiPlugin; import org.eclipse.buckminster.generic.ui.Messages; import org.eclipse.buckminster.generic.ui.utils.UiUtils; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.Viewer; import org.eclipse.osgi.util.NLS; import org.eclipse.ui.PartInitException; import org.eclipse.ui.browser.IWebBrowser; import org.eclipse.ui.browser.IWorkbenchBrowserSupport; /** * Opens an internal or external browser for a selected object that is adaptable * to IBrowseable, or to IBrowseableFeed if the boolean flag feed is true. * * @author Henrik Lindberg * */ public class ViewInBrowserAction extends AbstractAction { private IWorkbenchBrowserSupport browserSupport; private boolean internal; private boolean feed; /** * @see ViewInBrowserAction#ViewInBrowserAction(Viewer, boolean, String, * boolean) * @param viewer * @param internal */ public ViewInBrowserAction(Viewer viewer, boolean internal) { this(viewer, internal, null, false); } /** * Create a ViewInBrowserAction configured for a particular type of content. * * @param viewer * - the viewer where the action is performed * @param internal * - true if internal browser should be used (may still open in * external) * @param what * - a label for what is opened, can be null (e.g. "content", * "feed", "page"). * @param feed * - flag indicating that selected object is adapted to * IBrowseableFeed instead of IBrowseable */ public ViewInBrowserAction(Viewer viewer, boolean internal, String what, boolean feed) { super(viewer); this.browserSupport = UiUtils.getWorkbench().getBrowserSupport(); this.internal = internal; this.feed = feed; String txt = what != null ? NLS.bind(Messages.view_0_in_1_, what, (internal ? Messages.browser_internal : Messages.browser_external)) : NLS .bind(Messages.view_in_0_, (internal ? Messages.browser_internal : Messages.browser_external)); setText(txt); setToolTipText(txt); setImageDescriptor(feed ? GenericUiPlugin.getImageDescriptor("icons/rssfeed.png") //$NON-NLS-1$ : UiUtils.getImageDescriptor("file.html")); //$NON-NLS-1$ } @Override public void run() { IStructuredSelection selection = getStructuredSelection(); Object[] selected; if (selection == null || (selected = selection.toArray()).length < 1) { showMessage(Messages.show_in_browser, Messages.nothing_was_selected); return; } Object sel = selected[0]; IDescribedURL describedURL = null; if (sel instanceof IAdaptable) { if (feed) describedURL = ((IAdaptable) sel).getAdapter(IBrowseableFeed.class); else describedURL = ((IAdaptable) sel).getAdapter(IBrowseable.class); } if (describedURL == null) { showError(Messages.can_not_open_browser, Messages.no_valid_URL_for_selected_object); return; } IWebBrowser browser; try { browser = browserSupport.createBrowser(internal ? IWorkbenchBrowserSupport.AS_EDITOR : IWorkbenchBrowserSupport.AS_EXTERNAL, null, describedURL.getName(), describedURL.getTooltip()); browser.openURL(describedURL.getBrowseableURL()); } catch (PartInitException e) { e.printStackTrace(); } } }