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


Ignore:
Timestamp:
2012-07-15T16:34:27+02:00 (12 years ago)
Author:
Don-vip
Message:

fix #7857 - Mark osmChange primitives inside <modify> block as modified + allow to load remote .osc files

Location:
trunk/src/org/openstreetmap/josm
Files:
4 edited

Legend:

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

    r5317 r5345  
    33
    44import java.util.concurrent.Future;
    5 import java.util.regex.Matcher;
    6 import java.util.regex.Pattern;
    75
    86import org.openstreetmap.josm.Main;
     
    4947        currentBounds = null;
    5048        // Extract .osm.bz/bz2 filename from URL to set the new layer name
    51         Matcher matcher = Pattern.compile("http://.*/(.*\\.osm.bz2?)").matcher(url);
    52         newLayerName = matcher.matches() ? matcher.group(1) : null;
     49        extractOsmFilename("http://.*/(.*\\.osm.bz2?)", url);
    5350        return Main.worker.submit(downloadTask);
    5451    }
  • trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java

    r5171 r5345  
    3636    @Override
    3737    public boolean acceptsUrl(String url) {
    38         return url != null && url.matches("http://.*/api/0.6/changeset/\\p{Digit}+/download");
     38        return url != null && (
     39                url.matches("http://.*/api/0.6/changeset/\\p{Digit}+/download") // OSM API 0.6 changesets
     40             || url.matches("http://.*/.*\\.osc")                               // Remote .osc files
     41                );
    3942    }
    4043
     
    5760                new OsmServerLocationReader(url),
    5861                progressMonitor);
     62        // Extract .osc filename from URL to set the new layer name
     63        extractOsmFilename("http://.*/(.*\\.osc)", url);
    5964        return Main.worker.submit(downloadTask);
    6065    }
  • trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java

    r5097 r5345  
    7676        currentBounds = null;
    7777        // Extract .osm filename from URL to set the new layer name
    78         Matcher matcher = Pattern.compile("http://.*/(.*\\.osm)").matcher(url);
     78        extractOsmFilename("http://.*/(.*\\.osm)", url);
     79        return Main.worker.submit(downloadTask);
     80    }
     81   
     82    protected final void extractOsmFilename(String pattern, String url) {
     83        Matcher matcher = Pattern.compile(pattern).matcher(url);
    7984        newLayerName = matcher.matches() ? matcher.group(1) : null;
    80         return Main.worker.submit(downloadTask);
    8185    }
    8286   
  • trunk/src/org/openstreetmap/josm/io/OsmChangeReader.java

    r5266 r5345  
    44
    55import java.io.InputStream;
     6import java.util.Arrays;
    67
    78import javax.xml.stream.XMLStreamConstants;
     
    1415public class OsmChangeReader extends OsmReader {
    1516
     17    public static final String[] ACTIONS = {"create", "modify", "delete"};
     18   
    1619    /**
    1720     * constructor (for private and subclasses use only)
     
    4649            int event = parser.next();
    4750            if (event == XMLStreamConstants.START_ELEMENT) {
    48                 if (parser.getLocalName().equals("create")) {
    49                     parseCreate();
    50                 } else if (parser.getLocalName().equals("modify")) {
    51                     parseModify();
    52                 } else if (parser.getLocalName().equals("delete")) {
    53                     parseDelete();
     51                if (Arrays.asList(ACTIONS).contains(parser.getLocalName())) {
     52                    parseCommon(parser.getLocalName());
    5453                } else {
    5554                    parseUnknown();
     
    6160    }
    6261
    63     private void parseDelete() throws XMLStreamException {
    64         parseCommon(true);
    65     }
    66 
    67     private void parseModify() throws XMLStreamException {
    68         parseCommon(false);
    69     }
    70 
    71     private void parseCreate() throws XMLStreamException {
    72         parseCommon(false);
    73     }
    74 
    75     private void parseCommon(boolean deletePrimitive) throws XMLStreamException {
     62    private void parseCommon(String action) throws XMLStreamException {
    7663        while (parser.hasNext()) {
    7764            int event = parser.next();
     
    8774                    parseUnknown();
    8875                }
    89                 if (p != null && deletePrimitive) {
    90                     p.setDeleted(true);
     76                if (p != null && action != null) {
     77                    if (action.equals("modify")) {
     78                        p.setModified(true);
     79                    } else if (action.equals("delete")) {
     80                        p.setDeleted(true);
     81                    }
    9182                }
    9283            } else if (event == XMLStreamConstants.END_ELEMENT) {
Note: See TracChangeset for help on using the changeset viewer.