001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.datatransfer.data;
003
004import java.awt.datatransfer.DataFlavor;
005import java.util.Arrays;
006import java.util.Collections;
007import java.util.List;
008
009import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
010import org.openstreetmap.josm.gui.datatransfer.LayerTransferable;
011import org.openstreetmap.josm.gui.layer.LayerManager;
012import org.openstreetmap.josm.gui.layer.OsmDataLayer;
013
014/**
015 * A special form of {@link LayerTransferData} that ensures you that the layer is an OSM data layer
016 * @author Michael Zangl
017 * @since 10605
018 */
019public class OsmLayerTransferData extends LayerTransferData {
020
021    /**
022     * This is a data flavor specific for OSM data layers.
023     * @see LayerTransferData#FLAVOR
024     * @see #FLAVORS
025     */
026    public static final DataFlavor OSM_FLAVOR = ClipboardUtils.newDataFlavor(OsmLayerTransferData.class, "Layer");
027
028    /**
029     * The flavors that are supported by this data type.
030     */
031    public static final List<DataFlavor> FLAVORS = Collections
032            .unmodifiableList(Arrays.asList(OSM_FLAVOR, LayerTransferData.FLAVOR, LayerTransferable.LAYER_DATA));
033
034    private final OsmDataLayer osmLayer;
035
036    /**
037     * Create a new {@link OsmLayerTransferData} object
038     * @param layerManager The layer manager
039     * @param layer The layer that is moved.
040     */
041    public OsmLayerTransferData(LayerManager layerManager, OsmDataLayer layer) {
042        super(layerManager, layer);
043        osmLayer = layer;
044    }
045
046    /**
047     * Gets the OSM data layer.
048     * @return The layer
049     */
050    public OsmDataLayer getOsmLayer() {
051        return osmLayer;
052    }
053
054    @Override
055    public List<DataFlavor> getSupportedFlavors() {
056        return FLAVORS;
057    }
058
059    @Override
060    public String toString() {
061        return "OsmLayerTransferData [osmLayer=" + osmLayer + ']';
062    }
063}