From fe78b4b2f629e06d852b3558b33b07905c4b86cd Mon Sep 17 00:00:00 2001 From: mattinger Date: Thu, 24 Aug 2006 05:09:26 +0000 Subject: Reworked importUrl task to use Ivy to do it's bidding. git-svn-id: file:///home/sven/projects/JOGL/temp/ant-contrib/svn/ant-contrib-code/trunk/ant-contrib@41 32d7a393-a5a9-423c-abd3-5d954feb1f2f --- src/java/net/sf/antcontrib/net/URLImportTask.java | 168 ++++++++++++++-------- 1 file changed, 112 insertions(+), 56 deletions(-) (limited to 'src/java/net') 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); } } -- cgit v1.2.3