Changeset 2025 in josm for trunk/src/org/openstreetmap/josm/actions/UploadAction.java
- Timestamp:
- 2009-09-02T21:17:52+02:00 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/actions/UploadAction.java
r2005 r2025 26 26 27 27 import org.openstreetmap.josm.Main; 28 import org.openstreetmap.josm.data.APIDataSet; 28 29 import org.openstreetmap.josm.data.conflict.ConflictCollection; 29 30 import org.openstreetmap.josm.data.osm.DataSet; … … 34 35 import org.openstreetmap.josm.gui.PleaseWaitRunnable; 35 36 import org.openstreetmap.josm.gui.historycombobox.SuggestingJHistoryComboBox; 37 import org.openstreetmap.josm.gui.layer.OsmDataLayer; 36 38 import org.openstreetmap.josm.gui.progress.ProgressMonitor; 37 39 import org.openstreetmap.josm.io.OsmApi; … … 108 110 } 109 111 112 public boolean checkPreUploadConditions(OsmDataLayer layer) { 113 return checkPreUploadConditions(layer, new APIDataSet(layer.data)); 114 } 115 116 public boolean checkPreUploadConditions(OsmDataLayer layer, APIDataSet apiData) { 117 ConflictCollection conflicts = layer.getConflicts(); 118 if (conflicts !=null && !conflicts.isEmpty()) { 119 JOptionPane.showMessageDialog( 120 Main.parent, 121 tr("<html>There are unresolved conflicts in layer ''{0}''.<br>" 122 + "You have to resolve them first.<html>", layer.getName()), 123 tr("Warning"), 124 JOptionPane.WARNING_MESSAGE 125 ); 126 return false; 127 } 128 // Call all upload hooks in sequence. The upload confirmation dialog 129 // is one of these. 130 for(UploadHook hook : uploadHooks) 131 if(!hook.checkUpload(apiData.getPrimitivesToAdd(), apiData.getPrimitivesToUpdate(), apiData.getPrimitivesToDelete())) 132 return false; 133 134 return true; 135 } 136 110 137 public void actionPerformed(ActionEvent e) { 111 138 if (!isEnabled()) … … 121 148 } 122 149 123 ConflictCollection conflicts = Main.map.mapView.getEditLayer().getConflicts(); 124 if (conflicts !=null && !conflicts.isEmpty()) { 125 JOptionPane.showMessageDialog( 126 Main.parent, 127 tr("There are unresolved conflicts. You have to resolve these first."), 128 tr("Warning"), 129 JOptionPane.WARNING_MESSAGE 130 ); 131 Main.map.conflictDialog.showDialog(); 132 return; 133 } 134 135 final LinkedList<OsmPrimitive> add = new LinkedList<OsmPrimitive>(); 136 final LinkedList<OsmPrimitive> update = new LinkedList<OsmPrimitive>(); 137 final LinkedList<OsmPrimitive> delete = new LinkedList<OsmPrimitive>(); 138 for (OsmPrimitive osm : getCurrentDataSet().allPrimitives()) { 139 if (osm.get("josm/ignore") != null) { 140 continue; 141 } 142 if (osm.id == 0 && !osm.deleted) { 143 add.addLast(osm); 144 } else if (osm.modified && !osm.deleted) { 145 update.addLast(osm); 146 } else if (osm.deleted && osm.id != 0) { 147 delete.addFirst(osm); 148 } 149 } 150 151 if (add.isEmpty() && update.isEmpty() && delete.isEmpty()) { 150 APIDataSet apiData = new APIDataSet(Main.main.getCurrentDataSet()); 151 if (apiData.isEmpty()) { 152 152 JOptionPane.showMessageDialog( 153 153 Main.parent, 154 154 tr("No changes to upload."), 155 155 tr("Warning"), 156 JOptionPane. WARNING_MESSAGE156 JOptionPane.INFORMATION_MESSAGE 157 157 ); 158 158 return; 159 159 } 160 161 // Call all upload hooks in sequence. The upload confirmation dialog 162 // is one of these. 163 for(UploadHook hook : uploadHooks) 164 if(!hook.checkUpload(add, update, delete)) 165 return; 166 167 final Collection<OsmPrimitive> all = new LinkedList<OsmPrimitive>(); 168 all.addAll(add); 169 all.addAll(update); 170 all.addAll(delete); 171 172 Main.worker.execute(new UploadDiffTask(all)); 160 if (!checkPreUploadConditions(Main.map.mapView.getEditLayer(), apiData)) 161 return; 162 Main.worker.execute(createUploadTask(Main.map.mapView.getEditLayer(), apiData.getPrimitives())); 173 163 } 174 164 … … 235 225 ); 236 226 switch(ret) { 237 case JOptionPane.CLOSED_OPTION: return;238 case JOptionPane.CANCEL_OPTION: return;239 case 0: synchronizePrimitive(id); break;240 case 1: synchronizeDataSet(); break;241 default:242 // should not happen243 throw new IllegalStateException(tr("unexpected return value. Got {0}", ret));227 case JOptionPane.CLOSED_OPTION: return; 228 case JOptionPane.CANCEL_OPTION: return; 229 case 0: synchronizePrimitive(id); break; 230 case 1: synchronizeDataSet(); break; 231 default: 232 // should not happen 233 throw new IllegalStateException(tr("unexpected return value. Got {0}", ret)); 244 234 } 245 235 } … … 275 265 ); 276 266 switch(ret) { 277 case JOptionPane.CLOSED_OPTION: return;278 case 1: return;279 case 0: synchronizeDataSet(); break;280 default:281 // should not happen282 throw new IllegalStateException(tr("unexpected return value. Got {0}", ret));267 case JOptionPane.CLOSED_OPTION: return; 268 case 1: return; 269 case 0: synchronizeDataSet(); break; 270 default: 271 // should not happen 272 throw new IllegalStateException(tr("unexpected return value. Got {0}", ret)); 283 273 } 284 274 } … … 522 512 } 523 513 524 525 class UploadDiffTask extends PleaseWaitRunnable { 514 public UploadDiffTask createUploadTask(OsmDataLayer layer, Collection<OsmPrimitive> toUpload) { 515 return new UploadDiffTask(layer, toUpload); 516 } 517 518 public class UploadDiffTask extends PleaseWaitRunnable { 526 519 private boolean uploadCancelled = false; 527 520 private Exception lastException = null; 528 521 private Collection <OsmPrimitive> toUpload; 529 522 private OsmServerWriter writer; 530 531 public UploadDiffTask(Collection <OsmPrimitive> toUpload) { 532 super(tr("Uploading"),false /* don't ignore exceptions */); 523 private OsmDataLayer layer; 524 525 private UploadDiffTask(OsmDataLayer layer, Collection <OsmPrimitive> toUpload) { 526 super(tr("Uploading data for layer ''{0}''", layer.getName()),false /* don't ignore exceptions */); 533 527 this.toUpload = toUpload; 528 this.layer = layer; 534 529 } 535 530 … … 537 532 writer = new OsmServerWriter(); 538 533 try { 539 writer.uploadOsm(getCurrentDataSet().version, toUpload, progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false)); 534 ProgressMonitor monitor = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false); 535 writer.uploadOsm(layer.data.version, toUpload, monitor); 540 536 } catch (Exception sxe) { 541 537 if (uploadCancelled) { … … 554 550 // partially uploaded 555 551 // 556 getEditLayer().cleanupAfterUpload(writer.getProcessedPrimitives());557 DataSet.fireSelectionChanged( getEditLayer().data.getSelected());558 getEditLayer().fireDataChange();552 layer.cleanupAfterUpload(writer.getProcessedPrimitives()); 553 DataSet.fireSelectionChanged(layer.data.getSelected()); 554 layer.fireDataChange(); 559 555 if (lastException != null) { 560 556 handleFailedUpload(lastException); 557 } else { 558 layer.onPostUploadToServer(); 561 559 } 562 560 } … … 568 566 } 569 567 } 568 569 public boolean isSuccessful() { 570 return !isCancelled() && !isFailed(); 571 } 572 573 public boolean isCancelled() { 574 return uploadCancelled; 575 } 576 577 public boolean isFailed() { 578 return lastException != null; 579 } 570 580 } 571 581 }
Note:
See TracChangeset
for help on using the changeset viewer.