altosui: remove un-used imports
[fw/altos] / altosui / AltosEepromManage.java
index fe1db9c7dd62742ac93d86927765cf7d5f0ec6b5..e6739e770eb0f55e572d3876a174e8d11e82a13e 100644 (file)
 
 package altosui;
 
-import java.awt.*;
 import java.awt.event.*;
 import javax.swing.*;
-import javax.swing.filechooser.FileNameExtensionFilter;
-import javax.swing.table.*;
 import java.io.*;
-import java.util.*;
-import java.text.*;
-import java.util.prefs.*;
 import java.util.concurrent.*;
-
-import libaltosJNI.*;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosEepromManage implements ActionListener {
 
@@ -39,12 +32,13 @@ public class AltosEepromManage implements ActionListener {
        AltosEepromList         flights;
        AltosEepromDownload     download;
        AltosEepromDelete       delete;
-       boolean                 any_download;
-       boolean                 any_delete;
 
        public void finish() {
                if (serial_line != null) {
-                       serial_line.flush_input();
+                       try {
+                               serial_line.flush_input();
+                       } catch (InterruptedException ie) {
+                       }
                        serial_line.close();
                        serial_line = null;
                }
@@ -54,7 +48,7 @@ public class AltosEepromManage implements ActionListener {
                String  result = "";
 
                for (AltosEepromLog flight : flights) {
-                       if (flight.delete) {
+                       if (flight.selected) {
                                if (result.equals(""))
                                        result = String.format("%d", flight.flight);
                                else
@@ -64,18 +58,38 @@ public class AltosEepromManage implements ActionListener {
                return result;
        }
 
+       public boolean download_done() {
+               AltosEepromSelect       select = new AltosEepromSelect(frame, flights, "Delete");
+
+               if (select.run()) {
+                       boolean any_selected = false;
+                       for (AltosEepromLog flight : flights)
+                               any_selected = any_selected || flight.selected;
+                       if (any_selected) {
+                               delete = new AltosEepromDelete(frame,
+                                                              serial_line,
+                                                              remote,
+                                                              flights);
+                               delete.addActionListener(this);
+                               /*
+                                * Start flight log delete
+                                */
+
+                               delete.start();
+                               return true;
+                       }
+               }
+               return false;
+       }
+
        public void actionPerformed(ActionEvent e) {
                String  cmd = e.getActionCommand();
                boolean success = e.getID() != 0;
                boolean running = false;
 
                if (cmd.equals("download")) {
-                       if (success) {
-                               if (any_delete) {
-                                       delete.start();
-                                       running = true;
-                               }
-                       }
+                       if (success)
+                               running = download_done();
                } else if (cmd.equals("delete")) {
                        if (success) {
                                JOptionPane.showMessageDialog(frame,
@@ -89,75 +103,118 @@ public class AltosEepromManage implements ActionListener {
                        finish();
        }
 
+       public void got_flights(AltosEepromList in_flights) {
+               boolean running = false;;
+
+               flights = in_flights;
+               try {
+                       if (flights.size() == 0) {
+                               JOptionPane.showMessageDialog(frame,
+                                                             String.format("No flights available on %d",
+                                                                           device.getSerial()),
+                                                             serial_line.device.toShortString(),
+                                                             JOptionPane.INFORMATION_MESSAGE);
+                       } else {
+                               AltosEepromSelect       select = new AltosEepromSelect(frame, flights, "Download");
+
+                               if (select.run()) {
+                                       boolean any_selected = false;
+                                       for (AltosEepromLog flight : flights)
+                                               any_selected = any_selected || flight.selected;
+                                       if (any_selected) {
+                                               download = new AltosEepromDownload(frame,
+                                                                                  serial_line,
+                                                                                  remote,
+                                                                                  flights);
+                                               download.addActionListener(this);
+                                               /*
+                                                * Start flight log download
+                                                */
+
+                                               download.start();
+                                               running = true;
+                                       } else {
+                                               running = download_done();
+                                       }
+                               }
+                       }
+                       if (!running)
+                               finish();
+               } catch (Exception e) {
+                       got_exception(e);
+               }
+       }
+
+       public void got_exception(Exception e) {
+               if (e instanceof IOException) {
+                       IOException     ee = (IOException) e;
+                       JOptionPane.showMessageDialog(frame,
+                                                     device.toShortString(),
+                                                     ee.getLocalizedMessage(),
+                                                     JOptionPane.ERROR_MESSAGE);
+               } else if (e instanceof TimeoutException) {
+                       TimeoutException te = (TimeoutException) e;
+                       JOptionPane.showMessageDialog(frame,
+                                                     String.format("Communications failed with \"%s\"",
+                                                                   device.toShortString()),
+                                                     "Cannot open target device",
+                                                     JOptionPane.ERROR_MESSAGE);
+               }
+               finish();
+       }
+
+       class EepromGetList implements Runnable {
+
+               AltosEepromManage       manage;
+
+               public void run () {
+                       Runnable r;
+                       try {
+                               flights = new AltosEepromList(serial_line, remote);
+                               r = new Runnable() {
+                                               public void run() {
+                                                       got_flights(flights);
+                                               }
+                                       };
+                       } catch (Exception e) {
+                               final Exception f_e = e;
+                               r = new Runnable() {
+                                               public void run() {
+                                                       got_exception(f_e);
+                                               }
+                                       };
+                       }
+                       SwingUtilities.invokeLater(r);
+               }
+
+               public EepromGetList(AltosEepromManage in_manage) {
+                       manage = in_manage;
+               }
+       }
+
        public AltosEepromManage(JFrame given_frame) {
 
                boolean running = false;
 
                frame = given_frame;
-               device = AltosDeviceDialog.show(frame, AltosDevice.product_any);
+               device = AltosDeviceDialog.show(frame, Altos.product_any);
 
                remote = false;
-               any_download = false;
-               any_delete = false;
 
                if (device != null) {
                        try {
                                serial_line = new AltosSerial(device);
-                               if (!device.matchProduct(AltosDevice.product_telemetrum))
+                               if (device.matchProduct(Altos.product_basestation))
                                        remote = true;
 
                                serial_line.set_frame(frame);
 
-                               flights = new AltosEepromList(serial_line, remote);
-
-                               if (flights.size() == 0) {
-                                       JOptionPane.showMessageDialog(frame,
-                                                                     String.format("No flights available on %d",
-                                                                                   device.getSerial()),
-                                                                     serial_line.device.toShortString(),
-                                               JOptionPane.INFORMATION_MESSAGE);
-                               } else {
-                                       AltosEepromSelect       select = new AltosEepromSelect(frame, flights);
-
-                                       if (select.run()) {
-                                               for (AltosEepromLog flight : flights) {
-                                                       any_download = any_download || flight.download;
-                                                       any_delete = any_delete || flight.delete;
-                                               }
-                                               if (any_download) {
-                                                       download = new AltosEepromDownload(frame,
-                                                                                          serial_line,
-                                                                                          remote,
-                                                                                          flights);
-                                                       download.addActionListener(this);
-                                               }
-
-                                               if (any_delete) {
-                                                       delete = new AltosEepromDelete(frame,
-                                                                                      serial_line,
-                                                                                      remote,
-                                                                                      flights);
-                                                       delete.addActionListener(this);
-                                               }
-
-                                               /*
-                                                * Start flight log download
-                                                */
-
-                                               if (any_download) {
-                                                       download.start();
-                                                       running = true;
-                                               }
-                                               else if (any_delete) {
-                                                       delete.start();
-                                                       running = true;
-                                               }
-                                       }
-                               }
+                               EepromGetList   get_list = new EepromGetList(this);
+                               Thread          t = new Thread(get_list);
+                               t.start();
                        } catch (FileNotFoundException ee) {
                                JOptionPane.showMessageDialog(frame,
-                                                             String.format("Cannot open device \"%s\"",
-                                                                           device.toShortString()),
+                                                             ee.getMessage(),
                                                              "Cannot open target device",
                                                              JOptionPane.ERROR_MESSAGE);
                        } catch (AltosSerialInUseException si) {
@@ -166,21 +223,7 @@ public class AltosEepromManage implements ActionListener {
                                                                            device.toShortString()),
                                                              "Device in use",
                                                              JOptionPane.ERROR_MESSAGE);
-                       } catch (IOException ee) {
-                               JOptionPane.showMessageDialog(frame,
-                                                             device.toShortString(),
-                                                             ee.getLocalizedMessage(),
-                                                             JOptionPane.ERROR_MESSAGE);
-                       } catch (TimeoutException te) {
-                               JOptionPane.showMessageDialog(frame,
-                                                             String.format("Communications failed with \"%s\"",
-                                                                           device.toShortString()),
-                                                             "Cannot open target device",
-                                                             JOptionPane.ERROR_MESSAGE);
-                       } catch (InterruptedException ie) {
                        }
-                       if (!running)
-                               finish();
                }
        }
 }