Changeset 3823 in josm


Ignore:
Timestamp:
Jan 26, 2011 10:12:31 PM (2 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.