Changeset 2115 in josm for trunk/src/org/openstreetmap/josm/actions/CloseChangesetAction.java
- Timestamp:
- 13.09.2009 19:30:36 (3 years ago)
- File:
-
- 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 }
Note: See TracChangeset
for help on using the changeset viewer.
