You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by hi...@apache.org on 2012/08/19 19:04:17 UTC

svn commit: r1374795 - in /ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse: cpcontainer/IvyClasspathContainerMapper.java resolve/IvyResolver.java resolve/ResolveResult.java

Author: hibou
Date: Sun Aug 19 17:04:15 2012
New Revision: 1374795

URL: http://svn.apache.org/viewvc?rev=1374795&view=rev
Log:
Restore the artifact gathering by dependency (destroyed by r1374767) which makes the source attachement work with Maven repositories

Modified:
    ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerMapper.java
    ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/resolve/IvyResolver.java
    ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/resolve/ResolveResult.java

Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerMapper.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerMapper.java?rev=1374795&r1=1374794&r2=1374795&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerMapper.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathContainerMapper.java Sun Aug 19 17:04:15 2012
@@ -71,7 +71,7 @@ public class IvyClasspathContainerMapper
 
     private final Collection/* <ArtifactDownloadReport> */all;
 
-    private final Map/* <ModuleRevisionId, List<Artifact>> */artifactsByDependency;
+    private final Map/* <ModuleRevisionId, Artifact[]> */artifactsByDependency;
 
     private final Map/*
                       * <ArtifactDownloadReport , Set<String>>
@@ -222,12 +222,12 @@ public class IvyClasspathContainerMapper
         // we haven't found source artifact in resolved artifacts,
         // let's look in the module declaring the artifact
         ModuleRevisionId mrid = artifact.getId().getModuleRevisionId();
-        List artifacts = (List/*<Artifact>*/) artifactsByDependency.get(mrid);
+        Artifact[] artifacts = (Artifact[]) artifactsByDependency.get(mrid);
         if (artifacts != null) {
             Artifact foundArtifact = null;
             int nbFound = 0;
-            for (int i = 0; i < artifacts.size(); i++) {
-                Artifact metaArtifact = (Artifact) artifacts.get(i);
+            for (int i = 0; i < artifacts.length; i++) {
+                Artifact metaArtifact = artifacts[i];
                 if (matcher.match(metaArtifact)) {
                     if (matcher.matchName(artifact, metaArtifact.getName())) {
                         // we've found a matching artifact, let's provision it

Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/resolve/IvyResolver.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/resolve/IvyResolver.java?rev=1374795&r1=1374794&r2=1374795&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/resolve/IvyResolver.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/resolve/IvyResolver.java Sun Aug 19 17:04:15 2012
@@ -29,22 +29,20 @@ import java.util.Set;
 import org.apache.ivy.Ivy;
 import org.apache.ivy.core.IvyContext;
 import org.apache.ivy.core.IvyPatternHelper;
-import org.apache.ivy.core.event.download.PrepareDownloadEvent;
-import org.apache.ivy.core.module.descriptor.Artifact;
+import org.apache.ivy.core.module.descriptor.DefaultDependencyDescriptor;
 import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
+import org.apache.ivy.core.module.id.ModuleRevisionId;
 import org.apache.ivy.core.report.ArtifactDownloadReport;
-import org.apache.ivy.core.report.DownloadReport;
-import org.apache.ivy.core.report.DownloadStatus;
 import org.apache.ivy.core.report.ResolveReport;
-import org.apache.ivy.core.resolve.DownloadOptions;
 import org.apache.ivy.core.resolve.IvyNode;
+import org.apache.ivy.core.resolve.ResolveData;
 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.plugins.report.XmlReportParser;
 import org.apache.ivy.plugins.resolver.DependencyResolver;
 import org.apache.ivy.util.Message;
 import org.apache.ivy.util.filter.ArtifactTypeFilter;
-import org.apache.ivy.util.filter.Filter;
 import org.apache.ivyde.eclipse.IvyPlugin;
 import org.apache.ivyde.eclipse.cpcontainer.IvyClasspathUtil;
 import org.apache.ivyde.eclipse.workspaceresolver.WorkspaceResolver;
@@ -206,6 +204,7 @@ public class IvyResolver {
                     XmlReportParser parser = new XmlReportParser();
                     parser.parse(report);
                     result.addArtifactReports(parser.getArtifactReports());
+                    findAllArtifactOnRefresh(ivy, parser, result);
                 } catch (ParseException e) {
                     Message.info("\n\nIVYDE: Error while parsing the report " + report
                             + ". Falling back by doing a resolve again.");
@@ -247,9 +246,47 @@ public class IvyResolver {
         }
         result.addArtifactReports(artifactReports);
 
+        collectArtifactsByDependency(report, result);
+
         return result;
     }
 
+    /**
+     * Populate the map of artifact. The map should be populated by metadata in cache as this is
+     * called in the refresh process.
+     * 
+     * @param parser
+     * @throws ParseException
+     */
+    private void findAllArtifactOnRefresh(Ivy ivy, XmlReportParser parser, ResolveResult result)
+            throws ParseException {
+        ModuleRevisionId[] dependencyMrdis = parser.getDependencyRevisionIds();
+        for (int iDep = 0; iDep < dependencyMrdis.length; iDep++) {
+            DependencyResolver depResolver = ivy.getSettings().getResolver(dependencyMrdis[iDep]);
+            DefaultDependencyDescriptor depDescriptor = new DefaultDependencyDescriptor(
+                    dependencyMrdis[iDep], false);
+            ResolveOptions options = new ResolveOptions();
+            options.setRefresh(true);
+            options.setUseCacheOnly(true);
+            ResolvedModuleRevision dependency = depResolver.getDependency(depDescriptor,
+                new ResolveData(ivy.getResolveEngine(), options));
+            if (dependency != null) {
+                result.putArtifactsForDep(dependencyMrdis[iDep], dependency.getDescriptor()
+                        .getAllArtifacts());
+            }
+        }
+    }
+
+    private void collectArtifactsByDependency(ResolveReport r, ResolveResult result) {
+        for (Iterator it = r.getDependencies().iterator(); it.hasNext();) {
+            IvyNode node = (IvyNode) it.next();
+            if (node.getDescriptor() != null) {
+                result.putArtifactsForDep(node.getResolvedId(), node.getDescriptor()
+                        .getAllArtifacts());
+            }
+        }
+    }
+
     private IStatus maybeRetrieve(Ivy ivy, ModuleDescriptor md, ResolveResult result,
             IProgressMonitor monitor) throws IOException {
         if (retrievePattern == null || project == null) {

Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/resolve/ResolveResult.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/resolve/ResolveResult.java?rev=1374795&r1=1374794&r2=1374795&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/resolve/ResolveResult.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/resolve/ResolveResult.java Sun Aug 19 17:04:15 2012
@@ -27,6 +27,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.ivy.core.module.descriptor.Artifact;
+import org.apache.ivy.core.module.id.ModuleRevisionId;
 import org.apache.ivy.core.report.ArtifactDownloadReport;
 import org.apache.ivy.core.report.DownloadStatus;
 import org.apache.ivy.core.report.ResolveReport;
@@ -45,7 +46,7 @@ public class ResolveResult {
 
     private final ResolveReport report;
 
-    private Map/* <ModuleRevisionId, List<Artifact>> */artifactsByDependency = new HashMap();
+    private Map/* <ModuleRevisionId, Artifact[]> */artifactsByDependency = new HashMap();
 
     /**
      * Mapping of resolved artifact to their retrieved path, <code>null</code> if there were no
@@ -100,18 +101,10 @@ public class ResolveResult {
 
     void addArtifactReports(ArtifactDownloadReport[] reports) {
         artifactReports.addAll(Arrays.asList(reports));
-        for (int i = 0; i < reports.length; i++) {
-            if (reports[i].getDownloadStatus() != DownloadStatus.FAILED) {
-                Artifact a = reports[i].getArtifact();
-                List/* <Artifact> */artifacts = (List) artifactsByDependency.get(a
-                        .getModuleRevisionId());
-                if (artifacts == null) {
-                    artifacts = new ArrayList();
-                    artifactsByDependency.put(a.getModuleRevisionId(), artifacts);
-                }
-                artifacts.add(a);
-            }
-        }
+    }
+
+    void putArtifactsForDep(ModuleRevisionId resolvedId, Artifact[] allArtifacts) {
+        artifactsByDependency.put(resolvedId, allArtifacts);
     }
 
     /**
@@ -126,7 +119,7 @@ public class ResolveResult {
      * 
      * @return the reports of the artifacts by dependency
      */
-    public Map /* <ModuleRevisionId, List<Artifact>> */getArtifactsByDependency() {
+    public Map /* <ModuleRevisionId, Artifact[]> */getArtifactsByDependency() {
         return artifactsByDependency;
     }