// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.dialogs.changeset; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.Color; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.util.Collections; import javax.swing.AbstractAction; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.actions.downloadtasks.ChangesetContentDownloadTask; import org.openstreetmap.josm.gui.widgets.ChangesetIdTextField; import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator; import org.openstreetmap.josm.io.OnlineResource; import org.openstreetmap.josm.tools.ImageProvider; /** * This panel allows to enter the ID of single changeset and to download * the respective changeset. * @since 2689 */ public class SingleChangesetDownloadPanel extends JPanel { private final ChangesetIdTextField tfChangesetId = new ChangesetIdTextField(); /** * Constructs a new {@link SingleChangesetDownloadPanel} */ public SingleChangesetDownloadPanel() { build(); } protected void build() { setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); setBorder( BorderFactory.createCompoundBorder( BorderFactory.createLineBorder(Color.GRAY), BorderFactory.createEmptyBorder(0, 3, 0, 3) ) ); add(new JLabel(tr("Changeset ID: "))); add(tfChangesetId); tfChangesetId.setToolTipText(tr("Enter a changeset id")); SelectAllOnFocusGainedDecorator.decorate(tfChangesetId); DownloadAction actDownload = new DownloadAction(); JButton btn = new JButton(actDownload); tfChangesetId.addActionListener(actDownload); tfChangesetId.getDocument().addDocumentListener(actDownload); add(btn); if (Main.pref.getBoolean("downloadchangeset.autopaste", true)) { tfChangesetId.tryToPasteFromClipboard(); } } /** * Replies the changeset id entered in this panel. 0 if no changeset id * or an invalid changeset id is currently entered. * * @return the changeset id entered in this panel */ public int getChangesetId() { return tfChangesetId.getChangesetId(); } /** * Downloads the single changeset from the OSM API */ class DownloadAction extends AbstractAction implements DocumentListener { DownloadAction() { new ImageProvider("dialogs/changeset", "downloadchangesetcontent").getResource().attachImageIcon(this); putValue(SHORT_DESCRIPTION, tr("Download the changeset with the specified id, including the changeset content")); updateEnabledState(); } @Override public void actionPerformed(ActionEvent arg0) { if (!isEnabled()) return; int id = getChangesetId(); if (id == 0) return; ChangesetContentDownloadTask task = new ChangesetContentDownloadTask( SingleChangesetDownloadPanel.this, Collections.singleton(id) ); ChangesetCacheManager.getInstance().runDownloadTask(task); } protected void updateEnabledState() { setEnabled(tfChangesetId.readIds() && !Main.isOffline(OnlineResource.OSM_API)); } @Override public void changedUpdate(DocumentEvent arg0) { updateEnabledState(); } @Override public void insertUpdate(DocumentEvent arg0) { updateEnabledState(); } @Override public void removeUpdate(DocumentEvent arg0) { updateEnabledState(); } } }