Exemplo n.º 1
0
    @Override
    public void actionPerformed(ActionEvent arg0) {
      FileFilter filter =
          new FileFilter() {
            @Override
            public boolean accept(File f) {
              return f.isDirectory() || Utils.hasExtension(f, "gpx", "gpx.gz");
            }

            @Override
            public String getDescription() {
              return tr("GPX Files (*.gpx *.gpx.gz)");
            }
          };
      AbstractFileChooser fc =
          DiskAccessAction.createAndOpenFileChooser(
              true, false, null, filter, JFileChooser.FILES_ONLY, null);
      if (fc == null) return;
      File sel = fc.getSelectedFile();

      try {
        outerPanel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

        for (int i = gpxLst.size() - 1; i >= 0; i--) {
          GpxDataWrapper wrapper = gpxLst.get(i);
          if (wrapper.file != null && sel.equals(wrapper.file)) {
            cbGpx.setSelectedIndex(i);
            if (!sel.getName().equals(wrapper.name)) {
              JOptionPane.showMessageDialog(
                  Main.parent,
                  tr("File {0} is loaded yet under the name \"{1}\"", sel.getName(), wrapper.name),
                  tr("Error"),
                  JOptionPane.ERROR_MESSAGE);
            }
            return;
          }
        }
        GpxData data = null;
        try (InputStream iStream = createInputStream(sel)) {
          GpxReader reader = new GpxReader(iStream);
          reader.parse(false);
          data = reader.getGpxData();
          data.storageFile = sel;

        } catch (SAXException x) {
          Main.error(x);
          JOptionPane.showMessageDialog(
              Main.parent,
              tr("Error while parsing {0}", sel.getName()) + ": " + x.getMessage(),
              tr("Error"),
              JOptionPane.ERROR_MESSAGE);
          return;
        } catch (IOException x) {
          Main.error(x);
          JOptionPane.showMessageDialog(
              Main.parent,
              tr("Could not read \"{0}\"", sel.getName()) + '\n' + x.getMessage(),
              tr("Error"),
              JOptionPane.ERROR_MESSAGE);
          return;
        }

        loadedGpxData.add(data);
        if (gpxLst.get(0).file == null) {
          gpxLst.remove(0);
        }
        gpxLst.add(new GpxDataWrapper(sel.getName(), data, sel));
        cbGpx.setSelectedIndex(cbGpx.getItemCount() - 1);
      } finally {
        outerPanel.setCursor(Cursor.getDefaultCursor());
      }
    }