org.xtext.gradle.idea.tasks.DownloadIdea Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of xtext-idea-gradle-plugin Show documentation
Show all versions of xtext-idea-gradle-plugin Show documentation
A plugin for for building IntelliJ IDEA Xtext plugins
package org.xtext.gradle.idea.tasks;
import com.google.common.base.Splitter;
import java.io.File;
import java.io.InputStream;
import java.net.ProxySelector;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.SystemDefaultRoutePlanner;
import org.apache.http.util.EntityUtils;
import org.eclipse.xtend.lib.annotations.Accessors;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
import org.eclipse.xtext.xbase.lib.Pure;
import org.gradle.api.Action;
import org.gradle.api.DefaultTask;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.file.CopySpec;
import org.gradle.api.file.FileCopyDetails;
import org.gradle.api.file.FileTree;
import org.gradle.api.specs.Spec;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.TaskAction;
import org.gradle.api.tasks.WorkResult;
import org.gradle.internal.os.OperatingSystem;
import org.xtext.gradle.idea.tasks.GradleExtensions;
import org.xtext.gradle.idea.tasks.IdeaBuildInfo;
@Accessors
@SuppressWarnings("all")
public class DownloadIdea extends DefaultTask {
private final static OperatingSystem os = OperatingSystem.current();
@OutputDirectory
private File ideaHome;
@Input
private String ideaVersion;
public DownloadIdea() {
final Spec _function = new Spec() {
@Override
public boolean isSatisfiedBy(final Task it) {
String[] _elvis = null;
String[] _list = DownloadIdea.this.ideaHome.list();
if (_list != null) {
_elvis = _list;
} else {
String[] _newArrayOfSize = new String[0];
_elvis = _newArrayOfSize;
}
int _length = _elvis.length;
return (_length < 3);
}
};
this.onlyIf(_function);
}
@TaskAction
public WorkResult download() {
try {
WorkResult _xblockexpression = null;
{
final IdeaBuildInfo buildInfo = this.queryBuildInfo();
String _archiveName = buildInfo.getArchiveName();
final File archiveFile = new File(this.ideaHome, _archiveName);
boolean _exists = archiveFile.exists();
boolean _not = (!_exists);
if (_not) {
String _archiveUrl = buildInfo.getArchiveUrl();
URL _uRL = new URL(_archiveUrl);
InputStream _openStream = _uRL.openStream();
Path _path = archiveFile.toPath();
Files.copy(_openStream, _path);
}
String _sourceArchiveName = buildInfo.getSourceArchiveName();
final File sourceArchiveFile = new File(this.ideaHome, _sourceArchiveName);
boolean _exists_1 = sourceArchiveFile.exists();
boolean _not_1 = (!_exists_1);
if (_not_1) {
String _sourceArchiveUrl = buildInfo.getSourceArchiveUrl();
URL _uRL_1 = new URL(_sourceArchiveUrl);
InputStream _openStream_1 = _uRL_1.openStream();
Path _path_1 = sourceArchiveFile.toPath();
Files.copy(_openStream_1, _path_1);
}
Project _project = this.getProject();
final Procedure1 _function = new Procedure1() {
@Override
public void apply(final CopySpec it) {
it.into(DownloadIdea.this.ideaHome);
boolean _isLinux = DownloadIdea.os.isLinux();
if (_isLinux) {
Project _project = DownloadIdea.this.getProject();
FileTree _tarTree = _project.tarTree(archiveFile);
it.from(_tarTree);
final Action _function = new Action() {
@Override
public void execute(final FileCopyDetails it) {
DownloadIdea.this.cutDirs(it, 1);
}
};
it.eachFile(_function);
} else {
Project _project_1 = DownloadIdea.this.getProject();
FileTree _zipTree = _project_1.zipTree(archiveFile);
it.from(_zipTree);
boolean _isMacOsX = DownloadIdea.os.isMacOsX();
if (_isMacOsX) {
final Action _function_1 = new Action() {
@Override
public void execute(final FileCopyDetails it) {
DownloadIdea.this.cutDirs(it, 2);
}
};
it.eachFile(_function_1);
}
}
}
};
_xblockexpression = GradleExtensions.copy(_project, _function);
}
return _xblockexpression;
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
public IdeaBuildInfo queryBuildInfo() {
IdeaBuildInfo _xblockexpression = null;
{
final String buildApiUrl = "https://teamcity.jetbrains.com/guestAuth/app/rest/builds";
StringConcatenation _builder = new StringConcatenation();
_builder.append("buildType:bt410,status:SUCCESS,branch:idea/");
_builder.append(this.ideaVersion, "");
final String buildLocator = _builder.toString();
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append(buildApiUrl, "");
_builder_1.append("/?locator=");
_builder_1.append(buildLocator, "");
final String buildIdRequestUrl = _builder_1.toString();
final Function1 _function = new Function1() {
@Override
public String apply(final String response) {
String _xblockexpression = null;
{
final Pattern pattern = Pattern.compile("^(.*)\\sid=\"(\\d+)\"(.*)$");
final Matcher matcher = pattern.matcher(response);
matcher.find();
_xblockexpression = matcher.group(2);
}
return _xblockexpression;
}
};
final String buildId = this.httpGet(buildIdRequestUrl, _function);
StringConcatenation _builder_2 = new StringConcatenation();
_builder_2.append(buildApiUrl, "");
_builder_2.append("/id:");
_builder_2.append(buildId, "");
final String buildUrl = _builder_2.toString();
StringConcatenation _builder_3 = new StringConcatenation();
_builder_3.append(buildUrl, "");
_builder_3.append("/artifacts/children");
final String buildNumberRequestUrl = _builder_3.toString();
final Function1 _function_1 = new Function1() {
@Override
public String apply(final String response) {
String _xblockexpression = null;
{
final Pattern pattern = Pattern.compile("^(.*)ideaIC-([\\w\\.]+)\\.win\\.zip(.*)$");
final Matcher matcher = pattern.matcher(response);
matcher.find();
_xblockexpression = matcher.group(2);
}
return _xblockexpression;
}
};
final String buildNumber = this.httpGet(buildNumberRequestUrl, _function_1);
StringConcatenation _builder_4 = new StringConcatenation();
_builder_4.append("ideaIC-");
_builder_4.append(buildNumber, "");
_builder_4.append(".");
String _archiveExtension = this.archiveExtension(DownloadIdea.os);
_builder_4.append(_archiveExtension, "");
final String archiveName = _builder_4.toString();
StringConcatenation _builder_5 = new StringConcatenation();
_builder_5.append(buildUrl, "");
_builder_5.append("/artifacts/content");
final String contentBaseUrl = _builder_5.toString();
_xblockexpression = new IdeaBuildInfo(this.ideaVersion, buildId, buildUrl, buildNumber, contentBaseUrl, archiveName);
}
return _xblockexpression;
}
public String httpGet(final String url, final Function1 responseHandler) {
try {
String _xblockexpression = null;
{
ProxySelector _default = ProxySelector.getDefault();
final SystemDefaultRoutePlanner routePlanner = new SystemDefaultRoutePlanner(_default);
HttpClientBuilder _custom = HttpClients.custom();
HttpClientBuilder _setRoutePlanner = _custom.setRoutePlanner(routePlanner);
final CloseableHttpClient client = _setRoutePlanner.build();
final HttpGet request = new HttpGet(url);
String _xtrycatchfinallyexpression = null;
try {
String _xblockexpression_1 = null;
{
CloseableHttpResponse _execute = client.execute(request);
HttpEntity _entity = _execute.getEntity();
final String response = EntityUtils.toString(_entity);
_xblockexpression_1 = responseHandler.apply(response);
}
_xtrycatchfinallyexpression = _xblockexpression_1;
} finally {
request.releaseConnection();
}
final String result = _xtrycatchfinallyexpression;
_xblockexpression = result;
}
return _xblockexpression;
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
public String archiveExtension(final OperatingSystem os) {
String _xifexpression = null;
boolean _isWindows = os.isWindows();
if (_isWindows) {
_xifexpression = "win.zip";
} else {
String _xifexpression_1 = null;
boolean _isMacOsX = os.isMacOsX();
if (_isMacOsX) {
_xifexpression_1 = "mac.zip";
} else {
_xifexpression_1 = "tar.gz";
}
_xifexpression = _xifexpression_1;
}
return _xifexpression;
}
public void cutDirs(final FileCopyDetails file, final int levels) {
Splitter _on = Splitter.on("/");
Splitter _omitEmptyStrings = _on.omitEmptyStrings();
String _path = file.getPath();
final Iterable segments = _omitEmptyStrings.split(_path);
Iterable _drop = IterableExtensions.drop(segments, levels);
String _join = IterableExtensions.join(_drop, "/");
file.setPath(_join);
}
@Pure
public File getIdeaHome() {
return this.ideaHome;
}
public void setIdeaHome(final File ideaHome) {
this.ideaHome = ideaHome;
}
@Pure
public String getIdeaVersion() {
return this.ideaVersion;
}
public void setIdeaVersion(final String ideaVersion) {
this.ideaVersion = ideaVersion;
}
}