// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.turnrestrictions.dnd;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import javax.swing.JComponent;
import javax.swing.TransferHandler;
import org.openstreetmap.josm.data.osm.PrimitiveId;
import org.openstreetmap.josm.tools.CheckParameterUtil;
/**
* <p>PrimitiveIdListTransferHandler is a transfer handler for components which
* provide and/or accept a list of {@link PrimitiveId} via copy/paste or
* drag-and-drop.</p>
*
* <p>It creates a {@link Transferable} by retrieving the list of primitive IDs
* from a {@link PrimitiveIdListProvider}.</p>
*
*/
public class PrimitiveIdListTransferHandler extends TransferHandler {
private PrimitiveIdListProvider provider;
/**
* Replies true if {@code transferFlavors} includes the data flavor {@link PrimitiveIdTransferable#PRIMITIVE_ID_LIST_FLAVOR}.
* @param transferFlavors an array of transferFlavors
* @return true if {@code transferFlavors} includes the data flavor {@link PrimitiveIdTransferable#PRIMITIVE_ID_LIST_FLAVOR}.
*/
public static boolean isSupportedFlavor(DataFlavor[] transferFlavors) {
for (DataFlavor df: transferFlavors) {
if (df.equals(PrimitiveIdTransferable.PRIMITIVE_ID_LIST_FLAVOR)) return true;
}
return false;
}
/**
* Creates the transfer handler
*
* @param provider the provider of the primitive IDs. Must not be null.
* @throws IllegalArgumentException thrown if provider is null.
*/
public PrimitiveIdListTransferHandler(PrimitiveIdListProvider provider) throws IllegalArgumentException {
CheckParameterUtil.ensureParameterNotNull(provider, "provider");
this.provider = provider;
}
@Override
protected Transferable createTransferable(JComponent c) {
return new PrimitiveIdTransferable(provider.getSelectedPrimitiveIds());
}
@Override
public int getSourceActions(JComponent c) {
return COPY;
}
@Override
public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
return isSupportedFlavor(transferFlavors);
}
}