public void doAction() {
        if ((urls != null) && (saveLocation != null)) {
            for (int i = 0; i < urls.length; i++) {
                URL url = urls[i];
                if (progressMonitor != null) {
                    if (progressMonitor.isCanceled()) {
                        break;
                    }

                    SwingUtilities.invokeLater(
                            new UpdateProgressMonitor(i,
                            url.toExternalForm()));
                }

                if (doesImageExist(url)) {
                    File file = urlToLocalPath(url);

                    /*
                     * Don't copy the file if it already exists!!
                     */
                    if (!file.exists()) {
                        try {
                            copy(url, file);
                        } catch (IOException e) {
                            log.error(
                                    "Unable to copy " + url + " to " +
                                    file.getAbsolutePath(),
                                    e);
                        }
                    }
                }
            }

            if (progressMonitor != null) {
                SwingUtilities.invokeLater(new Runnable() {

                    public void run() {
                        progressMonitor.close();
                    }
                });
            }
        }
    }