[josm-dev] Tasks for all of you

Russ Nelson nelson at crynwr.com
Mon Dec 29 01:51:21 GMT 2008


Dirk Stöcker writes:
 > http://josm.openstreetmap.de/ticket/1712
 > Incomplete ways are discarded without notice

This is a minimal patch.  I didn't want to make too many changes
because somebody else is going to have to read this patch before they
apply it.  I don't know Java very well, so if anybody spots anything
un-Javanic, please tell me.

Potential improvements:
  o convert all invocations of OsmReader.parseDataSet() to
    OsmReader.parseDataSetOsm() to gain access to getParseNotes().
  o Doing something more sensible with the output presentation if
    there are too many warnings than can fit on the screen (or will it
    switch to a scrollbox?)
  o It's possible that DataSet ought to be the entity that has
    parseNotes.  That would make for a simpler patch, but not
    necessarily more correct.


Index: src/org/openstreetmap/josm/actions/OpenFileAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/OpenFileAction.java	(revision 1180)
+++ src/org/openstreetmap/josm/actions/OpenFileAction.java	(working copy)
@@ -74,10 +74,14 @@
     private void openAsData(File file) throws SAXException, IOException, FileNotFoundException {
         String fn = file.getName();
         if (ExtensionFileFilter.filters[ExtensionFileFilter.OSM].acceptName(fn)) {
-            DataSet dataSet = OsmReader.parseDataSet(new FileInputStream(file), null, Main.pleaseWaitDlg);
+            OsmReader osm = OsmReader.parseDataSetOsm(new FileInputStream(file), null, Main.pleaseWaitDlg);
+            DataSet dataSet = osm.getDs();
             OsmDataLayer layer = new OsmDataLayer(dataSet, file.getName(), file);
             Main.main.addLayer(layer);
             layer.fireDataChange();
+            if (osm.getParseNotes().length() != 0) {
+                JOptionPane.showMessageDialog(Main.parent, osm.getParseNotes());
+            }
         }
         else
             JOptionPane.showMessageDialog(Main.parent, fn+": "+tr("Unknown file extension: {0}", fn.substring(file.getName().lastIndexOf('.')+1)));
Index: src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- src/org/openstreetmap/josm/io/OsmReader.java	(revision 1180)
+++ src/org/openstreetmap/josm/io/OsmReader.java	(working copy)
@@ -59,8 +59,18 @@
       * The dataset to add parsed objects to.
       */
      private DataSet ds = new DataSet();
+     public DataSet getDs() { return ds; }
 
      /**
+      * Record warnings.  If there were any data inconsistencies, append
+      * a newline-terminated string.
+      */
+     private String parseNotes = new String();
+     public String getParseNotes() {
+         return parseNotes;
+     }
+
+     /**
       * The visitor to use to add the data to the set.
       */
      private AddVisitor adder = new AddVisitor(ds);
@@ -332,6 +342,7 @@
                for (long id : e.getValue()) {
                     Node n = findNode(id);
                     if (n == null) {
+                         parseNotes += "Skipping a way because it includes a node that doesn't exist: " + id + "\n";
                          failed = true;
                          break;
                     }
@@ -434,6 +445,10 @@
       *  elemet found there is returned.
       */
      public static DataSet parseDataSet(InputStream source, DataSet ref, PleaseWaitDialog pleaseWaitDlg) throws SAXException, IOException {
+          return parseDataSetOsm(source, ref, pleaseWaitDlg).ds;
+     }
+
+     public static OsmReader parseDataSetOsm(InputStream source, DataSet ref, PleaseWaitDialog pleaseWaitDlg) throws SAXException, IOException {
           OsmReader osm = new OsmReader();
           osm.references = ref == null ? new DataSet() : ref;
 
@@ -467,6 +482,6 @@
                if (o.id < 0)
                     o.id = 0;
 
-          return osm.ds;
+          return osm;
      }
 }




More information about the josm-dev mailing list