Ticket #4675: undoconflict.diff

File undoconflict.diff, 3.3 KB (added by Upliner, 15 years ago)

patch to fix the problem

  • src/org/openstreetmap/josm/command/PurgePrimitivesCommand.java

     
    77import java.util.ArrayList;
    88import java.util.Collection;
    99import java.util.Collections;
     10import java.util.HashMap;
    1011import java.util.HashSet;
    1112import java.util.List;
     13import java.util.Map;
    1214import java.util.Set;
     15import java.util.Map.Entry;
    1316import java.util.logging.Logger;
    1417
    1518import javax.swing.JLabel;
     
    1821import org.openstreetmap.josm.data.conflict.ConflictCollection;
    1922import org.openstreetmap.josm.data.osm.Node;
    2023import org.openstreetmap.josm.data.osm.OsmPrimitive;
     24import org.openstreetmap.josm.data.osm.PrimitiveData;
    2125import org.openstreetmap.josm.data.osm.Relation;
    2226import org.openstreetmap.josm.data.osm.Way;
    2327import org.openstreetmap.josm.gui.DefaultNameFormatter;
     
    4751     */
    4852    private Set<OsmPrimitive> purgedPrimitives;
    4953
    50     private Set<OsmPrimitive> origVersionsOfTouchedPrimitives;
     54    private Map<OsmPrimitive,PrimitiveData> origVersionsOfTouchedPrimitives;
    5155
    5256    protected void init(Collection<OsmPrimitive> toPurge) {
    5357        this.toPurge = toPurge;
    5458        this.purgedPrimitives = new HashSet<OsmPrimitive>();
    55         this.origVersionsOfTouchedPrimitives = new HashSet<OsmPrimitive>();
     59        this.origVersionsOfTouchedPrimitives = new HashMap<OsmPrimitive,PrimitiveData>();
    5660    }
    5761
    5862    /**
     
    148151                return;
    149152            if (parent instanceof Way) {
    150153                Way w = (Way)parent;
    151                 if (!origVersionsOfTouchedPrimitives.contains(w)) {
    152                     origVersionsOfTouchedPrimitives.add(w);
     154                if (!origVersionsOfTouchedPrimitives.containsKey(w)) {
     155                    origVersionsOfTouchedPrimitives.put(w,w.save());
    153156                }
    154157                w.removeNode((Node)child);
    155158                // if a way ends up with less than two nodes we
     
    162165                }
    163166            } else if (parent instanceof Relation) {
    164167                Relation r = (Relation)parent;
    165                 if (!origVersionsOfTouchedPrimitives.contains(r)) {
    166                     origVersionsOfTouchedPrimitives.add(r);
     168                if (!origVersionsOfTouchedPrimitives.containsKey(r)) {
     169                    origVersionsOfTouchedPrimitives.put(r,r.save());
    167170                }
    168171                System.out.println(tr("Removing reference from relation {0}",r.getId()));
    169172                r.removeMembersFor(child);
     
    199202    @Override
    200203    public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted,
    201204            Collection<OsmPrimitive> added) {
    202         modified.addAll(origVersionsOfTouchedPrimitives);
    203205    }
    204206
    205207    @Override
     
    218220        for (OsmPrimitive purged : purgedPrimitives) {
    219221            getLayer().data.addPrimitive(purged);
    220222        }
     223
     224        for (Entry<OsmPrimitive, PrimitiveData> entry: origVersionsOfTouchedPrimitives.entrySet()) {
     225            entry.getKey().load(entry.getValue());
     226        }
     227
    221228        reconstituteConflicts();
    222229
    223230        // will restore the primitives referring to one