private IStatus maybeRetrieve()

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;
    }