Changeset 14219 in josm


Ignore:
Timestamp:
2018-09-02T21:53:46+02:00 (3 months ago)
Author:
Don-vip
Message:

fix #16695 - display remark from Overpass API when a download returns no data

Location:
trunk
Files:
6 edited

Legend:

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

    r14215 r14219  
    471471                    rememberErrorMessage(tr("No data found in this area."));
    472472                }
     473                String remark = dataSet.getRemark();
     474                if (remark != null && !remark.isEmpty()) {
     475                    rememberErrorMessage(remark);
     476                }
    473477                // need to synthesize a download bounds lest the visual indication of downloaded area doesn't work
    474478                dataSet.addDataSource(new DataSource(currentBounds != null ? currentBounds :
  • trunk/src/org/openstreetmap/josm/data/osm/DataSet.java

    r14206 r14219  
    169169
    170170    private short mappaintCacheIdx = 1;
     171    private String remark;
    171172
    172173    /**
     
    12311232        }
    12321233    }
     1234
     1235    /**
     1236     * Returns an optional remark about this data set (used by Overpass API).
     1237     * @return a remark about this data set, or {@code null}
     1238     * @since 14219
     1239     */
     1240    public String getRemark() {
     1241        return remark;
     1242    }
     1243
     1244    /**
     1245     * Sets an optional remark about this data set (used by Overpass API).
     1246     * @param remark a remark about this data set, or {@code null}
     1247     * @since 14219
     1248     */
     1249    public void setRemark(String remark) {
     1250        this.remark = remark;
     1251    }
    12331252}
  • trunk/src/org/openstreetmap/josm/io/OsmJsonReader.java

    r14108 r14219  
    6767        parseLocked(object.getString("locked", null));
    6868        parseElements(object.getJsonArray("elements"));
     69        parseRemark(object.getString("remark", null));
     70    }
     71
     72    private void parseRemark(String remark) {
     73        ds.setRemark(remark);
    6974    }
    7075
  • trunk/src/org/openstreetmap/josm/io/OsmReader.java

    r14094 r14219  
    103103            uploadChangesetId = getLong("upload-changeset");
    104104        }
    105         while (true) {
     105        while (parser.hasNext()) {
    106106            int event = parser.next();
    107107
     
    127127                case "changeset":
    128128                    parseChangeset(uploadChangesetId);
     129                    break;
     130                case "remark": // Used by Overpass API
     131                    parseRemark();
    129132                    break;
    130133                default:
     
    143146        } else {
    144147            throwException(e);
     148        }
     149    }
     150
     151    private void parseRemark() throws XMLStreamException {
     152        while (parser.hasNext()) {
     153            int event = parser.next();
     154            if (event == XMLStreamConstants.CHARACTERS) {
     155                ds.setRemark(parser.getText());
     156            } else if (event == XMLStreamConstants.END_ELEMENT) {
     157                return;
     158            }
    145159        }
    146160    }
  • trunk/test/unit/org/openstreetmap/josm/io/OsmJsonReaderTest.java

    r14201 r14219  
    5353     */
    5454    private static DataSet parse(String osm) throws Exception {
     55        return parse(osm, "");
     56    }
     57
     58    /**
     59     * Parse JSON.
     60     * @param osm OSM data in JSON format, without header/footer
     61     * @param extraContent extra content added after OSM elements
     62     * @return data set
     63     * @throws Exception if any error occurs
     64     */
     65    private static DataSet parse(String osm, String extraContent) throws Exception {
    5566        try (InputStream in = new ByteArrayInputStream((
    5667                "{\n" +
     
    6576                "  },\n" +
    6677                "  \"elements\": [" + osm + "]\n" +
     78                extraContent +
    6779                "}")
    6880                .getBytes(StandardCharsets.UTF_8))) {
     
    225237        assertEquals("route", r.get("type"));
    226238    }
     239
     240    /**
     241     * Test reading remark from Overpass API.
     242     * @throws Exception if any error occurs
     243     */
     244    @Test
     245    public void testRemark() throws Exception {
     246        DataSet ds = parse("", "," +
     247                "  \"remark\": \"runtime error: Query ran out of memory in \\\"query\\\" at line 5.\"\n");
     248        assertEquals("runtime error: Query ran out of memory in \"query\" at line 5.", ds.getRemark());
     249    }
    227250}
  • trunk/test/unit/org/openstreetmap/josm/io/OsmReaderTest.java

    r14078 r14219  
    115115     * Test valid data.
    116116     * @param osm OSM data without XML prefix
    117      * @throws Exception if any error occurs
    118      */
    119     private static void testValidData(String osm) throws Exception {
     117     * @return parsed data set
     118     * @throws Exception if any error occurs
     119     */
     120    private static DataSet testValidData(String osm) throws Exception {
    120121        try (InputStream in = new ByteArrayInputStream(
    121122                ("<?xml version='1.0' encoding='UTF-8'?>" + osm).getBytes(StandardCharsets.UTF_8))) {
    122             OsmReader.parseDataSet(in, NullProgressMonitor.INSTANCE);
     123            return OsmReader.parseDataSet(in, NullProgressMonitor.INSTANCE);
    123124        }
    124125    }
     
    341342        }
    342343    }
     344
     345    /**
     346     * Test reading remark from Overpass API.
     347     * @throws Exception if any error occurs
     348     */
     349    @Test
     350    public void testRemark() throws Exception {
     351        DataSet ds = testValidData(
     352                "<osm version=\"0.6\" generator=\"Overpass API 0.7.55.4 3079d8ea\">\r\n" +
     353                "<note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note>\r\n" +
     354                "<meta osm_base=\"2018-08-30T12:46:02Z\" areas=\"2018-08-30T12:40:02Z\"/>\r\n" +
     355                "<remark>runtime error: Query ran out of memory in \"query\" at line 5.</remark>\r\n" +
     356                "</osm>");
     357        assertEquals("runtime error: Query ran out of memory in \"query\" at line 5.", ds.getRemark());
     358    }
    343359}
Note: See TracChangeset for help on using the changeset viewer.