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