Ticket #18463: 18463.2.patch

File 18463.2.patch, 12.3 KB (added by GerdP, 4 years ago)
  • src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java

     
    6060import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction;
    6161import org.openstreetmap.josm.gui.help.HelpUtil;
    6262import org.openstreetmap.josm.gui.io.CloseChangesetTask;
    63 import org.openstreetmap.josm.gui.io.DownloadPrimitivesWithReferrersTask;
    6463import org.openstreetmap.josm.gui.util.GuiHelper;
    6564import org.openstreetmap.josm.gui.util.WindowGeometry;
    6665import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
     
    566565    /**
    567566     * Downloads the objects contained in the selected changesets from the OSM server
    568567     */
    569     private class DownloadSelectedChangesetObjectsAction extends AbstractAction implements ListSelectionListener {
     568    private class DownloadSelectedChangesetObjectsAction extends DownloadChangesetObjectsAction implements ListSelectionListener {
    570569
    571570        DownloadSelectedChangesetObjectsAction() {
    572             putValue(NAME, tr("Download changed objects"));
    573             new ImageProvider("downloadprimitive").getResource().attachImageIcon(this);
     571            super();
    574572            putValue(SHORT_DESCRIPTION, tr("Download the current version of the changed objects in the selected changesets"));
    575573            updateEnabledState();
    576574        }
     
    579577        public void actionPerformed(ActionEvent e) {
    580578            if (!GraphicsEnvironment.isHeadless()) {
    581579                actDownloadSelectedContent.actionPerformed(e);
    582                 MainApplication.worker.submit(() -> {
     580                GuiHelper.executeByMainWorkerInEDT(() -> {
    583581                    final List<PrimitiveId> primitiveIds = model.getSelectedChangesets().stream()
    584582                            .map(Changeset::getContent)
    585583                            .filter(Objects::nonNull)
     
    588586                            .map(HistoryOsmPrimitive::getPrimitiveId)
    589587                            .distinct()
    590588                            .collect(Collectors.toList());
    591                     new DownloadPrimitivesWithReferrersTask(false, primitiveIds, true, true, null, null).run();
     589                    downloadWithDialog(ChangesetCacheManager.getInstance(), primitiveIds);
    592590                });
    593591            }
    594592        }
  • src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java

     
    4747import org.openstreetmap.josm.gui.MainApplication;
    4848import org.openstreetmap.josm.gui.help.HelpUtil;
    4949import org.openstreetmap.josm.gui.history.HistoryBrowserDialogManager;
    50 import org.openstreetmap.josm.gui.io.DownloadPrimitivesWithReferrersTask;
    5150import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
    5251import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
    5352import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
     
    247246        }
    248247    }
    249248
    250     class DownloadObjectAction extends AbstractAction implements ListSelectionListener {
     249    class DownloadObjectAction extends DownloadChangesetObjectsAction implements ListSelectionListener {
    251250
    252251        DownloadObjectAction() {
    253             putValue(NAME, tr("Download objects"));
    254             new ImageProvider("downloadprimitive").getResource().attachImageIcon(this, true);
     252            super();
    255253            putValue(SHORT_DESCRIPTION, tr("Download the current version of the selected objects"));
    256254            updateEnabledState();
    257255        }
     
    260258        public void actionPerformed(ActionEvent e) {
    261259            final List<PrimitiveId> primitiveIds = getSelectedPrimitives().stream().map(HistoryOsmPrimitive::getPrimitiveId)
    262260                    .collect(Collectors.toList());
    263             MainApplication.worker.submit(new DownloadPrimitivesWithReferrersTask(false, primitiveIds, true, true, null, null));
     261            downloadWithDialog(ChangesetContentPanel.this, primitiveIds);
    264262        }
    265263
    266264        protected final void updateEnabledState() {
  • src/org/openstreetmap/josm/gui/dialogs/changeset/DownloadChangesetObjectsAction.java

     
     1// License: GPL. For details, see LICENSE file.
     2package org.openstreetmap.josm.gui.dialogs.changeset;
     3
     4import static org.openstreetmap.josm.tools.I18n.tr;
     5
     6import java.awt.Component;
     7import java.util.Collection;
     8import java.util.Collections;
     9import java.util.List;
     10
     11import javax.swing.AbstractAction;
     12
     13import org.openstreetmap.josm.data.osm.PrimitiveId;
     14import org.openstreetmap.josm.gui.download.DownloadObjectDialog;
     15import org.openstreetmap.josm.gui.io.DownloadPrimitivesWithReferrersTask;
     16import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
     17import org.openstreetmap.josm.spi.preferences.Config;
     18import org.openstreetmap.josm.tools.ImageProvider;
     19
     20/**
     21 * Show download dialog with given ids and download them if user doesn't cancel.
     22 *
     23 */
     24public abstract class DownloadChangesetObjectsAction extends AbstractAction {
     25
     26    /**
     27     * Constructs a new {@code DownloadChangesetObjectsAction}.
     28     */
     29    protected DownloadChangesetObjectsAction() {
     30        putValue(NAME, tr("Download changed objects ..."));
     31        new ImageProvider("downloadprimitive").getResource().attachImageIcon(this);
     32    }
     33
     34    /**
     35     * We want our own class to have separate preference entries
     36     */
     37    private static class ChangesetDownloadObjectDialog extends DownloadObjectDialog {
     38        private static final String prefListKey = "changesets.downloadprimitive.primitivesHistory";
     39
     40        ChangesetDownloadObjectDialog(Component parent) {
     41            super(parent, "changesets.");
     42        }
     43
     44        /**
     45         * Fill dialog with ids from given collection.
     46         * @param primitiveIds collection of primitive ids used to fill the dialog
     47         */
     48        void setupDialog(Collection<? extends PrimitiveId> primitiveIds) {
     49            setupDialog();
     50
     51            tfId.tryToPasteFrom(idsToString(primitiveIds));
     52            cbType.setSelectedIndex(3); // "mixed" because the ids are prefixed with the type
     53        }
     54
     55        @Override
     56        protected void restorePrimitivesHistory(HistoryComboBox cbHistory) {
     57            cbHistory.setPossibleItemsTopDown(Config.getPref().getList(prefListKey, Collections.emptyList()));
     58        }
     59
     60        @Override
     61        protected void remindPrimitivesHistory(HistoryComboBox cbHistory) {
     62            cbHistory.addCurrentItemToHistory();
     63            Config.getPref().putList(prefListKey, cbHistory.getHistory());
     64        }
     65
     66    }
     67
     68    protected void downloadWithDialog(Component parent, List<PrimitiveId> primitiveIds) {
     69        if (primitiveIds == null || primitiveIds.isEmpty())
     70            return;
     71
     72        ChangesetDownloadObjectDialog dialog = new ChangesetDownloadObjectDialog(parent);
     73        dialog.setupDialog(primitiveIds);
     74        if (dialog.showDialog().getValue() != dialog.getContinueButtonIndex())
     75            return;
     76        new DownloadPrimitivesWithReferrersTask(false, dialog.getOsmIds(), dialog.isReferrersRequested(),
     77                dialog.isFullRelationRequested(), null, null).run();
     78    }
     79}
  • src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java

     
    225225        if (buf.length() > Config.getPref().getInt("downloadprimitive.max-autopaste-length", 2000)) return;
    226226        final List<SimplePrimitiveId> ids = SimplePrimitiveId.fuzzyParse(buf);
    227227        if (!ids.isEmpty()) {
    228             final String parsedText = ids.stream().map(x -> x.getType().getAPIName().charAt(0) + String.valueOf(x.getUniqueId()))
    229                     .collect(Collectors.joining(", "));
     228            final String parsedText = idsToString(ids);
    230229            tfId.tryToPasteFrom(parsedText);
    231230            final EnumSet<OsmPrimitiveType> types = ids.stream().map(SimplePrimitiveId::getType).collect(
    232231                    Collectors.toCollection(() -> EnumSet.noneOf(OsmPrimitiveType.class)));
     
    243242        }
    244243    }
    245244
     245    protected String idsToString(Collection<? extends PrimitiveId> primitiveIds) {
     246        return primitiveIds.stream().map(pid -> pid.getType().getAPIName().substring(0, 1) + pid.getUniqueId())
     247                .collect(Collectors.joining(", "));
     248    }
     249
    246250    @Override public void windowClosed(WindowEvent e) {
    247251        if (e != null && e.getComponent() == this && getValue() == getContinueButtonIndex()) {
    248252            Config.getPref().putInt("downloadprimitive.lasttype", cbType.getSelectedIndex());
  • src/org/openstreetmap/josm/gui/download/DownloadObjectDialog.java

     
    2929    protected final JCheckBox newLayer  = new JCheckBox(tr("Download as new layer"));
    3030    // CHECKSTYLE.ON: SingleSpaceSeparator
    3131
     32    private final String prefKey;
     33
    3234    /**
    3335     * Constructs a new DownloadObjectDialog with MainApplication.getMainFrame() as parent component.
    3436     */
     
    4143     * @param parent The parent component
    4244     */
    4345    public DownloadObjectDialog(Component parent) {
     46        this(parent, "");
     47    }
     48
     49    protected DownloadObjectDialog(Component parent, String prefKey) {
    4450        super(parent, tr("Download object"), tr("Download object"), tr("Cancel"));
     51        this.prefKey = prefKey;
    4552        init();
    4653        setButtonIcons("download", "cancel");
    4754        setToolTipTexts(
     
    6067    @Override
    6168    protected Collection<Component> getComponentsBeforeHelp() {
    6269        newLayer.setToolTipText(tr("Select if the data should be downloaded into a new layer"));
    63         newLayer.setSelected(Config.getPref().getBoolean("download.newlayer"));
     70        newLayer.setSelected(Config.getPref().getBoolean(prefKey + "download.newlayer"));
    6471
    6572        referrers.setToolTipText(tr("Select if the referrers of the object should be downloaded as well, i.e.,"
    6673                + "parent relations and for nodes, additionally, parent ways"));
    67         referrers.setSelected(Config.getPref().getBoolean("downloadprimitive.referrers", true));
     74        referrers.setSelected(Config.getPref().getBoolean(prefKey + "downloadprimitive.referrers", true));
    6875
    6976        fullRel.setToolTipText(tr("Select if the members of a relation should be downloaded as well"));
    70         fullRel.setSelected(Config.getPref().getBoolean("downloadprimitive.full", true));
     77        fullRel.setSelected(Config.getPref().getBoolean(prefKey + "downloadprimitive.full", true));
    7178
    7279        cbType.addItemListener(e -> referrers.setText(cbType.getType() == OsmPrimitiveType.NODE
    7380                ? tr("Download referrers (parent relations and ways)")
     
    104111    public void windowClosed(WindowEvent e) {
    105112        super.windowClosed(e);
    106113        if (e != null && e.getComponent() == this && getValue() == 1) {
    107             Config.getPref().putBoolean("downloadprimitive.referrers", referrers.isSelected());
    108             Config.getPref().putBoolean("downloadprimitive.full", fullRel.isSelected());
    109             Config.getPref().putBoolean("download.newlayer", newLayer.isSelected());
     114            Config.getPref().putBoolean(prefKey + "downloadprimitive.referrers", referrers.isSelected());
     115            Config.getPref().putBoolean(prefKey + "downloadprimitive.full", fullRel.isSelected());
     116            Config.getPref().putBoolean(prefKey + "download.newlayer", newLayer.isSelected());
    110117        }
    111118    }
    112119}