Changeset 2198 in josm for trunk/src/org/openstreetmap/josm/io
- Timestamp:
- 2009-09-27T16:29:21+02:00 (15 years ago)
- Location:
- trunk/src/org/openstreetmap/josm/io
- Files:
-
- 1 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/io/OsmApi.java
r2181 r2198 398 398 * 399 399 * @param list the list of changed OSM Primitives 400 * @param monitor the progress monitor 400 401 * @return list of processed primitives 401 402 * @throws OsmTransferException if something is wrong 402 403 */ 403 public Collection<OsmPrimitive> uploadDiff(Collection<OsmPrimitive> list, ProgressMonitor progressMonitor) throws OsmTransferException {404 public Collection<OsmPrimitive> uploadDiff(Collection<OsmPrimitive> list, ProgressMonitor monitor) throws OsmTransferException { 404 405 try { 405 progressMonitor.beginTask("", list.size() * 2);406 monitor.beginTask("", list.size() * 2); 406 407 if (changeset == null) 407 408 throw new OsmTransferException(tr("No changeset present for diff upload.")); 408 409 409 initialize( progressMonitor);410 initialize(monitor); 410 411 final ArrayList<OsmPrimitive> processed = new ArrayList<OsmPrimitive>(); 411 412 412 413 CreateOsmChangeVisitor duv = new CreateOsmChangeVisitor(changeset, OsmApi.this); 413 414 414 progressMonitor.subTask(tr("Preparing..."));415 monitor.subTask(tr("Preparing...")); 415 416 for (OsmPrimitive osm : list) { 416 417 osm.visit(duv); 417 progressMonitor.worked(1);418 monitor.worked(1); 418 419 } 419 progressMonitor.indeterminateSubTask(tr("Uploading..."));420 monitor.indeterminateSubTask(tr("Uploading...")); 420 421 421 422 String diff = duv.getDocument(); 422 String diffresult = sendRequest("POST", "changeset/" + changeset.getId() + "/upload", diff, progressMonitor);423 String diffresult = sendRequest("POST", "changeset/" + changeset.getId() + "/upload", diff,monitor); 423 424 DiffResultReader.parseDiffResult(diffresult, list, processed, duv.getNewIdMap(), 424 progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));425 monitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false)); 425 426 return processed; 426 427 } catch(OsmTransferException e) { … … 429 430 throw new OsmTransferException(e); 430 431 } finally { 431 progressMonitor.finishTask(); 432 } 433 } 434 435 432 monitor.finishTask(); 433 } 434 } 436 435 437 436 private void sleepAndListen(int retry, ProgressMonitor monitor) throws OsmTransferCancelledException { … … 548 547 activeConnection.disconnect(); 549 548 550 if (retCode != 200) 551 throw new OsmApiException( 552 retCode, 553 errorHeader == null? null : errorHeader.trim(), 554 responseBody == null ? null : responseBody.toString().trim() 555 ); 556 549 errorHeader = errorHeader == null? null : errorHeader.trim(); 550 String errorBody = responseBody == null ? null : responseBody.toString().trim(); 551 switch(retCode) { 552 case HttpURLConnection.HTTP_OK: 553 break; // do nothing 554 case HttpURLConnection.HTTP_GONE: 555 throw new OsmApiPrimitiveGoneException(errorHeader, errorBody); 556 default: 557 throw new OsmApiException(retCode, errorHeader, errorBody); 558 559 } 557 560 return responseBody.toString(); 558 561 } catch (UnknownHostException e) { -
trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java
r2181 r2198 13 13 import org.openstreetmap.josm.data.osm.OsmPrimitive; 14 14 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 15 import org.openstreetmap.josm.gui.progress.NullProgressMonitor; 15 16 import org.openstreetmap.josm.gui.progress.ProgressMonitor; 16 17 … … 111 112 */ 112 113 protected void uploadChangesAsDiffUpload(Collection<OsmPrimitive> primitives, ProgressMonitor progressMonitor) throws OsmTransferException { 113 // upload everything in one changeset114 //115 114 try { 116 115 progressMonitor.beginTask(tr("Starting to upload in one request ...")); … … 130 129 * @param apiVersion version of the data set 131 130 * @param primitives list of objects to send 132 */ 133 public void uploadOsm(String apiVersion, Collection<OsmPrimitive> primitives, Changeset changeset, boolean closeChangesetAfterUpload, ProgressMonitor progressMonitor) throws OsmTransferException { 131 * @param changeset the changeset the data is uploaded to. Must not be null. 132 * @param monitor the progress monitor. If null, assumes {@see NullProgressMonitor#INSTANCE} 133 * @throws IllegalArgumentException thrown if changeset is null 134 * @throws OsmTransferException thrown if something goes wrong 135 */ 136 public void uploadOsm(String apiVersion, Collection<OsmPrimitive> primitives, Changeset changeset, ProgressMonitor monitor) throws OsmTransferException { 137 if (changeset == null) 138 throw new IllegalArgumentException(tr("Parameter ''{0}'' must not be null", "changeset")); 134 139 processed = new LinkedList<OsmPrimitive>(); 135 progressMonitor.beginTask(tr("Uploading data ..."));136 api.initialize(progressMonitor);140 monitor = monitor == null ? NullProgressMonitor.INSTANCE : monitor; 141 monitor.beginTask(tr("Uploading data ...")); 137 142 try { 143 api.initialize(monitor); 138 144 // check whether we can use diff upload 139 145 // 140 boolean ca sUseDiffUploads= api.hasSupportForDiffUploads();146 boolean canUseDiffUpload = api.hasSupportForDiffUploads(); 141 147 if (apiVersion == null) { 142 148 System.out.println(tr("WARNING: no API version defined for data to upload. Falling back to version 0.6")); … … 144 150 } 145 151 boolean useDiffUpload = Main.pref.getBoolean("osm-server.atomic-upload", apiVersion.compareTo("0.6")>=0); 146 if (useDiffUpload && ! ca sUseDiffUploads) {152 if (useDiffUpload && ! canUseDiffUpload) { 147 153 System.out.println(tr("WARNING: preference ''{0}'' or API version ''{1}'' of dataset requires to use diff uploads, but API is not able to handle them. Ignoring diff upload.", "osm-server.atomic-upload", apiVersion)); 148 154 useDiffUpload = false; 149 155 } 150 if (changeset == null) {151 changeset = new Changeset();152 }153 156 if (changeset.getId() == 0) { 154 api.openChangeset(changeset, progressMonitor.createSubTaskMonitor(0, false));157 api.openChangeset(changeset,monitor.createSubTaskMonitor(0, false)); 155 158 } else { 156 api.updateChangeset(changeset, progressMonitor.createSubTaskMonitor(0, false));159 api.updateChangeset(changeset,monitor.createSubTaskMonitor(0, false)); 157 160 } 158 161 api.setChangeset(changeset); 159 162 if (useDiffUpload) { 160 uploadChangesAsDiffUpload(primitives, progressMonitor.createSubTaskMonitor(0,false));163 uploadChangesAsDiffUpload(primitives,monitor.createSubTaskMonitor(0,false)); 161 164 } else { 162 uploadChangesIndividually(primitives, progressMonitor.createSubTaskMonitor(0,false));165 uploadChangesIndividually(primitives,monitor.createSubTaskMonitor(0,false)); 163 166 } 164 167 } catch(OsmTransferException e) { … … 167 170 throw new OsmTransferException(e); 168 171 } finally { 169 try { 170 if (closeChangesetAfterUpload && api.getChangeset() != null && api.getChangeset().getId() > 0) { 171 api.closeChangeset(changeset,progressMonitor.createSubTaskMonitor(0, false)); 172 api.setChangeset(null); 173 } 174 } catch (Exception ee) { 175 OsmChangesetCloseException closeException = new OsmChangesetCloseException(ee); 176 closeException.setChangeset(api.getChangeset()); 177 throw closeException; 178 } finally { 179 progressMonitor.finishTask(); 180 } 172 monitor.finishTask(); 173 api.setChangeset(null); 181 174 } 182 175 }
Note:
See TracChangeset
for help on using the changeset viewer.