Changeset 2433 in josm


Ignore:
Timestamp:
2009-11-10T21:25:40+01:00 (15 years ago)
Author:
Gubaer
Message:

Improved test cases for MergeVisitor.
Moved MergeVisitor and removed Visitor-pattern. Double-dispatching isn't necessary and only slows down the merge process.

Location:
trunk
Files:
10 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java

    r2343 r2433  
    1818import org.openstreetmap.josm.Main;
    1919import org.openstreetmap.josm.data.osm.DataSet;
     20import org.openstreetmap.josm.data.osm.DataSetMerger;
    2021import org.openstreetmap.josm.data.osm.OsmPrimitive;
    2122import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    22 import org.openstreetmap.josm.data.osm.visitor.MergeVisitor;
    2323import org.openstreetmap.josm.gui.PleaseWaitRunnable;
    2424import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     
    210210            }
    211211
    212             MergeVisitor visitor = new MergeVisitor(targetLayer.data, parents);
     212            DataSetMerger visitor = new DataSetMerger(targetLayer.data, parents);
    213213            visitor.merge();
    214214            SwingUtilities.invokeLater(
     
    239239                reader = null;
    240240            }
    241             MergeVisitor visitor = new MergeVisitor(parents, ds);
     241            DataSetMerger visitor = new DataSetMerger(parents, ds);
    242242            visitor.merge();
    243243        }
  • trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java

    r2381 r2433  
    1515import org.openstreetmap.josm.Main;
    1616import org.openstreetmap.josm.data.osm.DataSet;
     17import org.openstreetmap.josm.data.osm.DataSetMerger;
    1718import org.openstreetmap.josm.data.osm.Node;
    1819import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    2021import org.openstreetmap.josm.data.osm.Relation;
    2122import org.openstreetmap.josm.data.osm.Way;
    22 import org.openstreetmap.josm.data.osm.visitor.MergeVisitor;
    2323import org.openstreetmap.josm.gui.ExceptionDialogUtil;
    2424import org.openstreetmap.josm.gui.PleaseWaitRunnable;
     
    213213                initMultiFetchReaderWithRelations(reader);
    214214                theirDataSet = reader.parseOsm(progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
    215                 MergeVisitor merger = new MergeVisitor(ds, theirDataSet);
     215                DataSetMerger merger = new DataSetMerger(ds, theirDataSet);
    216216                merger.merge();
    217217                // a ways loaded with MultiFetch may be incomplete because at least one of its
     
    223223                        OsmServerObjectReader reader = new OsmServerObjectReader(w.getId(), OsmPrimitiveType.WAY, true /* full */);
    224224                        theirDataSet = reader.parseOsm(progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
    225                         merger = new MergeVisitor(ds, theirDataSet);
     225                        merger = new DataSetMerger(ds, theirDataSet);
    226226                        merger.merge();
    227227                    }
  • trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java

    r2418 r2433  
    1 package org.openstreetmap.josm.data.osm.visitor;
     1package org.openstreetmap.josm.data.osm;
    22
    33import static org.openstreetmap.josm.tools.I18n.tr;
     
    1313
    1414import org.openstreetmap.josm.data.conflict.ConflictCollection;
    15 import org.openstreetmap.josm.data.osm.DataSet;
    16 import org.openstreetmap.josm.data.osm.Node;
    17 import org.openstreetmap.josm.data.osm.OsmPrimitive;
    18 import org.openstreetmap.josm.data.osm.Relation;
    19 import org.openstreetmap.josm.data.osm.RelationMember;
    20 import org.openstreetmap.josm.data.osm.Way;
    2115
    2216/**
    23  * A visitor that gets a data set at construction time and merges every visited object
    24  * into it.
    25  *
     17 * A dataset merger which takes a target and a source dataset and merges the source data set
     18 * onto the target dataset.
     19 * 
    2620 */
    27 public class MergeVisitor extends AbstractVisitor {
    28     private static Logger logger = Logger.getLogger(MergeVisitor.class.getName());
     21public class DataSetMerger {
     22    private static Logger logger = Logger.getLogger(DataSetMerger.class.getName());
    2923
    3024    /** the collection of conflicts created during merging */
     
    5145     * The visitor will merge <code>theirDataSet</code> onto <code>myDataSet</code>
    5246     *
    53      * @param myDataSet  dataset with my primitives
    54      * @param theirDataSet dataset with their primitives.
    55      */
    56     public MergeVisitor(DataSet myDataSet, DataSet theirDataSet) {
     47     * @param myDataSet  dataset with my primitives. Must not be null.
     48     * @param theirDataSet dataset with their primitives. Ignored, if null.
     49     * @throws IllegalArgumentException thrown if myDataSet is null
     50     */
     51    public DataSetMerger(DataSet myDataSet, DataSet theirDataSet) throws IllegalArgumentException {
     52        if (myDataSet == null)
     53            throw new IllegalArgumentException(tr("Parameter ''{0}'' must not be null"));
    5754        this.myDataSet = myDataSet;
    5855        this.theirDataSet = theirDataSet;
     
    8279            //
    8380            if (mergeById(other))
     81                return;
     82            if (!other.isVisible())
     83                // ignore it
    8484                return;
    8585        } else {
     
    116116            }
    117117        }
     118
    118119        // If we get here we didn't find a suitable primitive in
    119120        // my dataset. Create a clone and add it to my dataset.
     
    129130        mergedMap.put(other.getUniqueId(), my.getUniqueId());
    130131        fixReferences.add(other.getUniqueId());
    131     }
    132 
    133     public void visit(Node other) {
    134         mergePrimitive(other);
    135     }
    136 
    137     public void visit(Way other) {
    138         mergePrimitive(other);
    139     }
    140 
    141     public void visit(Relation other) {
    142         mergePrimitive(other);
    143132    }
    144133
     
    357346     */
    358347    public void merge() {
     348        if (theirDataSet == null)
     349            return;
    359350        for (Node node: theirDataSet.getNodes()) {
    360             node.visit(this);
     351            mergePrimitive(node);
    361352        }
    362353        for (Way way: theirDataSet.getWays()) {
    363             way.visit(this);
     354            mergePrimitive(way);
    364355        }
    365356        for (Relation relation: theirDataSet.getRelations()) {
    366             relation.visit(this);
     357            mergePrimitive(relation);
    367358        }
    368359        fixReferences();
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java

    r2381 r2433  
    3030import org.openstreetmap.josm.Main;
    3131import org.openstreetmap.josm.data.osm.DataSet;
     32import org.openstreetmap.josm.data.osm.DataSetMerger;
    3233import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    3334import org.openstreetmap.josm.data.osm.Relation;
    3435import org.openstreetmap.josm.data.osm.RelationMember;
    35 import org.openstreetmap.josm.data.osm.visitor.MergeVisitor;
    3636import org.openstreetmap.josm.gui.DefaultNameFormatter;
    3737import org.openstreetmap.josm.gui.ExceptionDialogUtil;
     
    380380        protected void mergeDataSet(DataSet ds) {
    381381            if (ds != null) {
    382                 final MergeVisitor visitor = new MergeVisitor(getLayer().data, ds);
     382                final DataSetMerger visitor = new DataSetMerger(getLayer().data, ds);
    383383                visitor.merge();
    384384                // FIXME: this is necessary because there are dialogs listening
     
    490490        protected void mergeDataSet(DataSet dataSet) {
    491491            if (dataSet != null) {
    492                 final MergeVisitor visitor = new MergeVisitor(getLayer().data, dataSet);
     492                final DataSetMerger visitor = new DataSetMerger(getLayer().data, dataSet);
    493493                visitor.merge();
    494494                // FIXME: this is necessary because there are dialogs listening
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java

    r2381 r2433  
    5757import org.openstreetmap.josm.data.osm.DataSet;
    5858import org.openstreetmap.josm.data.osm.DataSource;
     59import org.openstreetmap.josm.data.osm.DataSetMerger;
    5960import org.openstreetmap.josm.data.osm.OsmPrimitive;
    6061import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    6162import org.openstreetmap.josm.data.osm.Relation;
    6263import org.openstreetmap.josm.data.osm.RelationMember;
    63 import org.openstreetmap.josm.data.osm.visitor.MergeVisitor;
    6464import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
    6565import org.openstreetmap.josm.gui.DefaultNameFormatter;
     
    14471447                    if (dataSet != null) {
    14481448                        changed = true;
    1449                         final MergeVisitor visitor = new MergeVisitor(curLayer.data, dataSet);
     1449                        final DataSetMerger visitor = new DataSetMerger(curLayer.data, dataSet);
    14501450                        visitor.merge();
    14511451
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java

    r2401 r2433  
    1414import org.openstreetmap.josm.data.osm.DataSet;
    1515import org.openstreetmap.josm.data.osm.DataSource;
     16import org.openstreetmap.josm.data.osm.DataSetMerger;
    1617import org.openstreetmap.josm.data.osm.Relation;
    17 import org.openstreetmap.josm.data.osm.visitor.MergeVisitor;
    1818import org.openstreetmap.josm.gui.PleaseWaitRunnable;
    1919import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     
    164164            referrers = reader.parseOsm(progressMonitor.createSubTaskMonitor(1, false));
    165165            if (referrers != null) {
    166                 final MergeVisitor visitor = new MergeVisitor(getLayer().data, referrers);
     166                final DataSetMerger visitor = new DataSetMerger(getLayer().data, referrers);
    167167                visitor.merge();
    168168
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTree.java

    r2273 r2433  
    1818import org.openstreetmap.josm.Main;
    1919import org.openstreetmap.josm.data.osm.DataSet;
     20import org.openstreetmap.josm.data.osm.DataSetMerger;
    2021import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    2122import org.openstreetmap.josm.data.osm.Relation;
    22 import org.openstreetmap.josm.data.osm.visitor.MergeVisitor;
    2323import org.openstreetmap.josm.gui.PleaseWaitRunnable;
    2424import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor;
     
    136136                return;
    137137            }
    138             MergeVisitor visitor = new MergeVisitor(Main.main.getEditLayer().data, ds);
     138            DataSetMerger visitor = new DataSetMerger(Main.main.getEditLayer().data, ds);
    139139            visitor.merge();
    140140            if (! visitor.getConflicts().isEmpty()) {
  • trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java

    r2414 r2433  
    5050import org.openstreetmap.josm.data.osm.DataSet;
    5151import org.openstreetmap.josm.data.osm.DataSource;
     52import org.openstreetmap.josm.data.osm.DataSetMerger;
    5253import org.openstreetmap.josm.data.osm.Node;
    5354import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    5758import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
    5859import org.openstreetmap.josm.data.osm.visitor.MapPaintVisitor;
    59 import org.openstreetmap.josm.data.osm.visitor.MergeVisitor;
    6060import org.openstreetmap.josm.data.osm.visitor.SimplePaintVisitor;
    6161import org.openstreetmap.josm.gui.HelpAwareOptionPane;
     
    277277     */
    278278    public void mergeFrom(final DataSet from) {
    279         final MergeVisitor visitor = new MergeVisitor(data,from);
     279        final DataSetMerger visitor = new DataSetMerger(data,from);
    280280        visitor.merge();
    281281
  • trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java

    r2273 r2433  
    1414
    1515import org.openstreetmap.josm.data.osm.DataSet;
     16import org.openstreetmap.josm.data.osm.DataSetMerger;
    1617import org.openstreetmap.josm.data.osm.Node;
    1718import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    2021import org.openstreetmap.josm.data.osm.RelationMember;
    2122import org.openstreetmap.josm.data.osm.Way;
    22 import org.openstreetmap.josm.data.osm.visitor.MergeVisitor;
    2323import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
    2424import org.openstreetmap.josm.gui.progress.ProgressMonitor;
     
    387387     */
    388388    protected void merge(DataSet from) {
    389         final MergeVisitor visitor = new MergeVisitor(outputDataSet,from);
     389        final DataSetMerger visitor = new DataSetMerger(outputDataSet,from);
    390390        visitor.merge();
    391391    }
  • trunk/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java

    r2381 r2433  
    99
    1010import org.openstreetmap.josm.data.osm.DataSet;
     11import org.openstreetmap.josm.data.osm.DataSetMerger;
    1112import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1213import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    1314import org.openstreetmap.josm.data.osm.Relation;
    1415import org.openstreetmap.josm.data.osm.Way;
    15 import org.openstreetmap.josm.data.osm.visitor.MergeVisitor;
    1616import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
    1717import org.openstreetmap.josm.gui.progress.ProgressMonitor;
     
    227227                        OsmServerObjectReader reader = new OsmServerObjectReader(way.getId(), OsmPrimitiveType.from(way), true /* read full */);
    228228                        DataSet wayDs = reader.parseOsm(progressMonitor.createSubTaskMonitor(1, false));
    229                         MergeVisitor visitor = new MergeVisitor(ds, wayDs);
     229                        DataSetMerger visitor = new DataSetMerger(ds, wayDs);
    230230                        visitor.merge();
    231231                    }
     
    238238                        OsmServerObjectReader reader = new OsmServerObjectReader(relation.getId(), OsmPrimitiveType.from(relation), true /* read full */);
    239239                        DataSet wayDs = reader.parseOsm(progressMonitor.createSubTaskMonitor(1, false));
    240                         MergeVisitor visitor = new MergeVisitor(ds, wayDs);
     240                        DataSetMerger visitor = new DataSetMerger(ds, wayDs);
    241241                        visitor.merge();
    242242                    }
     
    267267            if (primitiveType.equals(OsmPrimitiveType.NODE)) {
    268268                DataSet ds = getReferringWays(progressMonitor.createSubTaskMonitor(1, false));
    269                 MergeVisitor visitor = new MergeVisitor(ret,ds);
     269                DataSetMerger visitor = new DataSetMerger(ret,ds);
    270270                visitor.merge();
    271271                ret = visitor.getMyDataSet();
    272272            }
    273273            DataSet ds = getReferringRelations(progressMonitor.createSubTaskMonitor(1, false));
    274             MergeVisitor visitor = new MergeVisitor(ret,ds);
     274            DataSetMerger visitor = new DataSetMerger(ret,ds);
    275275            visitor.merge();
    276276            ret = visitor.getMyDataSet();
  • trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeVisitorTest.java

    r2417 r2433  
    2222import org.openstreetmap.josm.data.coor.LatLon;
    2323import org.openstreetmap.josm.data.osm.DataSet;
     24import org.openstreetmap.josm.data.osm.DataSetMerger;
    2425import org.openstreetmap.josm.data.osm.Node;
    2526import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    9596
    9697
    97         MergeVisitor visitor = new MergeVisitor(my,their);
     98        DataSetMerger visitor = new DataSetMerger(my,their);
    9899        visitor.merge();
    99100
    100101        Node n2 = (Node)my.getPrimitiveById(1, OsmPrimitiveType.NODE);
    101102        assertTrue(visitor.getConflicts().isEmpty());
     103        assertTrue(n1 != n2); // make sure we have a clone
    102104        assertEquals(1, n2.getId());
    103105        assertEquals(1, n2.getVersion());
     
    131133
    132134
    133         MergeVisitor visitor = new MergeVisitor(my,their);
     135        DataSetMerger visitor = new DataSetMerger(my,their);
    134136        visitor.merge();
    135137
    136138        Node n2 = (Node)my.getPrimitiveById(1, OsmPrimitiveType.NODE);
    137139        assertTrue(visitor.getConflicts().isEmpty());
     140        assertTrue(n == n2); // make sure the merged node is still the original node
     141        assertTrue(n2.getDataSet() == my);
    138142        assertEquals(1, n2.getId());
    139143        assertEquals(2, n2.getVersion());
     
    144148
    145149    /**
    146      * node with same id, my is modified, their has a higher version
     150     * Node with same id, my is modified, their has a higher version
    147151     * => results in a conflict
    148152     *
     
    171175
    172176
    173         MergeVisitor visitor = new MergeVisitor(my,their);
     177        DataSetMerger visitor = new DataSetMerger(my,their);
    174178        visitor.merge();
    175179
    176180        Node n2 = (Node)my.getPrimitiveById(1, OsmPrimitiveType.NODE);
    177181        assertEquals(1,visitor.getConflicts().size());
    178         assertEquals(n, n2);
     182        assertTrue(n == n2);
     183        assertTrue(n1 != n2);
     184        assertTrue(n1.getDataSet() == their);
    179185    }
    180186
     
    207213
    208214
    209         MergeVisitor visitor = new MergeVisitor(my,their);
     215        DataSetMerger visitor = new DataSetMerger(my,their);
    210216        visitor.merge();
    211217
    212218        Node n2 = (Node)my.getPrimitiveById(1, OsmPrimitiveType.NODE);
    213219        assertEquals(1,visitor.getConflicts().size());
    214         assertEquals(n, n2);
     220        assertTrue(n == n2);
     221        assertTrue(n1 != n2);
     222        assertTrue(n1.getDataSet() == their);
    215223    }
    216224
     
    240248
    241249
    242         MergeVisitor visitor = new MergeVisitor(my,their);
     250        DataSetMerger visitor = new DataSetMerger(my,their);
    243251        visitor.merge();
    244252
     
    246254        assertEquals(1,visitor.getConflicts().size());
    247255        assertEquals(true, n2.isVisible());
     256        assertTrue(n == n2);
     257        assertTrue(n1 != n2);
     258        assertTrue(n1.getDataSet() == their);
    248259    }
    249260
     
    269280
    270281
    271         MergeVisitor visitor = new MergeVisitor(my,their);
     282        DataSetMerger visitor = new DataSetMerger(my,their);
    272283        visitor.merge();
    273284
     
    275286        assertEquals(0,visitor.getConflicts().size());
    276287        assertEquals(true, n2.isVisible());
     288        assertTrue(n == n2);
     289        assertTrue(n.getDataSet() == my);
     290        assertTrue(n1.getDataSet() == their);
    277291    }
    278292
     
    297311
    298312
    299         MergeVisitor visitor = new MergeVisitor(my,their);
     313        DataSetMerger visitor = new DataSetMerger(my,their);
    300314        visitor.merge();
    301315
    302316        assertEquals(1,visitor.getConflicts().size());
     317        assertTrue(n.getDataSet() == my);
     318        assertTrue(n1.getDataSet() == their);
    303319    }
    304320
     
    324340
    325341
    326         MergeVisitor visitor = new MergeVisitor(my,their);
    327         visitor.merge();
    328 
    329         assertEquals(0,visitor.getConflicts().size());
     342        DataSetMerger visitor = new DataSetMerger(my,their);
     343        visitor.merge();
     344
     345        assertEquals(0,visitor.getConflicts().size());
     346        Node n2 = (Node)my.getNodes().toArray()[0];
     347        assertTrue(n2 == n);
     348        assertTrue(n2.isDeleted());
    330349    }
    331350
     
    352371
    353372
    354         MergeVisitor visitor = new MergeVisitor(my,their);
     373        DataSetMerger visitor = new DataSetMerger(my,their);
    355374        visitor.merge();
    356375
    357376        Node n2 = (Node)my.getPrimitiveById(1,OsmPrimitiveType.NODE);
    358377        assertEquals(0,visitor.getConflicts().size());
    359         assertEquals(2, my.getNodes().size());
     378        assertEquals(1, my.getNodes().size());
    360379        assertEquals(n,n2);
    361380    }
     
    398417
    399418
    400         MergeVisitor visitor = new MergeVisitor(my,their);
     419        DataSetMerger visitor = new DataSetMerger(my,their);
    401420        visitor.merge();
    402421
     
    406425        assertEquals(true, n1.getTimestamp().equals(n2.getTimestamp()));
    407426        assertEquals(theirUser,n2.getUser());
     427        assertTrue(n2 == n);
     428        assertTrue(n2 != n1);
     429        assertTrue(n2.getDataSet() == my);
    408430    }
    409431
     
    436458
    437459
    438         MergeVisitor visitor = new MergeVisitor(my,their);
     460        DataSetMerger visitor = new DataSetMerger(my,their);
    439461        visitor.merge();
    440462
     
    444466        assertEquals(true, n1.getTimestamp().equals(n2.getTimestamp()));
    445467        assertEquals(false, n2.incomplete);
     468        assertTrue(n2 == n);
    446469    }
    447470
     
    499522
    500523
    501         MergeVisitor visitor = new MergeVisitor(my,their);
     524        DataSetMerger visitor = new DataSetMerger(my,their);
    502525        visitor.merge();
    503526
     
    511534        assertEquals(1,merged.getNode(0).getId());
    512535        assertEquals(2,merged.getNode(1).getId());
    513 
     536        assertTrue(merged == myWay);
     537        assertTrue(merged.getDataSet() == my);
     538
     539        Node mergedNode = (Node)my.getPrimitiveById(1, OsmPrimitiveType.NODE);
     540        assertTrue(mergedNode == n1);
     541        mergedNode = (Node)my.getPrimitiveById(2, OsmPrimitiveType.NODE);
     542        assertTrue(mergedNode == n2);
    514543    }
    515544
     
    524553    public void waySimple_AdditionalNodesAndChangedNodes() {
    525554
     555        // -- my data set
    526556        DataSet my = new DataSet();
    527557        my.setVersion("0.6");
     
    540570        myWay.addNode(n2);
    541571        my.addPrimitive(myWay);
     572
     573        // --- their data set
    542574
    543575        DataSet their = new DataSet();
     
    566598        their.addPrimitive(theirWay);
    567599
    568 
    569         MergeVisitor visitor = new MergeVisitor(my,their);
     600        DataSetMerger visitor = new DataSetMerger(my,their);
    570601        visitor.merge();
    571602
     
    579610        assertEquals(2,merged.getNode(2).getId());
    580611        assertEquals("value1",merged.getNode(2).get("key1"));
     612
     613        assertTrue(merged.getNode(0) == n1);
     614        assertTrue(merged.getNode(1) != n5); // must be clone of the original node in their
     615        assertTrue(merged.getNode(2) == n2);
    581616    }
    582617
     
    636671
    637672
    638         MergeVisitor visitor = new MergeVisitor(my,their);
     673        DataSetMerger visitor = new DataSetMerger(my,their);
    639674        visitor.merge();
    640675
     
    684719        their.addPrimitive(theirWay);
    685720
    686         MergeVisitor visitor = new MergeVisitor(my,their);
     721        DataSetMerger visitor = new DataSetMerger(my,their);
    687722        visitor.merge();
    688723
     
    699734     * their way can be merged on my way. No conflict.
    700735     *
    701      *
    702      *
    703736     */
    704737    @Test
    705738    public void waySimple_twoWaysWithNoId_NodesWithId() {
    706739
     740        // -- my data set
    707741        DataSet my = new DataSet();
    708742        my.setVersion("0.6");
     
    721755        my.addPrimitive(myWay);
    722756
     757        // -- their data set
    723758        DataSet their = new DataSet();
    724759        their.setVersion("0.6");
     
    739774        their.addPrimitive(theirWay);
    740775
    741         MergeVisitor visitor = new MergeVisitor(my,their);
    742         visitor.merge();
    743 
    744         assertEquals(0,visitor.getConflicts().size());
    745         assertEquals("their", myWay.getUser().getName());
    746         assertEquals(1111, myWay.getUser().getId());
    747         assertEquals(1111, myWay.getUser().getId());
    748         assertEquals(theirWay.getTimestamp(), myWay.getTimestamp());
     776        DataSetMerger visitor = new DataSetMerger(my,their);
     777        visitor.merge();
     778
     779        // -- tests
     780        Way merged = (Way)my.getWays().toArray()[0];
     781        assertEquals(0,visitor.getConflicts().size());
     782        assertEquals("their", merged.getUser().getName());
     783        assertEquals(1111, merged.getUser().getId());
     784        assertEquals(theirWay.getTimestamp(), merged.getTimestamp());
     785        assertTrue(merged == myWay);
     786        assertTrue(merged.getNode(0) == n1);
     787        assertTrue(merged.getNode(1) == n2);
    749788    }
    750789
     
    758797    public void waySimple_twoWaysWithNoId_NodesWithoutId() {
    759798
     799        // -- my data set
    760800        DataSet my = new DataSet();
    761801        my.setVersion("0.6");
     
    772812        my.addPrimitive(myWay);
    773813
     814        // -- their data set
    774815        DataSet their = new DataSet();
    775816        their.setVersion("0.6");
     
    789830        their.addPrimitive(theirWay);
    790831
    791         MergeVisitor visitor = new MergeVisitor(my,their);
    792         visitor.merge();
    793 
    794         assertEquals(0,visitor.getConflicts().size());
    795         assertEquals("their", myWay.getUser().getName());
    796         assertEquals(1111, myWay.getUser().getId());
    797         assertEquals(theirWay.getTimestamp(), myWay.getTimestamp());
     832        DataSetMerger visitor = new DataSetMerger(my,their);
     833        visitor.merge();
     834
     835        // -- tests
     836        Way merged = (Way)my.getWays().toArray()[0];
     837        assertEquals(0,visitor.getConflicts().size());
     838        assertEquals("their", merged.getUser().getName());
     839        assertEquals(1111, merged.getUser().getId());
     840        assertEquals(theirWay.getTimestamp(), merged.getTimestamp());
     841        assertTrue(merged == myWay);
     842        assertTrue(merged.getNode(0) == n1);
     843        assertTrue(merged.getNode(1) == n2);
    798844    }
    799845
     
    810856    public void wayComplex_mergingADeletedNode() {
    811857
     858        // -- my dataset
    812859        DataSet my = new DataSet();
    813860        my.setVersion("0.6");
     
    833880        their.addPrimitive(n5);
    834881
    835 
     882        // -- their data set
    836883        Way theirWay = new Way();
    837884        theirWay.setOsmId(4,1);
     
    843890        their.addPrimitive(theirWay);
    844891
    845         MergeVisitor visitor = new MergeVisitor(my,their);
     892        DataSetMerger visitor = new DataSetMerger(my,their);
    846893        visitor.merge();
    847894
     
    852899
    853900        Node n = (Node)my.getPrimitiveById(1,OsmPrimitiveType.NODE);
     901        assertTrue(!myWay.getNodes().contains(n));
    854902        assertTrue(n != null);
    855903    }
     
    857905    /**
    858906     * My dataset includes a deleted node.
    859      * Their dataset includes a relation with thre nodes, the first one being my node.
     907     * Their dataset includes a relation with three nodes, the first one being my node.
    860908     *
    861909     * => the merged relation should include two nodes only. the deleted node should still be
     
    898946        their.addPrimitive(theirRelation);
    899947
    900         MergeVisitor visitor = new MergeVisitor(my,their);
     948        DataSetMerger visitor = new DataSetMerger(my,their);
    901949        visitor.merge();
    902950
     
    934982        their.setVersion("0.6");
    935983
    936         MergeVisitor visitor = new MergeVisitor(my,their);
     984        DataSetMerger visitor = new DataSetMerger(my,their);
    937985        visitor.merge();
    938986
     
    9971045        my.addPrimitive(w6);
    9981046
    999         MergeVisitor visitor = new MergeVisitor(my,their);
     1047        DataSetMerger visitor = new DataSetMerger(my,their);
    10001048        visitor.merge();
    10011049
Note: See TracChangeset for help on using the changeset viewer.