// License: GPL. For details, see LICENSE file. package org.insignificant.josm.plugins.imagewaypoint; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Locale; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.actions.ExtensionFileFilter; import org.openstreetmap.josm.gui.MapFrame; import org.openstreetmap.josm.gui.layer.Layer; import org.openstreetmap.josm.gui.progress.ProgressMonitor; import org.openstreetmap.josm.gui.util.GuiHelper; import org.openstreetmap.josm.io.FileImporter; import org.openstreetmap.josm.io.IllegalDataException; import org.openstreetmap.josm.plugins.PluginInformation; public final class ImageWayPointPlugin extends org.openstreetmap.josm.plugins.Plugin { private final class ImageWaypointImporter extends FileImporter { ImageWaypointImporter() { super(new ExtensionFileFilter("jpg,jpeg,png,gif", "jpg", "Image files [by ImageWayPoint plugin] (*.jpg, *.jpeg, *.png, *.gif)")); } @Override public boolean isBatchImporter() { return true; } @Override public double getPriority() { return -3; } @Override public void importData(List<File> files, ProgressMonitor progressMonitor) throws IOException, IllegalDataException { if (null != files && !files.isEmpty()) { // recursively find all files final List<File> allFiles = new ArrayList<>(); addFiles(allFiles, files.toArray(new File[0])); // add files to ImageEntries ImageEntries.getInstance().add(allFiles.toArray(new File[allFiles.size()])); // check to see whether there's already an ImageWayPointLayer boolean foundImageWayPointLayer = false; final Collection<Layer> layerCollection = Main.getLayerManager().getLayers(); final Iterator<Layer> layerIterator = layerCollection.iterator(); while (layerIterator.hasNext() && !foundImageWayPointLayer) { if (layerIterator.next() instanceof ImageWayPointLayer) { foundImageWayPointLayer = true; } } if (!foundImageWayPointLayer) { GuiHelper.runInEDT(ImageWayPointLayer::new); } } } } /** * no-arg constructor is required by JOSM */ public ImageWayPointPlugin(PluginInformation info) { super(info); ExtensionFileFilter.addImporter(new ImageWaypointImporter()); } @Override public void mapFrameInitialized(final MapFrame oldFrame, final MapFrame newFrame) { if (newFrame != null) { newFrame.addToggleDialog(new ImageWayPointDialog()); } else { ImageEntries.getInstance().setCurrentImageEntry(null); } } private void addFiles(List<File> allFiles, File[] selectedFiles) { for (int index = 0; index < selectedFiles.length; index++) { final File selectedFile = selectedFiles[index]; if (selectedFile.isDirectory()) this.addFiles(allFiles, selectedFile.listFiles()); else if (selectedFile.getName().toLowerCase(Locale.ENGLISH).endsWith(".jpg")) allFiles.add(selectedFile); } } }