Ticket #19984: incompatible.patch

File incompatible.patch, 14.9 KB (added by GerdP, 6 years ago)

don't commit

  • src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java

     
    274274        tblChangesets.setRowSorter(new ChangesetCacheTableRowSorter(model));
    275275        tblChangesets.addMouseListener(new MouseEventHandler());
    276276        InputMapUtils.addEnterAction(tblChangesets, new ShowDetailAction(model));
    277         model.getSelectionModel().addListSelectionListener(new ChangesetDetailViewSynchronizer(model));
     277        model.getSelectionModel().addListSelectionListener(new ChangesetDetailViewSynchronizer());
    278278
    279279        // activate DEL on the table
    280280        tblChangesets.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "removeFromCache");
     
    283283        tblChangesets.setTransferHandler(new TransferHandler() {
    284284            @Override
    285285            public void exportToClipboard(JComponent comp, Clipboard clip, int action) {
    286                 List<Changeset> changesets = model.getSelectedChangesets();
     286                List<Changeset> changesets = getSelectedChangesets();
    287287                ChangesetTransferable transferable = new ChangesetTransferable(changesets);
    288288                ClipboardUtils.copy(transferable);
    289289            }
     
    302302        cp.setLayout(new BorderLayout());
    303303
    304304        model = buildModel();
    305         actRemoveFromCacheAction = new RemoveFromCacheAction(model);
    306         actCloseSelectedChangesetsAction = new CloseSelectedChangesetsAction(model);
    307         actDownloadSelectedChangesets = new DownloadSelectedChangesetsAction(model);
    308         actDownloadSelectedContent = new DownloadSelectedChangesetContentAction(model);
     305        actRemoveFromCacheAction = new RemoveFromCacheAction();
     306        actCloseSelectedChangesetsAction = new CloseSelectedChangesetsAction();
     307        actDownloadSelectedChangesets = new DownloadSelectedChangesetsAction();
     308        actDownloadSelectedContent = new DownloadSelectedChangesetContentAction();
    309309        actDownloadSelectedChangesetObjects = new DownloadSelectedChangesetObjectsAction();
    310310
    311311        cp.add(buildToolbarPanel(), BorderLayout.NORTH);
     
    425425     * Removes the selected changesets from the local changeset cache
    426426     *
    427427     */
    428     static class RemoveFromCacheAction extends AbstractAction implements ListSelectionListener {
    429         private final ChangesetCacheManagerModel model;
     428    class RemoveFromCacheAction extends AbstractAction implements ListSelectionListener {
    430429
    431         RemoveFromCacheAction(ChangesetCacheManagerModel model) {
     430        RemoveFromCacheAction() {
    432431            putValue(NAME, tr("Remove from cache"));
    433432            new ImageProvider("dialogs", "delete").getResource().attachImageIcon(this);
    434433            putValue(SHORT_DESCRIPTION, tr("Remove the selected changesets from the local cache"));
    435             this.model = model;
    436434            updateEnabledState();
    437435        }
    438436
    439437        @Override
    440438        public void actionPerformed(ActionEvent e) {
    441             ChangesetCache.getInstance().remove(model.getSelectedChangesets());
     439            ChangesetCache.getInstance().remove(getSelectedChangesets());
    442440        }
    443441
    444442        protected void updateEnabledState() {
    445             setEnabled(model.hasSelectedChangesets());
     443            setEnabled(hasSelectedChangesets());
    446444        }
    447445
    448446        @Override
     
    456454     * Closes the selected changesets
    457455     *
    458456     */
    459     static class CloseSelectedChangesetsAction extends AbstractAction implements ListSelectionListener {
    460         private final ChangesetCacheManagerModel model;
     457    class CloseSelectedChangesetsAction extends AbstractAction implements ListSelectionListener {
    461458
    462         CloseSelectedChangesetsAction(ChangesetCacheManagerModel model) {
     459        CloseSelectedChangesetsAction() {
    463460            putValue(NAME, tr("Close"));
    464461            new ImageProvider("closechangeset").getResource().attachImageIcon(this);
    465462            putValue(SHORT_DESCRIPTION, tr("Close the selected changesets"));
    466             this.model = model;
    467463            updateEnabledState();
    468464        }
    469465
    470466        @Override
    471467        public void actionPerformed(ActionEvent e) {
    472             MainApplication.worker.submit(new CloseChangesetTask(model.getSelectedChangesets()));
     468            MainApplication.worker.submit(new CloseChangesetTask(getSelectedChangesets()));
    473469        }
    474470
    475471        protected void updateEnabledState() {
    476             List<Changeset> selected = model.getSelectedChangesets();
     472            List<Changeset> selected = getSelectedChangesets();
    477473            UserIdentityManager im = UserIdentityManager.getInstance();
    478474            for (Changeset cs: selected) {
    479475                if (cs.isOpen()) {
     
    501497     * Downloads the selected changesets
    502498     *
    503499     */
    504     static class DownloadSelectedChangesetsAction extends AbstractAction implements ListSelectionListener {
    505         private final ChangesetCacheManagerModel model;
     500    class DownloadSelectedChangesetsAction extends AbstractAction implements ListSelectionListener {
    506501
    507         DownloadSelectedChangesetsAction(ChangesetCacheManagerModel model) {
     502        DownloadSelectedChangesetsAction() {
    508503            putValue(NAME, tr("Update changeset"));
    509504            new ImageProvider("dialogs/changeset", "updatechangeset").getResource().attachImageIcon(this);
    510505            putValue(SHORT_DESCRIPTION, tr("Updates the selected changesets with current data from the OSM server"));
    511             this.model = model;
    512506            updateEnabledState();
    513507        }
    514508
     
    516510        public void actionPerformed(ActionEvent e) {
    517511            if (!GraphicsEnvironment.isHeadless()) {
    518512                ChangesetCacheManager.getInstance().runDownloadTask(
    519                         ChangesetHeaderDownloadTask.buildTaskForChangesets(GuiHelper.getWindowAncestorFor(e), model.getSelectedChangesets()));
     513                        ChangesetHeaderDownloadTask.buildTaskForChangesets(GuiHelper.getWindowAncestorFor(e), getSelectedChangesets()));
    520514            }
    521515        }
    522516
    523517        protected void updateEnabledState() {
    524             setEnabled(model.hasSelectedChangesets() && !NetworkManager.isOffline(OnlineResource.OSM_API));
     518            setEnabled(hasSelectedChangesets() && !NetworkManager.isOffline(OnlineResource.OSM_API));
    525519        }
    526520
    527521        @Override
     
    535529     * Downloads the content of selected changesets from the OSM server
    536530     *
    537531     */
    538     static class DownloadSelectedChangesetContentAction extends AbstractAction implements ListSelectionListener {
    539         private final ChangesetCacheManagerModel model;
     532    class DownloadSelectedChangesetContentAction extends AbstractAction implements ListSelectionListener {
    540533
    541         DownloadSelectedChangesetContentAction(ChangesetCacheManagerModel model) {
     534        DownloadSelectedChangesetContentAction() {
    542535            putValue(NAME, tr("Download changeset content"));
    543536            new ImageProvider("dialogs/changeset", "downloadchangesetcontent").getResource().attachImageIcon(this);
    544537            putValue(SHORT_DESCRIPTION, tr("Download the content of the selected changesets from the server"));
    545             this.model = model;
    546538            updateEnabledState();
    547539        }
    548540
     
    549541        @Override
    550542        public void actionPerformed(ActionEvent e) {
    551543            if (!GraphicsEnvironment.isHeadless()) {
     544                Set<Integer> selectedIds = getSelectedChangesets().stream().map(Changeset::getId).collect(Collectors.toSet());
     545
    552546                ChangesetCacheManager.getInstance().runDownloadTask(
    553                         new ChangesetContentDownloadTask(GuiHelper.getWindowAncestorFor(e), model.getSelectedChangesetIds()));
     547                        new ChangesetContentDownloadTask(GuiHelper.getWindowAncestorFor(e), selectedIds));
    554548            }
    555549        }
    556550
    557551        protected void updateEnabledState() {
    558             setEnabled(model.hasSelectedChangesets() && !NetworkManager.isOffline(OnlineResource.OSM_API));
     552            setEnabled(hasSelectedChangesets() && !NetworkManager.isOffline(OnlineResource.OSM_API));
    559553        }
    560554
    561555        @Override
     
    580574        @Override
    581575        public void actionPerformed(ActionEvent e) {
    582576            if (!GraphicsEnvironment.isHeadless()) {
    583                 if (model.getSelectedChangesets().stream().anyMatch(cs -> !cs.hasContent() || cs.isOpen()))
     577                if (getSelectedChangesets().stream().anyMatch(cs -> !cs.hasContent() || cs.isOpen()))
    584578                    actDownloadSelectedContent.actionPerformed(e);
    585579                MainApplication.worker.submit(() -> {
    586                     final List<PrimitiveId> primitiveIds = model.getSelectedChangesets().stream()
     580                    final List<PrimitiveId> primitiveIds = getSelectedChangesets().stream()
    587581                            .map(Changeset::getContent)
    588582                            .filter(Objects::nonNull)
    589583                            .flatMap(content -> content.getIds().stream())
     
    595589        }
    596590
    597591        protected void updateEnabledState() {
    598             setEnabled(model.hasSelectedChangesets() && !NetworkManager.isOffline(OnlineResource.OSM_API));
     592            setEnabled(hasSelectedChangesets() && !NetworkManager.isOffline(OnlineResource.OSM_API));
    599593        }
    600594
    601595        @Override
     
    605599        }
    606600    }
    607601
    608     static class ShowDetailAction extends AbstractAction {
     602    class ShowDetailAction extends AbstractAction {
    609603        private final ChangesetCacheManagerModel model;
    610604
    611605        ShowDetailAction(ChangesetCacheManagerModel model) {
     
    613607        }
    614608
    615609        protected void showDetails() {
    616             List<Changeset> selected = model.getSelectedChangesets();
     610            List<Changeset> selected = getSelectedChangesets();
    617611            if (selected.size() == 1) {
    618612                model.setChangesetInDetailView(selected.get(0));
    619613            }
     
    685679        }
    686680    }
    687681
    688     static class ChangesetDetailViewSynchronizer implements ListSelectionListener {
    689         private final ChangesetCacheManagerModel model;
     682    class ChangesetDetailViewSynchronizer implements ListSelectionListener {
    690683
    691         ChangesetDetailViewSynchronizer(ChangesetCacheManagerModel model) {
    692             this.model = model;
    693         }
    694 
    695684        @Override
    696685        public void valueChanged(ListSelectionEvent e) {
    697686            if (e != null && e.getValueIsAdjusting())
    698687                return;
    699688
    700             List<Changeset> selected = model.getSelectedChangesets();
     689            List<Changeset> selected = getSelectedChangesets();
    701690            if (selected.size() == 1) {
    702691                model.setChangesetInDetailView(selected.get(0));
    703692            } else {
     
    716705    }
    717706
    718707    /**
     708     * Replies true if there is at least one selected changeset
     709     *
     710     * @return true if there is at least one selected changeset
     711     */
     712    public boolean hasSelectedChangesets() {
     713        return tblChangesets != null && tblChangesets.getSelectedRowCount() >= 0;
     714    }
     715
     716    /**
     717     * Replies the list of selected changesets
     718     *
     719     * @return the list of selected changesets
     720     */
     721    public List<Changeset> getSelectedChangesets() {
     722        return model.getSelectedChangesets(tblChangesets);
     723    }
     724
     725
     726    /**
    719727     * Selects the changesets  in <code>changests</code>, provided the
    720728     * respective changesets are already present in the local changeset cache.
    721729     *
  • src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerModel.java

     
    44import java.beans.PropertyChangeListener;
    55import java.beans.PropertyChangeSupport;
    66import java.util.ArrayList;
     7import java.util.Arrays;
    78import java.util.Collection;
     9import java.util.Collections;
    810import java.util.Comparator;
    911import java.util.List;
    10 import java.util.Set;
    1112import java.util.stream.Collectors;
    1213import java.util.stream.IntStream;
    1314
    1415import javax.swing.DefaultListSelectionModel;
     16import javax.swing.JTable;
    1517import javax.swing.table.AbstractTableModel;
    1618
    1719import org.openstreetmap.josm.data.osm.Changeset;
     
    7375    }
    7476
    7577    /**
    76      * Replies true if there is at least one selected changeset
    77      *
    78      * @return true if there is at least one selected changeset
    79      */
    80     public boolean hasSelectedChangesets() {
    81         return selectionModel.getMinSelectionIndex() >= 0;
    82     }
    83 
    84     /**
    8578     * Replies the list of selected changesets
     79     * @param table the JTable used with this model
    8680     *
    8781     * @return the list of selected changesets
    8882     */
    89     public List<Changeset> getSelectedChangesets() {
    90         List<Changeset> ret = new ArrayList<>();
    91         for (int i = 0; i < data.size(); i++) {
    92             Changeset cs = data.get(i);
    93             if (selectionModel.isSelectedIndex(i)) {
    94                 ret.add(cs);
    95             }
    96         }
    97         return ret;
     83    public List<Changeset> getSelectedChangesets(JTable table) {
     84        if (table == null)
     85            return Collections.emptyList();
     86        int[] selection = table.getSelectedRows();
     87        return Arrays.stream(selection)
     88                .mapToObj(i -> data.get(table.convertRowIndexToModel(i)))
     89                .collect(Collectors.toList());
    9890    }
    9991
    10092    /**
    101      * Replies a set of ids of the selected changesets
    102      *
    103      * @return a set of ids of the selected changesets
    104      */
    105     public Set<Integer> getSelectedChangesetIds() {
    106         return getSelectedChangesets().stream().map(Changeset::getId).collect(Collectors.toSet());
    107     }
    108 
    109     /**
    11093     * Selects the changesets in <code>selected</code>.
    11194     *
    11295     * @param selected the collection of changesets to select. Ignored if empty.
     
    136119     */
    137120    public void init() {
    138121        ChangesetCache cc = ChangesetCache.getInstance();
    139         List<Changeset> selected = getSelectedChangesets();
    140122        data.clear();
    141123        data.addAll(cc.getChangesets());
    142124        sort();
    143125        fireTableDataChanged();
    144         setSelectedChangesets(selected);
    145126
    146127        cc.addChangesetCacheListener(this);
    147128    }
     
    170151    /* ------------------------------------------------------------------------------ */
    171152    @Override
    172153    public void changesetCacheUpdated(ChangesetCacheEvent event) {
    173         List<Changeset> selected = getSelectedChangesets();
    174154        data.addAll(event.getAddedChangesets());
    175155        data.removeAll(event.getRemovedChangesets());
    176156        for (Changeset cs: event.getUpdatedChangesets()) {
     
    185165        GuiHelper.runInEDT(() -> {
    186166            sort();
    187167            fireTableDataChanged();
    188             setSelectedChangesets(selected);
    189168        });
    190169    }
    191170}