Changeset 2565 in josm for trunk/src/org/openstreetmap/josm/command/DeleteCommand.java
- Timestamp:
- 2009-12-03T20:26:00+01:00 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/command/DeleteCommand.java
r2521 r2565 24 24 import org.openstreetmap.josm.Main; 25 25 import org.openstreetmap.josm.actions.SplitWayAction; 26 import org.openstreetmap.josm.data.osm.BackreferencedDataSet;27 26 import org.openstreetmap.josm.data.osm.Node; 28 27 import org.openstreetmap.josm.data.osm.OsmPrimitive; 29 28 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 30 29 import org.openstreetmap.josm.data.osm.Relation; 30 import org.openstreetmap.josm.data.osm.RelationToChildReference; 31 31 import org.openstreetmap.josm.data.osm.Way; 32 32 import org.openstreetmap.josm.data.osm.WaySegment; 33 import org.openstreetmap.josm.data.osm.BackreferencedDataSet.RelationToChildReference;34 import org.openstreetmap.josm.data.osm.visitor.CollectBackReferencesVisitor;35 33 import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil; 36 34 import org.openstreetmap.josm.gui.DefaultNameFormatter; … … 218 216 throw new IllegalArgumentException(tr("Parameter ''{0}'' must not be null", "layer")); 219 217 if (selection == null || selection.isEmpty()) return null; 220 CollectBackReferencesVisitor v = new CollectBackReferencesVisitor(layer.data); 221 v.initialize(); 222 for (OsmPrimitive osm : selection) { 223 osm.visit(v); 224 } 225 v.getData().addAll(selection); 226 if (v.getData().isEmpty()) 218 Set<OsmPrimitive> parents = OsmPrimitive.getReferrer(selection); 219 parents.addAll(selection); 220 221 if (parents.isEmpty()) 227 222 return null; 228 if (!checkAndConfirmOutlyingDeletes(layer, v.getData()) && !silent)223 if (!checkAndConfirmOutlyingDeletes(layer,parents) && !silent) 229 224 return null; 230 return new DeleteCommand(layer, v.getData());225 return new DeleteCommand(layer,parents); 231 226 } 232 227 … … 246 241 * <li>it is not referred to by other non-deleted primitives outside of <code>primitivesToDelete</code></li> 247 242 * <ul> 248 * @param backreferences backreference data structure249 243 * @param layer the layer in whose context primitives are deleted 250 244 * @param primitivesToDelete the primitives to delete … … 252 246 * can be deleted too 253 247 */ 254 protected static Collection<Node> computeNodesToDelete( BackreferencedDataSet backreferences,OsmDataLayer layer, Collection<OsmPrimitive> primitivesToDelete) {248 protected static Collection<Node> computeNodesToDelete(OsmDataLayer layer, Collection<OsmPrimitive> primitivesToDelete) { 255 249 Collection<Node> nodesToDelete = new HashSet<Node>(); 256 250 for (Way way : OsmPrimitive.getFilteredList(primitivesToDelete, Way.class)) { … … 259 253 continue; 260 254 } 261 Collection<OsmPrimitive> referringPrimitives = backreferences.getParents(n);255 Collection<OsmPrimitive> referringPrimitives = n.getReferrers(); 262 256 referringPrimitives.removeAll(primitivesToDelete); 263 257 int count = 0; … … 314 308 return null; 315 309 316 BackreferencedDataSet backreferences = new BackreferencedDataSet();317 310 Set<OsmPrimitive> primitivesToDelete = new HashSet<OsmPrimitive>(selection); 318 311 Collection<Way> waysToBeChanged = new HashSet<Way>(); … … 321 314 // delete untagged nodes only referenced by primitives in primitivesToDelete, 322 315 // too 323 Collection<Node> nodesToDelete = computeNodesToDelete( backreferences,layer, primitivesToDelete);316 Collection<Node> nodesToDelete = computeNodesToDelete(layer, primitivesToDelete); 324 317 primitivesToDelete.addAll(nodesToDelete); 325 318 } … … 328 321 return null; 329 322 330 waysToBeChanged.addAll(OsmPrimitive.getFilteredSet( backreferences.getParents(primitivesToDelete), Way.class));323 waysToBeChanged.addAll(OsmPrimitive.getFilteredSet(OsmPrimitive.getReferrer(primitivesToDelete), Way.class)); 331 324 332 325 Collection<Command> cmds = new LinkedList<Command>(); … … 345 338 // 346 339 if (!silent) { 347 Set<RelationToChildReference> references = backreferences.getRelationToChildReferences(primitivesToDelete);340 Set<RelationToChildReference> references = RelationToChildReference.getRelationToChildReferences(primitivesToDelete); 348 341 Iterator<RelationToChildReference> it = references.iterator(); 349 342 while(it.hasNext()) { … … 364 357 // remove the objects from their parent relations 365 358 // 366 Iterator<Relation> iterator = OsmPrimitive.getFilteredSet( backreferences.getParents(primitivesToDelete), Relation.class).iterator();359 Iterator<Relation> iterator = OsmPrimitive.getFilteredSet(OsmPrimitive.getReferrer(primitivesToDelete), Relation.class).iterator(); 367 360 while (iterator.hasNext()) { 368 361 Relation cur = iterator.next();
Note:
See TracChangeset
for help on using the changeset viewer.