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.BufferedWriter;
007import java.io.File;
008import java.io.FileOutputStream;
009import java.io.IOException;
010import java.io.OutputStreamWriter;
011import java.io.Writer;
012
013import org.openstreetmap.josm.actions.ExtensionFileFilter;
014import org.openstreetmap.josm.gui.layer.Layer;
015import org.openstreetmap.josm.gui.layer.OsmDataLayer;
016import org.openstreetmap.josm.tools.Utils;
017
018public class GeoJSONExporter extends FileExporter {
019
020    public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
021            "json,geojson", "json", tr("GeoJSON Files") + " (*.json *.geojson)");
022
023    public GeoJSONExporter() {
024        super(FILE_FILTER);
025    }
026
027    @Override
028    public void exportData(File file, Layer layer) throws IOException {
029        if (layer instanceof OsmDataLayer) {
030            String json = new GeoJSONWriter((OsmDataLayer) layer).write();
031            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
032            try {
033                out.write(json);
034            } finally {
035                Utils.close(out);
036            }
037        } else {
038            throw new IllegalArgumentException(tr("Layer ''{0}'' not supported", layer.getClass().toString()));
039        }
040    }
041}