/* * Copyright 2010-2012 Amazon Technologies, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://aws.amazon.com/apache2.0 * * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES * OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and * limitations under the License. */ package com.amazonaws.eclipse.core.ui.overview; import java.net.URL; import org.eclipse.jface.preference.PreferenceDialog; import org.eclipse.swt.program.Program; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.browser.IWorkbenchBrowserSupport; import org.eclipse.ui.dialogs.PreferencesUtil; import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; import com.amazonaws.eclipse.core.AwsToolkitCore; /** * Generic hyperlink handler that knows how to handle basic link href actions. * <p> * <b>HTTP/HTTPS web links</b> - Hyperlink hrefs starting with "http" will be * treated as a web URL and opened in an external web browser. * <p> * <b>Eclipse preference page links</b> - Hyperlink hrefs starting with * "preference:" will open Eclipse's preference dialog to the specified * preference page (ex: 'preference:com.foo.bar.preference-id'). * <p> * <b>Eclipse help links</b> - Hyperlink hrefs starting with "help:" will open * Eclipse's help system to the specified help content (ex: * 'help:com.foo.bar.preference-id'). * <p> * <b>Email links</b> - Hyperlink hrefs starting with "mailto:" will open * up a a new email message in the system's default email client. */ public final class HyperlinkHandler extends HyperlinkAdapter { /* (non-Javadoc) * @see org.eclipse.ui.forms.events.HyperlinkAdapter#linkActivated(org.eclipse.ui.forms.events.HyperlinkEvent) */ @Override public void linkActivated(HyperlinkEvent event) { String href = (String)event.getHref(); if (href == null) return; String resource = href.substring(href.indexOf(":") + 1); if (href.startsWith("http")) { int browserStyle = IWorkbenchBrowserSupport.LOCATION_BAR | IWorkbenchBrowserSupport.AS_EXTERNAL | IWorkbenchBrowserSupport.STATUS | IWorkbenchBrowserSupport.NAVIGATION_BAR; IWorkbenchBrowserSupport browserSupport = PlatformUI.getWorkbench().getBrowserSupport(); try { browserSupport.createBrowser(browserStyle, null, null, null) .openURL(new URL(href)); } catch (Exception e) { AwsToolkitCore.getDefault().reportException("Unable to open external web browser", e); } } else if (href.startsWith("preference:")) { PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn( null, resource, new String[] {resource}, null); dialog.open(); } else if (href.startsWith("help:")) { PlatformUI.getWorkbench().getHelpSystem().displayHelpResource(resource); } else if (href.startsWith("mailto:")) { Program.launch(href); } } }