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


Ignore:
Timestamp:
2020-06-14T19:35:04+02:00 (4 years ago)
Author:
simon04
Message:

fix #18258 - OsmReader: Allow end user to know what the original id of a feature was (patch by taylor.smock, modified)

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

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/AbstractPrimitive.java

    r15820 r16641  
    735735                            "created_by",
    736736                            "converted_by",
     737                            "current_id",
    737738                            "geobase:datasetName",
    738739                            "geobase:uuid",
  • trunk/src/org/openstreetmap/josm/io/OsmReader.java

    r15470 r16641  
    55
    66import java.io.InputStream;
     7import java.util.Arrays;
    78import java.util.Collection;
     9import java.util.Collections;
    810import java.util.Objects;
    911import java.util.Set;
     
    4042public class OsmReader extends AbstractReader {
    4143
     44    /**
     45     * Options are used to change how the xml data is parsed.
     46     * For example, {@link Options#CONVERT_UNKNOWN_TO_TAGS} is used to convert unknown XML attributes to a tag for the object.
     47     * @since 16641
     48     */
     49    public enum Options {
     50        /**
     51         * Convert unknown XML attributes to tags
     52         */
     53        CONVERT_UNKNOWN_TO_TAGS,
     54        /**
     55         * Save the original id of an object (currently stored in `current_id`)
     56         */
     57        SAVE_ORIGINAL_ID
     58    }
     59
    4260    protected XMLStreamReader parser;
    4361
    44     protected boolean convertUnknownToTags;
     62    /** The {@link OsmReader.Options} to use when parsing the xml data */
     63    protected final Collection<Options> options;
    4564
    4665    private static final Set<String> COMMON_XML_ATTRIBUTES = new TreeSet<>();
     
    6584     */
    6685    protected OsmReader() {
    67         this(false);
     86        this((Options) null);
    6887    }
    6988
    7089    /**
    7190     * constructor (for private and subclasses use only)
    72      * @param convertUnknownToTags if true, keep unknown xml attributes as tags
     91     * @param options The options to use when reading data
    7392     *
    7493     * @see #parseDataSet(InputStream, ProgressMonitor)
    75      * @since 15470
    76      */
    77     protected OsmReader(boolean convertUnknownToTags) {
     94     * @since 16641
     95     */
     96    protected OsmReader(Options... options) {
    7897        // Restricts visibility
    79         this.convertUnknownToTags = convertUnknownToTags;
     98        this.options = options == null ? Collections.emptyList() : Arrays.asList(options);
    8099    }
    81100
     
    426445            parseChangeset(current, parser.getAttributeValue(null, "changeset"));
    427446
    428             if (convertUnknownToTags) {
     447            if (options.contains(Options.SAVE_ORIGINAL_ID)) {
     448                parseTag(current, "current_id", Long.toString(getLong("id")));
     449            }
     450            if (options.contains(Options.CONVERT_UNKNOWN_TO_TAGS)) {
    429451                for (int i = 0; i < parser.getAttributeCount(); i++) {
    430452                    if (!COMMON_XML_ATTRIBUTES.contains(parser.getAttributeLocalName(i))) {
     
    497519     */
    498520    public static DataSet parseDataSet(InputStream source, ProgressMonitor progressMonitor) throws IllegalDataException {
    499         return parseDataSet(source, progressMonitor, false);
     521        return parseDataSet(source, progressMonitor, (Options) null);
    500522    }
    501523
     
    505527     * @param source the source input stream. Must not be null.
    506528     * @param progressMonitor the progress monitor. If null, {@link NullProgressMonitor#INSTANCE} is assumed
    507      * @param convertUnknownToTags true if unknown xml attributes should be kept as tags
     529     * @param options The options to use when parsing the dataset
    508530     *
    509531     * @return the dataset with the parsed data
    510532     * @throws IllegalDataException if an error was found while parsing the data from the source
    511533     * @throws IllegalArgumentException if source is null
    512      * @since 15470
    513      */
    514     public static DataSet parseDataSet(InputStream source, ProgressMonitor progressMonitor, boolean convertUnknownToTags)
     534     * @since 16641
     535     */
     536    public static DataSet parseDataSet(InputStream source, ProgressMonitor progressMonitor, Options... options)
    515537            throws IllegalDataException {
    516         return new OsmReader(convertUnknownToTags).doParseDataSet(source, progressMonitor);
     538        return new OsmReader(options).doParseDataSet(source, progressMonitor);
    517539    }
    518540}
Note: See TracChangeset for help on using the changeset viewer.