source: josm/src/org/openstreetmap/josm/actions/UploadAction.java@ 103

Last change on this file since 103 was 103, checked in by imi, 18 years ago
  • fixed unicode compatibility
  • added Layer menu which mirrors the layer list context menu
  • added "convert to data layer" for all gps layers
  • removed raw gpx import and 0.2 osm-file import
  • removed dependency to JDOM
File size: 4.5 KB
Line 
1package org.openstreetmap.josm.actions;
2
3import java.awt.GridBagLayout;
4import java.awt.event.ActionEvent;
5import java.awt.event.InputEvent;
6import java.awt.event.KeyEvent;
7import java.util.Collection;
8import java.util.LinkedList;
9
10import javax.swing.JLabel;
11import javax.swing.JList;
12import javax.swing.JOptionPane;
13import javax.swing.JPanel;
14import javax.swing.JScrollPane;
15import javax.swing.KeyStroke;
16
17import org.openstreetmap.josm.Main;
18import org.openstreetmap.josm.data.osm.OsmPrimitive;
19import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
20import org.openstreetmap.josm.gui.PleaseWaitRunnable;
21import org.openstreetmap.josm.io.OsmServerWriter;
22import org.openstreetmap.josm.tools.GBC;
23import org.xml.sax.SAXException;
24
25/**
26 * Action that opens a connection to the osm server and upload all changes.
27 *
28 * An dialog is displayed asking the user to specify a rectangle to grab.
29 * The url and account settings from the preferences are used.
30 *
31 * @author imi
32 */
33public class UploadAction extends JosmAction {
34
35 public UploadAction() {
36 super("Upload to OSM", "upload", "Upload all changes to the OSM server.", "Ctrl-Shift-U",
37 KeyStroke.getKeyStroke(KeyEvent.VK_U, InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK));
38 }
39
40 public void actionPerformed(ActionEvent e) {
41 if (Main.map == null) {
42 JOptionPane.showMessageDialog(Main.parent, "Nothing to upload. Get some data first.");
43 return;
44 }
45
46 if (!Main.map.conflictDialog.conflicts.isEmpty()) {
47 JOptionPane.showMessageDialog(Main.parent, "There are unresolved conflicts. You have to resolve these first.");
48 Main.map.conflictDialog.action.button.setSelected(true);
49 Main.map.conflictDialog.action.actionPerformed(null);
50 return;
51 }
52
53 final Collection<OsmPrimitive> add = new LinkedList<OsmPrimitive>();
54 final Collection<OsmPrimitive> update = new LinkedList<OsmPrimitive>();
55 final Collection<OsmPrimitive> delete = new LinkedList<OsmPrimitive>();
56 for (OsmPrimitive osm : Main.ds.allPrimitives()) {
57 if (osm.id == 0 && !osm.deleted)
58 add.add(osm);
59 else if (osm.modified && !osm.deleted)
60 update.add(osm);
61 else if (osm.deleted && osm.id != 0)
62 delete.add(osm);
63 }
64
65 if (!displayUploadScreen(add, update, delete))
66 return;
67
68 final OsmServerWriter server = new OsmServerWriter();
69 final Collection<OsmPrimitive> all = new LinkedList<OsmPrimitive>();
70 all.addAll(add);
71 all.addAll(update);
72 all.addAll(delete);
73
74 PleaseWaitRunnable uploadTask = new PleaseWaitRunnable("Uploading data"){
75 @Override protected void realRun() throws SAXException {
76 server.setProgressInformation(currentAction, progress);
77 server.uploadOsm(all);
78 }
79 @Override protected void finish() {
80 Main.main.editLayer().cleanData(server.processed, !add.isEmpty());
81 }
82 @Override protected void cancel() {
83 server.cancel();
84 }
85 };
86 Main.worker.execute(uploadTask);
87 uploadTask.pleaseWaitDlg.setVisible(true);
88 }
89
90 /**
91 * Displays a screen where the actions that would be taken are displayed and
92 * give the user the possibility to cancel the upload.
93 * @return <code>true</code>, if the upload should continue. <code>false</code>
94 * if the user requested cancel.
95 */
96 private boolean displayUploadScreen(Collection<OsmPrimitive> add, Collection<OsmPrimitive> update, Collection<OsmPrimitive> delete) {
97 if (add.isEmpty() && update.isEmpty() && delete.isEmpty()) {
98 JOptionPane.showMessageDialog(Main.parent, "No changes to upload.");
99 return false;
100 }
101
102 JPanel p = new JPanel(new GridBagLayout());
103
104 OsmPrimitivRenderer renderer = new OsmPrimitivRenderer();
105
106 if (!add.isEmpty()) {
107 p.add(new JLabel("Objects to add:"), GBC.eol());
108 JList l = new JList(add.toArray());
109 l.setCellRenderer(renderer);
110 l.setVisibleRowCount(l.getModel().getSize() < 6 ? l.getModel().getSize() : 10);
111 p.add(new JScrollPane(l), GBC.eol().fill());
112 }
113
114 if (!update.isEmpty()) {
115 p.add(new JLabel("Objects to modify:"), GBC.eol());
116 JList l = new JList(update.toArray());
117 l.setCellRenderer(renderer);
118 l.setVisibleRowCount(l.getModel().getSize() < 6 ? l.getModel().getSize() : 10);
119 p.add(new JScrollPane(l), GBC.eol().fill());
120 }
121
122 if (!delete.isEmpty()) {
123 p.add(new JLabel("Objects to delete:"), GBC.eol());
124 JList l = new JList(delete.toArray());
125 l.setCellRenderer(renderer);
126 l.setVisibleRowCount(l.getModel().getSize() < 6 ? l.getModel().getSize() : 10);
127 p.add(new JScrollPane(l), GBC.eol().fill());
128 }
129
130 return JOptionPane.showConfirmDialog(Main.parent, p, "Upload this changes?",
131 JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION;
132 }
133}
Note: See TracBrowser for help on using the repository browser.