Ignore:
Timestamp:
2015-09-10T10:54:08+02:00 (5 years ago)
Author:
simon04
Message:

see #11428 - Refactoring (class/package structure)

File:
1 edited

Legend:

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

    r8727 r8744  
    88import java.awt.event.ActionEvent;
    99import java.awt.event.KeyEvent;
    10 import java.io.UnsupportedEncodingException;
    11 import java.net.URLEncoder;
    1210import java.util.ArrayList;
    1311import java.util.Arrays;
     
    2624import org.openstreetmap.josm.actions.downloadtasks.PostDownloadHandler;
    2725import org.openstreetmap.josm.data.Bounds;
    28 import org.openstreetmap.josm.data.DataSource;
    29 import org.openstreetmap.josm.data.osm.DataSet;
    3026import org.openstreetmap.josm.data.preferences.CollectionProperty;
    3127import org.openstreetmap.josm.data.preferences.StringProperty;
    3228import org.openstreetmap.josm.gui.HelpAwareOptionPane;
    3329import org.openstreetmap.josm.gui.download.DownloadDialog;
    34 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    3530import org.openstreetmap.josm.gui.util.GuiHelper;
    3631import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
    3732import org.openstreetmap.josm.gui.widgets.JosmTextArea;
    38 import org.openstreetmap.josm.io.BoundingBoxDownloader;
    39 import org.openstreetmap.josm.io.OsmTransferException;
     33import org.openstreetmap.josm.io.OverpassDownloadReader;
    4034import org.openstreetmap.josm.tools.GBC;
     35import org.openstreetmap.josm.tools.OverpassTurboQueryWizard;
    4136import org.openstreetmap.josm.tools.Shortcut;
    4237import org.openstreetmap.josm.tools.Utils;
     
    134129            pnl.add(overpassWizard, GBC.eol().fill(GBC.HORIZONTAL));
    135130
    136             overpassQuery = new JosmTextArea("[timeout:15];", 8, 80);
     131            overpassQuery = new JosmTextArea("", 8, 80);
    137132            overpassQuery.setFont(GuiHelper.getMonospacedFont(overpassQuery));
    138133            JScrollPane scrollPane = new JScrollPane(overpassQuery);
     
    175170    }
    176171
    177     static class OverpassDownloadReader extends BoundingBoxDownloader {
    178 
    179         final String overpassServer;
    180         final String overpassQuery;
    181 
    182         public OverpassDownloadReader(Bounds downloadArea, String overpassServer, String overpassQuery) {
    183             super(downloadArea);
    184             this.overpassServer = overpassServer;
    185             this.overpassQuery = overpassQuery.trim();
    186         }
    187 
    188         @Override
    189         protected String getBaseUrl() {
    190             return overpassServer;
    191         }
    192 
    193         @Override
    194         protected String getRequestForBbox(double lon1, double lat1, double lon2, double lat2) {
    195             if (overpassQuery.isEmpty())
    196                 return super.getRequestForBbox(lon1, lat1, lon2, lat2);
    197             else {
    198                 String realQuery = completeOverpassQuery(overpassQuery);
    199                 try {
    200                     return "interpreter?data=" + URLEncoder.encode(realQuery, "UTF-8")
    201                             + "&bbox=" + lon1 + "," + lat1 + "," + lon2 + "," + lat2;
    202                 } catch (UnsupportedEncodingException e) {
    203                     throw new IllegalStateException();
    204                 }
    205             }
    206         }
    207 
    208         private String completeOverpassQuery(String query) {
    209             int firstColon = query.indexOf(";");
    210             if (firstColon == -1) {
    211                 return "[bbox];" + query;
    212             }
    213             int bboxPos = query.indexOf("[bbox");
    214             if (bboxPos > -1 && bboxPos < firstColon) {
    215                 return query;
    216             }
    217 
    218             int bracketCount = 0;
    219             int pos = 0;
    220             for (; pos < firstColon; ++pos) {
    221                 if (query.charAt(pos) == '[')
    222                     ++bracketCount;
    223                 else if (query.charAt(pos) == '[')
    224                     --bracketCount;
    225                 else if (bracketCount == 0) {
    226                     if (!Character.isWhitespace(query.charAt(pos)))
    227                         break;
    228                 }
    229             }
    230 
    231             if (pos < firstColon) {
    232                 // We start with a statement, not with declarations
    233                 return "[bbox];" + query;
    234             }
    235 
    236             // We start with declarations. Add just one more declaration in this case.
    237             return "[bbox]" + query;
    238         }
    239 
    240         @Override
    241         public DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException {
    242 
    243             DataSet ds = super.parseOsm(progressMonitor);
    244 
    245             // add bounds if necessary (note that Overpass API does not return bounds in the response XML)
    246             if (ds != null && ds.dataSources.isEmpty()) {
    247                 if (crosses180th) {
    248                     Bounds bounds = new Bounds(lat1, lon1, lat2, 180.0);
    249                     DataSource src = new DataSource(bounds, getBaseUrl());
    250                     ds.dataSources.add(src);
    251 
    252                     bounds = new Bounds(lat1, -180.0, lat2, lon2);
    253                     src = new DataSource(bounds, getBaseUrl());
    254                     ds.dataSources.add(src);
    255                 } else {
    256                     Bounds bounds = new Bounds(lat1, lon1, lat2, lon2);
    257                     DataSource src = new DataSource(bounds, getBaseUrl());
    258                     ds.dataSources.add(src);
    259                 }
    260             }
    261 
    262             return ds;
    263         }
    264     }
    265172}
Note: See TracChangeset for help on using the changeset viewer.