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.IOException; 008 009 import org.openstreetmap.josm.actions.ExtensionFileFilter; 010 import org.openstreetmap.josm.gui.MapView.LayerChangeListener; 011 import org.openstreetmap.josm.gui.layer.Layer; 012 013 public abstract class FileExporter implements LayerChangeListener { 014 015 public final ExtensionFileFilter filter; 016 017 private boolean enabled; 018 019 public FileExporter(ExtensionFileFilter filter) { 020 this.filter = filter; 021 this.enabled = true; 022 } 023 024 public boolean acceptFile(File pathname, Layer layer) { 025 return filter.acceptName(pathname.getName()); 026 } 027 028 public void exportData(File file, Layer layer) throws IOException { 029 throw new IOException(tr("Could not export ''{0}''.", file.getName())); 030 } 031 032 /** 033 * Returns the enabled state of this {@code FileExporter}. When enabled, it is listed and usable in "File->Save" dialogs. 034 * @return true if this {@code FileExporter} is enabled 035 * @since 5459 036 */ 037 public final boolean isEnabled() { 038 return enabled; 039 } 040 041 /** 042 * Sets the enabled state of the {@code FileExporter}. When enabled, it is listed and usable in "File->Save" dialogs. 043 * @param enabled true to enable this {@code FileExporter}, false to disable it 044 * @since 5459 045 */ 046 public final void setEnabled(boolean enabled) { 047 this.enabled = enabled; 048 } 049 050 @Override 051 public void activeLayerChange(Layer oldLayer, Layer newLayer) { 052 // To be overriden by subclasses if their enabled state depends of the active layer nature 053 } 054 055 @Override 056 public void layerAdded(Layer newLayer) { 057 // To be overriden by subclasses if needed 058 } 059 060 @Override 061 public void layerRemoved(Layer oldLayer) { 062 // To be overriden by subclasses if needed 063 } 064 }