Author: xavier
Date: Mon Feb 19 07:37:10 2007
New Revision: 509221

URL: http://svn.apache.org/viewvc?view=rev&rev=509221
Log:
REFACTOR: review retrieve API, introduce RetrieveOptions

Added:
    
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveOptions.java
Modified:
    incubator/ivy/core/trunk/src/java/org/apache/ivy/Ivy.java
    incubator/ivy/core/trunk/src/java/org/apache/ivy/Ivy14.java
    incubator/ivy/core/trunk/src/java/org/apache/ivy/Main.java
    incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyArtifactReport.java
    incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyPostResolveTask.java
    incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyRetrieve.java
    
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java
    
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngine.java
    
incubator/ivy/core/trunk/test/java/org/apache/ivy/core/retrieve/RetrieveTest.java

Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/Ivy.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/Ivy.java?view=diff&rev=509221&r1=509220&r2=509221
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/Ivy.java (original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/Ivy.java Mon Feb 19 
07:37:10 2007
@@ -41,13 +41,12 @@
 import org.apache.ivy.core.module.id.ModuleId;
 import org.apache.ivy.core.module.id.ModuleRevisionId;
 import org.apache.ivy.core.publish.PublishEngine;
-import org.apache.ivy.core.report.ArtifactDownloadReport;
 import org.apache.ivy.core.report.ResolveReport;
-import org.apache.ivy.core.resolve.IvyNode;
 import org.apache.ivy.core.resolve.ResolveEngine;
 import org.apache.ivy.core.resolve.ResolveOptions;
 import org.apache.ivy.core.resolve.ResolvedModuleRevision;
 import org.apache.ivy.core.retrieve.RetrieveEngine;
+import org.apache.ivy.core.retrieve.RetrieveOptions;
 import org.apache.ivy.core.search.ModuleEntry;
 import org.apache.ivy.core.search.OrganisationEntry;
 import org.apache.ivy.core.search.RevisionEntry;
@@ -256,33 +255,10 @@
     //                         RETRIEVE
     /////////////////////////////////////////////////////////////////////////
 
-       public Map determineArtifactsToCopy(ModuleId moduleId, String[] confs, 
File cache, String destFilePattern, String destIvyPattern, Filter 
artifactFilter) throws ParseException, IOException {
-               return _retrieveEngine.determineArtifactsToCopy(moduleId, 
confs, cache, destFilePattern, destIvyPattern, artifactFilter);
+       public int retrieve(ModuleRevisionId mrid, String destFilePattern, 
RetrieveOptions options) throws IOException {
+               return _retrieveEngine.retrieve(mrid, destFilePattern, options);
        }
 
-       public Map determineArtifactsToCopy(ModuleId moduleId, String[] confs, 
File cache, String destFilePattern, String destIvyPattern) throws 
ParseException, IOException {
-               return _retrieveEngine.determineArtifactsToCopy(moduleId, 
confs, cache, destFilePattern, destIvyPattern);
-       }
-
-       public int retrieve(ModuleId moduleId, String[] confs, File cache, 
String destFilePattern, String destIvyPattern, Filter artifactFilter, boolean 
sync, boolean useOrigin, boolean makeSymlinks) {
-               return _retrieveEngine.retrieve(moduleId, confs, cache, 
destFilePattern, destIvyPattern, artifactFilter, sync, useOrigin, makeSymlinks);
-       }
-
-       public int retrieve(ModuleId moduleId, String[] confs, File cache, 
String destFilePattern, String destIvyPattern, Filter artifactFilter, boolean 
sync, boolean useOrigin) {
-               return _retrieveEngine.retrieve(moduleId, confs, cache, 
destFilePattern, destIvyPattern, artifactFilter, sync, useOrigin);
-       }
-
-       public int retrieve(ModuleId moduleId, String[] confs, File cache, 
String destFilePattern, String destIvyPattern, Filter artifactFilter) {
-               return _retrieveEngine.retrieve(moduleId, confs, cache, 
destFilePattern, destIvyPattern, artifactFilter);
-       }
-
-       public int retrieve(ModuleId moduleId, String[] confs, File cache, 
String destFilePattern, String destIvyPattern) {
-               return _retrieveEngine.retrieve(moduleId, confs, cache, 
destFilePattern, destIvyPattern);
-       }
-
-       public int retrieve(ModuleId moduleId, String[] confs, File cache, 
String destFilePattern) {
-               return _retrieveEngine.retrieve(moduleId, confs, cache, 
destFilePattern);
-       }
     /////////////////////////////////////////////////////////////////////////
     //                         DELIVER
     /////////////////////////////////////////////////////////////////////////

Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/Ivy14.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/Ivy14.java?view=diff&rev=509221&r1=509220&r2=509221
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/Ivy14.java (original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/Ivy14.java Mon Feb 19 
07:37:10 2007
@@ -39,6 +39,7 @@
 import org.apache.ivy.core.resolve.IvyNode;
 import org.apache.ivy.core.resolve.ResolveOptions;
 import org.apache.ivy.core.resolve.ResolvedModuleRevision;
+import org.apache.ivy.core.retrieve.RetrieveOptions;
 import org.apache.ivy.core.search.ModuleEntry;
 import org.apache.ivy.core.search.OrganisationEntry;
 import org.apache.ivy.core.search.RevisionEntry;
@@ -102,11 +103,24 @@
        }
 
        public Map determineArtifactsToCopy(ModuleId moduleId, String[] confs, 
File cache, String destFilePattern, String destIvyPattern, Filter 
artifactFilter) throws ParseException, IOException {
-               return _ivy.determineArtifactsToCopy(moduleId, confs, cache, 
destFilePattern, destIvyPattern, artifactFilter);
+               return _ivy.getRetrieveEngine().determineArtifactsToCopy(
+                               new ModuleRevisionId(moduleId, 
Ivy.getWorkingRevision()), 
+                               destFilePattern, 
+                               new RetrieveOptions()
+                                       .setConfs(confs)
+                                       
.setCache(CacheManager.getInstance(_ivy.getSettings(), cache))
+                                       .setDestIvyPattern(destIvyPattern)
+                                       .setArtifactFilter(artifactFilter));
        }
 
        public Map determineArtifactsToCopy(ModuleId moduleId, String[] confs, 
File cache, String destFilePattern, String destIvyPattern) throws 
ParseException, IOException {
-               return _ivy.determineArtifactsToCopy(moduleId, confs, cache, 
destFilePattern, destIvyPattern);
+               return _ivy.getRetrieveEngine().determineArtifactsToCopy(
+                               new ModuleRevisionId(moduleId, 
Ivy.getWorkingRevision()), 
+                               destFilePattern, 
+                               new RetrieveOptions()
+                                       .setConfs(confs)
+                                       
.setCache(CacheManager.getInstance(_ivy.getSettings(), cache))
+                                       .setDestIvyPattern(destIvyPattern));
        }
 
        public ArtifactDownloadReport download(Artifact artifact, File cache, 
boolean useOrigin) {
@@ -281,23 +295,80 @@
        }
 
        public int retrieve(ModuleId moduleId, String[] confs, File cache, 
String destFilePattern, String destIvyPattern, Filter artifactFilter, boolean 
sync, boolean useOrigin, boolean makeSymlinks) {
-               return _ivy.retrieve(moduleId, confs, cache, destFilePattern, 
destIvyPattern, artifactFilter, sync, useOrigin, makeSymlinks);
+               try {
+                       return _ivy.retrieve(
+                                       new ModuleRevisionId(moduleId, 
Ivy.getWorkingRevision()), 
+                                       destFilePattern, 
+                                       new RetrieveOptions()
+                                               .setConfs(confs)
+                                               
.setCache(CacheManager.getInstance(_ivy.getSettings(), cache))
+                                               
.setDestIvyPattern(destIvyPattern)
+                                               
.setArtifactFilter(artifactFilter)
+                                               .setSync(sync)
+                                               .setUseOrigin(useOrigin)
+                                               .setMakeSymlinks(makeSymlinks));
+               } catch (IOException e) {
+                       throw new RuntimeException(e);
+               }
        }
 
        public int retrieve(ModuleId moduleId, String[] confs, File cache, 
String destFilePattern, String destIvyPattern, Filter artifactFilter, boolean 
sync, boolean useOrigin) {
-               return _ivy.retrieve(moduleId, confs, cache, destFilePattern, 
destIvyPattern, artifactFilter, sync, useOrigin);
+               try {
+                       return _ivy.retrieve(
+                                       new ModuleRevisionId(moduleId, 
Ivy.getWorkingRevision()), 
+                                       destFilePattern, 
+                                       new RetrieveOptions()
+                                               .setConfs(confs)
+                                               
.setCache(CacheManager.getInstance(_ivy.getSettings(), cache))
+                                               
.setDestIvyPattern(destIvyPattern)
+                                               
.setArtifactFilter(artifactFilter)
+                                               .setSync(sync)
+                                               .setUseOrigin(useOrigin));
+               } catch (IOException e) {
+                       throw new RuntimeException(e);
+               }
        }
 
        public int retrieve(ModuleId moduleId, String[] confs, File cache, 
String destFilePattern, String destIvyPattern, Filter artifactFilter) {
-               return _ivy.retrieve(moduleId, confs, cache, destFilePattern, 
destIvyPattern, artifactFilter);
+               try {
+                       return _ivy.retrieve(
+                                       new ModuleRevisionId(moduleId, 
Ivy.getWorkingRevision()), 
+                                       destFilePattern, 
+                                       new RetrieveOptions()
+                                               .setConfs(confs)
+                                               
.setCache(CacheManager.getInstance(_ivy.getSettings(), cache))
+                                               
.setDestIvyPattern(destIvyPattern)
+                                               
.setArtifactFilter(artifactFilter));
+               } catch (IOException e) {
+                       throw new RuntimeException(e);
+               }
        }
 
        public int retrieve(ModuleId moduleId, String[] confs, File cache, 
String destFilePattern, String destIvyPattern) {
-               return _ivy.retrieve(moduleId, confs, cache, destFilePattern, 
destIvyPattern);
+               try {
+                       return _ivy.retrieve(
+                                       new ModuleRevisionId(moduleId, 
Ivy.getWorkingRevision()), 
+                                       destFilePattern, 
+                                       new RetrieveOptions()
+                                               .setConfs(confs)
+                                               
.setCache(CacheManager.getInstance(_ivy.getSettings(), cache))
+                                               
.setDestIvyPattern(destIvyPattern));
+               } catch (IOException e) {
+                       throw new RuntimeException(e);
+               }
        }
 
        public int retrieve(ModuleId moduleId, String[] confs, File cache, 
String destFilePattern) {
-               return _ivy.retrieve(moduleId, confs, cache, destFilePattern);
+               try {
+                       return _ivy.retrieve(
+                                       new ModuleRevisionId(moduleId, 
Ivy.getWorkingRevision()), 
+                                       destFilePattern, 
+                                       new RetrieveOptions()
+                                               .setConfs(confs)
+                                               
.setCache(CacheManager.getInstance(_ivy.getSettings(), cache)));
+               } catch (IOException e) {
+                       throw new RuntimeException(e);
+               }
        }
 
        public void setVariable(String varName, String value) {

Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/Main.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/Main.java?view=diff&rev=509221&r1=509220&r2=509221
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/Main.java (original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/Main.java Mon Feb 19 
07:37:10 2007
@@ -48,6 +48,7 @@
 import org.apache.ivy.core.module.id.ModuleRevisionId;
 import org.apache.ivy.core.report.ResolveReport;
 import org.apache.ivy.core.resolve.ResolveOptions;
+import org.apache.ivy.core.retrieve.RetrieveOptions;
 import org.apache.ivy.plugins.parser.xml.XmlModuleDescriptorWriter;
 import org.apache.ivy.plugins.report.XmlReportParser;
 import org.apache.ivy.util.DefaultMessageImpl;
@@ -275,7 +276,7 @@
 
             ResolveOptions resolveOptions = new ResolveOptions()
                    .setConfs(confs)
-                   .setCache(CacheManager.getInstance(ivy.getSettings(), 
cache))
+                   .setCache(cacheManager)
                    .setValidate(validate)
                    .setUseOrigin(line.hasOption("useOrigin"));
             ResolveReport report = ivy.resolve(
@@ -295,7 +296,14 @@
                 if (retrievePattern.indexOf("[") == -1) {
                     retrievePattern = retrievePattern + 
"/lib/[conf]/[artifact].[ext]";
                 }
-                ivy.retrieve(md.getModuleRevisionId().getModuleId(), confs, 
cache, retrievePattern, null, null, line.hasOption("sync"), 
line.hasOption("useOrigin"));
+                ivy.retrieve(
+                               md.getModuleRevisionId(), 
+                               retrievePattern, 
+                               new RetrieveOptions()
+                                       .setConfs(confs)
+                                       .setCache(cacheManager)
+                                                       
.setSync(line.hasOption("sync"))
+                                                       
.setUseOrigin(line.hasOption("useOrigin")));
             }
             if (line.hasOption("cachepath")) {
                 outputCachePath(ivy, cache, md, confs, 
line.getOptionValue("cachepath", "ivycachepath.txt"));

Modified: 
incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyArtifactReport.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyArtifactReport.java?view=diff&rev=509221&r1=509220&r2=509221
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyArtifactReport.java 
(original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyArtifactReport.java 
Mon Feb 19 07:37:10 2007
@@ -39,9 +39,10 @@
 import org.apache.ivy.core.cache.CacheManager;
 import org.apache.ivy.core.module.descriptor.Artifact;
 import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
-import org.apache.ivy.core.module.id.ModuleId;
+import org.apache.ivy.core.module.id.ModuleRevisionId;
 import org.apache.ivy.core.resolve.IvyNode;
 import org.apache.ivy.core.resolve.ResolveOptions;
+import org.apache.ivy.core.retrieve.RetrieveOptions;
 import org.apache.ivy.core.settings.IvySettings;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
@@ -100,8 +101,9 @@
 
         ensureResolved(isHaltonfailure(), false, null, null);
 
-        String _organisation = getProperty(null, settings, "ivy.organisation");
-        String _module = getProperty(null, settings, "ivy.module");
+        String organisation = getProperty(null, settings, "ivy.organisation");
+        String module = getProperty(null, settings, "ivy.module");
+        String revision = getProperty(Ivy.getWorkingRevision(), settings, 
"ivy.revision");
 
         if (_cache == null) {
             _cache = settings.getDefaultCache();
@@ -115,10 +117,10 @@
             }
         }
 
-        if (_organisation == null) {
+        if (organisation == null) {
             throw new BuildException("no organisation provided for ivy 
artifact report task: It can be set via a prior call to <resolve/>");
         }
-        if (_module == null) {
+        if (module == null) {
             throw new BuildException("no module name provided for ivy artifact 
report task: It can be set via a prior call to <resolve/>");
         }
         if (_conf == null) {
@@ -126,15 +128,22 @@
         }
         try {
             String[] confs = splitConfs(_conf);
-            IvyNode[] dependencies = ivy.getResolveEngine()
+            CacheManager cacheManager = CacheManager.getInstance(settings, 
_cache);
+                       IvyNode[] dependencies = ivy.getResolveEngine()
                .getDependencies((ModuleDescriptor) 
getProject().getReference("ivy.resolved.descriptor"), 
                                new ResolveOptions()
                                        .setConfs(confs)
-                                       
.setCache(CacheManager.getInstance(settings, _cache))
+                                       .setCache(cacheManager)
                                        .setValidate(doValidate(settings)),
                                null);
 
-            Map artifactsToCopy = ivy.determineArtifactsToCopy(new 
ModuleId(_organisation, _module), confs, _cache, _pattern, null);
+            Map artifactsToCopy = 
ivy.getRetrieveEngine().determineArtifactsToCopy(
+                       ModuleRevisionId.newInstance(organisation, module, 
revision), 
+                       _pattern, 
+                       new RetrieveOptions()
+                               .setConfs(confs)
+                               .setCache(cacheManager));
+            
             Map moduleRevToArtifactsMap = new HashMap();
             for (Iterator iter = artifactsToCopy.keySet().iterator(); 
iter.hasNext();) {
                 Artifact artifact = (Artifact) iter.next();

Modified: 
incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyPostResolveTask.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyPostResolveTask.java?view=diff&rev=509221&r1=509220&r2=509221
==============================================================================
--- 
incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyPostResolveTask.java 
(original)
+++ 
incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyPostResolveTask.java 
Mon Feb 19 07:37:10 2007
@@ -21,6 +21,7 @@
 
 import org.apache.ivy.Ivy;
 import org.apache.ivy.core.module.id.ModuleId;
+import org.apache.ivy.core.module.id.ModuleRevisionId;
 import org.apache.ivy.core.report.ResolveReport;
 import org.apache.ivy.core.settings.IvySettings;
 import org.apache.ivy.util.Message;
@@ -130,6 +131,10 @@
         }
         
         _artifactFilter = FilterHelper.getArtifactTypeFilter(_type);
+    }
+
+    protected ModuleRevisionId getResolvedMrid() {
+       return new ModuleRevisionId(getResolvedModuleId(), getRevision() == 
null ?Ivy.getWorkingRevision():getRevision());
     }
 
     protected ModuleId getResolvedModuleId() {

Modified: incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyRetrieve.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyRetrieve.java?view=diff&rev=509221&r1=509220&r2=509221
==============================================================================
--- incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyRetrieve.java 
(original)
+++ incubator/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyRetrieve.java Mon 
Feb 19 07:37:10 2007
@@ -17,6 +17,8 @@
  */
 package org.apache.ivy.ant;
 
+import org.apache.ivy.core.cache.CacheManager;
+import org.apache.ivy.core.retrieve.RetrieveOptions;
 import org.apache.ivy.util.filter.Filter;
 import org.apache.tools.ant.BuildException;
 
@@ -46,7 +48,17 @@
         _pattern = getProperty(_pattern, getSettings(), 
"ivy.retrieve.pattern");
         try {
                Filter artifactFilter = getArtifactFilter();
-            int targetsCopied = 
getIvyInstance().retrieve(getResolvedModuleId(), splitConfs(getConf()), 
getCache(), _pattern, _ivypattern, artifactFilter, _sync, isUseOrigin(), 
_symlink);
+            int targetsCopied = getIvyInstance().retrieve(
+                       getResolvedMrid(), 
+                       _pattern, 
+                       new RetrieveOptions()
+                               .setConfs(splitConfs(getConf()))
+                               
.setCache(CacheManager.getInstance(getIvyInstance().getSettings(), getCache()))
+                               .setDestIvyPattern(_ivypattern)
+                               .setArtifactFilter(artifactFilter)
+                               .setSync(_sync)
+                               .setUseOrigin(isUseOrigin())
+                               .setMakeSymlinks(_symlink));
             boolean haveTargetsBeenCopied = targetsCopied > 0;
             getProject().setProperty("ivy.nb.targets.copied", 
String.valueOf(targetsCopied));
             getProject().setProperty("ivy.targets.copied", 
String.valueOf(haveTargetsBeenCopied));

Modified: 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java?view=diff&rev=509221&r1=509220&r2=509221
==============================================================================
--- 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java
 (original)
+++ 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java
 Mon Feb 19 07:37:10 2007
@@ -35,6 +35,7 @@
 import java.util.Properties;
 import java.util.Set;
 
+import org.apache.ivy.Ivy;
 import org.apache.ivy.core.IvyContext;
 import org.apache.ivy.core.cache.CacheManager;
 import org.apache.ivy.core.event.EventManager;
@@ -63,7 +64,6 @@
 import org.apache.ivy.plugins.repository.url.URLResource;
 import org.apache.ivy.plugins.resolver.CacheResolver;
 import org.apache.ivy.plugins.resolver.DependencyResolver;
-import org.apache.ivy.util.HostUtil;
 import org.apache.ivy.util.Message;
 import org.apache.ivy.util.filter.Filter;
 
@@ -139,7 +139,7 @@
         ModuleDescriptor md = parser.parseDescriptor(_settings, ivySource, 
options.isValidate());
         String revision = options.getRevision();
         if (revision == null && md.getResolvedModuleRevisionId().getRevision() 
== null) {
-            revision = "working@"+HostUtil.getLocalHostName();
+            revision = Ivy.getWorkingRevision();
         }
         if (revision != null) {
             
md.setResolvedModuleRevisionId(ModuleRevisionId.newInstance(md.getModuleRevisionId(),
 revision));

Modified: 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngine.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngine.java?view=diff&rev=509221&r1=509220&r2=509221
==============================================================================
--- 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngine.java
 (original)
+++ 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngine.java
 Mon Feb 19 07:37:10 2007
@@ -19,6 +19,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.net.URL;
 import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -37,14 +38,16 @@
 import org.apache.ivy.core.cache.CacheManager;
 import org.apache.ivy.core.module.descriptor.Artifact;
 import org.apache.ivy.core.module.descriptor.DefaultArtifact;
+import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
 import org.apache.ivy.core.module.id.ModuleId;
 import org.apache.ivy.core.module.id.ModuleRevisionId;
 import org.apache.ivy.core.settings.IvySettings;
+import org.apache.ivy.plugins.parser.ModuleDescriptorParser;
+import org.apache.ivy.plugins.parser.ModuleDescriptorParserRegistry;
 import org.apache.ivy.plugins.report.XmlReportParser;
+import org.apache.ivy.plugins.repository.url.URLResource;
 import org.apache.ivy.util.FileUtil;
 import org.apache.ivy.util.Message;
-import org.apache.ivy.util.filter.Filter;
-import org.apache.ivy.util.filter.FilterHelper;
 
 public class RetrieveEngine {
        private IvySettings _settings;
@@ -61,37 +64,22 @@
      * an ivy report file, used as input for the copy
      * If such a file does not exist for any conf (resolve has not been called 
before ?)
      * then an IllegalStateException is thrown and nothing is copied.
+     * 
      */
-    public int retrieve(ModuleId moduleId, String[] confs, final File cache, 
String destFilePattern) {
-        return retrieve(moduleId, confs, cache, destFilePattern, null);
-    }
-    /**
-     * If destIvyPattern is null no ivy files will be copied.
-     */
-    public int retrieve(ModuleId moduleId, String[] confs, final File cache, 
String destFilePattern, String destIvyPattern) {
-       return retrieve(moduleId, confs, cache, destFilePattern, 
destIvyPattern, FilterHelper.NO_FILTER);
-    }
-    
-    public int retrieve(ModuleId moduleId, String[] confs, final File cache, 
String destFilePattern, String destIvyPattern, Filter artifactFilter) {
-       return retrieve(moduleId, confs, cache, destFilePattern, 
destIvyPattern, artifactFilter, false, false);
-    }
-    public int retrieve(ModuleId moduleId, String[] confs, final File cache, 
String destFilePattern, String destIvyPattern, Filter artifactFilter, boolean 
sync, boolean useOrigin) {
-       return retrieve(moduleId, confs, cache, destFilePattern, 
destIvyPattern, artifactFilter, sync, useOrigin, false);
-    }
-    public int retrieve(ModuleId moduleId, String[] confs, final File cache, 
String destFilePattern, String destIvyPattern, Filter artifactFilter, boolean 
sync, boolean useOrigin, boolean makeSymlinks) {
-       if (artifactFilter == null) {
-               artifactFilter = FilterHelper.NO_FILTER;
-       }
-       
-        Message.info(":: retrieving :: "+moduleId+(sync?" [sync]":""));
-        Message.info("\tconfs: "+Arrays.asList(confs));
+    public int retrieve(ModuleRevisionId mrid, String destFilePattern, 
RetrieveOptions options) throws IOException {
+       ModuleId moduleId = mrid.getModuleId();
+        Message.info(":: retrieving :: "+moduleId+(options.isSync()?" 
[sync]":""));
         long start = System.currentTimeMillis();
         
         destFilePattern = 
IvyPatternHelper.substituteVariables(destFilePattern, _settings.getVariables());
-        destIvyPattern = IvyPatternHelper.substituteVariables(destIvyPattern, 
_settings.getVariables());
-        CacheManager cacheManager = getCacheManager(cache);
+        String destIvyPattern = 
IvyPatternHelper.substituteVariables(options.getDestIvyPattern(), 
_settings.getVariables());
+        
+        CacheManager cacheManager = getCacheManager(options);
+        String[] confs = getConfs(mrid, options);
+        Message.info("\tconfs: "+Arrays.asList(confs));
+
         try {
-            Map artifactsToCopy = determineArtifactsToCopy(moduleId, confs, 
cache, destFilePattern, destIvyPattern, artifactFilter);
+            Map artifactsToCopy = determineArtifactsToCopy(mrid, 
destFilePattern, options);
             File fileRetrieveRoot = new 
File(IvyPatternHelper.getTokenRoot(destFilePattern));
             File ivyRetrieveRoot = destIvyPattern == null ? null : new 
File(IvyPatternHelper.getTokenRoot(destIvyPattern));
             Collection targetArtifactsStructure = new HashSet(); // Set(File) 
set of all paths which should be present at then end of retrieve (useful for 
sync) 
@@ -106,8 +94,9 @@
                                if ("ivy".equals(artifact.getType())) {
                                        archive = 
cacheManager.getIvyFileInCache(artifact.getModuleRevisionId());
                                } else {
-                                       archive = 
cacheManager.getArchiveFileInCache(artifact, 
cacheManager.getSavedArtifactOrigin(artifact), useOrigin);
-                                       if (!useOrigin && !archive.exists()) {
+                                       archive = 
cacheManager.getArchiveFileInCache(artifact, 
+                                                       
cacheManager.getSavedArtifactOrigin(artifact), options.isUseOrigin());
+                                       if (!options.isUseOrigin() && 
!archive.exists()) {
                                                // file is not available in 
cache, maybe the last resolve was performed with useOrigin=true.
                                                // we try to use the best we can
                                                archive = 
cacheManager.getArchiveFileInCache(artifact, 
cacheManager.getSavedArtifactOrigin(artifact));
@@ -120,7 +109,7 @@
                     File destFile = new File((String)it2.next());
                     if (!_settings.isCheckUpToDate() || !upToDate(archive, 
destFile)) {
                         Message.verbose("\t\tto "+destFile);
-                        if (makeSymlinks) {
+                        if (options.isMakeSymlinks()) {
                             FileUtil.symlink(archive, destFile, null, false);
                         } else {
                             FileUtil.copy(archive, destFile, null);
@@ -138,7 +127,7 @@
                 }
             }
             
-            if (sync) {
+            if (options.isSync()) {
                                Message.verbose("\tsyncing...");
                 Collection existingArtifacts = 
FileUtil.listAll(fileRetrieveRoot);
                 Collection existingIvys = ivyRetrieveRoot == null ? null : 
FileUtil.listAll(ivyRetrieveRoot);
@@ -165,9 +154,39 @@
         }
     }
 
-    public CacheManager getCacheManager(File cache) {
-       // TODO reuse instance
-               return new CacheManager(_settings, cache);
+       private String[] getConfs(ModuleRevisionId mrid, RetrieveOptions 
options) throws IOException {
+               String[] confs = options.getConfs();
+        if (confs == null || (confs.length == 1 && "*".equals(confs[0]))) {
+               try {
+                       File ivyFile = 
options.getCache().getResolvedIvyFileInCache(mrid);
+                       Message.verbose("no explicit confs given for retrieve, 
using ivy file: "+ivyFile);
+                       URL ivySource = ivyFile.toURL();
+                       URLResource res = new URLResource(ivySource);
+                       ModuleDescriptorParser parser = 
ModuleDescriptorParserRegistry.getInstance().getParser(res);
+                       Message.debug("using "+parser+" to parse "+ivyFile);
+                       ModuleDescriptor md = parser.parseDescriptor(_settings, 
ivySource, false);
+                       confs = md.getConfigurationsNames();
+                       options.setConfs(confs);
+               } catch (IOException e) {
+                       throw e;
+               } catch (Exception e) {
+                       IOException ioex = new IOException(e.getMessage());
+                       ioex.initCause(e);
+                               throw ioex;
+               }        
+        }
+               return confs;
+       }
+
+       private CacheManager getCacheManager(RetrieveOptions options) {
+               CacheManager cacheManager = options.getCache();
+        if (cacheManager == null) {  // ensure that a cache is configured
+               cacheManager = IvyContext.getContext().getCacheManager();
+               options.setCache(cacheManager);
+        } else {
+               IvyContext.getContext().setCache(cacheManager.getCache());
+        }
+               return cacheManager;
        }
 
        private void sync(Collection target, Collection existing) {
@@ -189,14 +208,12 @@
                }
        }
 
-       public Map determineArtifactsToCopy(ModuleId moduleId, String[] confs, 
final File cache, String destFilePattern, String destIvyPattern) throws 
ParseException, IOException {
-       return determineArtifactsToCopy(moduleId, confs, cache, 
destFilePattern, destIvyPattern, FilterHelper.NO_FILTER);
-    }
-    
-    public Map determineArtifactsToCopy(ModuleId moduleId, String[] confs, 
final File cache, String destFilePattern, String destIvyPattern, Filter 
artifactFilter) throws ParseException, IOException {
-        if (artifactFilter == null) {
-               artifactFilter = FilterHelper.NO_FILTER;
-        }
+       public Map determineArtifactsToCopy(ModuleRevisionId mrid, String 
destFilePattern, RetrieveOptions options) throws ParseException, IOException {
+               ModuleId moduleId = mrid.getModuleId();
+               
+        CacheManager cacheManager = getCacheManager(options);
+        String[] confs = getConfs(mrid, options);
+        String destIvyPattern = 
IvyPatternHelper.substituteVariables(options.getDestIvyPattern(), 
_settings.getVariables());
         
         // find what we must retrieve where
         final Map artifactsToCopy = new HashMap(); // Artifact source -> Set 
(String copyDestAbsolutePath)
@@ -205,9 +222,9 @@
         XmlReportParser parser = new XmlReportParser();
         for (int i = 0; i < confs.length; i++) {
             final String conf = confs[i];
-            Collection artifacts = new 
ArrayList(Arrays.asList(parser.getArtifacts(moduleId, conf, cache)));
+            Collection artifacts = new 
ArrayList(Arrays.asList(parser.getArtifacts(moduleId, conf, 
cacheManager.getCache())));
             if (destIvyPattern != null) {
-                ModuleRevisionId[] mrids = 
parser.getRealDependencyRevisionIds(moduleId, conf, cache);
+                ModuleRevisionId[] mrids = 
parser.getRealDependencyRevisionIds(moduleId, conf, cacheManager.getCache());
                 for (int j = 0; j < mrids.length; j++) {
                     artifacts.add(DefaultArtifact.newIvyArtifact(mrids[j], 
null));
                 }
@@ -216,7 +233,7 @@
                 Artifact artifact = (Artifact)iter.next();
                 String destPattern = "ivy".equals(artifact.getType()) ? 
destIvyPattern: destFilePattern;
                 
-                if (!"ivy".equals(artifact.getType()) && 
!artifactFilter.accept(artifact)) {
+                if (!"ivy".equals(artifact.getType()) && 
!options.getArtifactFilter().accept(artifact)) {
                        continue;       // skip this artifact, the filter 
didn't accept it!
                 }
                 

Added: 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveOptions.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveOptions.java?view=auto&rev=509221
==============================================================================
--- 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveOptions.java
 (added)
+++ 
incubator/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveOptions.java
 Mon Feb 19 07:37:10 2007
@@ -0,0 +1,125 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+package org.apache.ivy.core.retrieve;
+
+import org.apache.ivy.core.cache.CacheManager;
+import org.apache.ivy.util.filter.Filter;
+import org.apache.ivy.util.filter.FilterHelper;
+
+/**
+ * A set of options used during retrieve related tasks
+ * 
+ * @see RetrieveEngine
+ * @author Xavier Hanin
+ */
+public class RetrieveOptions {
+       /**
+        * The names of configurations to retrieve.
+        * If the array consists only of '*', then all configurations of 
+        * the module will be retrieved.
+        */
+       private String[] confs = new String[] {"*"};
+       
+       /**
+        * The cache manager to retrieve files from.
+        * If null, the default cache manager of the current Ivy instance will 
be used.
+        */
+       private CacheManager cache = null;
+       
+       /**
+        * The pattern to which ivy files should be retrieved. 
+        * If destIvyPattern is null no ivy files will be copied.
+        */
+       private String destIvyPattern = null;
+       
+       /**
+        * The filter to apply before retrieving artifacts.
+        */
+       private Filter artifactFilter = FilterHelper.NO_FILTER;
+       
+       /**
+        * True if a synchronisation of the destination directory should be 
done,
+        * false if a simple copy is enough.
+        * Synchronisation means that after the retrieve only files which have 
been
+        * retrieved will be present in the destination directory, which means 
+        * that some files may be deleted.
+        */
+       private boolean sync = false;
+       /**
+        * True if the original files should be used insteaad of their cache 
copy.
+        */
+       private boolean useOrigin = false;
+       
+       /**
+        * True if symbolic links should be created instead of plain copy.
+        * Works only on OS supporting symbolic links.
+        */
+       private boolean makeSymlinks = false;
+       
+       public Filter getArtifactFilter() {
+               return artifactFilter;
+       }
+       public RetrieveOptions setArtifactFilter(Filter artifactFilter) {
+               this.artifactFilter = artifactFilter;
+               return this;
+       }
+       public CacheManager getCache() {
+               return cache;
+       }
+       public RetrieveOptions setCache(CacheManager cacheManager) {
+               this.cache = cacheManager;
+               return this;
+       }
+       public String[] getConfs() {
+               return confs;
+       }
+       public RetrieveOptions setConfs(String[] confs) {
+               this.confs = confs;
+               return this;
+       }
+       public String getDestIvyPattern() {
+               return destIvyPattern;
+       }
+       public RetrieveOptions setDestIvyPattern(String destIvyPattern) {
+               this.destIvyPattern = destIvyPattern;
+               return this;
+       }
+       public boolean isMakeSymlinks() {
+               return makeSymlinks;
+       }
+       public RetrieveOptions setMakeSymlinks(boolean makeSymlinks) {
+               this.makeSymlinks = makeSymlinks;
+               return this;
+       }
+       public boolean isSync() {
+               return sync;
+       }
+       public RetrieveOptions setSync(boolean sync) {
+               this.sync = sync;
+               return this;
+       }
+       public boolean isUseOrigin() {
+               return useOrigin;
+       }
+       public RetrieveOptions setUseOrigin(boolean useOrigin) {
+               this.useOrigin = useOrigin;
+               return this;
+       }
+       
+       
+}

Modified: 
incubator/ivy/core/trunk/test/java/org/apache/ivy/core/retrieve/RetrieveTest.java
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/test/java/org/apache/ivy/core/retrieve/RetrieveTest.java?view=diff&rev=509221&r1=509220&r2=509221
==============================================================================
--- 
incubator/ivy/core/trunk/test/java/org/apache/ivy/core/retrieve/RetrieveTest.java
 (original)
+++ 
incubator/ivy/core/trunk/test/java/org/apache/ivy/core/retrieve/RetrieveTest.java
 Mon Feb 19 07:37:10 2007
@@ -28,7 +28,6 @@
 import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
 import org.apache.ivy.core.report.ResolveReport;
 import org.apache.ivy.core.resolve.ResolveOptions;
-import org.apache.ivy.util.filter.FilterHelper;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.taskdefs.Delete;
 
@@ -74,11 +73,11 @@
         assertNotNull(md);
         
         String pattern = 
"build/test/retrieve/[module]/[conf]/[artifact]-[revision].[ext]";
-        _ivy.retrieve(md.getModuleRevisionId().getModuleId(), 
md.getConfigurationsNames(), _cache, pattern);
+        _ivy.retrieve(md.getModuleRevisionId(), pattern, getRetrieveOptions());
         assertTrue(new File(IvyPatternHelper.substitute(pattern, "org1", 
"mod1.2", "2.0", "mod1.2", "jar", "jar", "default")).exists());
 
         pattern = 
"build/test/retrieve/[module]/[conf]/[type]s/[artifact]-[revision].[ext]";
-        _ivy.retrieve(md.getModuleRevisionId().getModuleId(), 
md.getConfigurationsNames(), _cache, pattern);
+        _ivy.retrieve(md.getModuleRevisionId(), pattern, getRetrieveOptions());
         assertTrue(new File(IvyPatternHelper.substitute(pattern, "org1", 
"mod1.2", "2.0", "mod1.2", "jar", "jar", "default")).exists());
     }
 
@@ -91,11 +90,11 @@
         assertNotNull(md);
         
         String pattern = 
"build/test/retrieve/[module]/[conf]/[artifact]-[revision].[ext]";
-        _ivy.retrieve(md.getModuleRevisionId().getModuleId(), 
md.getConfigurationsNames(), _cache, pattern, null, FilterHelper.NO_FILTER, 
false, false, true);
+        _ivy.retrieve(md.getModuleRevisionId(), pattern, 
getRetrieveOptions().setMakeSymlinks(true));
         assertLink(IvyPatternHelper.substitute(pattern, "org1", "mod1.2", 
"2.0", "mod1.2", "jar", "jar", "default"));
 
         pattern = 
"build/test/retrieve/[module]/[conf]/[type]s/[artifact]-[revision].[ext]";
-        _ivy.retrieve(md.getModuleRevisionId().getModuleId(), 
md.getConfigurationsNames(), _cache, pattern, null, FilterHelper.NO_FILTER, 
false, false, true);
+        _ivy.retrieve(md.getModuleRevisionId(), pattern, 
getRetrieveOptions().setMakeSymlinks(true));
         assertLink(IvyPatternHelper.substitute(pattern, "org1", "mod1.2", 
"2.0", "mod1.2", "jar", "jar", "default"));
     }
 
@@ -129,15 +128,19 @@
         assertNotNull(md);
         
         String pattern = 
"build/test/${retrieve.dir}/[module]/[conf]/[artifact]-[revision].[ext]";
-        _ivy.retrieve(md.getModuleRevisionId().getModuleId(), 
md.getConfigurationsNames(), _cache, pattern);
+        _ivy.retrieve(md.getModuleRevisionId(), pattern, getRetrieveOptions());
         pattern = IvyPatternHelper.substituteVariable(pattern, "retrieve.dir", 
"retrieve");
         assertTrue(new File(IvyPatternHelper.substitute(pattern, "org1", 
"mod1.2", "2.0", "mod1.2", "jar", "jar", "default")).exists());
 
         pattern = 
"build/test/${retrieve.dir}/[module]/[conf]/[type]s/[artifact]-[revision].[ext]";
-        _ivy.retrieve(md.getModuleRevisionId().getModuleId(), 
md.getConfigurationsNames(), _cache, pattern);
+        _ivy.retrieve(md.getModuleRevisionId(), pattern, getRetrieveOptions());
         pattern = IvyPatternHelper.substituteVariable(pattern, "retrieve.dir", 
"retrieve");
         assertTrue(new File(IvyPatternHelper.substitute(pattern, "org1", 
"mod1.2", "2.0", "mod1.2", "jar", "jar", "default")).exists());
     }
+
+       private RetrieveOptions getRetrieveOptions() {
+               return new 
RetrieveOptions().setCache(CacheManager.getInstance(_ivy.getSettings(), 
_cache));
+       }
 
     
     private ResolveOptions getResolveOptions(String[] confs) {


Reply via email to