Changeset 12608 in josm


Ignore:
Timestamp:
2017-08-16T21:56:01+02:00 (6 weeks ago)
Author:
michael2402
Message:

Fix #15152: Warn on empty overpass query and ask user to download full area instead.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/OverpassDownloadAction.java

    r12578 r12608  
    3232import org.openstreetmap.josm.data.Bounds;
    3333import org.openstreetmap.josm.data.preferences.BooleanProperty;
     34import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
    3435import org.openstreetmap.josm.gui.download.DownloadDialog;
    3536import org.openstreetmap.josm.gui.download.OverpassQueryList;
     
    7273        dialog.rememberSettings();
    7374        Optional<Bounds> selectedArea = dialog.getSelectedDownloadArea();
    74         String overpassQuery = dialog.getOverpassQuery();
     75        String overpassQuery = dialog.getRepairedOverpassQuery();
    7576
    7677        /*
     
    99100
    100101            if (errors.isEmpty() || onlyNoDataError) {
    101                 dialog.saveHistoricItemOnSuccess();
     102                dialog.saveHistoricItemOnSuccess(overpassQuery);
    102103            }
    103104        };
     
    111112        task.setZoomAfterDownload(dialog.isZoomToDownloadedDataRequired());
    112113        Future<?> future = task.download(
    113                 new OverpassDownloadReader(area, OverpassServerPreference.getOverpassServer(), dialog.getOverpassQuery()),
     114                new OverpassDownloadReader(area, OverpassServerPreference.getOverpassServer(), overpassQuery),
    114115                dialog.isNewLayerRequired(), area, null);
    115116        Main.worker.submit(new PostDownloadHandler(task, future, errorReporter));
     
    253254        }
    254255
     256        String getRepairedOverpassQuery() {
     257            String query = getOverpassQuery();
     258            if (query.matches("(/\\*(\\*[^/]|[^\\*/])*\\*/|\\s)*")) {
     259                // Empty query. User might want to download everything
     260                boolean doFix = ConditionalOptionPaneUtil.showConfirmationDialog(
     261                        "download.overpass.fix.emptytoall",
     262                        this,
     263                        tr("You entered an empty query. Do you want to download all data in this area instead?"),
     264                        tr("Download all data?"),
     265                        JOptionPane.YES_NO_OPTION,
     266                        JOptionPane.QUESTION_MESSAGE,
     267                        JOptionPane.YES_OPTION);
     268                if (doFix) {
     269                    return "[out:xml]; \n"
     270                            + query + "\n"
     271                            + "(\n"
     272                            + "    node({{bbox}});\n"
     273                            + "<;\n"
     274                            + ");\n"
     275                            + "(._;>;);"
     276                            + "out meta;";
     277                }
     278            }
     279            // Note: We can add more repairs here. We might e.g. want to intercept missing 'out meta'.
     280            return query;
     281        }
     282
    255283        /**
    256284         * Sets the query that is displayed
     
    264292        /**
    265293         * Adds the current query to {@link OverpassQueryList}.
    266          */
    267         void saveHistoricItemOnSuccess() {
    268             overpassQueryList.saveHistoricItem(overpassQuery.getText());
     294         * @param overpassQueryToSave The query to save
     295         */
     296        void saveHistoricItemOnSuccess(String overpassQueryToSave) {
     297            overpassQueryList.saveHistoricItem(overpassQueryToSave);
    269298        }
    270299
Note: See TracChangeset for help on using the changeset viewer.