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 }