Ignore:
Timestamp:
2016-11-11T15:22:10+01:00 (7 years ago)
Author:
bastiK
Message:

applied #13948 - Validator seems to hang in last executed test (patch by Gerd Petermann)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java

    r11132 r11235  
    3030import org.openstreetmap.josm.data.osm.DataSet;
    3131import org.openstreetmap.josm.data.osm.OsmPrimitive;
     32import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
     33import org.openstreetmap.josm.data.osm.event.DataChangedEvent;
     34import org.openstreetmap.josm.data.osm.event.DataSetListener;
     35import org.openstreetmap.josm.data.osm.event.NodeMovedEvent;
     36import org.openstreetmap.josm.data.osm.event.PrimitivesAddedEvent;
     37import org.openstreetmap.josm.data.osm.event.PrimitivesRemovedEvent;
     38import org.openstreetmap.josm.data.osm.event.RelationMembersChangedEvent;
     39import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
     40import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
    3241import org.openstreetmap.josm.data.validation.Severity;
    3342import org.openstreetmap.josm.data.validation.TestError;
     
    4655 * @author frsantos
    4756 */
    48 public class ValidatorTreePanel extends JTree implements Destroyable {
     57public class ValidatorTreePanel extends JTree implements Destroyable, DataSetListener {
    4958
    5059    private static final class GroupTreeNode extends DefaultMutableTreeNode {
     
    95104                removeKeyListener(keyListener);
    96105            }
     106        }
     107        DataSet ds = Main.getLayerManager().getEditDataSet();
     108        if (ds != null) {
     109            ds.addDataSetListener(this);
    97110        }
    98111    }
     
    303316            return;
    304317        clearErrors();
    305         DataSet ds = Main.getLayerManager().getEditDataSet();
    306318        for (TestError error : newerrors) {
    307319            if (!error.isIgnored()) {
    308320                errors.add(error);
    309                 if (ds != null) {
    310                     ds.addDataSetListener(error);
    311                 }
    312321            }
    313322        }
     
    414423    private void clearErrors() {
    415424        if (errors != null) {
    416             DataSet ds = Main.getLayerManager().getEditDataSet();
    417             if (ds != null) {
    418                 for (TestError e : errors) {
    419                     ds.removeDataSetListener(e);
    420                 }
    421             }
    422425            errors.clear();
    423426        }
     
    426429    @Override
    427430    public void destroy() {
     431        DataSet ds = Main.getLayerManager().getEditDataSet();
     432        if (ds != null) {
     433            ds.removeDataSetListener(this);
     434        }
    428435        clearErrors();
    429436    }
     437
     438    @Override public void primitivesRemoved(PrimitivesRemovedEvent event) {
     439        // Remove purged primitives (fix #8639)
     440        for (TestError err : errors) {
     441            try {
     442                err.getPrimitives().removeAll(event.getPrimitives());
     443            } catch (UnsupportedOperationException e) {
     444                if (event.getPrimitives().containsAll(err.getPrimitives())) {
     445                    err.getPrimitives().clear();
     446                } else {
     447                    Main.warn(e, "Unable to remove primitives from "+err+'.');
     448                }
     449            }
     450        }
     451    }
     452
     453    @Override public void primitivesAdded(PrimitivesAddedEvent event) {
     454        // Do nothing
     455    }
     456
     457    @Override public void tagsChanged(TagsChangedEvent event) {
     458        // Do nothing
     459    }
     460
     461    @Override public void nodeMoved(NodeMovedEvent event) {
     462        // Do nothing
     463    }
     464
     465    @Override public void wayNodesChanged(WayNodesChangedEvent event) {
     466        // Do nothing
     467    }
     468
     469    @Override public void relationMembersChanged(RelationMembersChangedEvent event) {
     470        // Do nothing
     471    }
     472
     473    @Override public void otherDatasetChange(AbstractDatasetChangedEvent event) {
     474        // Do nothing
     475    }
     476
     477    @Override public void dataChanged(DataChangedEvent event) {
     478        // Do nothing
     479    }
    430480}
Note: See TracChangeset for help on using the changeset viewer.