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

Last change on this file since 4043 was 3083, checked in by bastiK, 14 years ago

added svn:eol-style=native to source files

  • Property svn:eol-style set to native
File size: 5.4 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(
38 "system:closechangeset",
39 tr("File: {0}", tr("Closes open changesets")),
40 KeyEvent.VK_Q,
41 Shortcut.GROUP_HOTKEY + Shortcut.GROUPS_ALT2
42 ),
43 true
44 );
45 putValue("help", ht("/Action/CloseChangeset"));
46
47 }
48 public void actionPerformed(ActionEvent e) {
49 Main.worker.submit(new DownloadOpenChangesetsTask());
50 }
51
52 protected void onPostDownloadOpenChangesets() {
53 List<Changeset> openChangesets = ChangesetCache.getInstance().getOpenChangesets();
54 if (openChangesets.isEmpty()) {
55 JOptionPane.showMessageDialog(
56 Main.parent,
57 tr("There are no open changesets"),
58 tr("No open changesets"),
59 JOptionPane.INFORMATION_MESSAGE
60 );
61 return;
62 }
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);
73 }
74
75 private class DownloadOpenChangesetsTask extends PleaseWaitRunnable {
76
77 private boolean cancelled;
78 private OsmServerChangesetReader reader;
79 private List<Changeset> changesets;
80 private Exception lastException;
81 private UserInfo userInfo;
82
83 /**
84 *
85 * @param model provides the user id of the current user and accepts the changesets
86 * after download
87 */
88 public DownloadOpenChangesetsTask() {
89 super(tr("Downloading open changesets ...", false /* don't ignore exceptions */));
90 }
91
92 @Override
93 protected void cancel() {
94 this.cancelled = true;
95 reader.cancel();
96 }
97
98 @Override
99 protected void finish() {
100 SwingUtilities.invokeLater(
101 new Runnable() {
102 public void run() {
103 if (lastException != null) {
104 ExceptionDialogUtil.explainException(lastException);
105 }
106 ChangesetCache.getInstance().update(changesets);
107 if (!cancelled && lastException == null) {
108 onPostDownloadOpenChangesets();
109 }
110 }
111 }
112 );
113 }
114
115 /**
116 * Fetch the user info from the server. This is necessary if we don't know
117 * the users id yet
118 *
119 * @return the user info
120 * @throws OsmTransferException thrown in case of any communication exception
121 */
122 protected UserInfo fetchUserInfo() throws OsmTransferException {
123 OsmServerUserInfoReader reader = new OsmServerUserInfoReader();
124 return reader.fetchUserInfo(getProgressMonitor().createSubTaskMonitor(1, false));
125 }
126
127 @Override
128 protected void realRun() throws SAXException, IOException, OsmTransferException {
129 try {
130 userInfo = fetchUserInfo();
131 if (cancelled)
132 return;
133 reader = new OsmServerChangesetReader();
134 ChangesetQuery query = new ChangesetQuery().forUser(userInfo.getId()).beingOpen(true);
135 changesets = reader.queryChangesets(
136 query,
137 getProgressMonitor().createSubTaskMonitor(1, false /* not internal */)
138 );
139 } catch(Exception e) {
140 if (cancelled)
141 return;
142 lastException = e;
143 }
144 }
145
146 public boolean isCancelled() {
147 return cancelled;
148 }
149
150 public Exception getLastException() {
151 return lastException;
152 }
153 }
154}
Note: See TracBrowser for help on using the repository browser.