Changeset 6031 in josm for trunk/src/org/openstreetmap


Ignore:
Timestamp:
2013-06-26T21:04:53+02:00 (12 years ago)
Author:
akks
Message:

see #8809: [patch by brycenesbitt, reworked] detailed documentation for "no suitable download task is available" error (Ctrl-L)

Location:
trunk/src/org/openstreetmap/josm/actions
Files:
9 edited

Legend:

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

    r5772 r6031  
    3333import org.openstreetmap.josm.gui.ExtendedDialog;
    3434import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor;
     35import org.openstreetmap.josm.gui.util.GuiHelper;
    3536import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
    3637import org.openstreetmap.josm.tools.Shortcut;
     
    148149
    149150    /**
     151     * Summarizes acceptable urls for error message purposes.
     152     * @since 6030
     153     */
     154    public String findSummaryDocumentation() {
     155        String result = "";
     156        for (int i = 0; i < downloadTasks.size(); i++) {
     157            Class<? extends DownloadTask> taskClass = downloadTasks.get(i);
     158            if (taskClass != null) {
     159                try {
     160                    DownloadTask task = taskClass.getConstructor().newInstance();
     161                    result += "<br/>" + task.acceptsDocumentationSummary();
     162                } catch (Exception e) {
     163                    e.printStackTrace();
     164                }
     165            }
     166        }
     167        return result;
     168    }
     169
     170    /**
    150171     * Open the given URL.
    151172     * @param new_layer true if the URL needs to be opened in a new layer, false otherwise
     
    164185            Main.worker.submit(new PostDownloadHandler(task, future));
    165186        } else {
     187            final String details = findSummaryDocumentation();    // Explain what patterns are supported
    166188            SwingUtilities.invokeLater(new Runnable() {
     189                @Override
    167190                public void run() {
    168191                    JOptionPane.showMessageDialog(Main.parent, tr(
    169                             "<html>Cannot open URL ''{0}'' because no suitable download task is available.</html>",
    170                             url), tr("Download Location"), JOptionPane.ERROR_MESSAGE);
     192                            "<html><p>Cannot open URL ''{0}''<br/>The following load tasks accept the URL patterns shown:<br/>{1}</p></html>",
     193                            url, details), tr("Download Location"), JOptionPane.ERROR_MESSAGE);
    171194                }
    172195            });
  • trunk/src/org/openstreetmap/josm/actions/downloadtasks/AbstractDownloadTask.java

    r3083 r6031  
    44import java.util.ArrayList;
    55import java.util.List;
     6import org.openstreetmap.josm.io.XmlWriter;
    67
    78public abstract class AbstractDownloadTask implements DownloadTask {
     
    3839    }
    3940
     41    @Override
    4042    public List<Object> getErrorObjects() {
    4143        return errorMessages;
    4244    }
     45   
     46    @Override
     47    public String acceptsDocumentationSummary() {
     48        StringBuilder buf = new StringBuilder();
     49        buf.append(getTitle());
     50        String patterns[] =  getPatterns();
     51        if (patterns.length>0) {
     52            buf.append(":<br/><ul>");
     53            for (String pattern: patterns) {
     54                buf.append("<li>");
     55                buf.append(XmlWriter.encode(pattern));
     56            }
     57            buf.append("</ul>");
     58        }
     59        return buf.toString();
     60    }
     61
     62    // Can be overridden for more complex checking logic
     63    @Override
     64    public boolean acceptsUrl(String url) {
     65        if (url==null) return false;
     66        for (String p: getPatterns()) {
     67            if (url.matches(p)) {
     68                return true;
     69            }
     70        }
     71        return false;
     72    }
     73
     74    // Default name to keep old plugins compatible
     75    @Override
     76    public String getTitle() {
     77        return getClass().getName();
     78    }
     79
     80    // Default pattern to keep old plugins compatible
     81    @Override
     82    public String[] getPatterns() {
     83        return new String[]{};
     84    }
     85   
    4386}
  • trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java

    r5745 r6031  
    4545    protected String newLayerName = null;
    4646
     47    @Override
     48    public String[] getPatterns() {
     49        return new String[] {PATTERN_EXTERNAL_GPX_FILE, PATTERN_EXTERNAL_GPX_SCRIPT, PATTERN_TRACE_ID, PATTERN_TRACKPOINTS_BBOX};
     50    }
     51
     52    @Override
     53    public String getTitle() {
     54        return tr("Download GPS");
     55    }
     56
     57    @Override
    4758    public Future<?> download(boolean newLayer, Bounds downloadArea, ProgressMonitor progressMonitor) {
    4859        downloadTask = new DownloadTask(newLayer,
     
    5364    }
    5465
     66    @Override
    5567    public Future<?> loadUrl(boolean newLayer, String url, ProgressMonitor progressMonitor) {
    5668        if (url != null && (url.matches(PATTERN_TRACE_ID) || url.matches(PATTERN_EXTERNAL_GPX_SCRIPT) || url.matches(PATTERN_EXTERNAL_GPX_FILE))) {
     
    7486    }
    7587
    76     /* (non-Javadoc)
    77      * @see org.openstreetmap.josm.actions.downloadtasks.DownloadTask#acceptsUrl(java.lang.String)
    78      */
    79     @Override
    80     public boolean acceptsUrl(String url) {
    81         return url != null && (url.matches(PATTERN_TRACE_ID) || url.matches(PATTERN_TRACKPOINTS_BBOX)
    82                 || url.matches(PATTERN_EXTERNAL_GPX_SCRIPT) || url.matches(PATTERN_EXTERNAL_GPX_FILE));
    83     }
    84 
     88    @Override
    8589    public void cancel() {
    8690        if (downloadTask != null) {
  • trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeCompressedTask.java

    r5909 r6031  
    33
    44import java.util.concurrent.Future;
     5
     6import static org.openstreetmap.josm.tools.I18n.tr;
    57
    68import org.openstreetmap.josm.Main;
     
    1113
    1214public class DownloadOsmChangeCompressedTask extends DownloadOsmChangeTask {
     15
     16    @Override
     17    public String[] getPatterns() {
     18        return new String[]{"https?://.*/.*\\.osc.(gz|bz2?)"};
     19    }
     20
     21    @Override
     22    public String getTitle() {
     23        return tr("Download Compressed OSM Change");
     24    }
    1325   
    14     /* (non-Javadoc)
    15      * @see org.openstreetmap.josm.actions.downloadtasks.DownloadTask#acceptsUrl(java.lang.String)
    16      */
    17     @Override
    18     public boolean acceptsUrl(String url) {
    19         return url != null && url.matches("https?://.*/.*\\.osc.(gz|bz2?)"); // Remote .osc.gz / .osc.bz / .osc.bz2 files
    20     }
    21        
    2226    /**
    2327     * Loads a given URL
     
    2630     * @param progressMonitor progress monitor for user interaction
    2731     */
     32    @Override
    2833    public Future<?> loadUrl(boolean new_layer, final String url, ProgressMonitor progressMonitor) {
    2934        downloadTask = new DownloadTask(new_layer, new OsmServerLocationReader(url), progressMonitor) {
  • trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java

    r5927 r6031  
    88import java.util.Map;
    99import java.util.concurrent.Future;
     10
     11import static org.openstreetmap.josm.tools.I18n.tr;
    1012
    1113import org.openstreetmap.josm.Main;
     
    4143
    4244    @Override
    43     public boolean acceptsUrl(String url) {
    44         return url != null && (
    45                 url.matches("http://.*/api/0.6/changeset/\\p{Digit}+/download") // OSM API 0.6 changesets
    46              || url.matches("https?://.*/.*\\.osc")                             // Remote .osc files
    47                 );
    48     }
    49 
     45    public String[] getPatterns() {
     46        return new String[]{"http://.*/api/0.6/changeset/\\p{Digit}+/download", // OSM API 0.6 changesets
     47            "https?://.*/.*\\.osc" // Remote .osc files
     48        };
     49    }
     50
     51    @Override
     52    public String getTitle() {
     53        return tr("Download OSM Change");
     54    }
     55       
    5056    /* (non-Javadoc)
    5157     * @see org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask#download(boolean, org.openstreetmap.josm.data.Bounds, org.openstreetmap.josm.gui.progress.ProgressMonitor)
  • trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmCompressedTask.java

    r5909 r6031  
    33
    44import java.util.concurrent.Future;
     5
     6import static org.openstreetmap.josm.tools.I18n.tr;
    57
    68import org.openstreetmap.josm.Main;
     
    1214
    1315public class DownloadOsmCompressedTask extends DownloadOsmTask {
    14    
    15     /* (non-Javadoc)
    16      * @see org.openstreetmap.josm.actions.downloadtasks.DownloadTask#acceptsUrl(java.lang.String)
    17      */
     16
     17    String PATTERN_GZ =  "https?://.*/.*\\.osm.(gz|bz2?)";
     18
    1819    @Override
    19     public boolean acceptsUrl(String url) {
    20         return url != null && url.matches("https?://.*/.*\\.osm.(gz|bz2?)"); // Remote .osm.gz / .osm.bz / .osm.bz2 files
     20    public String[] getPatterns() {
     21        return new String[]{PATTERN_GZ};
     22    }
     23
     24    @Override
     25    public String getTitle() {
     26        return tr("Download Compressed OSM");
    2127    }
    2228   
     
    3642     * @param progressMonitor progress monitor for user interaction
    3743     */
     44    @Override
    3845    public Future<?> loadUrl(boolean new_layer, final String url, ProgressMonitor progressMonitor) {
    3946        downloadTask = new DownloadTask(new_layer, new OsmServerLocationReader(url), progressMonitor) {
  • trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java

    r5782 r6031  
    4949   
    5050    protected String newLayerName = null;
     51   
     52    @Override
     53    public String[] getPatterns() {
     54        if (this.getClass() == DownloadOsmTask.class) {
     55            return new String[]{PATTERN_OSM_API_URL, PATTERN_OVERPASS_API_URL,
     56                PATTERN_OVERPASS_API_XAPI_URL, PATTERN_EXTERNAL_OSM_FILE};
     57        } else {
     58            return super.getPatterns();
     59        }
     60    }
     61
     62    @Override
     63    public String getTitle() {
     64        if (this.getClass() == DownloadOsmTask.class) {
     65            return tr("Download OSM");
     66        } else {
     67            return super.getTitle();
     68        }
     69    }
    5170
    5271    protected void rememberDownloadedData(DataSet ds) {
     
    136155     * @param url The URL as String
    137156     */
     157    @Override
    138158    public Future<?> loadUrl(boolean new_layer, String url, ProgressMonitor progressMonitor) {
    139159        if (url.matches(PATTERN_OVERPASS_API_URL)) {
     
    156176        newLayerName = matcher.matches() ? matcher.group(1) : null;
    157177    }
    158    
    159     /* (non-Javadoc)
    160      * @see org.openstreetmap.josm.actions.downloadtasks.DownloadTask#acceptsUrl(java.lang.String)
    161      */
    162     @Override
    163     public boolean acceptsUrl(String url) {
    164         return url != null && (
    165                 url.matches(PATTERN_OSM_API_URL)           // OSM API 0.6 and XAPI
    166              || url.matches(PATTERN_OVERPASS_API_URL)      // Overpass API
    167              || url.matches(PATTERN_OVERPASS_API_XAPI_URL) // Overpass API XAPI compatibility layer
    168              || url.matches(PATTERN_EXTERNAL_OSM_FILE)     // Remote .osm files
    169                 );
    170     }
    171 
     178
     179    @Override
    172180    public void cancel() {
    173181        if (downloadTask != null) {
  • trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmUrlTask.java

    r5011 r6031  
    33
    44import java.util.concurrent.Future;
     5
     6import static org.openstreetmap.josm.tools.I18n.tr;
    57
    68import org.openstreetmap.josm.gui.progress.ProgressMonitor;
     
    1315        return download(newLayer, OsmUrlToBounds.parse(url), null);
    1416    }
     17   
     18    @Override
     19    public String[] getPatterns() {
     20        return new String[]{"http://www\\.openstreetmap\\.org/\\?lat=.*&lon=.*"};
     21    }
    1522
    1623    @Override
    17     public boolean acceptsUrl(String url) {
    18         return url != null && (
    19                 url.matches("http://www\\.openstreetmap\\.org/\\?lat=.*&lon=.*")
    20                 );
     24    public String getTitle() {
     25        return tr("Download OSM URL");
    2126    }
    2227}
  • trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTask.java

    r5691 r6031  
    8080
    8181    /**
     82     * Returns a short html documentation string, describing acceptable URLs.
     83     */
     84    String acceptsDocumentationSummary();
     85   
     86    /**
     87     * Returns human-readable description of the task
     88     */
     89    String getTitle();
     90   
     91    /**
     92     * Returns regular expression that match the URLs
     93     */
     94    String[] getPatterns();
     95
     96    /**
    8297     * Replies the error objects of the task. Empty list, if no error messages are available.
    8398     *
Note: See TracChangeset for help on using the changeset viewer.