001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.io; 003 004 import static org.openstreetmap.josm.tools.I18n.tr; 005 006 import java.io.File; 007 import java.io.FileInputStream; 008 import java.io.IOException; 009 import java.io.ObjectInputStream; 010 011 import org.openstreetmap.josm.Main; 012 import org.openstreetmap.josm.actions.ExtensionFileFilter; 013 import org.openstreetmap.josm.gui.layer.WMSLayer; 014 import org.openstreetmap.josm.gui.progress.ProgressMonitor; 015 import org.openstreetmap.josm.gui.util.GuiHelper; 016 import 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 */ 022 public 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 ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file)); 052 try { 053 wmsLayer.readExternal(ois); 054 } catch (ClassNotFoundException e) { 055 throw new IllegalDataException(e); 056 } finally { 057 ois.close(); 058 } 059 060 // FIXME: remove UI stuff from IO subsystem 061 GuiHelper.runInEDT(new Runnable() { 062 @Override 063 public void run() { 064 Main.main.addLayer(wmsLayer); 065 wmsLayer.onPostLoadFromFile(); 066 } 067 }); 068 } 069 070 /** 071 * Replies the imported WMS layer. 072 * @return The imported WMS layer. 073 * @see #importData(File, ProgressMonitor) 074 */ 075 public final WMSLayer getWmsLayer() { 076 return wmsLayer; 077 } 078 }