diff options
Diffstat (limited to 'src/java/net')
-rwxr-xr-x | src/java/net/sf/antcontrib/net/URLImportTask.java | 168 |
1 files changed, 112 insertions, 56 deletions
diff --git a/src/java/net/sf/antcontrib/net/URLImportTask.java b/src/java/net/sf/antcontrib/net/URLImportTask.java index 4477820..4d4663e 100755 --- a/src/java/net/sf/antcontrib/net/URLImportTask.java +++ b/src/java/net/sf/antcontrib/net/URLImportTask.java @@ -16,16 +16,29 @@ package net.sf.antcontrib.net;
import java.io.File;
-import java.io.IOException;
-import java.net.URL;
+import java.util.Date;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.Expand;
-import org.apache.tools.ant.taskdefs.Get;
import org.apache.tools.ant.taskdefs.ImportTask;
+import fr.jayasoft.ivy.Artifact;
+import fr.jayasoft.ivy.DefaultModuleDescriptor;
+import fr.jayasoft.ivy.DependencyResolver;
+import fr.jayasoft.ivy.Ivy;
+import fr.jayasoft.ivy.MDArtifact;
+import fr.jayasoft.ivy.ModuleDescriptor;
+import fr.jayasoft.ivy.ModuleId;
+import fr.jayasoft.ivy.ModuleRevisionId;
+import fr.jayasoft.ivy.report.ArtifactDownloadReport;
+import fr.jayasoft.ivy.report.DownloadStatus;
+import fr.jayasoft.ivy.repository.Repository;
+import fr.jayasoft.ivy.resolver.FileSystemResolver;
+import fr.jayasoft.ivy.resolver.IvyRepResolver;
+import fr.jayasoft.ivy.resolver.URLResolver;
+
/***
* Task to import a build file from a url. The build file can be a build.xml,
* or a .zip/.jar, in which case we download and extract the entire archive, and
@@ -36,68 +49,111 @@ import org.apache.tools.ant.taskdefs.ImportTask; public class URLImportTask
extends Task {
- private URL url;
-
+ private String org;
+ private String module;
+ private String rev = "latest.integration";
+ private String type = "jar";
+ private String repositoryUrl;
+ private String repositoryDir;
+ private String artifactPattern = "/[org]/[module]/[ext]s/[module]-[revision].[ext]";
+ private String ivyPattern = "/[org]/[module]/ivy-[revision].xml";
+
+ public void setModule(String module) {
+ this.module = module;
+ }
- public void setUrl(URL url) {
- this.url = url;
+ public void setOrg(String org) {
+ this.org = org;
}
+ public void setRev(String rev) {
+ this.rev = rev;
+ }
public void execute()
throws BuildException {
- if (url == null) {
- throw new BuildException("Missing url.");
+ Ivy ivy = new Ivy();
+ DependencyResolver resolver = null;
+ Repository rep = null;
+
+ if (repositoryUrl != null) {
+ resolver = new URLResolver();
+ ((URLResolver)resolver).addArtifactPattern(
+ repositoryUrl + "/" + artifactPattern
+ );
+ ((URLResolver)resolver).addIvyPattern(
+ repositoryUrl + "/" + ivyPattern
+ );
+ resolver.setName("default");
}
-
- try {
- File tempDir = File.createTempFile("urlimport", "");
- log("Creating directory: " + tempDir.getAbsolutePath(), Project.MSG_INFO);
- tempDir.delete();
- tempDir.mkdirs();
-
- log("Downloading file: " + url.toExternalForm(), Project.MSG_INFO);
-
- File destFile = new File(tempDir, new File(url.getPath()).getName());
- Get get = (Get) getProject().createTask("get");
- get.setSrc(url);
- get.setDest(destFile);
- get.perform();
-
- log("File: " + url.toExternalForm() + " downloaded to " + destFile.getAbsolutePath(),
- Project.MSG_INFO);
-
- File extractedBuildFile = null;
- if (destFile.getName().endsWith(".jar") ||
- destFile.getName().endsWith(".zip")) {
- log("Extracting compressed file: " + destFile.getAbsolutePath(), Project.MSG_INFO);
- Expand expand = (Expand) getProject().createTask("unjar");
- expand.setSrc(destFile);
- expand.setDest(tempDir);
- expand.perform();
- log("Compressed file extracted", Project.MSG_INFO);
- extractedBuildFile = new File(tempDir, "build.xml");
- if (! extractedBuildFile.exists()) {
- log("No 'build.xml' exists in the extracted file.", Project.MSG_ERR);
- throw new BuildException("Downloaded file does not contain a 'build.xml' file");
- }
- }
- else {
- extractedBuildFile = destFile;
- }
-
- log("Importing file: " + extractedBuildFile.getAbsolutePath(), Project.MSG_INFO);
- ImportTask importTask = new ImportTask();
- importTask.setProject(getProject());
- importTask.setOwningTarget(getOwningTarget());
- importTask.setLocation(getLocation());
- importTask.setFile(extractedBuildFile.getAbsolutePath());
- importTask.perform();
- log("Import complete.", Project.MSG_INFO);
+ else if (repositoryDir != null) {
+ resolver = new FileSystemResolver();
+ ((FileSystemResolver)resolver).addArtifactPattern(
+ repositoryDir + "/" + artifactPattern
+ );
+ ((FileSystemResolver)resolver).addIvyPattern(
+ repositoryDir + "/" + ivyPattern
+ );
+ }
+ else {
+ resolver = new IvyRepResolver();
}
- catch (IOException e) {
- throw new BuildException(e);
+ resolver.setName("default");
+ ivy.addResolver(resolver);
+ ivy.setDefaultResolver(resolver.getName());
+
+ ModuleId moduleId =
+ new ModuleId(org, module);
+ ModuleRevisionId revId =
+ new ModuleRevisionId(moduleId, rev);
+ ModuleDescriptor md =
+ new DefaultModuleDescriptor(revId, "integration", new Date());
+ Artifact artifact =
+ new MDArtifact(md, module, type, type);
+
+ ArtifactDownloadReport report =
+ ivy.download(artifact, null);
+
+ DownloadStatus status = report.getDownloadStatus();
+ if (status == DownloadStatus.FAILED) {
+ throw new BuildException("Could not resolve resource.");
}
+
+ String path = ivy.getArchivePathInCache(artifact);
+
+ File file = new File(ivy.getDefaultCache(), path);
+
+ File importFile = null;
+
+ if ("xml".equalsIgnoreCase(type)) {
+ importFile = file;
+ }
+ else if ("jar".equalsIgnoreCase(type)) {
+ File dir = new File(file.getParentFile(),
+ file.getName() + ".extracted");
+ dir.mkdir();
+ Expand expand = (Expand)getProject().createTask("unjar");
+ expand.setSrc(file);
+ expand.setDest(dir);
+ expand.perform();
+ importFile = new File(dir, "build.xml");
+ if (! importFile.exists()) {
+ throw new BuildException("Cannot find a 'build.xml' file in " +
+ file.getName());
+ }
+ }
+ else {
+ throw new BuildException("Don't know what to do with type: " + type);
+ }
+
+ File buildFile = null;
+ ImportTask importTask = new ImportTask();
+ importTask.setProject(getProject());
+ importTask.setOwningTarget(getOwningTarget());
+ importTask.setLocation(getLocation());
+ importTask.setFile(buildFile.getAbsolutePath());
+ importTask.perform();
+ log("Import complete.", Project.MSG_INFO);
}
}
|