
org.xtext.gradle.idea.tasks.DownloadIdeaPlugins Maven / Gradle / Ivy
package org.xtext.gradle.idea.tasks;
import com.google.common.collect.Iterables;
import groovy.util.XmlSlurper;
import groovy.util.slurpersupport.GPathResult;
import groovy.util.slurpersupport.Node;
import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.xtend.lib.annotations.Accessors;
import org.eclipse.xtend.lib.annotations.Data;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.Conversions;
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.IteratorExtensions;
import org.eclipse.xtext.xbase.lib.Pair;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
import org.eclipse.xtext.xbase.lib.Pure;
import org.eclipse.xtext.xbase.lib.util.ToStringBuilder;
import org.gradle.StartParameter;
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.invocation.Gradle;
import org.gradle.api.specs.Spec;
import org.gradle.api.tasks.TaskAction;
import org.xtext.gradle.idea.tasks.GradleExtensions;
import org.xtext.gradle.idea.tasks.IdeaPluginDependencies;
import org.xtext.gradle.idea.tasks.IdeaPluginDependency;
import org.xtext.gradle.idea.tasks.IdeaPluginRepositories;
import org.xtext.gradle.idea.tasks.IdeaPluginRepository;
@Accessors
@SuppressWarnings("all")
public class DownloadIdeaPlugins extends DefaultTask {
@Data
private static class PluginRequest {
private final String id;
private final String version;
public PluginRequest(final String id, final String version) {
super();
this.id = id;
this.version = version;
}
@Override
@Pure
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((this.id== null) ? 0 : this.id.hashCode());
result = prime * result + ((this.version== null) ? 0 : this.version.hashCode());
return result;
}
@Override
@Pure
public boolean equals(final Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
DownloadIdeaPlugins.PluginRequest other = (DownloadIdeaPlugins.PluginRequest) obj;
if (this.id == null) {
if (other.id != null)
return false;
} else if (!this.id.equals(other.id))
return false;
if (this.version == null) {
if (other.version != null)
return false;
} else if (!this.version.equals(other.version))
return false;
return true;
}
@Override
@Pure
public String toString() {
ToStringBuilder b = new ToStringBuilder(this);
b.add("id", this.id);
b.add("version", this.version);
return b.toString();
}
@Pure
public String getId() {
return this.id;
}
@Pure
public String getVersion() {
return this.version;
}
}
private File destinationDir;
private IdeaPluginRepositories pluginRepositories;
private IdeaPluginDependencies pluginDependencies;
public DownloadIdeaPlugins() {
final Spec _function = new Spec() {
@Override
public boolean isSatisfiedBy(final Task it) {
Iterable _pluginsToBeDownloaded = DownloadIdeaPlugins.this.pluginsToBeDownloaded();
final Function1 _function = new Function1() {
@Override
public Boolean apply(final DownloadIdeaPlugins.PluginRequest it) {
return Boolean.valueOf(DownloadIdeaPlugins.this.needsRedownload(it));
}
};
return IterableExtensions.exists(_pluginsToBeDownloaded, _function);
}
};
this.onlyIf(_function);
}
@TaskAction
public void download() {
final HashMap urlsByPluginId = this.collectUrlsByPluginId();
Iterable _pluginsToBeDownloaded = this.pluginsToBeDownloaded();
final Function1 _function = new Function1() {
@Override
public Boolean apply(final DownloadIdeaPlugins.PluginRequest it) {
return Boolean.valueOf(DownloadIdeaPlugins.this.needsRedownload(it));
}
};
Iterable _filter = IterableExtensions.filter(_pluginsToBeDownloaded, _function);
final Procedure1 _function_1 = new Procedure1() {
@Override
public void apply(final DownloadIdeaPlugins.PluginRequest it) {
String _get = urlsByPluginId.get(it);
DownloadIdeaPlugins.this.download(it, _get);
}
};
IterableExtensions.forEach(_filter, _function_1);
}
public void download(final DownloadIdeaPlugins.PluginRequest plugin, final String downloadUrl) {
final Procedure1 _function = new Procedure1() {
@Override
public void apply(final File tmp) {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append(plugin.id, "");
_builder.append(".zip");
final File targetFile = GradleExtensions.operator_divide(tmp, _builder.toString());
URL _uRL = new URL(downloadUrl);
InputStream _openStream = _uRL.openStream();
Path _path = targetFile.toPath();
Files.copy(_openStream, _path);
File _divide = GradleExtensions.operator_divide(DownloadIdeaPlugins.this.destinationDir, plugin.id);
final File pluginFolder = GradleExtensions.operator_divide(_divide, plugin.version);
Project _project = DownloadIdeaPlugins.this.getProject();
_project.delete(pluginFolder);
Project _project_1 = DownloadIdeaPlugins.this.getProject();
final Action _function = new Action() {
@Override
public void execute(final CopySpec it) {
it.into(pluginFolder);
Project _project = DownloadIdeaPlugins.this.getProject();
FileTree _zipTree = _project.zipTree(targetFile);
it.from(_zipTree);
final Action _function = new Action() {
@Override
public void execute(final FileCopyDetails it) {
GradleExtensions.cutDirs(it, 1);
}
};
it.eachFile(_function);
it.setIncludeEmptyDirs(false);
}
};
_project_1.copy(_function);
Date _date = new Date();
DownloadIdeaPlugins.this.setLastDownloaded(plugin, _date);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
};
GradleExtensions.usingTmpDir(_function);
}
public HashMap collectUrlsByPluginId() {
final Function1>> _function = new Function1>>() {
@Override
public Iterable> apply(final IdeaPluginRepository it) {
try {
Iterable> _xblockexpression = null;
{
XmlSlurper _xmlSlurper = new XmlSlurper();
String _url = it.getUrl();
final GPathResult result = _xmlSlurper.parse(_url);
Iterator _childNodes = result.childNodes();
Iterable
© 2015 - 2025 Weber Informatics LLC | Privacy Policy