Changeset 11435 in josm for trunk/src


Ignore:
Timestamp:
2017-01-07T00:56:52+01:00 (3 years ago)
Author:
Don-vip
Message:

fix #14199 - JOSM drops empty tags on loading and thus prevents correcting them

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

Legend:

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

    r11373 r11435  
    538538    public void put(String key, String value) {
    539539        Map<String, String> originalKeys = getKeys();
    540         if (key == null || Utils.strip(key).isEmpty())
     540        if (key == null || Utils.isStripEmpty(key))
    541541            return;
    542542        else if (value == null) {
  • trunk/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java

    r11416 r11435  
    274274        // Update text, hide prefixing label if empty
    275275        if (label != null) {
    276             label.setVisible(text != null && !Utils.strip(text).isEmpty());
     276            label.setVisible(text != null && !Utils.isStripEmpty(text));
    277277        }
    278278        textArea.setText(text);
  • trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java

    r11387 r11435  
    965965
    966966        private void updateOkButtonState() {
    967             buttons.get(0).setEnabled(!Utils.strip(tfURL.getText()).isEmpty());
     967            buttons.get(0).setEnabled(!Utils.isStripEmpty(tfURL.getText()));
    968968        }
    969969
  • trunk/src/org/openstreetmap/josm/io/OsmReader.java

    r10702 r11435  
    2525import org.openstreetmap.josm.data.DataSource;
    2626import org.openstreetmap.josm.data.coor.LatLon;
     27import org.openstreetmap.josm.data.osm.AbstractPrimitive;
    2728import org.openstreetmap.josm.data.osm.Changeset;
    2829import org.openstreetmap.josm.data.osm.DataSet;
     
    4142import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    4243import org.openstreetmap.josm.tools.CheckParameterUtil;
     44import org.openstreetmap.josm.tools.Utils;
    4345import org.openstreetmap.josm.tools.date.DateUtils;
    4446
     
    377379        if (key == null || value == null) {
    378380            throwException(tr("Missing key or value attribute in tag."));
     381        } else if (Utils.isStripEmpty(key) && t instanceof AbstractPrimitive) {
     382            // #14199: Empty keys as ignored by AbstractPrimitive#put, but it causes problems to fix existing data
     383            // Drop the tag on import, but flag the primitive as modified
     384            ((AbstractPrimitive) t).setModified(true);
    379385        } else {
    380386            t.put(key.intern(), value.intern());
  • trunk/src/org/openstreetmap/josm/tools/Utils.java

    r11394 r11435  
    735735
    736736    /**
     737     * Determines if the given String would be empty if stripped.
     738     * This is an efficient alternative to {@code strip(s).isEmpty()} that avoids to create useless String object.
     739     * @param str The string to test
     740     * @return {@code true} if the stripped version of {@code s} would be empty.
     741     * @since 11435
     742     */
     743    public static boolean isStripEmpty(String str) {
     744        if (str != null) {
     745            for (int i = 0; i < str.length(); i++) {
     746                if (!isStrippedChar(str.charAt(i), DEFAULT_STRIP)) {
     747                    return false;
     748                }
     749            }
     750        }
     751        return true;
     752    }
     753
     754    /**
    737755     * An alternative to {@link String#trim()} to effectively remove all leading
    738756     * and trailing white characters, including Unicode ones.
     
    774792        boolean leadingSkipChar = true;
    775793        while (leadingSkipChar && start < end) {
    776             char c = str.charAt(start);
    777             leadingSkipChar = Character.isWhitespace(c) || Character.isSpaceChar(c) || stripChar(skipChars, c);
     794            leadingSkipChar = isStrippedChar(str.charAt(start), skipChars);
    778795            if (leadingSkipChar) {
    779796                start++;
     
    782799        boolean trailingSkipChar = true;
    783800        while (trailingSkipChar && end > start + 1) {
    784             char c = str.charAt(end - 1);
    785             trailingSkipChar = Character.isWhitespace(c) || Character.isSpaceChar(c) || stripChar(skipChars, c);
     801            trailingSkipChar = isStrippedChar(str.charAt(end - 1), skipChars);
    786802            if (trailingSkipChar) {
    787803                end--;
     
    790806
    791807        return str.substring(start, end);
     808    }
     809
     810    private static boolean isStrippedChar(char c, final char ... skipChars) {
     811        return Character.isWhitespace(c) || Character.isSpaceChar(c) || stripChar(skipChars, c);
    792812    }
    793813
Note: See TracChangeset for help on using the changeset viewer.