Changeset 3823 in josm


Ignore:
Timestamp:
2011-01-26T22:12:31+01:00 (13 years ago)
Author:
bastiK
Message:

fixed #5878 - purge keeps relations in the relation view)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/PurgeAction.java

    r3479 r3823  
    3434import org.openstreetmap.josm.data.osm.OsmPrimitive;
    3535import org.openstreetmap.josm.data.osm.Relation;
     36import org.openstreetmap.josm.data.osm.RelationMember;
    3637import org.openstreetmap.josm.data.osm.Way;
    3738import org.openstreetmap.josm.gui.ExtendedDialog;
     
    156157        }
    157158
     159        if (Main.pref.getBoolean("purge.add_relations_with_only_incomplete_members", true)) {
     160            Set<Relation> relSet = new HashSet<Relation>();
     161            for (OsmPrimitive osm : toPurgeChecked) {
     162                for (OsmPrimitive parent : osm.getReferrers()) {
     163                    if (parent instanceof Relation
     164                            && !(toPurgeChecked.contains(parent))
     165                            && hasOnlyIncompleteMembers((Relation) parent, toPurgeChecked, relSet)) {
     166                        relSet.add((Relation) parent);
     167                    }
     168                }
     169            }
     170
     171            /**
     172             * Add higher level relations (list gets extended while looping over it)
     173             */
     174            List<Relation> relLst = new ArrayList<Relation>(relSet);
     175            for (int i=0; i<relLst.size(); ++i) {
     176                for (OsmPrimitive parent : relLst.get(i).getReferrers()) {
     177                    if (!(toPurgeChecked.contains(parent))
     178                            && hasOnlyIncompleteMembers((Relation) parent, toPurgeChecked, relLst)) {
     179                        relLst.add((Relation) parent);
     180                    }
     181                }
     182            }
     183            relSet = new HashSet<Relation>(relLst);
     184            toPurgeChecked.addAll(relSet);
     185            toPurgeAdditionally.addAll(relSet);
     186        }
     187
    158188        boolean modified = false;
    159189        for (OsmPrimitive osm : toPurgeChecked) {
     
    269299        setEnabled(selection != null && !selection.isEmpty());
    270300    }
     301
     302    private boolean hasOnlyIncompleteMembers(Relation r, Collection<OsmPrimitive> toPurge, Collection<? extends OsmPrimitive> moreToPurge) {
     303        for (RelationMember m : r.getMembers()) {
     304            if (!m.getMember().isIncomplete() && !toPurge.contains(m.getMember()) && !moreToPurge.contains(m.getMember()))
     305                return false;
     306        }
     307        return true;
     308    }
    271309}
Note: See TracChangeset for help on using the changeset viewer.