Changeset 6776 in josm
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/data/APIDataSet.java
r6317 r6776 232 232 relationsToAdd.removeAll(noProblemRelations); 233 233 234 RelationUploadDependencyGraph graph = new RelationUploadDependencyGraph(relationsToAdd); 234 RelationUploadDependencyGraph graph = new RelationUploadDependencyGraph(relationsToAdd, true); 235 235 newToAdd.addAll(graph.computeUploadOrder()); 236 236 toAdd = newToAdd; 237 238 LinkedList<OsmPrimitive> newToDelete = new LinkedList<OsmPrimitive>(); 239 newToDelete.addAll(Utils.filteredCollection(toDelete, Node.class)); 240 newToDelete.addAll(Utils.filteredCollection(toDelete, Way.class)); 241 graph = new RelationUploadDependencyGraph(Utils.filteredCollection(toDelete, Relation.class), false); 242 newToDelete.addAll(graph.computeUploadOrder()); 243 toDelete = newToDelete; 237 244 } 238 245 … … 268 275 */ 269 276 private static class RelationUploadDependencyGraph { 270 private Map<Relation, Set<Relation>> children; 277 private Map<Relation, Set<Relation>> children = new HashMap<Relation, Set<Relation>>(); 271 278 private Collection<Relation> relations; 272 private Set<Relation> visited; 279 private Set<Relation> visited = new HashSet<Relation>(); 273 280 private List<Relation> uploadOrder; 274 275 public RelationUploadDependencyGraph() { 276 this.children = new HashMap<Relation, Set<Relation>>(); 277 this.visited = new HashSet<Relation>(); 278 } 279 280 public RelationUploadDependencyGraph(Collection<Relation> relations) { 281 this(); 281 private final boolean newOrUndeleted; 282 283 public RelationUploadDependencyGraph(Collection<Relation> relations, boolean newOrUndeleted) { 284 this.newOrUndeleted = newOrUndeleted; 282 285 build(relations); 283 286 } … … 286 289 this.relations = new HashSet<Relation>(); 287 290 for(Relation relation: relations) { 288 if (!relation.isNewOrUndeleted() ) { 291 if (newOrUndeleted ? !relation.isNewOrUndeleted() : !relation.isDeleted()) { 289 292 continue; 290 293 } 291 294 this.relations.add(relation); 292 295 for (RelationMember m: relation.getMembers()) { 293 if (m.isRelation() && m.getMember().isNewOrUndeleted()) { 296 if (m.isRelation() && (newOrUndeleted ? m.getMember().isNewOrUndeleted() : m.getMember().isDeleted())) { 294 297 addDependency(relation, (Relation)m.getMember()); 295 298 } -
trunk/test/unit/org/openstreetmap/josm/data/osm/APIDataSetTest.java
r6471 r6776 145 145 } 146 146 147 @Test // for ticket #9624 148 public void deleteOneParentTwoNewChildren() { 149 DataSet ds = new DataSet(); 150 Relation r1 = new Relation(1); 151 ds.addPrimitive(r1); 152 r1.put("name", "r1"); 153 154 Relation r2 = new Relation(2); 155 ds.addPrimitive(r2); 156 r2.put("name", "r2"); 157 158 Relation r3 = new Relation(3); 159 ds.addPrimitive(r3); 160 r3.put("name", "r3"); 161 162 Relation r4 = new Relation(4); 163 ds.addPrimitive(r4); 164 r4.put("name", "unrelated"); 165 166 167 r1.addMember(new RelationMember("", r2)); 168 r1.addMember(new RelationMember("", r3)); 169 170 r1.setDeleted(true); 171 r2.setDeleted(true); 172 r3.setDeleted(true); 173 r4.setDeleted(true); 174 175 176 APIDataSet apiDataSet = new APIDataSet(); 177 apiDataSet.init(ds); 178 try { 179 apiDataSet.adjustRelationUploadOrder(); 180 } catch(CyclicUploadDependencyException e) { 181 fail("unexpected exception:" + e); 182 } 183 List<OsmPrimitive> toDelete = apiDataSet.getPrimitivesToDelete(); 184 185 assertEquals(4, toDelete.size()); 186 assertEquals(true, toDelete.indexOf(r2) < toDelete.indexOf(r1)); 187 assertEquals(true, toDelete.indexOf(r3) < toDelete.indexOf(r1)); 188 assertEquals(true, toDelete.indexOf(r3) < toDelete.indexOf(r1)); 189 } 190 147 191 @Test 148 192 public void oneCycle() {
Note:
See TracChangeset
for help on using the changeset viewer.