Changeset 2565 in josm for trunk/src/org/openstreetmap/josm/command
- Timestamp:
- 2009-12-03T20:26:00+01:00 (14 years ago)
- Location:
- trunk/src/org/openstreetmap/josm/command
- Files:
-
- 2 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(); -
trunk/src/org/openstreetmap/josm/command/PurgePrimitivesCommand.java
r2512 r2565 17 17 import org.openstreetmap.josm.Main; 18 18 import org.openstreetmap.josm.data.conflict.ConflictCollection; 19 import org.openstreetmap.josm.data.osm.BackreferencedDataSet;20 19 import org.openstreetmap.josm.data.osm.Node; 21 20 import org.openstreetmap.josm.data.osm.OsmPrimitive; … … 51 50 private Set<OsmPrimitive> origVersionsOfTouchedPrimitives; 52 51 53 /**54 * the data structure with child->parent references55 */56 private BackreferencedDataSet backreferenceDataSet;57 58 52 protected void init(Collection<OsmPrimitive> toPurge) { 59 53 this.toPurge = toPurge; … … 141 135 protected void removeReferecesToPrimitive(OsmPrimitive child, Set<OsmPrimitive> hive) { 142 136 hive.remove(child); 143 for (OsmPrimitive parent: this.backreferenceDataSet.getParents(child)) {137 for (OsmPrimitive parent: child.getReferrers()) { 144 138 if (toPurge.contains(parent)) 145 139 // parent itself is to be purged. This method is going to be … … 177 171 @Override 178 172 public boolean executeCommand() { 179 if (backreferenceDataSet == null) {180 backreferenceDataSet = new BackreferencedDataSet();181 }182 173 HashSet<OsmPrimitive> hive = new HashSet<OsmPrimitive>(); 183 174 … … 198 189 } 199 190 } 200 // we don't need this any more201 backreferenceDataSet = null;202 191 return super.executeCommand(); 203 192 } … … 231 220 super.undoCommand(); 232 221 } 233 234 /**235 * Use to inject a backreference data set used when the command236 * is executed.237 *238 * @param ds the backreference data set239 */240 public void setBackreferenceDataSet(BackreferencedDataSet ds) {241 this.backreferenceDataSet = ds;242 }243 222 }
Note: See TracChangeset
for help on using the changeset viewer.