// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.datatransfer.importers; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; import java.util.Collection; import javax.swing.TransferHandler; import javax.swing.TransferHandler.TransferSupport; import org.openstreetmap.josm.data.coor.EastNorth; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.gui.layer.OsmDataLayer; /** * This is an abstract class that helps implementing the transfer support required by swing. * <p> * It implements a mechanism to import a given data flavor into the current OSM data layer. * @author Michael Zangl * @since 10604 */ public abstract class AbstractOsmDataPaster { protected final DataFlavor df; /** * Create a new {@link AbstractOsmDataPaster} * @param df The data flavor that this support supports. */ protected AbstractOsmDataPaster(DataFlavor df) { this.df = df; } /** * Checks if this supports importing the given transfer support. * @param support The support that should be supported. * @return True if we support that transfer. */ public boolean supports(TransferSupport support) { return support.isDataFlavorSupported(df) && isCopy(support); } /** * Checks if this supports any of the available flavors. * @param available The flavors that should be supported * @return True if any of them is supported. */ public boolean supports(Collection<DataFlavor> available) { return available.contains(df); } private static boolean isCopy(TransferSupport support) { return !support.isDrop() || (TransferHandler.COPY & support.getSourceDropActions()) == TransferHandler.COPY; } /** * Attempts to import the given transfer data. * @param support The transfer support to import from. * @param layer The layer to paste at. May be null. * @param pasteAt The position to paste at. * @return <code>true</code> if the import was successful. * @throws UnsupportedFlavorException if the requested data flavor is not supported * @throws IOException if an I/O error occurs */ public abstract boolean importData(TransferSupport support, OsmDataLayer layer, EastNorth pasteAt) throws UnsupportedFlavorException, IOException; /** * Imports only if this import changes the tags only. Does nothing if more than tags would be changed. * @param support The support * @param selection The primitives to apply on. * @return <code>true</code> if an import was done. * @throws UnsupportedFlavorException if the requested data flavor is not supported * @throws IOException if an I/O error occurs */ public boolean importTagsOn(TransferSupport support, Collection<? extends OsmPrimitive> selection) throws UnsupportedFlavorException, IOException { return false; } }