Ignore:
Timestamp:
2010-08-15T17:31:20+02:00 (14 years ago)
Author:
jttt
Message:

Fix #5333 "Merge selection" tool is broken

Location:
trunk/src/org/openstreetmap/josm/data/osm
Files:
3 edited

Legend:

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

    r3432 r3440  
    283283                success = ways.remove((Way) primitive);
    284284            } else if (primitive instanceof Relation) {
    285                 success = relations.remove((Relation) primitive);
     285                success = relations.remove(primitive);
    286286            }
    287287            if (!success)
     
    609609     */
    610610    public OsmPrimitive getPrimitiveById(long id, OsmPrimitiveType type) {
    611         return getPrimitiveById(new SimplePrimitiveId(id, type), false);
     611        return getPrimitiveById(new SimplePrimitiveId(id, type));
    612612    }
    613613
    614614    public OsmPrimitive getPrimitiveById(PrimitiveId primitiveId) {
    615         return getPrimitiveById(primitiveId, false);
    616     }
    617 
     615        return primitivesMap.get(primitiveId);
     616    }
     617
     618    /**
     619     *
     620     * @param primitiveId
     621     * @param createNew
     622     * @return
     623     * @deprecated This method can created inconsistent dataset when called for node with id < 0 and createNew=true. That will add
     624     * complete node without coordinates to dataset which is not allowed.
     625     */
     626    @Deprecated
    618627    public OsmPrimitive getPrimitiveById(PrimitiveId primitiveId, boolean createNew) {
    619628        OsmPrimitive result = primitivesMap.get(primitiveId);
     
    734743     */
    735744    public boolean isModified() {
    736         for (Node n: nodes) {
    737             if (n.isModified()) return true;
    738         }
    739         for (Way w: ways) {
    740             if (w.isModified()) return true;
    741         }
    742         for (Relation r: relations) {
    743             if (r.isModified()) return true;
     745        for (OsmPrimitive p: allPrimitives) {
     746            if (p.isModified())
     747                return true;
    744748        }
    745749        return false;
  • trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitiveType.java

    r3083 r3440  
    7272    }
    7373
     74    public OsmPrimitive newInstance(long uniqueId, boolean allowNegative) {
     75        switch (this) {
     76        case NODE:
     77            return new Node(uniqueId, allowNegative);
     78        case WAY:
     79            return new Way(uniqueId, allowNegative);
     80        case RELATION:
     81            return new Relation(uniqueId, allowNegative);
     82        default:
     83            throw new AssertionError();
     84        }
     85    }
     86
    7487    @Override
    7588    public String toString() {
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java

    r3265 r3440  
    163163        // Create all primitives first
    164164        for (PrimitiveData primitive: mappedPrimitives.values()) {
    165             hull.getPrimitiveById(primitive, true);
    166         }
    167         // Then fill nodes with data
    168         for (PrimitiveData primitive : mappedPrimitives.values()) {
    169             if (primitive instanceof NodeData) {
    170                 if (!primitive.isIncomplete()) {
    171                     hull.getPrimitiveById(primitive).load(primitive);
    172                 }
     165            OsmPrimitive newPrimitive = hull.getPrimitiveById(primitive);
     166            boolean created = newPrimitive == null;
     167            if (created) {
     168                newPrimitive = primitive.getType().newInstance(primitive.getUniqueId(), true);
     169            }
     170            if (newPrimitive instanceof Node && !primitive.isIncomplete()) {
     171                newPrimitive.load(primitive);
     172            }
     173            if (created) {
     174                hull.addPrimitive(newPrimitive);
    173175            }
    174176        }
    175177        // Then ways and relations
    176178        for (PrimitiveData primitive : mappedPrimitives.values()) {
    177             if (!(primitive instanceof NodeData)) {
    178                 if (!primitive.isIncomplete()) {
    179                     hull.getPrimitiveById(primitive).load(primitive);
    180                 }
     179            if (!(primitive instanceof NodeData) && !primitive.isIncomplete()) {
     180                hull.getPrimitiveById(primitive).load(primitive);
    181181            }
    182182        }
Note: See TracChangeset for help on using the changeset viewer.