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

Last change on this file since 10717 was 10601, checked in by Don-vip, 8 years ago

see #11390 - sonar - squid:S1604 - Java 8: Anonymous inner classes containing only one method should become lambdas

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