001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.dialogs.changeset;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.awt.Component;
007import java.awt.event.ActionEvent;
008
009import javax.swing.AbstractAction;
010
011import org.openstreetmap.josm.actions.downloadtasks.ChangesetContentDownloadTask;
012import org.openstreetmap.josm.tools.CheckParameterUtil;
013import org.openstreetmap.josm.tools.ImageProvider;
014
015/**
016 * Downloads/Updates the content of the changeset.
017 * @since 9493
018 */
019public class DownloadChangesetContentAction extends AbstractAction {
020    private final transient ChangesetAware component;
021
022    /**
023     * Constructs a new {@code DownloadChangesetContentAction}.
024     * @param component changeset-aware component
025     */
026    public DownloadChangesetContentAction(ChangesetAware component) {
027        CheckParameterUtil.ensureParameterNotNull(component, "component");
028        putValue(NAME, tr("Download content"));
029        new ImageProvider("dialogs/changeset", "downloadchangesetcontent").getResource().attachImageIcon(this);
030        putValue(SHORT_DESCRIPTION, tr("Download the changeset content from the OSM server"));
031        this.component = component;
032    }
033
034    @Override
035    public void actionPerformed(ActionEvent evt) {
036        if (component.getCurrentChangeset() != null) {
037            ChangesetCacheManager.getInstance().runDownloadTask(new ChangesetContentDownloadTask(
038                    (Component) component, component.getCurrentChangeset().getId()));
039        }
040    }
041
042    /**
043     * Init properties.
044     */
045    public void initProperties() {
046        if (component.getCurrentChangeset() == null) {
047            setEnabled(false);
048            return;
049        } else {
050            setEnabled(true);
051        }
052        if (component.getCurrentChangeset().getContent() == null) {
053            putValue(NAME, tr("Download content"));
054            new ImageProvider("dialogs/changeset", "downloadchangesetcontent").getResource().attachImageIcon(this);
055            putValue(SHORT_DESCRIPTION, tr("Download the changeset content from the OSM server"));
056        } else {
057            putValue(NAME, tr("Update content"));
058            new ImageProvider("dialogs/changeset", "updatechangesetcontent").getResource().attachImageIcon(this);
059            putValue(SHORT_DESCRIPTION, tr("Update the changeset content from the OSM server"));
060        }
061    }
062}