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 2010/08/23 18:02:50 UTC
svn commit: r988166 - in
/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse:
./ cpcontainer/ retrieve/ ui/menu/
Author: hibou
Date: Mon Aug 23 16:02:50 2010
New Revision: 988166
URL: http://svn.apache.org/viewvc?rev=988166&view=rev
Log:
IVYDE-56
* the standalone retrieve needs a resolve
Added:
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyResolver.java (contents, props changed)
- copied, changed from r988101, ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJobThread.java
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathResolver.java (contents, props changed)
- copied, changed from r988101, ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJobThread.java
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/retrieve/IvyRetriever.java (with props)
Removed:
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJobThread.java
Modified:
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJob.java
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/IvyMenuContributionItem.java
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/RetrieveAction.java
Copied: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyResolver.java (from r988101, ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJobThread.java)
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyResolver.java?p2=ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyResolver.java&p1=ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJobThread.java&r1=988101&r2=988166&rev=988166&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJobThread.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyResolver.java Mon Aug 23 16:02:50 2010
@@ -15,7 +15,7 @@
* limitations under the License.
*
*/
-package org.apache.ivyde.eclipse.cpcontainer;
+package org.apache.ivyde.eclipse;
import java.io.File;
import java.io.IOException;
@@ -31,7 +31,6 @@ import java.util.Map;
import java.util.Set;
import org.apache.ivy.Ivy;
-import org.apache.ivy.core.IvyPatternHelper;
import org.apache.ivy.core.module.descriptor.DefaultDependencyDescriptor;
import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
import org.apache.ivy.core.module.id.ModuleRevisionId;
@@ -42,125 +41,94 @@ import org.apache.ivy.core.resolve.IvyNo
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.ivyde.eclipse.FakeProjectManager;
-import org.apache.ivyde.eclipse.IvyPlugin;
-import org.apache.ivyde.eclipse.retrieve.RetrieveSetup;
-import org.eclipse.core.resources.IFolder;
+import org.apache.ivyde.eclipse.cpcontainer.IvyResolveJobListener;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Status;
-import org.eclipse.jdt.core.IClasspathEntry;
/**
* Eclipse classpath container that will contain the ivy resolved entries.
*/
-public class IvyResolveJobThread extends Thread {
+public class IvyResolver {
private static final int MONITOR_LENGTH = 1000;
- private final Ivy ivy;
+ protected final Ivy ivy;
- private final IProgressMonitor monitor;
+ protected final IProgressMonitor monitor;
- private final IvyClasspathContainerConfiguration conf;
-
- private final ModuleDescriptor md;
+ protected final ModuleDescriptor md;
private final boolean usePreviousResolveIfExist;
- private IStatus status = null;
-
- private IClasspathEntry[] classpathEntries = null;
-
private LinkedHashSet/* <ArtifactDownloadReport> */all;
private List problemMessages;
- private String[] confs;
+ protected String[] confs;
private Map artifactsByDependency = new HashMap();
- /**
- * Mapping of resolved artifact to their retrieved path, <code>null</code> if there were no
- * retrieve
- * <p>
- * The paths may be relative It shouldn't be an issue has every relative path should be relative
- * to the eclipse project FIXME: not sure why the Ivy API is returning a set of paths...
- */
- private Map/* <ArtifactDownloadReport, Set<String>> */retrievedArtifacts = null;
+ private final String ivyXmlPath;
+
+ protected final IProject project;
- public IvyResolveJobThread(IvyClasspathContainerConfiguration conf, Ivy ivy,
- ModuleDescriptor md, boolean usePreviousResolveIfExist, IProgressMonitor monitor) {
+ public IvyResolver(String ivyXmlPath, Ivy ivy, ModuleDescriptor md,
+ boolean usePreviousResolveIfExist, IProgressMonitor monitor, List confInput,
+ IProject project) {
+ this.project = project;
+ this.ivyXmlPath = ivyXmlPath;
this.ivy = ivy;
this.md = md;
this.usePreviousResolveIfExist = usePreviousResolveIfExist;
this.monitor = monitor;
- this.conf = conf;
+ computeConfs(confInput);
}
- public IStatus getStatus() {
- return status;
- }
-
- public IClasspathEntry[] getClasspathEntries() {
- return classpathEntries;
- }
-
- public void run() {
+ public IStatus resolve() {
try {
ivy.pushContext();
IvyResolveJobListener ivyResolveJobListener = new IvyResolveJobListener(monitor);
ivy.getEventManager().addIvyListener(ivyResolveJobListener);
- monitor.beginTask("Resolve of " + conf.toString(), MONITOR_LENGTH);
- monitor.setTaskName("Resolve of " + conf.toString());
+ monitor.beginTask("Resolve of " + toString(), MONITOR_LENGTH);
+ monitor.setTaskName("Resolve of " + toString());
// context Classloader hook for commons logging used by httpclient
// It will also be used by the SaxParserFactory in Ivy
ClassLoader old = Thread.currentThread().getContextClassLoader();
- Thread.currentThread()
- .setContextClassLoader(IvyResolveJobThread.class.getClassLoader());
+ Thread.currentThread().setContextClassLoader(IvyResolver.class.getClassLoader());
try {
- computeConfs();
if (usePreviousResolveIfExist) {
- if (!resolveWithPrevious()) {
- // resolve canceled
- return;
+ IStatus status = resolveWithPrevious();
+ if (!status.isOK()) {
+ return status;
}
} else {
- Message.info("\n\nIVYDE: calling resolve on " + conf.getIvyXmlPath() + "\n");
- if (!resolve()) {
- // resolve canceled
- return;
+ Message.info("\n\nIVYDE: calling resolve on " + ivyXmlPath + "\n");
+ IStatus status = doResolve();
+ if (!status.isOK()) {
+ return status;
}
}
- IvyClasspathContainerMapper mapper = new IvyClasspathContainerMapper(monitor, ivy,
- conf, all, artifactsByDependency, retrievedArtifacts);
-
- warnIfDuplicates(mapper);
-
- classpathEntries = mapper.map();
+ postResolveOrRefresh();
} catch (ParseException e) {
- String errorMsg = "Error while parsing the ivy file " + conf.getIvyXmlPath() + "\n"
+ String errorMsg = "Error while parsing the ivy file " + ivyXmlPath + "\n"
+ e.getMessage();
Message.error(errorMsg);
- status = new Status(IStatus.ERROR, IvyPlugin.ID, IStatus.ERROR, errorMsg, e);
- return;
+ return new Status(IStatus.ERROR, IvyPlugin.ID, IStatus.ERROR, errorMsg, e);
} catch (Exception e) {
- String errorMsg = "Error while resolving dependencies for " + conf.getIvyXmlPath()
- + "\n" + e.getMessage();
+ String errorMsg = "Error while resolving dependencies for " + ivyXmlPath + "\n"
+ + e.getMessage();
Message.error(errorMsg);
- status = new Status(IStatus.ERROR, IvyPlugin.ID, IStatus.ERROR, errorMsg, e);
- return;
+ return new Status(IStatus.ERROR, IvyPlugin.ID, IStatus.ERROR, errorMsg, e);
} finally {
Thread.currentThread().setContextClassLoader(old);
monitor.done();
@@ -174,20 +142,23 @@ public class IvyResolveJobThread extends
multiStatus.add(new Status(IStatus.ERROR, IvyPlugin.ID, IStatus.ERROR,
(String) iter.next(), null));
}
- status = multiStatus;
- return;
+ return multiStatus;
}
- status = Status.OK_STATUS;
+ return Status.OK_STATUS;
} catch (Throwable e) {
- status = new Status(IStatus.ERROR, IvyPlugin.ID, IStatus.ERROR, "The resolve job of "
- + conf + " has unexpectedly stopped", e);
+ return new Status(IStatus.ERROR, IvyPlugin.ID, IStatus.ERROR, "The resolve job of "
+ + toString() + " has unexpectedly stopped", e);
}
}
- private void computeConfs() {
+ protected void postResolveOrRefresh() throws IOException {
+ // nothing to do by default
+ }
+
+ private void computeConfs(List/* <String> */confInput) {
Set configurations = new HashSet();
- configurations.addAll(conf.getConfs());
+ configurations.addAll(confInput);
if (configurations.contains("*")) {
confs = md.getConfigurationsNames();
@@ -196,7 +167,7 @@ public class IvyResolveJobThread extends
}
}
- private boolean resolveWithPrevious() throws ParseException, IOException {
+ private IStatus resolveWithPrevious() throws ParseException, IOException {
all = new LinkedHashSet();
problemMessages = new ArrayList();
// we check if all required configurations have been
@@ -223,12 +194,12 @@ public class IvyResolveJobThread extends
}
if (!parsingOk) {
// no resolve previously done for at least one conf... we do it now
- return resolve();
+ return doResolve();
}
- return true;
+ return Status.OK_STATUS;
}
- private boolean resolve() throws ParseException, IOException {
+ private IStatus doResolve() throws ParseException, IOException {
ResolveOptions resolveOption = new ResolveOptions().setConfs(confs);
resolveOption.setValidate(ivy.getSettings().doValidate());
ResolveReport report = ivy.resolve(md, resolveOption);
@@ -249,11 +220,15 @@ public class IvyResolveJobThread extends
confs = report.getConfigurations();
artifactsByDependency.putAll(getArtifactsByDependency(report));
if (monitor.isCanceled()) {
- status = Status.CANCEL_STATUS;
- return false;
+ return Status.CANCEL_STATUS;
}
- maybeRetrieve(report);
- return true;
+
+ postDoResolve(report);
+ return Status.OK_STATUS;
+ }
+
+ protected void postDoResolve(ResolveReport report) throws IOException {
+ // nothing to do by default
}
/**
@@ -281,55 +256,6 @@ public class IvyResolveJobThread extends
}
}
- /**
- * Trigger a warn if there are duplicates entries due to configuration conflict.
- * <p>
- * TODO: the algorithm can be more clever and find which configuration are conflicting.
- *
- */
- private void warnIfDuplicates(IvyClasspathContainerMapper mapper) {
- ArtifactDownloadReport[] reports = (ArtifactDownloadReport[]) all
- .toArray(new ArtifactDownloadReport[all.size()]);
-
- Set duplicates = new HashSet();
-
- for (int i = 0; i < reports.length - 1; i++) {
- if (!mapper.accept(reports[i].getArtifact())) {
- continue;
- }
-
- ModuleRevisionId mrid1 = reports[i].getArtifact().getModuleRevisionId();
-
- for (int j = i + 1; j < reports.length; j++) {
- if (!mapper.accept(reports[j].getArtifact())) {
- continue;
- }
- ModuleRevisionId mrid2 = reports[j].getArtifact().getModuleRevisionId();
- if (mrid1.getModuleId().equals(mrid2.getModuleId())
- && !mrid1.getRevision().equals(mrid2.getRevision())) {
- duplicates.add(mrid1.getModuleId());
- break;
- }
- }
- }
-
- if (duplicates.isEmpty()) {
- return;
- }
-
- StringBuffer buffer = new StringBuffer("There are some duplicates entries due to conflicts"
- + " between the resolved configurations " + conf.getConfs());
- buffer.append(":\n - ");
- Iterator it = duplicates.iterator();
- while (it.hasNext()) {
- buffer.append(it.next());
- if (it.hasNext()) {
- buffer.append("\n - ");
- }
- }
- ivy.getLoggerEngine().log(buffer.toString(), Message.MSG_WARN);
- }
-
private Map/* <ModuleRevisionId, Artifact[]> */getArtifactsByDependency(ResolveReport r) {
Map result = new HashMap();
for (Iterator it = r.getDependencies().iterator(); it.hasNext();) {
@@ -341,54 +267,7 @@ public class IvyResolveJobThread extends
return result;
}
- private void maybeRetrieve(ResolveReport report) throws IOException {
- if (!conf.isInheritedRetrievedClasspath()) {
- return;
- }
- if (FakeProjectManager.isFake(conf.getJavaProject())) {
- return;
- }
- RetrieveSetup setup = conf.getInheritedRetrievedClasspathSetup();
- IProject project = conf.getJavaProject().getProject();
- String pattern = project.getLocation().toPortableString() + "/"
- + setup.getRetrievePattern();
- monitor.setTaskName("retrieving dependencies in " + pattern);
- RetrieveOptions options = new RetrieveOptions();
- options.setSync(setup.isRetrieveSync());
- options.setResolveId(report.getResolveId());
- options.setConfs(confs);
- String inheritedRetrieveTypes = setup.getRetrieveTypes();
- if (inheritedRetrieveTypes != null && !inheritedRetrieveTypes.equals("*")) {
- options.setArtifactFilter(new ArtifactTypeFilter(IvyClasspathUtil
- .split(inheritedRetrieveTypes)));
- }
-
- // Actually do the retrieve
- // FIXME here we will parse a report we already have
- // with a better Java API, we could do probably better
- int numberOfItemsRetrieved = ivy.retrieve(md.getModuleRevisionId(), pattern, options);
- if (numberOfItemsRetrieved > 0) {
- // Only refresh if we actually retrieved a file.
- String refreshPath = IvyPatternHelper.getTokenRoot(setup.getRetrievePattern());
- IFolder folder = project.getFolder(refreshPath);
- RefreshFolderJob refreshFolderJob = new RefreshFolderJob(folder);
- refreshFolderJob.schedule();
- }
-
- // recompute the files which has been copied to build a classpath
- String resolvedPattern = IvyPatternHelper.substituteVariables(pattern, ivy.getSettings()
- .getVariables());
- try {
- // FIXME same as above
- retrievedArtifacts = ivy.getRetrieveEngine().determineArtifactsToCopy(
- md.getModuleRevisionId(), resolvedPattern, options);
- } catch (ParseException e) {
- // ooops, failed to parse a report we already have...
- IvyPlugin.log(IStatus.ERROR,
- "failed to parse a resolve report in order to do the retrieve", e);
- return;
- }
- all = new LinkedHashSet(retrievedArtifacts.keySet());
+ public String toString() {
+ return ivyXmlPath + confs + " in " + project.getName();
}
-
}
Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyResolver.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyResolver.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/IvyResolver.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathResolver.java (from r988101, ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJobThread.java)
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathResolver.java?p2=ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathResolver.java&p1=ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJobThread.java&r1=988101&r2=988166&rev=988166&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJobThread.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathResolver.java Mon Aug 23 16:02:50 2010
@@ -17,74 +17,45 @@
*/
package org.apache.ivyde.eclipse.cpcontainer;
-import java.io.File;
import java.io.IOException;
import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
-import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.ivy.Ivy;
import org.apache.ivy.core.IvyPatternHelper;
-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.ConfigurationResolveReport;
import org.apache.ivy.core.report.ResolveReport;
-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.ivyde.eclipse.FakeProjectManager;
import org.apache.ivyde.eclipse.IvyPlugin;
+import org.apache.ivyde.eclipse.IvyResolver;
import org.apache.ivyde.eclipse.retrieve.RetrieveSetup;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.MultiStatus;
-import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.core.IClasspathEntry;
/**
* Eclipse classpath container that will contain the ivy resolved entries.
*/
-public class IvyResolveJobThread extends Thread {
-
- private static final int MONITOR_LENGTH = 1000;
-
- private final Ivy ivy;
-
- private final IProgressMonitor monitor;
+public class IvyClasspathResolver extends IvyResolver {
private final IvyClasspathContainerConfiguration conf;
- private final ModuleDescriptor md;
-
- private final boolean usePreviousResolveIfExist;
-
- private IStatus status = null;
-
private IClasspathEntry[] classpathEntries = null;
private LinkedHashSet/* <ArtifactDownloadReport> */all;
- private List problemMessages;
-
- private String[] confs;
-
private Map artifactsByDependency = new HashMap();
/**
@@ -96,189 +67,28 @@ public class IvyResolveJobThread extends
*/
private Map/* <ArtifactDownloadReport, Set<String>> */retrievedArtifacts = null;
- public IvyResolveJobThread(IvyClasspathContainerConfiguration conf, Ivy ivy,
+ public IvyClasspathResolver(IvyClasspathContainerConfiguration conf, Ivy ivy,
ModuleDescriptor md, boolean usePreviousResolveIfExist, IProgressMonitor monitor) {
- this.ivy = ivy;
- this.md = md;
- this.usePreviousResolveIfExist = usePreviousResolveIfExist;
- this.monitor = monitor;
+ super(conf.getIvyXmlPath(), ivy, md, usePreviousResolveIfExist, monitor, conf.getConfs(),
+ conf.getJavaProject().getProject());
this.conf = conf;
}
- public IStatus getStatus() {
- return status;
- }
-
public IClasspathEntry[] getClasspathEntries() {
return classpathEntries;
}
- public void run() {
- try {
- ivy.pushContext();
- IvyResolveJobListener ivyResolveJobListener = new IvyResolveJobListener(monitor);
- ivy.getEventManager().addIvyListener(ivyResolveJobListener);
-
- monitor.beginTask("Resolve of " + conf.toString(), MONITOR_LENGTH);
- monitor.setTaskName("Resolve of " + conf.toString());
-
- // context Classloader hook for commons logging used by httpclient
- // It will also be used by the SaxParserFactory in Ivy
- ClassLoader old = Thread.currentThread().getContextClassLoader();
- Thread.currentThread()
- .setContextClassLoader(IvyResolveJobThread.class.getClassLoader());
- try {
- computeConfs();
-
- if (usePreviousResolveIfExist) {
- if (!resolveWithPrevious()) {
- // resolve canceled
- return;
- }
- } else {
- Message.info("\n\nIVYDE: calling resolve on " + conf.getIvyXmlPath() + "\n");
- if (!resolve()) {
- // resolve canceled
- return;
- }
- }
-
- IvyClasspathContainerMapper mapper = new IvyClasspathContainerMapper(monitor, ivy,
- conf, all, artifactsByDependency, retrievedArtifacts);
-
- warnIfDuplicates(mapper);
+ protected void postResolveOrRefresh() {
+ IvyClasspathContainerMapper mapper = new IvyClasspathContainerMapper(monitor, ivy, conf,
+ all, artifactsByDependency, retrievedArtifacts);
- classpathEntries = mapper.map();
- } catch (ParseException e) {
- String errorMsg = "Error while parsing the ivy file " + conf.getIvyXmlPath() + "\n"
- + e.getMessage();
- Message.error(errorMsg);
- status = new Status(IStatus.ERROR, IvyPlugin.ID, IStatus.ERROR, errorMsg, e);
- return;
- } catch (Exception e) {
- String errorMsg = "Error while resolving dependencies for " + conf.getIvyXmlPath()
- + "\n" + e.getMessage();
- Message.error(errorMsg);
- status = new Status(IStatus.ERROR, IvyPlugin.ID, IStatus.ERROR, errorMsg, e);
- return;
- } finally {
- Thread.currentThread().setContextClassLoader(old);
- monitor.done();
- ivy.getEventManager().removeIvyListener(ivyResolveJobListener);
- }
+ warnIfDuplicates(mapper);
- if (!problemMessages.isEmpty()) {
- MultiStatus multiStatus = new MultiStatus(IvyPlugin.ID, IStatus.ERROR,
- "Impossible to resolve dependencies of " + md.getModuleRevisionId(), null);
- for (Iterator iter = problemMessages.iterator(); iter.hasNext();) {
- multiStatus.add(new Status(IStatus.ERROR, IvyPlugin.ID, IStatus.ERROR,
- (String) iter.next(), null));
- }
- status = multiStatus;
- return;
- }
-
- status = Status.OK_STATUS;
- } catch (Throwable e) {
- status = new Status(IStatus.ERROR, IvyPlugin.ID, IStatus.ERROR, "The resolve job of "
- + conf + " has unexpectedly stopped", e);
- }
- }
-
- private void computeConfs() {
- Set configurations = new HashSet();
- configurations.addAll(conf.getConfs());
-
- if (configurations.contains("*")) {
- confs = md.getConfigurationsNames();
- } else {
- confs = (String[]) configurations.toArray(new String[configurations.size()]);
- }
+ classpathEntries = mapper.map();
}
- private boolean resolveWithPrevious() throws ParseException, IOException {
- all = new LinkedHashSet();
- problemMessages = new ArrayList();
- // we check if all required configurations have been
- // resolved
- boolean parsingOk = true;
- for (int i = 0; i < confs.length && parsingOk; i++) {
- File report = ivy.getResolutionCacheManager().getConfigurationResolveReportInCache(
- ResolveOptions.getDefaultResolveId(md), confs[i]);
- parsingOk = false;
- if (report.exists()) {
- // found a report, try to parse it.
- try {
- XmlReportParser parser = new XmlReportParser();
- parser.parse(report);
- all.addAll(Arrays.asList(parser.getArtifactReports()));
- parsingOk = true;
- findAllArtifactOnRefresh(parser);
- } catch (ParseException e) {
- Message.info("\n\nIVYDE: Error while parsing the report " + report
- + ". Falling back by doing a resolve again.");
- // it fails, so let's try resolving
- }
- }
- }
- if (!parsingOk) {
- // no resolve previously done for at least one conf... we do it now
- return resolve();
- }
- return true;
- }
-
- private boolean resolve() throws ParseException, IOException {
- ResolveOptions resolveOption = new ResolveOptions().setConfs(confs);
- resolveOption.setValidate(ivy.getSettings().doValidate());
- ResolveReport report = ivy.resolve(md, resolveOption);
- problemMessages = report.getAllProblemMessages();
-
- all = new LinkedHashSet();
- for (int i = 0; i < confs.length; i++) {
- ConfigurationResolveReport configurationReport = report
- .getConfigurationReport(confs[i]);
- Set revisions = configurationReport.getModuleRevisionIds();
- for (Iterator it = revisions.iterator(); it.hasNext();) {
- ModuleRevisionId revId = (ModuleRevisionId) it.next();
- ArtifactDownloadReport[] aReports = configurationReport.getDownloadReports(revId);
- all.addAll(Arrays.asList(aReports));
- }
- }
-
- confs = report.getConfigurations();
- artifactsByDependency.putAll(getArtifactsByDependency(report));
- if (monitor.isCanceled()) {
- status = Status.CANCEL_STATUS;
- return false;
- }
+ protected void postDoResolve(ResolveReport report) throws IOException {
maybeRetrieve(report);
- return true;
- }
-
- /**
- * 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(XmlReportParser parser) 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) {
- artifactsByDependency.put(dependencyMrdis[iDep], dependency.getDescriptor()
- .getAllArtifacts());
- }
- }
}
/**
@@ -330,17 +140,6 @@ public class IvyResolveJobThread extends
ivy.getLoggerEngine().log(buffer.toString(), Message.MSG_WARN);
}
- private Map/* <ModuleRevisionId, Artifact[]> */getArtifactsByDependency(ResolveReport r) {
- Map result = new HashMap();
- for (Iterator it = r.getDependencies().iterator(); it.hasNext();) {
- IvyNode node = (IvyNode) it.next();
- if (node.getDescriptor() != null) {
- result.put(node.getResolvedId(), node.getDescriptor().getAllArtifacts());
- }
- }
- return result;
- }
-
private void maybeRetrieve(ResolveReport report) throws IOException {
if (!conf.isInheritedRetrievedClasspath()) {
return;
Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathResolver.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathResolver.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyClasspathResolver.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJob.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJob.java?rev=988166&r1=988165&r2=988166&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJob.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/cpcontainer/IvyResolveJob.java Mon Aug 23 16:02:50 2010
@@ -196,31 +196,37 @@ public class IvyResolveJob extends Job {
return new Status(IStatus.ERROR, IvyPlugin.ID, "Unexpected error");
}
boolean usePreviousResolveIfExist = request.isUsePreviousResolveIfExist();
- IvyResolveJobThread resolver = new IvyResolveJobThread(conf, ivy, md,
+ final IvyClasspathResolver resolver = new IvyClasspathResolver(conf, ivy, md,
usePreviousResolveIfExist, monitor);
- resolver.setName("IvyDE resolver thread");
+ final IStatus[] status = new IStatus[1];
+ Thread resolverThread = new Thread(new Runnable() {
+ public void run() {
+ status[0] = resolver.resolve();
+ }
+ });
+ resolverThread.setName("IvyDE resolver thread");
- resolver.start();
+ resolverThread.start();
while (true) {
try {
- resolver.join(WAIT_FOR_JOIN);
+ resolverThread.join(WAIT_FOR_JOIN);
} catch (InterruptedException e) {
- ivy.interrupt(resolver);
+ ivy.interrupt(resolverThread);
return Status.CANCEL_STATUS;
}
- if (resolver.getStatus() != null || !resolver.isAlive()) {
+ if (status[0] != null || !resolverThread.isAlive()) {
break;
}
if (monitor.isCanceled()) {
- ivy.interrupt(resolver);
+ ivy.interrupt(resolverThread);
return Status.CANCEL_STATUS;
}
}
- if (resolver.getStatus() == Status.OK_STATUS) {
+ if (status[0] == Status.OK_STATUS) {
request.getContainer().updateClasspathEntries(resolver.getClasspathEntries());
}
- setResolveStatus(conf, resolver.getStatus());
- return resolver.getStatus();
+ setResolveStatus(conf, status[0]);
+ return status[0];
}
@@ -250,8 +256,8 @@ public class IvyResolveJob extends Job {
marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_INFO);
break;
default:
- IvyPlugin.log(IStatus.WARNING, "Unsupported resolve status: "
- + status.getSeverity(), null);
+ IvyPlugin.log(IStatus.WARNING,
+ "Unsupported resolve status: " + status.getSeverity(), null);
}
} catch (CoreException e) {
IvyPlugin.log(e);
Added: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/retrieve/IvyRetriever.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/retrieve/IvyRetriever.java?rev=988166&view=auto
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/retrieve/IvyRetriever.java (added)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/retrieve/IvyRetriever.java Mon Aug 23 16:02:50 2010
@@ -0,0 +1,66 @@
+/*
+ * 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.ivyde.eclipse.retrieve;
+
+import java.io.IOException;
+
+import org.apache.ivy.Ivy;
+import org.apache.ivy.core.IvyPatternHelper;
+import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
+import org.apache.ivy.core.retrieve.RetrieveOptions;
+import org.apache.ivy.util.filter.ArtifactTypeFilter;
+import org.apache.ivyde.eclipse.IvyResolver;
+import org.apache.ivyde.eclipse.cpcontainer.IvyClasspathUtil;
+import org.apache.ivyde.eclipse.cpcontainer.RefreshFolderJob;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+public class IvyRetriever extends IvyResolver {
+
+ private final StandaloneRetrieveSetup setup;
+
+ public IvyRetriever(Ivy ivy, ModuleDescriptor md, boolean usePreviousResolveIfExist,
+ IProgressMonitor monitor, StandaloneRetrieveSetup setup) {
+ super(setup.getIvyXmlPath(), ivy, md, usePreviousResolveIfExist, monitor, IvyClasspathUtil
+ .split(setup.getRetrieveSetup().getRetrieveConfs()), setup.getProject());
+ this.setup = setup;
+ }
+
+ protected void postResolveOrRefresh() throws IOException {
+ String pattern = project.getLocation().toPortableString() + "/"
+ + setup.getRetrieveSetup().getRetrievePattern();
+ RetrieveOptions c = new RetrieveOptions();
+ c.setSync(setup.getRetrieveSetup().isRetrieveSync());
+ c.setConfs(confs);
+ String inheritedRetrieveTypes = setup.getRetrieveSetup().getRetrieveTypes();
+ if (inheritedRetrieveTypes != null && !inheritedRetrieveTypes.equals("*")) {
+ c.setArtifactFilter(new ArtifactTypeFilter(IvyClasspathUtil
+ .split(inheritedRetrieveTypes)));
+ }
+
+ int numberOfItemsRetrieved = ivy.retrieve(md.getModuleRevisionId(), pattern, c);
+ if (numberOfItemsRetrieved > 0) {
+ // Only refresh if we actually retrieved a file.
+ String refreshPath = IvyPatternHelper.getTokenRoot(setup.getRetrieveSetup()
+ .getRetrievePattern());
+ IFolder folder = project.getFolder(refreshPath);
+ RefreshFolderJob refreshFolderJob = new RefreshFolderJob(folder);
+ refreshFolderJob.schedule();
+ }
+ }
+}
Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/retrieve/IvyRetriever.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/retrieve/IvyRetriever.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Propchange: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/retrieve/IvyRetriever.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/IvyMenuContributionItem.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/IvyMenuContributionItem.java?rev=988166&r1=988165&r2=988166&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/IvyMenuContributionItem.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/IvyMenuContributionItem.java Mon Aug 23 16:02:50 2010
@@ -147,7 +147,7 @@ public class IvyMenuContributionItem ext
while (itSetup.hasNext()) {
StandaloneRetrieveSetup retrieveSetup = (StandaloneRetrieveSetup) itSetup
.next();
- RetrieveAction action = new RetrieveAction(project, retrieveSetup);
+ RetrieveAction action = new RetrieveAction(retrieveSetup);
action.setText("Retrieve '" + retrieveSetup.getName()
+ (oneProject ? "'" : "' of " + project.getName()));
fillMenu(menuManager, items, new ActionContributionItem(action));
Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/RetrieveAction.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/RetrieveAction.java?rev=988166&r1=988165&r2=988166&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/RetrieveAction.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/eclipse/ui/menu/RetrieveAction.java Mon Aug 23 16:02:50 2010
@@ -17,45 +17,25 @@
*/
package org.apache.ivyde.eclipse.ui.menu;
-import java.io.IOException;
-
import org.apache.ivy.Ivy;
-import org.apache.ivy.core.IvyPatternHelper;
import org.apache.ivy.core.module.descriptor.ModuleDescriptor;
-import org.apache.ivy.core.retrieve.RetrieveOptions;
-import org.apache.ivy.util.filter.ArtifactTypeFilter;
import org.apache.ivyde.eclipse.IvyDEException;
import org.apache.ivyde.eclipse.IvyPlugin;
-import org.apache.ivyde.eclipse.cpcontainer.IvyClasspathUtil;
-import org.apache.ivyde.eclipse.cpcontainer.RefreshFolderJob;
+import org.apache.ivyde.eclipse.retrieve.IvyRetriever;
import org.apache.ivyde.eclipse.retrieve.StandaloneRetrieveSetup;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.action.Action;
public class RetrieveAction extends Action {
private final StandaloneRetrieveSetup retrieveSetup;
- private final IProject project;
-
- public RetrieveAction(IProject project, StandaloneRetrieveSetup retrieveSetup) {
- this.project = project;
+ public RetrieveAction(StandaloneRetrieveSetup retrieveSetup) {
this.retrieveSetup = retrieveSetup;
}
public void run() {
- String pattern = project.getLocation().toPortableString() + "/"
- + retrieveSetup.getRetrieveSetup().getRetrievePattern();
- RetrieveOptions c = new RetrieveOptions();
- c.setSync(retrieveSetup.getRetrieveSetup().isRetrieveSync());
- c.setConfs(retrieveSetup.getRetrieveSetup().getRetrieveConfs().split(","));
- String inheritedRetrieveTypes = retrieveSetup.getRetrieveSetup().getRetrieveTypes();
- if (inheritedRetrieveTypes != null && !inheritedRetrieveTypes.equals("*")) {
- c.setArtifactFilter(new ArtifactTypeFilter(IvyClasspathUtil
- .split(inheritedRetrieveTypes)));
- }
Ivy ivy;
ModuleDescriptor md;
try {
@@ -65,21 +45,14 @@ public class RetrieveAction extends Acti
e.log(IStatus.ERROR, null);
return;
}
- try {
- int numberOfItemsRetrieved = ivy.retrieve(md.getModuleRevisionId(), pattern, c);
- if (numberOfItemsRetrieved > 0) {
- // Only refresh if we actually retrieved a file.
- String refreshPath = IvyPatternHelper.getTokenRoot(retrieveSetup.getRetrieveSetup()
- .getRetrievePattern());
- IFolder folder = project.getFolder(refreshPath);
- RefreshFolderJob refreshFolderJob = new RefreshFolderJob(folder);
- refreshFolderJob.schedule();
- }
- } catch (IOException e) {
- IvyPlugin.log(IStatus.ERROR, "Error while retrieving '" + retrieveSetup.getName()
- + "' in " + retrieveSetup.getProject().getName(), e);
+ IvyRetriever retriever = new IvyRetriever(ivy, md, false, new NullProgressMonitor(),
+ retrieveSetup);
+ IStatus status = retriever.resolve();
+ if (status.isOK() || status.getCode() == IStatus.CANCEL) {
+ IvyPlugin.log(IStatus.INFO, "Successful retrieve of '" + retrieveSetup.getName()
+ + "' in " + retrieveSetup.getProject().getName(), null);
+ return;
}
- IvyPlugin.log(IStatus.INFO, "Sucessfull retrieve of '" + retrieveSetup.getName() + "' in "
- + retrieveSetup.getProject().getName(), null);
+ IvyPlugin.log(status);
}
}