001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.io;
003
004import java.io.File;
005import java.io.FileOutputStream;
006import java.io.IOException;
007import java.io.ObjectOutputStream;
008
009import org.openstreetmap.josm.Main;
010import org.openstreetmap.josm.data.Preferences;
011import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryPreferenceEntry;
012import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
013import org.openstreetmap.josm.gui.layer.Layer;
014import org.openstreetmap.josm.tools.CheckParameterUtil;
015
016/**
017 * Export a WMS layer to a serialized binary file that can be imported later via {@link WMSLayerImporter}.
018 *
019 * @since 5457
020 */
021public class WMSLayerExporter extends FileExporter {
022
023    /** Which version of the file we export */
024    public static final int CURRENT_FILE_VERSION = 6;
025
026    /**
027     * Constructs a new {@code WMSLayerExporter}
028     */
029    public WMSLayerExporter() {
030        super(WMSLayerImporter.FILE_FILTER);
031    }
032
033    @Override
034    public void exportData(File file, Layer layer) throws IOException {
035        CheckParameterUtil.ensureParameterNotNull(file, "file");
036        CheckParameterUtil.ensureParameterNotNull(layer, "layer");
037
038        if (layer instanceof AbstractTileSourceLayer) {
039            try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file))) {
040                oos.writeInt(CURRENT_FILE_VERSION); // file version
041                oos.writeObject(Main.map.mapView.getCenter());
042                ImageryPreferenceEntry entry = new ImageryPreferenceEntry(((AbstractTileSourceLayer) layer).getInfo());
043                oos.writeObject(Preferences.serializeStruct(entry, ImageryPreferenceEntry.class));
044            }
045        }
046
047    }
048
049    @Override
050    public void activeLayerChange(Layer oldLayer, Layer newLayer) {
051        setEnabled(newLayer instanceof AbstractTileSourceLayer);
052    }
053}