source: osm/applications/editors/josm/plugins/globalsat/src/org/openstreetmap/josm/plugins/globalsat/GlobalsatPlugin.java

Last change on this file was 34514, checked in by donvip, 6 years ago

update to JOSM 14153

  • 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.plugins.globalsat;
3/// @author Raphael Mack <ramack@raphael-mack.de>
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.GraphicsEnvironment;
7import java.awt.event.ActionEvent;
8import java.awt.event.KeyEvent;
9import java.io.IOException;
10
11import javax.swing.JDialog;
12import javax.swing.JOptionPane;
13
14import org.openstreetmap.josm.actions.JosmAction;
15import org.openstreetmap.josm.data.gpx.GpxData;
16import org.openstreetmap.josm.gui.MainApplication;
17import org.openstreetmap.josm.gui.PleaseWaitRunnable;
18import org.openstreetmap.josm.gui.layer.GpxLayer;
19import org.openstreetmap.josm.gui.progress.ProgressMonitor;
20import org.openstreetmap.josm.plugins.Plugin;
21import org.openstreetmap.josm.plugins.PluginInformation;
22import org.openstreetmap.josm.spi.preferences.Config;
23import org.openstreetmap.josm.tools.Logging;
24import org.openstreetmap.josm.tools.Shortcut;
25import org.xml.sax.SAXException;
26
27import gnu.io.CommPortIdentifier;
28
29public class GlobalsatPlugin extends Plugin {
30 private static GlobalsatDg100 device = null;
31 public static GlobalsatDg100 dg100() {
32 return device;
33 }
34
35 public static void setPortIdent(CommPortIdentifier port) {
36 if (device != null) {
37 device.disconnect();
38 }
39 device = new GlobalsatDg100(port);
40 }
41
42 private static class ImportTask extends PleaseWaitRunnable {
43 public GpxData data;
44 public Exception eee;
45 private boolean deleteAfter;
46
47 ImportTask(boolean delete) {
48 super(tr("Importing data from device."));
49 deleteAfter = delete;
50 }
51
52 @Override public void realRun() throws IOException, SAXException {
53 progressMonitor.subTask(tr("Importing data from DG100..."));
54 try {
55 data = GlobalsatPlugin.dg100().readData(progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, true));
56 } catch (Exception e) {
57 eee = e;
58 }
59 }
60
61 @Override protected void finish() {
62 if (deleteAfter && GlobalsatPlugin.dg100().isCanceled() == false) {
63 Config.getPref().putBoolean("globalsat.deleteAfterDownload", true);
64 try {
65 GlobalsatPlugin.dg100().deleteData();
66 } catch (Exception ex) {
67 JOptionPane.showMessageDialog(MainApplication.getMainFrame(), tr("Error deleting data.") + " " + ex.toString());
68 }
69 } else {
70 Config.getPref().putBoolean("globalsat.deleteAfterDownload", false);
71 }
72 if (data != null && data.hasTrackPoints()) {
73 MainApplication.getLayerManager().addLayer(new GpxLayer(data, tr("imported data from {0}", "DG 100")));
74 MainApplication.getMap().repaint();
75 } else {
76 JOptionPane.showMessageDialog(MainApplication.getMainFrame(), tr("No data found on device."));
77 }
78 if (eee != null) {
79 eee.printStackTrace();
80 System.out.println(eee.getMessage());
81 JOptionPane.showMessageDialog(MainApplication.getMainFrame(), tr("Connection failed.") + " (" + eee.toString() + ")");
82 }
83 GlobalsatPlugin.dg100().disconnect();
84 }
85
86 @Override protected void cancel() {
87 GlobalsatPlugin.dg100().cancel();
88 GlobalsatPlugin.dg100().disconnect();
89 }
90 }
91
92 GlobalsatImportAction importAction;
93 public GlobalsatPlugin(PluginInformation info) {
94 super(info);
95 boolean error = false;
96 try {
97 CommPortIdentifier.getPortIdentifiers();
98 } catch (UnsatisfiedLinkError e) {
99 error = true;
100 // CHECKSTYLE.OFF: LineLength
101 String msg = tr("Cannot load library rxtxSerial. If you need support to install it try Globalsat homepage at http://www.raphael-mack.de/josm-globalsat-gpx-import-plugin/");
102 // CHECKSTYLE.ON: LineLength
103 Logging.error(msg);
104 if (!GraphicsEnvironment.isHeadless()) {
105 JOptionPane.showMessageDialog(MainApplication.getMainFrame(), "<html>" + msg + "</html>");
106 }
107 }
108 if (!error) {
109 importAction = new GlobalsatImportAction();
110 MainApplication.getMenu().toolsMenu.add(importAction);
111 }
112 }
113
114 static class GlobalsatImportAction extends JosmAction {
115 GlobalsatImportAction() {
116 super(tr("Globalsat Import"), "globalsatImport",
117 tr("Import Data from Globalsat Datalogger DG100 into GPX layer."),
118 Shortcut.registerShortcut("menu:globalsatimport", tr("Menu: {0}", tr("Globalsat Import")),
119 KeyEvent.VK_G, Shortcut.ALT_CTRL), false);
120 }
121
122 @Override
123 public void actionPerformed(ActionEvent e) {
124 GlobalsatImportDialog dialog = new GlobalsatImportDialog();
125 JOptionPane pane = new JOptionPane(dialog, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
126 JDialog dlg = pane.createDialog(MainApplication.getMainFrame(), tr("Import"));
127 dlg.setVisible(true);
128 if (((Integer) pane.getValue()) == JOptionPane.OK_OPTION) {
129 setPortIdent(dialog.getPort());
130 ImportTask task = new ImportTask(dialog.deleteFilesAfterDownload());
131 MainApplication.worker.execute(task);
132 }
133 dlg.dispose();
134 }
135 }
136}
Note: See TracBrowser for help on using the repository browser.