in org.apache.ivyde.eclipse/src/java/org/apache/ivyde/internal/eclipse/resolve/IvyResolver.java [330:414]
private IStatus maybeRetrieve(Ivy ivy, ModuleDescriptor md, ResolveResult result,
IProgressMonitor monitor) throws IOException {
if (retrievePattern == null || project == null) {
IvyDEMessage.debug("No file retrieving configured");
return Status.OK_STATUS;
}
// Perform variable substitution on the pattern.
IStringVariableManager varManager = VariablesPlugin.getDefault().getStringVariableManager();
String pattern;
try {
pattern = varManager.performStringSubstitution(retrievePattern, false);
} catch (CoreException e) {
return new Status(IStatus.ERROR, IvyPlugin.ID, IStatus.ERROR,
"Incorrect use of variables in retrievePattern '" + retrievePattern + "'."
+ e.getMessage(), e);
}
// For backwards compatibility we prepend the project location to the pattern,
// but we do it only in case the pattern does not start with a variable (i.e. ${xxx )
if (!retrievePattern.startsWith("${")) {
pattern = project.getLocation().toPortableString() + "/" + pattern;
}
IvyDEMessage.info("Retrieving files into " + pattern);
monitor.setTaskName("retrieving dependencies in " + pattern);
RetrieveOptions options = new RetrieveOptions();
options.setSync(retrieveSync);
if (!result.isPreviousUsed()) {
options.setResolveId(result.getReport().getResolveId());
}
options.setConfs(confs).setDestArtifactPattern(pattern);
if (retrieveTypes != null && !retrieveTypes.equals("*")) {
List<String> typeList = IvyClasspathUtil.split(retrieveTypes);
options.setArtifactFilter(new ArtifactTypeFilter(typeList));
}
options.setResolveId(IvyClasspathUtil.buildResolveId(useExtendedResolveId, md));
String refreshPath = IvyPatternHelper.getTokenRoot(retrievePattern);
if (retrieveSync && refreshPath.length() == 0) {
// the root folder of the retrieve pattern is the the project itself
// so let's prevent from deleting the entire project
return new Status(IStatus.ERROR, IvyPlugin.ID, IStatus.ERROR,
"The root of the retrieve pattern is the root folder of the project."
+ " Your project would have then been entirely deleted."
+ " Change your retrieve pattern to have a sub folder.", null);
}
// 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(), options).getNbrArtifactsCopied();
IvyDEMessage.info(numberOfItemsRetrieved + " retrieved file(s)");
if (numberOfItemsRetrieved > 0) {
// Only refresh if we actually retrieved a file.
IResource retrieveFolder;
if (refreshPath.length() == 0) {
retrieveFolder = project;
IvyDEMessage.verbose("Refreshing Eclipse project " + project.getName());
} else {
retrieveFolder = project.getFolder(refreshPath);
IvyDEMessage.verbose("Refreshing Eclipse folder " + retrieveFolder);
}
RefreshFolderJob refreshFolderJob = new RefreshFolderJob(retrieveFolder);
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
Map<ArtifactDownloadReport, Set<String>> retrievedArtifacts = ivy.getRetrieveEngine().determineArtifactsToCopy(
md.getModuleRevisionId(), resolvedPattern, options);
result.setRetrievedArtifacts(retrievedArtifacts);
} catch (ParseException e) {
// ooops, failed to parse a report we already have...
return new Status(IStatus.ERROR, IvyPlugin.ID, IStatus.ERROR,
"failed to parse a resolve report in order to do the retrieve", e);
}
return Status.OK_STATUS;
}