Changeset 15811 in josm for trunk/src/org/openstreetmap/josm/gui/io/AbstractPrimitiveTask.java
- Timestamp:
- 2020-02-03T06:35:22+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/io/AbstractPrimitiveTask.java
r13486 r15811 12 12 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 13 13 import org.openstreetmap.josm.data.osm.PrimitiveId; 14 import org.openstreetmap.josm.data.osm.Relation;15 14 import org.openstreetmap.josm.data.osm.Way; 16 15 import org.openstreetmap.josm.gui.ExceptionDialogUtil; … … 42 41 43 42 private boolean zoom; 44 private boolean downloadRelations; 45 private boolean fullRelation; 43 protected boolean fullRelation; 46 44 47 45 protected AbstractPrimitiveTask(String title, OsmDataLayer layer) { … … 71 69 72 70 /** 73 * Sets whether . 74 * @param downloadRelations {@code true} if 71 * Sets whether all members of the relation should be downloaded completely. 75 72 * @param fullRelation {@code true} if a full download is required, 76 73 * i.e., a download including the immediate children of a relation. 77 74 * @return {@code this} 75 * since 15811 (changed parameter list) 78 76 */ 79 public final AbstractPrimitiveTask setDownloadRelations(boolean downloadRelations, boolean fullRelation) { 80 this.downloadRelations = downloadRelations; 77 public final AbstractPrimitiveTask setDownloadRelations(boolean fullRelation) { 81 78 this.fullRelation = fullRelation; 82 79 return this; … … 101 98 if (canceled) 102 99 return; 103 multiObjectReader = MultiFetchServerObjectReader.create() ;100 multiObjectReader = MultiFetchServerObjectReader.create().setRecurseDownRelations(fullRelation); 104 101 } 105 102 initMultiFetchReader(multiObjectReader); … … 111 108 new DataSetMerger(ds, theirDataSet).merge(); 112 109 113 if (downloadRelations) {114 loadIncompleteRelationMembers();115 }116 117 110 loadIncompleteNodes(); 118 111 } catch (OsmTransferException e) { … … 120 113 return; 121 114 lastException = e; 122 }123 }124 125 protected void loadIncompleteRelationMembers() throws OsmTransferException {126 // if incomplete relation members exist, download them too127 for (Relation r : ds.getRelations()) {128 if (canceled)129 return;130 // Relations may be incomplete in case of nested relations if child relations are accessed before their parent131 // (it may happen because "relations" has no deterministic sort order, see #10388)132 if (r.isIncomplete() || r.hasIncompleteMembers()) {133 synchronized (this) {134 if (canceled)135 return;136 objectReader = new OsmServerObjectReader(r.getId(), OsmPrimitiveType.RELATION, fullRelation);137 }138 DataSet theirDataSet = objectReader.parseOsm(progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));139 synchronized (this) {140 objectReader = null;141 }142 new DataSetMerger(ds, theirDataSet).merge();143 }144 115 } 145 116 }
Note:
See TracChangeset
for help on using the changeset viewer.