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