Changeset 1753 in josm


Ignore:
Timestamp:
2009-07-08T22:58:37+02:00 (11 years ago)
Author:
Gubaer
Message:

fixed #2245: Merge layers doesn't update the "action" tags

Location:
trunk
Files:
2 edited

Legend:

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

    r1750 r1753  
    168168    }
    169169
     170
    170171    private void fixWay(Way w) {
    171172        boolean replacedSomething = false;
    172173        LinkedList<Node> newNodes = new LinkedList<Node>();
    173         for (Node n : w.nodes) {
    174             Node otherN = (Node) merged.get(n);
    175             newNodes.add(otherN == null ? n : otherN);
    176             if (otherN != null) {
    177                 replacedSomething = true;
     174        for (Node myNode : w.nodes) {
     175            Node mergedNode = (Node) merged.get(myNode);
     176            if (mergedNode != null) {
     177                if (!mergedNode.deleted) {
     178                    newNodes.add(mergedNode);
     179                }
     180                replacedSomething =  true;
     181            } else {
     182                newNodes.add(myNode);
    178183            }
    179184        }
     
    187192        boolean replacedSomething = false;
    188193        LinkedList<RelationMember> newMembers = new LinkedList<RelationMember>();
    189         for (RelationMember m : r.members) {
    190             OsmPrimitive otherP = merged.get(m.member);
    191             if (otherP == null) {
    192                 newMembers.add(m);
     194        for (RelationMember myMember : r.members) {
     195            OsmPrimitive mergedMember = merged.get(myMember.member);
     196            if (mergedMember == null) {
     197                newMembers.add(myMember);
    193198            } else {
    194                 RelationMember mnew = new RelationMember(m);
    195                 mnew.member = otherP;
    196                 newMembers.add(mnew);
     199                if (! mergedMember.deleted) {
     200                    RelationMember newMember = new RelationMember(myMember);
     201                    newMember.member = mergedMember;
     202                    newMembers.add(newMember);
     203                }
    197204                replacedSomething = true;
    198205            }
  • trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeVisitorTest.java

    r1751 r1753  
    55import static org.junit.Assert.assertTrue;
    66import static org.junit.Assert.fail;
     7
    78
    89import java.io.File;
     
    2122import org.openstreetmap.josm.data.osm.DataSet;
    2223import org.openstreetmap.josm.data.osm.Node;
     24import org.openstreetmap.josm.data.osm.Relation;
     25import org.openstreetmap.josm.data.osm.RelationMember;
    2326import org.openstreetmap.josm.data.osm.User;
    2427import org.openstreetmap.josm.data.osm.Way;
     
    855858        assertEquals(theirWay.getTimestamp(), myWay.getTimestamp());
    856859    }
     860
     861
     862    /**
     863     * My dataset includes a deleted node.
     864     * Their dataset includes a way with three nodes, the first one being my node.
     865     *
     866     * => the merged way should include two nodes only. the deleted node should still be
     867     * in the data set
     868     *
     869     */
     870    @Test
     871    public void wayComplex_mergingADeletedNode() {
     872
     873        DataSet my = new DataSet();
     874        my.version = "0.6";
     875
     876        Node n1 = new Node(new LatLon(0,0));
     877        n1.id = 1;
     878        n1.version = 1;
     879        n1.delete(true);
     880        my.addPrimitive(n1);
     881
     882        DataSet their = new DataSet();
     883        their.version = "0.6";
     884
     885        Node n3 = new Node(new LatLon(0,0));
     886        n3.id = 1;
     887        n3.version = 1;
     888        their.addPrimitive(n3);
     889
     890        Node n4 = new Node(new LatLon(1,1));
     891        n4.id = 2;
     892        n4.version = 1;
     893        their.addPrimitive(n4);
     894
     895        Node n5 = new Node(new LatLon(2,2));
     896        n5.id = 3;
     897        n5.version = 1;
     898        their.addPrimitive(n5);
     899
     900
     901        Way theirWay = new Way();
     902        theirWay.id = 4;
     903        theirWay.version = 1;
     904        theirWay.nodes.add(n3);
     905        theirWay.nodes.add(n4);
     906        theirWay.nodes.add(n5);
     907        theirWay.user = User.get("their");
     908        theirWay.user.uid = "1111";
     909        theirWay.setTimestamp(new Date());
     910        their.addPrimitive(theirWay);
     911
     912        MergeVisitor visitor = new MergeVisitor(my,their);
     913        visitor.merge();
     914
     915        assertEquals(0,visitor.getConflicts().size());
     916
     917        Way myWay = (Way)my.getPrimitiveById(4);
     918        assertEquals(2, myWay.nodes.size());
     919
     920        Node n = (Node)my.getPrimitiveById(1);
     921        assertTrue(n != null);
     922    }
     923
     924    /**
     925     * My dataset includes a deleted node.
     926     * Their dataset includes a relation with thre nodes, the first one being my node.
     927     *
     928     * => the merged relation should include two nodes only. the deleted node should still be
     929     * in the data set
     930     *
     931     */
     932    @Test
     933    public void relationComplex_mergingADeletedNode() {
     934
     935        DataSet my = new DataSet();
     936        my.version = "0.6";
     937
     938        Node n1 = new Node(new LatLon(0,0));
     939        n1.id = 1;
     940        n1.version = 1;
     941        n1.delete(true);
     942        my.addPrimitive(n1);
     943
     944        DataSet their = new DataSet();
     945        their.version = "0.6";
     946
     947        Node n3 = new Node(new LatLon(0,0));
     948        n3.id = 1;
     949        n3.version = 1;
     950        their.addPrimitive(n3);
     951
     952        Node n4 = new Node(new LatLon(1,1));
     953        n4.id = 2;
     954        n4.version = 1;
     955        their.addPrimitive(n4);
     956
     957        Node n5 = new Node(new LatLon(2,2));
     958        n5.id = 3;
     959        n5.version = 1;
     960        their.addPrimitive(n5);
     961
     962
     963        Relation theirRelation = new Relation();
     964        theirRelation.id = 4;
     965        theirRelation.version = 1;
     966        theirRelation.members.add(new RelationMember("", n3));
     967        theirRelation.members.add(new RelationMember("", n4));
     968        theirRelation.members.add(new RelationMember("", n5));
     969        their.addPrimitive(theirRelation);
     970
     971        MergeVisitor visitor = new MergeVisitor(my,their);
     972        visitor.merge();
     973
     974        assertEquals(0,visitor.getConflicts().size());
     975
     976        Relation r = (Relation)my.getPrimitiveById(4);
     977        assertEquals(2, r.members.size());
     978
     979        Node n = (Node)my.getPrimitiveById(1);
     980        assertTrue(n != null);
     981    }
     982
     983
     984
     985
    857986}
Note: See TracChangeset for help on using the changeset viewer.