[539150] Add support fix hyperlinks in description popups

Bug: 539150
Change-Id: I700697222c6c8d713aad42fb57dfb339ba32d2a4
Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr>
diff --git a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/dialog/DescriptionDialog.java b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/dialog/DescriptionDialog.java
index 8aeb5a6..fdc76bd 100644
--- a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/dialog/DescriptionDialog.java
+++ b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/dialog/DescriptionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c)  2006, 2015 THALES GLOBAL SERVICES.
+ * Copyright (c)  2006, 2018 THALES GLOBAL SERVICES 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
@@ -10,6 +10,10 @@
  *******************************************************************************/
 package org.eclipse.amalgam.explorer.activity.ui.api.dialog;
 
+import java.net.URL;
+import java.text.MessageFormat;
+
+import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.dialogs.PopupDialog;
 import org.eclipse.jface.resource.ImageDescriptor;
@@ -18,14 +22,20 @@
 import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.ISharedImages;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
+import org.eclipse.ui.forms.HyperlinkGroup;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.ui.forms.events.HyperlinkEvent;
 import org.eclipse.ui.forms.widgets.FormText;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.ScrolledForm;
 import org.eclipse.ui.forms.widgets.TableWrapData;
 import org.eclipse.ui.forms.widgets.TableWrapLayout;
+import org.eclipse.ui.statushandlers.StatusManager;
 
 /**
  * Dialog that opens a popup dialog to display content in a {@link FormText}.
@@ -127,12 +137,36 @@
 
 		FormText richText = org.eclipse.amalgam.explorer.activity.ui.api.editor.pages.helper.FormHelper.createRichText(
 				_toolkit, form.getBody(), _content, null);
+		configureHyperLinkSupport(richText, form);
 		TableWrapData layoutData = new TableWrapData();
 		layoutData.maxWidth = 400;
 		richText.setLayoutData(layoutData);
 		return _composite;
 	}
 
+	private void configureHyperLinkSupport(FormText richText, ScrolledForm form) {
+		Display disaply = form.getDisplay();
+		HyperlinkGroup group = new HyperlinkGroup(disaply);
+		group.setForeground(disaply.getSystemColor(SWT.COLOR_BLUE));
+		group.setActiveForeground(disaply.getSystemColor(SWT.COLOR_BLUE));
+		richText.setHyperlinkSettings(group);
+		richText.addHyperlinkListener(new HyperlinkAdapter() {
+			public void linkActivated(HyperlinkEvent e) {
+				String href = (String) e.getHref();
+				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 ex) {
+						Status status = new Status(Status.ERROR, null, MessageFormat.format(Messages.DescriptionDialog_exernal_browser_error, ex.getMessage()), ex);
+						StatusManager.getManager().handle(status, StatusManager.SHOW);
+					}
+				}
+			}
+		});
+	}
+    
 	/**
 	 * @see org.eclipse.jface.dialogs.PopupDialog#getFocusControl()
 	 */
diff --git a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/dialog/Messages.java b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/dialog/Messages.java
index 7613742..26ab7a0 100644
--- a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/dialog/Messages.java
+++ b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/dialog/Messages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c)  2006, 2015 THALES GLOBAL SERVICES.
+ * Copyright (c)  2006, 2018 THALES GLOBAL SERVICES 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
@@ -22,6 +22,7 @@
 	public static String SelectionDialog_0;
 	public static String SelectionDialog_1;
 	public static String SelectionDialog_2;
+	public static String DescriptionDialog_exernal_browser_error;
 	static {
 		// initialize resource bundle
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/dialog/messages.properties b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/dialog/messages.properties
index cd6bea3..8e3048c 100644
--- a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/dialog/messages.properties
+++ b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/dialog/messages.properties
@@ -2,3 +2,4 @@
 SelectionDialog_0=Ok
 SelectionDialog_1=Cancel
 SelectionDialog_2=Selection
+DescriptionDialog_exernal_browser_error=Unable to open external web browser: {0}