001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.layer.gpx; 003 004import static org.openstreetmap.josm.gui.help.HelpUtil.ht; 005import static org.openstreetmap.josm.tools.I18n.tr; 006 007import java.awt.event.ActionEvent; 008import java.io.File; 009import java.util.LinkedList; 010import java.util.List; 011 012import javax.swing.AbstractAction; 013import javax.swing.JFileChooser; 014import javax.swing.JOptionPane; 015 016import org.openstreetmap.josm.Main; 017import org.openstreetmap.josm.gui.HelpAwareOptionPane; 018import org.openstreetmap.josm.gui.layer.GpxLayer; 019import org.openstreetmap.josm.gui.progress.NullProgressMonitor; 020import org.openstreetmap.josm.gui.widgets.AbstractFileChooser; 021import org.openstreetmap.josm.gui.widgets.FileChooserManager; 022import org.openstreetmap.josm.io.JpgImporter; 023import org.openstreetmap.josm.tools.ImageProvider; 024 025public class ImportImagesAction extends AbstractAction { 026 private final GpxLayer layer; 027 028 public ImportImagesAction(final GpxLayer layer) { 029 super(tr("Import images"), ImageProvider.get("dialogs/geoimage")); 030 this.layer = layer; 031 putValue("help", ht("/Action/ImportImages")); 032 } 033 034 private void warnCantImportIntoServerLayer(GpxLayer layer) { 035 String msg = tr("<html>The data in the GPX layer ''{0}'' has been downloaded from the server.<br>" + "Because its way points do not include a timestamp we cannot correlate them with images.</html>", layer.getName()); 036 HelpAwareOptionPane.showOptionDialog(Main.parent, msg, tr("Import not possible"), JOptionPane.WARNING_MESSAGE, ht("/Action/ImportImages#CantImportIntoGpxLayerFromServer")); 037 } 038 039 private void addRecursiveFiles(List<File> files, File[] sel) { 040 for (File f : sel) { 041 if (f.isDirectory()) { 042 addRecursiveFiles(files, f.listFiles()); 043 } else if (f.getName().toLowerCase().endsWith(".jpg")) { 044 files.add(f); 045 } 046 } 047 } 048 049 @Override 050 public void actionPerformed(ActionEvent e) { 051 if (layer.data.fromServer) { 052 warnCantImportIntoServerLayer(layer); 053 return; 054 } 055 JpgImporter importer = new JpgImporter(layer); 056 AbstractFileChooser fc = new FileChooserManager(true, "geoimage.lastdirectory", Main.pref.get("lastDirectory")). 057 createFileChooser(true, null, importer.filter, JFileChooser.FILES_AND_DIRECTORIES).openFileChooser(); 058 if (fc != null) { 059 File[] sel = fc.getSelectedFiles(); 060 if (sel != null && sel.length > 0) { 061 LinkedList<File> files = new LinkedList<>(); 062 addRecursiveFiles(files, sel); 063 importer.importDataHandleExceptions(files, NullProgressMonitor.INSTANCE); 064 } 065 } 066 } 067 068}