// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.layer.gpx;
import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.LinkedList;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.gui.HelpAwareOptionPane;
import org.openstreetmap.josm.gui.layer.GpxLayer;
import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
import org.openstreetmap.josm.gui.widgets.JFileChooserManager;
import org.openstreetmap.josm.io.JpgImporter;
import org.openstreetmap.josm.tools.ImageProvider;
public class ImportImagesAction extends AbstractAction {
private final GpxLayer layer;
public ImportImagesAction(final GpxLayer layer) {
super(tr("Import images"), ImageProvider.get("dialogs/geoimage"));
this.layer = layer;
putValue("help", ht("/Action/ImportImages"));
}
private void warnCantImportIntoServerLayer(GpxLayer layer) {
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());
HelpAwareOptionPane.showOptionDialog(Main.parent, msg, tr("Import not possible"), JOptionPane.WARNING_MESSAGE, ht("/Action/ImportImages#CantImportIntoGpxLayerFromServer"));
}
private void addRecursiveFiles(List<File> files, File[] sel) {
for (File f : sel) {
if (f.isDirectory()) {
addRecursiveFiles(files, f.listFiles());
} else if (f.getName().toLowerCase().endsWith(".jpg")) {
files.add(f);
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (layer.data.fromServer) {
warnCantImportIntoServerLayer(layer);
return;
}
JpgImporter importer = new JpgImporter(layer);
JFileChooser fc = new JFileChooserManager(true, "geoimage.lastdirectory", Main.pref.get("lastDirectory")).createFileChooser(true, null, importer.filter, JFileChooser.FILES_AND_DIRECTORIES).openFileChooser();
if (fc != null) {
File[] sel = fc.getSelectedFiles();
if (sel != null && sel.length > 0) {
LinkedList<File> files = new LinkedList<>();
addRecursiveFiles(files, sel);
importer.importDataHandleExceptions(files, NullProgressMonitor.INSTANCE);
}
}
}
}