Ticket #4675: undoconflict.diff
File undoconflict.diff, 3.3 KB (added by , 15 years ago) |
---|
-
src/org/openstreetmap/josm/command/PurgePrimitivesCommand.java
7 7 import java.util.ArrayList; 8 8 import java.util.Collection; 9 9 import java.util.Collections; 10 import java.util.HashMap; 10 11 import java.util.HashSet; 11 12 import java.util.List; 13 import java.util.Map; 12 14 import java.util.Set; 15 import java.util.Map.Entry; 13 16 import java.util.logging.Logger; 14 17 15 18 import javax.swing.JLabel; … … 18 21 import org.openstreetmap.josm.data.conflict.ConflictCollection; 19 22 import org.openstreetmap.josm.data.osm.Node; 20 23 import org.openstreetmap.josm.data.osm.OsmPrimitive; 24 import org.openstreetmap.josm.data.osm.PrimitiveData; 21 25 import org.openstreetmap.josm.data.osm.Relation; 22 26 import org.openstreetmap.josm.data.osm.Way; 23 27 import org.openstreetmap.josm.gui.DefaultNameFormatter; … … 47 51 */ 48 52 private Set<OsmPrimitive> purgedPrimitives; 49 53 50 private Set<OsmPrimitive> origVersionsOfTouchedPrimitives;54 private Map<OsmPrimitive,PrimitiveData> origVersionsOfTouchedPrimitives; 51 55 52 56 protected void init(Collection<OsmPrimitive> toPurge) { 53 57 this.toPurge = toPurge; 54 58 this.purgedPrimitives = new HashSet<OsmPrimitive>(); 55 this.origVersionsOfTouchedPrimitives = new Hash Set<OsmPrimitive>();59 this.origVersionsOfTouchedPrimitives = new HashMap<OsmPrimitive,PrimitiveData>(); 56 60 } 57 61 58 62 /** … … 148 151 return; 149 152 if (parent instanceof Way) { 150 153 Way w = (Way)parent; 151 if (!origVersionsOfTouchedPrimitives.contains (w)) {152 origVersionsOfTouchedPrimitives. add(w);154 if (!origVersionsOfTouchedPrimitives.containsKey(w)) { 155 origVersionsOfTouchedPrimitives.put(w,w.save()); 153 156 } 154 157 w.removeNode((Node)child); 155 158 // if a way ends up with less than two nodes we … … 162 165 } 163 166 } else if (parent instanceof Relation) { 164 167 Relation r = (Relation)parent; 165 if (!origVersionsOfTouchedPrimitives.contains (r)) {166 origVersionsOfTouchedPrimitives. add(r);168 if (!origVersionsOfTouchedPrimitives.containsKey(r)) { 169 origVersionsOfTouchedPrimitives.put(r,r.save()); 167 170 } 168 171 System.out.println(tr("Removing reference from relation {0}",r.getId())); 169 172 r.removeMembersFor(child); … … 199 202 @Override 200 203 public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, 201 204 Collection<OsmPrimitive> added) { 202 modified.addAll(origVersionsOfTouchedPrimitives);203 205 } 204 206 205 207 @Override … … 218 220 for (OsmPrimitive purged : purgedPrimitives) { 219 221 getLayer().data.addPrimitive(purged); 220 222 } 223 224 for (Entry<OsmPrimitive, PrimitiveData> entry: origVersionsOfTouchedPrimitives.entrySet()) { 225 entry.getKey().load(entry.getValue()); 226 } 227 221 228 reconstituteConflicts(); 222 229 223 230 // will restore the primitives referring to one