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

Last change on this file was 34514, checked in by donvip, 8 months 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.