private File askUserForCustomSettingsFile() { String title = tr("Choose profile file"); FileFilter filter = new FileFilter() { @Override public boolean accept(File f) { return f.isDirectory() || f.getName().toLowerCase().endsWith(".xml") && f.getName().toLowerCase().startsWith(schemaKey); } @Override public String getDescription() { return tr("JOSM custom settings files (*.xml)"); } }; JFileChooser fc = DiskAccessAction.createAndOpenFileChooser( false, false, title, filter, JFileChooser.FILES_ONLY, "customsettings.lastDirectory"); if (fc != null) { File sel = fc.getSelectedFile(); if (!sel.getName().endsWith(".xml")) sel = new File(sel.getAbsolutePath() + ".xml"); if (!sel.getName().startsWith(schemaKey)) { System.out.println( sel.getParentFile().getAbsolutePath() + "/" + schemaKey + "_" + sel.getName()); sel = new File(sel.getParentFile().getAbsolutePath() + "/" + schemaKey + "_" + sel.getName()); } return sel; } return null; }
@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()); } }