Changeset 2115 in josm for trunk/src/org/openstreetmap/josm/actions
- Timestamp:
- 2009-09-13T19:30:36+02:00 (15 years ago)
- Location:
- trunk/src/org/openstreetmap/josm/actions
- Files:
-
- 1 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/actions/CloseChangesetAction.java
r2113 r2115 1 1 // License: GPL. For details, see LICENSE file. 2 2 package org.openstreetmap.josm.actions; 3 4 import static org.openstreetmap.josm.tools.I18n.tr; 3 5 4 6 import java.awt.event.ActionEvent; 5 7 import java.awt.event.KeyEvent; 6 8 import java.io.IOException; 9 import java.util.Collection; 10 import java.util.List; 7 11 8 12 import javax.swing.JOptionPane; 13 import javax.swing.SwingUtilities; 9 14 10 15 import org.openstreetmap.josm.Main; 16 import org.openstreetmap.josm.data.osm.Changeset; 17 import org.openstreetmap.josm.data.osm.UserInfo; 11 18 import org.openstreetmap.josm.gui.ExceptionDialogUtil; 12 19 import org.openstreetmap.josm.gui.PleaseWaitRunnable; 13 import org.openstreetmap.josm.io.ChangesetProcessingType; 14 import org.openstreetmap.josm.io.OsmApi; 20 import org.openstreetmap.josm.gui.io.CloseChangesetDialog; 21 import org.openstreetmap.josm.gui.io.CloseChangesetTask; 22 import org.openstreetmap.josm.io.ChangesetQuery; 23 import org.openstreetmap.josm.io.OsmServerChangesetReader; 24 import org.openstreetmap.josm.io.OsmServerUserInfoReader; 15 25 import org.openstreetmap.josm.io.OsmTransferException; 16 26 import org.openstreetmap.josm.tools.Shortcut; 17 27 import org.xml.sax.SAXException; 18 28 19 import static org.openstreetmap.josm.tools.I18n.tr; 29 public class CloseChangesetAction extends JosmAction{ 20 30 21 public class StopChangesetAction extends JosmAction{ 22 23 public StopChangesetAction() { 24 super(tr("Close current changeset"), 31 public CloseChangesetAction() { 32 super(tr("Close open changesets"), 25 33 "closechangeset", 26 tr("Close the current changeset ..."),34 tr("Closes open changesets"), 27 35 Shortcut.registerShortcut( 28 36 "system:closechangeset", 29 tr("File: {0}", tr("Close the current changeset ...")),37 tr("File: {0}", tr("Closes open changesets")), 30 38 KeyEvent.VK_Q, 31 39 Shortcut.GROUP_HOTKEY + Shortcut.GROUPS_ALT2 … … 36 44 } 37 45 public void actionPerformed(ActionEvent e) { 38 if (OsmApi.getOsmApi().getCurrentChangeset() == null) { 46 Main.worker.submit(new DownloadOpenChangesetsTask()); 47 } 48 49 50 protected void onPostDownloadOpenChangesets(DownloadOpenChangesetsTask task) { 51 if (task.isCancelled() || task.getLastException() != null) return; 52 53 List<Changeset> openChangesets = task.getChangesets(); 54 if (openChangesets.isEmpty()) { 39 55 JOptionPane.showMessageDialog( 40 56 Main.parent, 41 tr("There is currently no changeset open."),42 tr("No open changeset "),57 tr("There are no open changesets"), 58 tr("No open changesets"), 43 59 JOptionPane.INFORMATION_MESSAGE 44 60 ); 45 61 return; 46 62 } 47 Main.worker.submit(new StopChangesetActionTask()); 63 64 CloseChangesetDialog dialog = new CloseChangesetDialog(); 65 dialog.setChangesets(openChangesets); 66 dialog.setVisible(true); 67 if (dialog.isCanceled()) 68 return; 69 70 Collection<Changeset> changesetsToClose = dialog.getSelectedChangesets(); 71 CloseChangesetTask closeChangesetTask = new CloseChangesetTask(changesetsToClose); 72 Main.worker.submit(closeChangesetTask); 48 73 } 49 74 50 @Override51 protected void updateEnabledState() {52 setEnabled(Main.map != null && OsmApi.getOsmApi().getCurrentChangeset() != null);53 }54 75 55 static class StopChangesetActionTask extends PleaseWaitRunnable { 76 private class DownloadOpenChangesetsTask extends PleaseWaitRunnable { 77 56 78 private boolean cancelled; 79 private OsmServerChangesetReader reader; 80 private List<Changeset> changesets; 57 81 private Exception lastException; 82 private UserInfo userInfo; 58 83 59 public StopChangesetActionTask() { 60 super(tr("Closing changeset"), false /* don't ignore exceptions */); 84 /** 85 * 86 * @param model provides the user id of the current user and accepts the changesets 87 * after download 88 */ 89 public DownloadOpenChangesetsTask() { 90 super(tr("Downloading open changesets ...", false /* don't ignore exceptions */)); 61 91 } 92 62 93 @Override 63 94 protected void cancel() { 64 95 this.cancelled = true; 65 OsmApi.getOsmApi().cancel(); 66 96 reader.cancel(); 67 97 } 68 98 69 99 @Override 70 100 protected void finish() { 71 if (cancelled) 72 return; 73 if (lastException != null) { 74 ExceptionDialogUtil.explainException(lastException); 75 } 101 SwingUtilities.invokeLater( 102 new Runnable() { 103 public void run() { 104 if (lastException != null) { 105 ExceptionDialogUtil.explainException(lastException); 106 } 107 onPostDownloadOpenChangesets(DownloadOpenChangesetsTask.this); 108 } 109 } 110 ); 111 } 112 113 /** 114 * Fetch the user info from the server. This is necessary if we don't know 115 * the users id yet 116 * 117 * @return the user info 118 * @throws OsmTransferException thrown in case of any communication exception 119 */ 120 protected UserInfo fetchUserInfo() throws OsmTransferException { 121 OsmServerUserInfoReader reader = new OsmServerUserInfoReader(); 122 return reader.fetchUserInfo(getProgressMonitor().createSubTaskMonitor(1, false)); 76 123 } 77 124 … … 79 126 protected void realRun() throws SAXException, IOException, OsmTransferException { 80 127 try { 81 OsmApi.getOsmApi().stopChangeset(ChangesetProcessingType.USE_EXISTING_AND_CLOSE, getProgressMonitor().createSubTaskMonitor(1, false)); 128 userInfo = fetchUserInfo(); 129 if (cancelled) 130 return; 131 reader = new OsmServerChangesetReader(); 132 ChangesetQuery query = new ChangesetQuery().forUser(userInfo.getId()).beingOpen(); 133 changesets = reader.queryChangesets( 134 query, 135 getProgressMonitor().createSubTaskMonitor(1, false /* not internal */) 136 ); 82 137 } catch(Exception e) { 83 138 if (cancelled) … … 86 141 } 87 142 } 143 144 public boolean isCancelled() { 145 return cancelled; 146 } 147 148 public List<Changeset> getChangesets() { 149 return changesets; 150 } 151 152 public Exception getLastException() { 153 return lastException; 154 } 88 155 } 89 156 } -
trunk/src/org/openstreetmap/josm/actions/UploadAction.java
r2096 r2115 28 28 import org.openstreetmap.josm.gui.layer.OsmDataLayer; 29 29 import org.openstreetmap.josm.gui.progress.ProgressMonitor; 30 import org.openstreetmap.josm.io.ChangesetProcessingType;31 30 import org.openstreetmap.josm.io.OsmApi; 32 31 import org.openstreetmap.josm.io.OsmApiException; … … 176 175 Main.map.mapView.getEditLayer(), 177 176 apiData.getPrimitives(), 178 Upload ConfirmationHook.getUploadDialog().getChangeset(),179 Upload ConfirmationHook.getUploadDialog().getChangesetProcessingType()177 UploadDialog.getUploadDialog().getChangeset(), 178 UploadDialog.getUploadDialog().isDoCloseAfterUpload() 180 179 ) 181 180 ); … … 244 243 ); 245 244 switch(ret) { 246 case JOptionPane.CLOSED_OPTION: return;247 case JOptionPane.CANCEL_OPTION: return;248 case 0: synchronizePrimitive(primitiveType, id); break;249 case 1: synchronizeDataSet(); break;250 default:251 // should not happen252 throw new IllegalStateException(tr("unexpected return value. Got {0}", ret));245 case JOptionPane.CLOSED_OPTION: return; 246 case JOptionPane.CANCEL_OPTION: return; 247 case 0: synchronizePrimitive(primitiveType, id); break; 248 case 1: synchronizeDataSet(); break; 249 default: 250 // should not happen 251 throw new IllegalStateException(tr("unexpected return value. Got {0}", ret)); 253 252 } 254 253 } … … 284 283 ); 285 284 switch(ret) { 286 case JOptionPane.CLOSED_OPTION: return;287 case 1: return;288 case 0: synchronizeDataSet(); break;289 default:290 // should not happen291 throw new IllegalStateException(tr("unexpected return value. Got {0}", ret));285 case JOptionPane.CLOSED_OPTION: return; 286 case 1: return; 287 case 0: synchronizeDataSet(); break; 288 default: 289 // should not happen 290 throw new IllegalStateException(tr("unexpected return value. Got {0}", ret)); 292 291 } 293 292 } … … 457 456 458 457 static public class UploadConfirmationHook implements UploadHook { 459 static private UploadDialog uploadDialog;460 461 static public UploadDialog getUploadDialog() {462 if (uploadDialog == null) {463 uploadDialog = new UploadDialog();464 }465 return uploadDialog;466 }467 458 468 459 public boolean checkUpload(APIDataSet apiData) { 469 final UploadDialog dialog = getUploadDialog();460 final UploadDialog dialog = UploadDialog.getUploadDialog(); 470 461 dialog.setUploadedPrimitives(apiData.getPrimitivesToAdd(),apiData.getPrimitivesToUpdate(), apiData.getPrimitivesToDelete()); 471 462 dialog.setVisible(true); … … 477 468 } 478 469 479 public UploadDiffTask createUploadTask(OsmDataLayer layer, Collection<OsmPrimitive> toUpload, Changeset changeset, ChangesetProcessingType changesetProcessingType) { 480 return new UploadDiffTask(layer, toUpload, changeset, changesetProcessingType); 481 } 482 470 public UploadDiffTask createUploadTask(OsmDataLayer layer, Collection<OsmPrimitive> toUpload, Changeset changeset, boolean closeChangesetAfterUpload) { 471 return new UploadDiffTask(layer, toUpload, changeset, closeChangesetAfterUpload); 472 } 473 474 /** 475 * The task for uploading a collection of primitives 476 * 477 */ 483 478 public class UploadDiffTask extends PleaseWaitRunnable { 484 479 private boolean uploadCancelled = false; … … 488 483 private OsmDataLayer layer; 489 484 private Changeset changeset; 490 private ChangesetProcessingType changesetProcessingType; 491 492 private UploadDiffTask(OsmDataLayer layer, Collection <OsmPrimitive> toUpload, Changeset changeset, ChangesetProcessingType changesetProcessingType) { 485 private boolean closeChangesetAfterUpload; 486 487 /** 488 * 489 * @param layer the OSM data layer for which data is uploaded 490 * @param toUpload the collection of primitives to upload 491 * @param changeset the changeset to use for uploading 492 * @param closeChangesetAfterUpload true, if the changeset is to be closed after uploading 493 */ 494 private UploadDiffTask(OsmDataLayer layer, Collection <OsmPrimitive> toUpload, Changeset changeset, boolean closeChangesetAfterUpload) { 493 495 super(tr("Uploading data for layer ''{0}''", layer.getName()),false /* don't ignore exceptions */); 494 496 this.toUpload = toUpload; 495 497 this.layer = layer; 496 498 this.changeset = changeset; 497 this.c hangesetProcessingType = changesetProcessingType == null ? ChangesetProcessingType.USE_NEW_AND_CLOSE : changesetProcessingType;499 this.closeChangesetAfterUpload = closeChangesetAfterUpload; 498 500 } 499 501 … … 502 504 try { 503 505 ProgressMonitor monitor = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false); 504 writer.uploadOsm(layer.data.version, toUpload, changeset,c hangesetProcessingType, monitor);506 writer.uploadOsm(layer.data.version, toUpload, changeset,closeChangesetAfterUpload, monitor); 505 507 } catch (Exception sxe) { 506 508 if (uploadCancelled) { … … 525 527 handleFailedUpload(lastException); 526 528 } else { 529 // run post upload action on the layer 530 // 527 531 layer.onPostUploadToServer(); 532 // refresh changeset dialog with the updated changeset 533 // 534 UploadDialog.getUploadDialog().setOrUpdateChangeset(changeset); 528 535 } 529 536 }
Note:
See TracChangeset
for help on using the changeset viewer.