Changeset 224 in josm


Ignore:
Timestamp:
2007-05-05T23:33:16+02:00 (14 years ago)
Author:
framm
Message:

Fixed MergeVisitor so that it will never merge between objects that are
part of the group of objects being added - only between pre-existing
objects and those being added.

Files:
5 edited

Legend:

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

    r218 r224  
    4848
    4949                @Override protected void finish() {
    50                         MergeVisitor merger = new MergeVisitor(Main.ds);
     50                        MergeVisitor merger = new MergeVisitor(Main.ds, reader.data);
    5151                        for (OsmPrimitive osm : reader.data.allPrimitives())
    5252                                osm.visit(merger);
  • src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java

    r203 r224  
    2929
    3030        private final DataSet ds;
     31        private final DataSet mergeds;
    3132
    3233        /**
     
    4344        private final Map<Segment, Segment> mergedSegments = new HashMap<Segment, Segment>();
    4445
    45         public MergeVisitor(DataSet ds) {
     46        public MergeVisitor(DataSet ds, DataSet mergeds) {
    4647                this.ds = ds;
     48                this.mergeds = mergeds;
    4749        }
    4850
     
    5759                Node my = null;
    5860                for (Node n : ds.nodes) {
    59                         if (match(n, other)) {
     61                        if (match(n, other) && ((mergeds == null) || (!mergeds.nodes.contains(n)))) {
    6062                                my = n;
    6163                                break;
     
    8789                Segment my = null;
    8890                for (Segment ls : ds.segments) {
    89                         if (match(other, ls)) {
     91                        if (match(other, ls) && ((mergeds == null) || (!mergeds.segments.contains(ls)))) {
    9092                                my = ls;
    9193                                break;
    9294                        }
    9395                }
     96               
    9497                if (my == null)
    9598                        ds.segments.add(other);
     
    145148                Way my = null;
    146149                for (Way w : ds.ways) {
    147                         if (match(other, w)) {
     150                        if (match(other, w) && ((mergeds == null) || (!mergeds.ways.contains(w)))) {
    148151                                my = w;
    149152                                break;
     
    291294                else
    292295                        my.keys.putAll(other.keys);
     296               
    293297                my.modified = true;
    294298        }
  • src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java

    r186 r224  
    157157
    158158        @Override public void mergeFrom(final Layer from) {
    159                 final MergeVisitor visitor = new MergeVisitor(data);
     159                final MergeVisitor visitor = new MergeVisitor(data,((OsmDataLayer)from).data);
    160160                for (final OsmPrimitive osm : ((OsmDataLayer)from).data.allPrimitives())
    161161                        osm.visit(visitor);
  • src/org/openstreetmap/josm/io/IncompleteDownloader.java

    r219 r224  
    4444         */
    4545        private final Collection<Way> toDownload;
    46         private MergeVisitor merger = new MergeVisitor(data);
     46        private MergeVisitor merger = new MergeVisitor(data, null);
    4747
    4848        public IncompleteDownloader(Collection<Way> toDownload) {
  • test/org/openstreetmap/josm/data/osm/visitor/MergeVisitorTest.java

    r209 r224  
    2525                ds = new DataSet();
    2626                dsNode = DataSetTestCaseHelper.createNode(ds);
    27                 v = new MergeVisitor(ds);
     27                v = new MergeVisitor(ds, null);
    2828                n = DataSetTestCaseHelper.createNode(null);
    2929        }
     
    235235
    236236                Segment ls2 = DataSetTestCaseHelper.createSegment(ds, n2[0], n2[1]);
    237                 v = new MergeVisitor(ds);
     237                v = new MergeVisitor(ds, null);
    238238                for (OsmPrimitive osm : ds2.allPrimitives())
    239239                        osm.visit(v);
     
    249249                Segment s = DataSetTestCaseHelper.createSegment(ds, n[0], n[1]);
    250250                Way w = DataSetTestCaseHelper.createWay(ds, s);
    251                 MergeVisitor v = new MergeVisitor(ds);
     251                MergeVisitor v = new MergeVisitor(ds, null);
    252252                v.visit(n[0]);
    253253                v.visit(n[1]);
     
    281281                w.id = 42;
    282282                // merge both
    283                 MergeVisitor v = new MergeVisitor(ds);
     283                MergeVisitor v = new MergeVisitor(ds, null);
    284284                v.visit(w);
    285285                v.fixReferences();
     
    299299                s.timestamp = new Date(new Date().getTime()+1);
    300300               
    301                 MergeVisitor v = new MergeVisitor(ds);
     301                MergeVisitor v = new MergeVisitor(ds, null);
    302302                v.visit(s);
    303303                v.fixReferences();
     
    308308        public void testMergeIncompleteSegmentsAddToDataSet() throws Exception {
    309309                DataSet ds = new DataSet();
    310                 MergeVisitor v = new MergeVisitor(ds);
     310                MergeVisitor v = new MergeVisitor(ds, null);
    311311                v.visit(createSegment(null, true, false, 1));
    312312                assertEquals(1, ds.segments.size());
     
    330330                newNode.timestamp = new Date(date.getTime());
    331331               
    332                 MergeVisitor v = new MergeVisitor(ds);
     332                MergeVisitor v = new MergeVisitor(ds, null);
    333333                v.visit(newNode);
    334334
     
    343343                Segment s2 = new Segment(42);
    344344               
    345                 MergeVisitor v = new MergeVisitor(ds);
     345                MergeVisitor v = new MergeVisitor(ds, null);
    346346                v.visit(s1);
    347347                v.visit(s2);
Note: See TracChangeset for help on using the changeset viewer.