Author: adietish
Date: 2011-11-29 09:56:42 -0500 (Tue, 29 Nov 2011)
New Revision: 36731
Added:
trunk/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/utils/UrlUtils.java
Modified:
trunk/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/ui/wizard/CreationLogDialog.java
trunk/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/ui/wizard/NewApplicationWizardPageModel.java
Log:
[JBIDE-10274] made links in logs clickable
Modified:
trunk/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/ui/wizard/CreationLogDialog.java
===================================================================
---
trunk/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/ui/wizard/CreationLogDialog.java 2011-11-29
14:52:09 UTC (rev 36730)
+++
trunk/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/ui/wizard/CreationLogDialog.java 2011-11-29
14:56:42 UTC (rev 36731)
@@ -12,6 +12,8 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
@@ -20,18 +22,26 @@
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
+import org.jboss.tools.common.ui.BrowserUtil;
import org.jboss.tools.openshift.express.internal.ui.OpenShiftImages;
+import org.jboss.tools.openshift.express.internal.ui.OpenShiftUIActivator;
import org.jboss.tools.openshift.express.internal.ui.common.StringUtils;
+import org.jboss.tools.openshift.express.internal.utils.UrlUtils;
/**
* @author André Dietisheim
*/
public class CreationLogDialog extends TitleAreaDialog {
+ private static final Pattern HTTP_LINK_REGEX = Pattern.compile("http[^
|\n]+");
+
private LogEntry[] logEntries;
public CreationLogDialog(Shell parentShell, LogEntry... logEntries) {
@@ -65,9 +75,39 @@
StyledText logText = new StyledText(container, SWT.BORDER | SWT.V_SCROLL);
GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).grab(true,
false).applyTo(logText);
writeLogEntries(logEntries, logText);
+ logText.addListener(SWT.MouseDown, onLinkClicked(logText));
return container;
}
+ private Listener onLinkClicked(final StyledText logText) {
+ return new Listener() {
+ public void handleEvent(Event event) {
+ try {
+ String url = getUrl(logText, event);
+ if (url != null
+ && url.length() > 0) {
+ BrowserUtil.checkedCreateExternalBrowser(
+ url, OpenShiftUIActivator.PLUGIN_ID,
OpenShiftUIActivator.getDefault().getLog());
+ }
+ } catch (IllegalArgumentException e) {
+ // no character under event.x, event.y
+ }
+ }
+
+ private String getUrl(StyledText logText, Event event) {
+ int offset = logText.getOffsetAtLocation(new Point(event.x, event.y));
+ StyleRange style = logText.getStyleRangeAtOffset(offset);
+ if (style == null
+ || !style.underline) {
+ return null;
+ }
+ return UrlUtils.getUrl(offset, logText.getText());
+ }
+
+
+ };
+ }
+
@Override
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
@@ -89,16 +129,34 @@
private void writeLogEntry(LogEntry logEntry, StringBuilder builder,
List<StyleRange> styles) {
appendTitle(logEntry.getName(), builder, styles);
- builder.append(logEntry.getLog());
+ appendLog(logEntry, builder, styles);
+ }
+
+ private void appendLog(LogEntry logEntry, StringBuilder builder, List<StyleRange>
styles) {
+ String log = logEntry.getLog();
+ createLinkStyles(log, builder.length(), styles);
+ builder.append(log);
builder.append(StringUtils.getLineSeparator());
}
- private void setStyleRanges(StyledText logText, List<StyleRange> styles) {
- for (StyleRange style : styles) {
- logText.setStyleRange(style);
+ private void createLinkStyles(String log, int baseIndex, List<StyleRange> styles)
{
+ Matcher matcher = HTTP_LINK_REGEX.matcher(log);
+ while (matcher.find()) {
+ StyleRange linkStyle = createLinkStyleRange(matcher.start() + baseIndex, matcher.end()
+ baseIndex);
+ styles.add(linkStyle);
}
}
+ private StyleRange createLinkStyleRange(int start, int stop) {
+ StyleRange styleRange = new StyleRange();
+ styleRange.start = start;
+ styleRange.length = stop - start;
+ styleRange.fontStyle = SWT.UNDERLINE_LINK;
+ styleRange.underline = true;
+ styleRange.foreground = getShell().getDisplay().getSystemColor(SWT.COLOR_BLUE);
+ return styleRange;
+ }
+
private void appendTitle(String title, StringBuilder builder, List<StyleRange>
styles) {
StyleRange styleRange = startBoldStyleRange(builder);
builder.append(title)
@@ -120,7 +178,13 @@
styleRange.length = builder.length() - styleRange.start;
return styleRange;
}
-
+
+ private void setStyleRanges(StyledText logText, List<StyleRange> styles) {
+ for (StyleRange style : styles) {
+ logText.setStyleRange(style);
+ }
+ }
+
public static class LogEntry {
private String name;
Modified:
trunk/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/ui/wizard/NewApplicationWizardPageModel.java
===================================================================
---
trunk/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/ui/wizard/NewApplicationWizardPageModel.java 2011-11-29
14:52:09 UTC (rev 36730)
+++
trunk/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/ui/wizard/NewApplicationWizardPageModel.java 2011-11-29
14:56:42 UTC (rev 36731)
@@ -84,6 +84,7 @@
public ICartridge getSelectedCartridge() {
return selectedCartridge;
}
+
public void setSelectedCartridge(ICartridge cartridge) {
wizardModel.setCartridge(cartridge);
Added:
trunk/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/utils/UrlUtils.java
===================================================================
---
trunk/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/utils/UrlUtils.java
(rev 0)
+++
trunk/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/utils/UrlUtils.java 2011-11-29
14:56:42 UTC (rev 36731)
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is 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:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.openshift.express.internal.utils;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author André Dietisheim
+ */
+public class UrlUtils {
+
+ private static final int HTTP_SCHEME_MAX_LENGTH = 8;
+ private static final char HTTP_SCHEME_START_CHAR = 'h';
+ private static final Pattern HTTP_SCHEME_REGEX = Pattern.compile("http?://");
+
+ public static String getUrl(int offset, String text) {
+ int start = getUrlStart(offset, text);
+ if (start == -1) {
+ return null;
+ }
+ int stop = getUrlStop(offset, text);
+ if (stop == -1) {
+ return null;
+ }
+ return text.substring(start, stop);
+
+ }
+
+ private static int getUrlStart(int offset, String text) {
+ for (int i = offset; i > 0; --i) {
+ if (text.charAt(i) == HTTP_SCHEME_START_CHAR
+ && (i + HTTP_SCHEME_MAX_LENGTH < text.length())) {
+ Matcher matcher = HTTP_SCHEME_REGEX.matcher(text.substring(i, i +
HTTP_SCHEME_MAX_LENGTH));
+ if (matcher.find()) {
+ return i;
+ }
+ }
+ }
+ return -1;
+ }
+
+ private static int getUrlStop(int offset, String text) {
+ for (int i = offset; i < text.length(); ++i) {
+ if (' ' == text.charAt(i)
+ || '\n' == text.charAt(i)) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+}
Property changes on:
trunk/openshift/plugins/org.jboss.tools.openshift.express.ui/src/org/jboss/tools/openshift/express/internal/utils/UrlUtils.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain