Changeset 15640 in josm for trunk/src/org


Ignore:
Timestamp:
2020-01-05T21:09:21+01:00 (5 years ago)
Author:
Don-vip
Message:

fix #18455 - detect objects not matching their presets object type (info level)

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

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/validation/Test.java

    r15463 r15640  
    115115        public TagTest(String name) {
    116116            super(name);
     117        }
     118
     119        @Override
     120        public boolean isPrimitiveUsable(OsmPrimitive p) {
     121            return super.isPrimitiveUsable(p) && p.isTagged();
    117122        }
    118123
  • trunk/src/org/openstreetmap/josm/data/validation/TestError.java

    r14913 r15640  
    8585         * Sets the error message.
    8686         *
    87          * @param message       The the message of this error group
     87         * @param message       The message of this error group
    8888         * @param description   The translated description of this error
    8989         * @param descriptionEn The English description (for ignoring errors)
  • trunk/src/org/openstreetmap/josm/data/validation/tests/ConditionalKeys.java

    r15347 r15640  
    249249    @Override
    250250    public void check(OsmPrimitive p) {
    251         if (p.isTagged()) {
    252             errors.addAll(validatePrimitive(p));
    253         }
     251        errors.addAll(validatePrimitive(p));
    254252    }
    255253}
  • trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java

    r15588 r15640  
    786786            addIfNotSimilar(e, errors);
    787787        }
    788         if (partialSelection && p.isTagged()) {
     788        if (partialSelection) {
    789789            tested.add(p);
    790790        }
  • trunk/src/org/openstreetmap/josm/data/validation/tests/OpeningHourTest.java

    r15328 r15640  
    1818import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1919import org.openstreetmap.josm.data.validation.Severity;
    20 import org.openstreetmap.josm.data.validation.Test;
     20import org.openstreetmap.josm.data.validation.Test.TagTest;
    2121import org.openstreetmap.josm.data.validation.TestError;
    2222import org.openstreetmap.josm.gui.Notification;
     
    3434 * @since 6370
    3535 */
    36 public class OpeningHourTest extends Test.TagTest {
     36public class OpeningHourTest extends TagTest {
    3737
    3838    /**
     
    328328    @Override
    329329    public void check(final OsmPrimitive p) {
    330         if (p.isTagged()) {
    331             check(p, "opening_hours");
    332             check(p, "collection_times");
    333             check(p, "service_times");
    334         }
     330        check(p, "opening_hours");
     331        check(p, "collection_times");
     332        check(p, "service_times");
    335333    }
    336334}
  • trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java

    r15614 r15640  
    1414import java.util.Collection;
    1515import java.util.Collections;
     16import java.util.EnumSet;
    1617import java.util.HashMap;
    1718import java.util.HashSet;
     
    4445import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetItem;
    4546import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetListener;
     47import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetType;
    4648import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
    4749import org.openstreetmap.josm.gui.tagging.presets.items.Check;
     
    106108     */
    107109    public static final String PREF_CHECK_FIXMES = PREFIX + ".checkFixmes";
     110    /**
     111     * The preference key to check presets
     112     */
     113    public static final String PREF_CHECK_PRESETS_TYPES = PREFIX + ".checkPresetsTypes";
    108114
    109115    /**
     
    130136     */
    131137    public static final String PREF_CHECK_FIXMES_BEFORE_UPLOAD = PREF_CHECK_FIXMES + BEFORE_UPLOAD;
     138    /**
     139     * The preference key to search for presets - used before upload
     140     */
     141    public static final String PREF_CHECK_PRESETS_TYPES_BEFORE_UPLOAD = PREF_CHECK_PRESETS_TYPES + BEFORE_UPLOAD;
    132142
    133143    private static final int MAX_LEVENSHTEIN_DISTANCE = 2;
     
    138148    protected boolean checkComplex;
    139149    protected boolean checkFixmes;
     150    protected boolean checkPresetsTypes;
    140151
    141152    protected JCheckBox prefCheckKeys;
     
    143154    protected JCheckBox prefCheckComplex;
    144155    protected JCheckBox prefCheckFixmes;
    145     protected JCheckBox prefCheckPaint;
     156    protected JCheckBox prefCheckPresetsTypes;
    146157
    147158    protected JCheckBox prefCheckKeysBeforeUpload;
     
    149160    protected JCheckBox prefCheckComplexBeforeUpload;
    150161    protected JCheckBox prefCheckFixmesBeforeUpload;
    151     protected JCheckBox prefCheckPaintBeforeUpload;
     162    protected JCheckBox prefCheckPresetsTypesBeforeUpload;
    152163
    153164    // CHECKSTYLE.OFF: SingleSpaceSeparator
     
    168179    protected static final int MISSPELLED_VALUE_NO_FIX  = 1215;
    169180    protected static final int UNUSUAL_UNICODE_CHAR_VALUE = 1216;
     181    protected static final int INVALID_PRESETS_TYPE     = 1217;
    170182    // CHECKSTYLE.ON: SingleSpaceSeparator
    171183
     
    578590    @Override
    579591    public void check(OsmPrimitive p) {
    580         if (!p.isTagged())
    581             return;
    582 
    583592        // Just a collection to know if a primitive has been already marked with error
    584593        MultiMap<OsmPrimitive, String> withErrors = new MultiMap<>();
     
    602611                        .build());
    603612                withErrors.put(p, "FIXME");
     613            }
     614        }
     615
     616        if (checkPresetsTypes) {
     617            for (TaggingPreset tp : TaggingPresets.getMatchingPresets(null, p.getKeys(), false)) {
     618                TaggingPresetType presetType = TaggingPresetType.forPrimitive(p);
     619                if (!tp.typeMatches(EnumSet.of(presetType))) {
     620                    errors.add(TestError.builder(this, Severity.OTHER, INVALID_PRESETS_TYPE)
     621                            .message(tr("Wrong presets types"),
     622                                    marktr("{0} is not supported by tagging preset: {1}"), tr(presetType.getName()), tp.getLocaleName())
     623                            .primitives(p)
     624                            .build());
     625                }
    604626            }
    605627        }
     
    881903            checkFixmes = checkFixmes && Config.getPref().getBoolean(PREF_CHECK_FIXMES_BEFORE_UPLOAD, true);
    882904        }
     905
     906        checkPresetsTypes = Config.getPref().getBoolean(PREF_CHECK_PRESETS_TYPES, true);
     907        if (isBeforeUpload) {
     908            checkPresetsTypes = checkPresetsTypes && Config.getPref().getBoolean(PREF_CHECK_PRESETS_TYPES_BEFORE_UPLOAD, true);
     909        }
    883910    }
    884911
    885912    @Override
    886913    public void visit(Collection<OsmPrimitive> selection) {
    887         if (checkKeys || checkValues || checkComplex || checkFixmes) {
     914        if (checkKeys || checkValues || checkComplex || checkFixmes || checkPresetsTypes) {
    888915            super.visit(selection);
    889916        }
     
    942969        prefCheckFixmesBeforeUpload.setSelected(Config.getPref().getBoolean(PREF_CHECK_FIXMES_BEFORE_UPLOAD, true));
    943970        testPanel.add(prefCheckFixmesBeforeUpload, a);
     971
     972        prefCheckPresetsTypes = new JCheckBox(tr("Check for presets types."), Config.getPref().getBoolean(PREF_CHECK_PRESETS_TYPES, true));
     973        prefCheckPresetsTypes.setToolTipText(tr("Validate that objects types are valid checking against presets."));
     974        testPanel.add(prefCheckPresetsTypes, GBC.std().insets(20, 0, 0, 0));
     975
     976        prefCheckPresetsTypesBeforeUpload = new JCheckBox();
     977        prefCheckPresetsTypesBeforeUpload.setSelected(Config.getPref().getBoolean(PREF_CHECK_PRESETS_TYPES_BEFORE_UPLOAD, true));
     978        testPanel.add(prefCheckPresetsTypesBeforeUpload, a);
    944979    }
    945980
     
    963998        Config.getPref().putBoolean(PREF_CHECK_KEYS, prefCheckKeys.isSelected());
    964999        Config.getPref().putBoolean(PREF_CHECK_FIXMES, prefCheckFixmes.isSelected());
     1000        Config.getPref().putBoolean(PREF_CHECK_PRESETS_TYPES, prefCheckPresetsTypes.isSelected());
    9651001        Config.getPref().putBoolean(PREF_CHECK_VALUES_BEFORE_UPLOAD, prefCheckValuesBeforeUpload.isSelected());
    9661002        Config.getPref().putBoolean(PREF_CHECK_COMPLEX_BEFORE_UPLOAD, prefCheckComplexBeforeUpload.isSelected());
    9671003        Config.getPref().putBoolean(PREF_CHECK_KEYS_BEFORE_UPLOAD, prefCheckKeysBeforeUpload.isSelected());
    9681004        Config.getPref().putBoolean(PREF_CHECK_FIXMES_BEFORE_UPLOAD, prefCheckFixmesBeforeUpload.isSelected());
     1005        Config.getPref().putBoolean(PREF_CHECK_PRESETS_TYPES_BEFORE_UPLOAD, prefCheckPresetsTypesBeforeUpload.isSelected());
    9691006        return Config.getPref().putList(PREF_SOURCES, sourcesList.getItems());
    9701007    }
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java

    r15029 r15640  
    2323import java.util.concurrent.CompletableFuture;
    2424import java.util.function.Predicate;
     25import java.util.stream.Collectors;
    2526
    2627import javax.swing.AbstractAction;
     
    525526    public Collection<OsmPrimitive> createSelection(Collection<OsmPrimitive> participants) {
    526527        originalSelectionEmpty = participants.isEmpty();
    527         Collection<OsmPrimitive> sel = new LinkedList<>();
    528         for (OsmPrimitive osm : participants) {
    529             if (typeMatches(EnumSet.of(TaggingPresetType.forPrimitive(osm)))) {
    530                 sel.add(osm);
    531             }
    532         }
    533         return sel;
     528        return participants.stream().filter(this::typeMatches).collect(Collectors.toList());
    534529    }
    535530
     
    540535    public List<Tag> getChangedTags() {
    541536        List<Tag> result = new ArrayList<>();
    542         for (TaggingPresetItem i: data) {
    543             i.addCommands(result);
    544         }
     537        data.forEach(i -> i.addCommands(result));
    545538        return result;
    546539    }
     
    585578    public String toString() {
    586579        return (types == null ? "" : types.toString()) + ' ' + name;
     580    }
     581
     582    /**
     583     * Determines whether this preset matches the OSM primitive type.
     584     * @param primitive The OSM primitive for which type must match
     585     * @return <code>true</code> if type matches.
     586     * @since 15640
     587     */
     588    public final boolean typeMatches(IPrimitive primitive) {
     589        return typeMatches(EnumSet.of(TaggingPresetType.forPrimitive(primitive)));
    587590    }
    588591
Note: See TracChangeset for help on using the changeset viewer.