Ticket #4675: undoconflict.diff

File undoconflict.diff, 3.3 KB (added by Upliner, 2 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