package org.netbeans.gradle.project.output;
import java.net.MalformedURLException;
import java.net.URL;
import org.jtrim.utils.ExceptionHelper;
import org.netbeans.gradle.project.util.StringUtils;
import org.openide.awt.HtmlBrowser;
import org.openide.windows.OutputEvent;
import org.openide.windows.OutputListener;
public final class OutputUrlConsumer implements OutputLinkFinder {
private static final String[] URL_PREFIXES = new String[]{
"http://",
"https://",
"file://"
};
private static OutputLinkDef tryGetUrlWithPrefix(String prefix, String line) {
int startIndex = line.indexOf(prefix);
if (startIndex < 0) {
return null;
}
int lineLength = line.length();
int endIndex = lineLength;
for (int i = startIndex + prefix.length(); i < lineLength; i++) {
if (line.charAt(i) <= ' ') {
endIndex = i;
break;
}
}
URL url;
try {
url = new URL(StringUtils.stripSeperatorsFromEnd(line.substring(startIndex, endIndex)));
} catch (MalformedURLException ex) {
return null;
}
return new OutputLinkDef(startIndex, endIndex, getUrlOpenTask(url));
}
@Override
public OutputLinkDef tryFindLink(String line) {
for (String prefix: URL_PREFIXES) {
OutputLinkDef result = tryGetUrlWithPrefix(prefix, line);
if (result != null) {
return result;
}
}
return null;
}
public static Runnable getUrlOpenTask(final URL url) {
ExceptionHelper.checkNotNullArgument(url, "url");
return new Runnable() {
@Override
public void run() {
HtmlBrowser.URLDisplayer.getDefault().showURLExternal(url);
}
};
}
public static OutputListener getUrlListener(final URL url) {
ExceptionHelper.checkNotNullArgument(url, "url");
return new OutputListener() {
@Override
public void outputLineSelected(OutputEvent ev) {
}
@Override
public void outputLineAction(OutputEvent ev) {
HtmlBrowser.URLDisplayer.getDefault().showURLExternal(url);
}
@Override
public void outputLineCleared(OutputEvent ev) {
}
};
}
}