001// License: Apache 2.0. For details, see LICENSE file. 002package org.openstreetmap.josm.plugins.wkt; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import java.io.File; 007import java.io.IOException; 008import java.io.InputStream; 009import java.util.Arrays; 010 011import javax.swing.JOptionPane; 012 013import org.openstreetmap.josm.actions.ExtensionFileFilter; 014import org.openstreetmap.josm.data.osm.DataSet; 015import org.openstreetmap.josm.gui.MainApplication; 016import org.openstreetmap.josm.gui.io.importexport.FileImporter; 017import org.openstreetmap.josm.gui.layer.OsmDataLayer; 018import org.openstreetmap.josm.gui.progress.NullProgressMonitor; 019import org.openstreetmap.josm.gui.progress.ProgressMonitor; 020import org.openstreetmap.josm.gui.util.GuiHelper; 021import org.openstreetmap.josm.io.CachedFile; 022import org.openstreetmap.josm.io.Compression; 023import org.openstreetmap.josm.io.IllegalDataException; 024import org.openstreetmap.josm.tools.Logging; 025 026/** 027 * Modified version of geojson plugin. Thanks to the geojson authors: 028 * @author Ian Dees <ian.dees@gmail.com> 029 * @author matthieun <https://github.com/matthieun> 030 */ 031public class WktFileImporter extends FileImporter { 032 033 private static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter( 034 "wkt,txt", "wkt", tr("WKT file") + " (*.wkt, *.txt)"); 035 036 /** 037 * Constructs a new WKT File importer with an extension filter for .wkt and .txt 038 */ 039 public WktFileImporter() { 040 super(FILE_FILTER); 041 } 042 043 @Override 044 public void importData(final File file, final ProgressMonitor progressMonitor) { 045 progressMonitor.beginTask(tr("Loading wkt fileā¦")); 046 progressMonitor.setTicksCount(2); 047 Logging.info("Parsing WKT: {0}", file.getAbsolutePath()); 048 try (InputStream fileInputStream = Compression.getUncompressedFileInputStream(file)) { 049 DataSet data = new WktReader().doParseDataSet(fileInputStream, progressMonitor); 050 progressMonitor.worked(1); 051 MainApplication.getLayerManager().addLayer(new OsmDataLayer(data, file.getName(), file)); 052 } catch (final Exception e) { 053 Logging.error("Error while reading wkt file!"); 054 Logging.error(e); 055 GuiHelper.runInEDT(() -> JOptionPane.showMessageDialog( 056 null, tr("Error loading wkt file {0}", file.getAbsolutePath()), tr("Error"), JOptionPane.WARNING_MESSAGE)); 057 } finally { 058 progressMonitor.finishTask(); 059 } 060 } 061 062 public DataSet parseDataSet(final String source) throws IOException, IllegalDataException { 063 try (CachedFile cf = new CachedFile(source)) { 064 InputStream fileInputStream = Compression.getUncompressedFileInputStream(cf.getFile()); 065 return WktReader.parseDataSet(fileInputStream, NullProgressMonitor.INSTANCE); 066 } 067 } 068}