001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.io;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.io.File;
007import java.io.IOException;
008import java.io.Writer;
009import java.nio.charset.StandardCharsets;
010import java.nio.file.Files;
011
012import org.openstreetmap.josm.actions.ExtensionFileFilter;
013import org.openstreetmap.josm.gui.layer.Layer;
014import org.openstreetmap.josm.gui.layer.OsmDataLayer;
015
016public class GeoJSONExporter extends FileExporter {
017
018    public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
019            "geojson,json", "geojson", tr("GeoJSON Files") + " (*.geojson *.json)");
020
021    /**
022     * Constructs a new {@code GeoJSONExporter}.
023     */
024    public GeoJSONExporter() {
025        super(FILE_FILTER);
026    }
027
028    @Override
029    public void exportData(File file, Layer layer) throws IOException {
030        if (layer instanceof OsmDataLayer) {
031            String json = new GeoJSONWriter((OsmDataLayer) layer).write();
032            try (Writer out = Files.newBufferedWriter(file.toPath(), StandardCharsets.UTF_8)) {
033                out.write(json);
034            }
035        } else {
036            throw new IllegalArgumentException(tr("Layer ''{0}'' not supported", layer.getClass().toString()));
037        }
038    }
039}