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

Revision 4982, 5.3 KB checked in by stoecker, 3 months ago (diff)

see #7226 - patch by akks (fixed a bit) - fix shortcut deprecations

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