source: josm/trunk/src/org/openstreetmap/josm/actions/CloseChangesetAction.java@ 6636

Last change on this file since 6636 was 6084, checked in by bastiK, 11 years ago

see #8902 - add missing @Override annotations (patch by shinigami)

  • Property svn:eol-style set to native
File size: 5.2 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.actions;
3
4import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
5import static org.openstreetmap.josm.tools.I18n.tr;
6
7import java.awt.event.ActionEvent;
8import java.awt.event.KeyEvent;
9import java.io.IOException;
10import java.util.Collection;
11import java.util.List;
12
13import javax.swing.JOptionPane;
14import javax.swing.SwingUtilities;
15
16import org.openstreetmap.josm.Main;
17import org.openstreetmap.josm.data.osm.Changeset;
18import org.openstreetmap.josm.data.osm.ChangesetCache;
19import org.openstreetmap.josm.data.osm.UserInfo;
20import org.openstreetmap.josm.gui.ExceptionDialogUtil;
21import org.openstreetmap.josm.gui.PleaseWaitRunnable;
22import org.openstreetmap.josm.gui.io.CloseChangesetDialog;
23import org.openstreetmap.josm.gui.io.CloseChangesetTask;
24import org.openstreetmap.josm.io.ChangesetQuery;
25import org.openstreetmap.josm.io.OsmServerChangesetReader;
26import org.openstreetmap.josm.io.OsmServerUserInfoReader;
27import org.openstreetmap.josm.io.OsmTransferException;
28import org.openstreetmap.josm.tools.Shortcut;
29import org.xml.sax.SAXException;
30
31public class CloseChangesetAction extends JosmAction{
32
33 public CloseChangesetAction() {
34 super(tr("Close open changesets"),
35 "closechangeset",
36 tr("Closes open changesets"),
37 Shortcut.registerShortcut("system:closechangeset",
38 tr("File: {0}", tr("Closes open changesets")),
39 KeyEvent.VK_Q, Shortcut.ALT_CTRL),
40 true
41 );
42 putValue("help", ht("/Action/CloseChangeset"));
43
44 }
45 @Override
46 public void actionPerformed(ActionEvent e) {
47 Main.worker.submit(new DownloadOpenChangesetsTask());
48 }
49
50 protected void onPostDownloadOpenChangesets() {
51 List<Changeset> openChangesets = ChangesetCache.getInstance().getOpenChangesets();
52 if (openChangesets.isEmpty()) {
53 JOptionPane.showMessageDialog(
54 Main.parent,
55 tr("There are no open changesets"),
56 tr("No open changesets"),
57 JOptionPane.INFORMATION_MESSAGE
58 );
59 return;
60 }
61
62 CloseChangesetDialog dialog = new CloseChangesetDialog();
63 dialog.setChangesets(openChangesets);
64 dialog.setVisible(true);
65 if (dialog.isCanceled())
66 return;
67
68 Collection<Changeset> changesetsToClose = dialog.getSelectedChangesets();
69 CloseChangesetTask closeChangesetTask = new CloseChangesetTask(changesetsToClose);
70 Main.worker.submit(closeChangesetTask);
71 }
72
73 private class DownloadOpenChangesetsTask extends PleaseWaitRunnable {
74
75 private boolean canceled;
76 private OsmServerChangesetReader reader;
77 private List<Changeset> changesets;
78 private Exception lastException;
79 private UserInfo userInfo;
80
81 public DownloadOpenChangesetsTask() {
82 super(tr("Downloading open changesets ...", false /* don't ignore exceptions */));
83 }
84
85 @Override
86 protected void cancel() {
87 this.canceled = true;
88 reader.cancel();
89 }
90
91 @Override
92 protected void finish() {
93 SwingUtilities.invokeLater(
94 new Runnable() {
95 @Override
96 public void run() {
97 if (lastException != null) {
98 ExceptionDialogUtil.explainException(lastException);
99 }
100 ChangesetCache.getInstance().update(changesets);
101 if (!canceled && lastException == null) {
102 onPostDownloadOpenChangesets();
103 }
104 }
105 }
106 );
107 }
108
109 /**
110 * Fetch the user info from the server. This is necessary if we don't know
111 * the users id yet
112 *
113 * @return the user info
114 * @throws OsmTransferException thrown in case of any communication exception
115 */
116 protected UserInfo fetchUserInfo() throws OsmTransferException {
117 OsmServerUserInfoReader reader = new OsmServerUserInfoReader();
118 return reader.fetchUserInfo(getProgressMonitor().createSubTaskMonitor(1, false));
119 }
120
121 @Override
122 protected void realRun() throws SAXException, IOException, OsmTransferException {
123 try {
124 userInfo = fetchUserInfo();
125 if (canceled)
126 return;
127 reader = new OsmServerChangesetReader();
128 ChangesetQuery query = new ChangesetQuery().forUser(userInfo.getId()).beingOpen(true);
129 changesets = reader.queryChangesets(
130 query,
131 getProgressMonitor().createSubTaskMonitor(1, false /* not internal */)
132 );
133 } catch(Exception e) {
134 if (canceled)
135 return;
136 lastException = e;
137 }
138 }
139
140 public boolean isCanceled() {
141 return canceled;
142 }
143
144 public Exception getLastException() {
145 return lastException;
146 }
147 }
148}
Note: See TracBrowser for help on using the repository browser.