Ignore:
Timestamp:
2009-11-07T20:01:37+01:00 (14 years ago)
Author:
jttt
Message:

Use Dataset.getPrimitiveById() instead of custom looking for primitive in Way.load() and Relation.load()

File:
1 edited

Legend:

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

    r2399 r2404  
    33import java.util.ArrayList;
    44import java.util.Collection;
    5 import java.util.HashMap;
    65import java.util.HashSet;
    76import java.util.List;
    8 import java.util.Map;
    97import java.util.Set;
    108
     
    160158        RelationData relationData = (RelationData) data;
    161159
    162         // TODO Make this faster
    163 
    164         Node nodeMarker = new Node();
    165         Way wayMarker = new Way();
    166         Relation relationMarker = new Relation();
    167         Map<Long, Node> nodes = new HashMap<Long, Node>();
    168         Map<Long, Way> ways = new HashMap<Long, Way>();
    169         Map<Long, Relation> relations = new HashMap<Long, Relation>();
    170 
    171         for (RelationMemberData member : relationData.getMembers()) {
    172             switch (member.getMemberType()) {
    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;
    182             }
    183         }
    184 
    185         for (Node node : dataSet.getNodes()) {
    186             if (nodes.get(node.getUniqueId()) == nodeMarker) {
    187                 nodes.put(node.getUniqueId(), node);
    188             }
    189         }
    190         for (Way way : dataSet.getWays()) {
    191             if (ways.get(way.getUniqueId()) == wayMarker) {
    192                 ways.put(way.getUniqueId(), way);
    193             }
    194         }
    195         for (Relation relation : dataSet.getRelations()) {
    196             if (relations.get(relation.getUniqueId()) == relationMarker) {
    197                 relations.put(relation.getUniqueId(), relation);
    198             }
    199         }
    200 
    201160        List<RelationMember> newMembers = new ArrayList<RelationMember>();
    202161        for (RelationMemberData member : relationData.getMembers()) {
    203             OsmPrimitive foundMember = null;
    204             switch (member.getMemberType()) {
    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;
    220             }
    221             newMembers.add(new RelationMember(member.getRole(), foundMember));
     162            OsmPrimitive primitive = dataSet.getPrimitiveById(member);
     163            if (primitive == null)
     164                throw new AssertionError("Data consistency problem - relation with missing member detected");
     165            newMembers.add(new RelationMember(member.getRole(), primitive));
    222166        }
    223167        setMembers(newMembers);
Note: See TracChangeset for help on using the changeset viewer.