// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.datatransfer;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.openstreetmap.josm.gui.layer.Layer;
import org.openstreetmap.josm.gui.layer.LayerManager;
/**
* This class allows to transfer multiple layers in the current JOSM instance.
* @author Michael Zangl
* @since 10605
*/
public class LayerTransferable implements Transferable {
/**
* A wrapper for a collection of {@link Layer}.
*/
public static class Data {
private final LayerManager manager;
private final List<Layer> layers;
/**
* Create a new data object
* @param manager The layer manager the layers are from.
* @param layers The layers.
*/
public Data(LayerManager manager, List<Layer> layers) {
super();
this.manager = manager;
this.layers = new ArrayList<>(layers);
}
/**
* Gets the layer manager the layers belong to.
* @return The layer manager. It may be <code>null</code>
*/
public LayerManager getManager() {
return manager;
}
/**
* Gets the list of layers that were copied.
* @return The layers.
*/
public List<Layer> getLayers() {
return Collections.unmodifiableList(layers);
}
@Override
public String toString() {
return "Data [layers=" + layers + ']';
}
}
/**
* Data flavor for {@link Layer}s which are wrapped in {@link Data}.
*/
public static final DataFlavor LAYER_DATA = ClipboardUtils.newDataFlavor(Data.class, "Layers");
private final Data data;
/**
* Create a new data object
* @param manager The layer manager the layers are from.
* @param layers The layers.
*/
public LayerTransferable(LayerManager manager, List<Layer> layers) {
this.data = new Data(manager, layers);
}
@Override
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] {LAYER_DATA};
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
return LAYER_DATA.equals(flavor);
}
@Override
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
if (!isDataFlavorSupported(flavor)) {
throw new UnsupportedFlavorException(flavor);
} else {
return data;
}
}
}