Changeset 5911 in josm for trunk


Ignore:
Timestamp:
2013-04-29T01:29:55+02:00 (7 years ago)
Author:
Don-vip
Message:

fix #8639 - Handle purged primitives in validator errors

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

Legend:

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

    r5783 r5911  
    88import java.util.TreeSet;
    99
     10import org.openstreetmap.josm.Main;
    1011import org.openstreetmap.josm.command.Command;
    1112import org.openstreetmap.josm.data.osm.Node;
     
    1415import org.openstreetmap.josm.data.osm.Way;
    1516import org.openstreetmap.josm.data.osm.WaySegment;
     17import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
     18import org.openstreetmap.josm.data.osm.event.DataChangedEvent;
     19import org.openstreetmap.josm.data.osm.event.DataSetListener;
     20import org.openstreetmap.josm.data.osm.event.NodeMovedEvent;
     21import org.openstreetmap.josm.data.osm.event.PrimitivesAddedEvent;
     22import org.openstreetmap.josm.data.osm.event.PrimitivesRemovedEvent;
     23import org.openstreetmap.josm.data.osm.event.RelationMembersChangedEvent;
     24import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
     25import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
    1626import org.openstreetmap.josm.data.validation.util.MultipleNameVisitor;
    1727
     
    2030 * @author frsantos
    2131 */
    22 public class TestError implements Comparable<TestError> {
     32public class TestError implements Comparable<TestError>, DataSetListener {
    2333    /** is this error on the ignore list */
    2434    private Boolean ignored = false;
     
    290300        return v1.toString().compareToIgnoreCase(v2.toString());
    291301    }
     302
     303    @Override public void primitivesRemoved(PrimitivesRemovedEvent event) {
     304        // Remove purged primitives (fix #8639)
     305        try {
     306            primitives.removeAll(event.getPrimitives());
     307        } catch (UnsupportedOperationException e) {
     308            if (event.getPrimitives().containsAll(primitives)) {
     309                primitives = Collections.emptyList();
     310            } else {
     311                Main.warn("Unable to remove primitives from "+this);
     312            }
     313        }
     314    }
     315
     316    @Override public void primitivesAdded(PrimitivesAddedEvent event) {}
     317    @Override public void tagsChanged(TagsChangedEvent event) {}
     318    @Override public void nodeMoved(NodeMovedEvent event) {}
     319    @Override public void wayNodesChanged(WayNodesChangedEvent event) {}
     320    @Override public void relationMembersChanged(RelationMembersChangedEvent event) {}
     321    @Override public void otherDatasetChange(AbstractDatasetChangedEvent event) {}
     322    @Override public void dataChanged(DataChangedEvent event) {}
     323
     324    @Override
     325    public String toString() {
     326        return "TestError [tester=" + tester + ", code=" + code + "]";
     327    }
    292328}
  • trunk/src/org/openstreetmap/josm/data/validation/util/MultipleNameVisitor.java

    r5353 r5911  
    6060        }
    6161
    62         if (size == 1) {
     62        if (size <= 1) {
    6363            displayName = name;
    6464        } else {
     
    9292     */
    9393    public Icon getIcon() {
    94         if (size == 1)
     94        if (size <= 1)
    9595            return icon;
    9696        else
  • trunk/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java

    r5891 r5911  
    2222
    2323import org.openstreetmap.josm.Main;
     24import org.openstreetmap.josm.data.osm.DataSet;
    2425import org.openstreetmap.josm.data.osm.OsmPrimitive;
    2526import org.openstreetmap.josm.data.validation.Severity;
     
    2728import org.openstreetmap.josm.data.validation.util.MultipleNameVisitor;
    2829import org.openstreetmap.josm.gui.preferences.ValidatorPreference;
     30import org.openstreetmap.josm.tools.Destroyable;
    2931import org.openstreetmap.josm.tools.MultiMap;
    3032
     
    3638 * @author frsantos
    3739 */
    38 public class ValidatorTreePanel extends JTree {
     40public class ValidatorTreePanel extends JTree implements Destroyable {
    3941    /** Serializable ID */
    4042    private static final long serialVersionUID = 2952292777351992696L;
     
    294296        if (errors == null)
    295297            return;
    296         errors.clear();
     298        clearErrors();
     299        DataSet ds = Main.main.getCurrentDataSet();
    297300        for (TestError error : newerrors) {
    298301            if (!error.getIgnored()) {
    299302                errors.add(error);
     303                if (ds != null) {
     304                    ds.addDataSetListener(error);
     305                }
    300306            }
    301307        }
     
    374380        return updateCount;
    375381    }
     382   
     383    private void clearErrors() {
     384        if (errors != null) {
     385            DataSet ds = Main.main.getCurrentDataSet();
     386            if (ds != null) {
     387                for (TestError e : errors) {
     388                    ds.removeDataSetListener(e);
     389                }
     390            }
     391            errors.clear();
     392        }
     393    }
     394
     395    @Override
     396    public void destroy() {
     397        clearErrors();
     398    }
    376399}
Note: See TracChangeset for help on using the changeset viewer.