Ignore:
Timestamp:
2009-10-25T12:05:31+01:00 (14 years ago)
Author:
Gubaer
Message:

fixed #3762: Deleted relation still referenced when deleting former member
Clean up of Delete command. New: only one confirmation dialog for all parent relations of deleted objects, see help.
Improved infrastructure for context-sensitive help, improved internal help browser.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/Relation.java

    r2305 r2308  
    22
    33import java.util.ArrayList;
     4import java.util.Collection;
    45import java.util.HashMap;
    56import java.util.HashSet;
     
    170171        for (RelationMemberData member:relationData.getMembers()) {
    171172            switch (member.getMemberType()) {
    172             case NODE:
    173                 nodes.put(member.getMemberId(), nodeMarker);
    174                 break;
    175             case WAY:
    176                 ways.put(member.getMemberId(), wayMarker);
    177                 break;
    178             case RELATION:
    179                 relations.put(member.getMemberId(), relationMarker);
    180                 break;
     173                case NODE:
     174                    nodes.put(member.getMemberId(), nodeMarker);
     175                    break;
     176                case WAY:
     177                    ways.put(member.getMemberId(), wayMarker);
     178                    break;
     179                case RELATION:
     180                    relations.put(member.getMemberId(), relationMarker);
     181                    break;
    181182            }
    182183        }
     
    202203            OsmPrimitive foundMember = null;
    203204            switch (member.getMemberType()) {
    204             case NODE:
    205                 foundMember = nodes.get(member.getMemberId());
    206                 if (foundMember == nodeMarker) {
    207                     throw new AssertionError("Data consistency problem - relation with missing member detected");
    208                 }
    209                 break;
    210             case WAY:
    211                 foundMember = ways.get(member.getMemberId());
    212                 if (foundMember == wayMarker) {
    213                     throw new AssertionError("Data consistency problem - relation with missing member detected");
    214                 }
    215                 break;
    216             case RELATION:
    217                 foundMember = relations.get(member.getMemberId());
    218                 if (foundMember == relationMarker) {
    219                     throw new AssertionError("Data consistency problem - relation with missing member detected");
    220                 }
    221                 break;
     205                case NODE:
     206                    foundMember = nodes.get(member.getMemberId());
     207                    if (foundMember == nodeMarker)
     208                        throw new AssertionError("Data consistency problem - relation with missing member detected");
     209                    break;
     210                case WAY:
     211                    foundMember = ways.get(member.getMemberId());
     212                    if (foundMember == wayMarker)
     213                        throw new AssertionError("Data consistency problem - relation with missing member detected");
     214                    break;
     215                case RELATION:
     216                    foundMember = relations.get(member.getMemberId());
     217                    if (foundMember == relationMarker)
     218                        throw new AssertionError("Data consistency problem - relation with missing member detected");
     219                    break;
    222220            }
    223221            newMembers.add(new RelationMember(member.getRole(), foundMember));
     
    290288    }
    291289
     290    /**
     291     * removes all members with member.member == primitive
     292     *
     293     * @param primitives the primitives to check for
     294     */
     295    public void removeMembersFor(Collection<OsmPrimitive> primitives) {
     296        if (primitives == null || primitives.isEmpty())
     297            return;
     298
     299        ArrayList<RelationMember> todelete = new ArrayList<RelationMember>();
     300        for (RelationMember member: members) {
     301            if (primitives.contains(member.getMember())) {
     302                todelete.add(member);
     303            }
     304        }
     305        members.removeAll(todelete);
     306    }
     307
    292308    @Override
    293309    public String getDisplayName(NameFormatter formatter) {
Note: See TracChangeset for help on using the changeset viewer.