blob: b1d635af8525321d72df6f8aa4e943d7cbe8be0e [file] [log] [blame]
package com.intellij.jarFinder;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.util.net.HttpConfigurable;
import org.jdom.Document;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
/**
* @author Sergey Evdokimov
*/
public abstract class SourceSearcher {
/**
* @param indicator
* @param artifactId
* @param version
* @return groupId of found artifact and url.
*/
@Nullable
protected abstract String findSourceJar(@NotNull final ProgressIndicator indicator, @NotNull String artifactId, @NotNull String version) throws SourceSearchException;
protected static Document readDocumentCancelable(final ProgressIndicator indicator, String url) throws JDOMException, IOException {
final HttpURLConnection urlConnection = HttpConfigurable.getInstance().openHttpConnection(url);
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
//noinspection InfiniteLoopStatement
while (true) {
if (indicator.isCanceled()) {
urlConnection.disconnect();
}
//noinspection BusyWait
Thread.sleep(100);
}
}
catch (InterruptedException ignored) {
}
}
});
t.start();
try {
urlConnection.setRequestProperty("accept", "application/xml");
InputStream inputStream = urlConnection.getInputStream();
try {
return new SAXBuilder().build(inputStream);
}
finally {
inputStream.close();
}
}
finally {
t.interrupt();
}
}
}
class SourceSearchException extends Exception {
SourceSearchException(String message) {
super(message);
}
}