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.FileInputStream; 008import java.io.IOException; 009import java.io.ObjectInputStream; 010 011import org.openstreetmap.josm.Main; 012import org.openstreetmap.josm.actions.ExtensionFileFilter; 013import org.openstreetmap.josm.gui.layer.WMSLayer; 014import org.openstreetmap.josm.gui.progress.ProgressMonitor; 015import org.openstreetmap.josm.gui.util.GuiHelper; 016import org.openstreetmap.josm.tools.CheckParameterUtil; 017 018/** 019 * Import a WMS layer from a serialized binary file previously exported via {@link WMSLayerExporter}. 020 * @since 5457 021 */ 022public class WMSLayerImporter extends FileImporter { 023 024 /** 025 * The file filter used in "open" and "save" dialogs for WMS layers. 026 */ 027 public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter( 028 "wms", "wms", tr("WMS Files (*.wms)")); 029 030 private final WMSLayer wmsLayer; 031 032 /** 033 * Constructs a new {@code WMSLayerImporter}. 034 */ 035 public WMSLayerImporter() { 036 this(new WMSLayer()); 037 } 038 039 /** 040 * Constructs a new {@code WMSLayerImporter} that will import data to the specified WMS layer. 041 * @param wmsLayer The WMS layer. 042 */ 043 public WMSLayerImporter(WMSLayer wmsLayer) { 044 super(FILE_FILTER); 045 this.wmsLayer = wmsLayer; 046 } 047 048 @Override 049 public void importData(File file, ProgressMonitor progressMonitor) throws IOException, IllegalDataException { 050 CheckParameterUtil.ensureParameterNotNull(file, "file"); 051 try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) { 052 wmsLayer.readExternal(ois); 053 } catch (ClassNotFoundException e) { 054 throw new IllegalDataException(e); 055 } 056 057 // FIXME: remove UI stuff from IO subsystem 058 GuiHelper.runInEDT(new Runnable() { 059 @Override 060 public void run() { 061 Main.main.addLayer(wmsLayer); 062 wmsLayer.onPostLoadFromFile(); 063 } 064 }); 065 } 066 067 /** 068 * Replies the imported WMS layer. 069 * @return The imported WMS layer. 070 * @see #importData(File, ProgressMonitor) 071 */ 072 public final WMSLayer getWmsLayer() { 073 return wmsLayer; 074 } 075}