001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.datatransfer;
003
004import java.awt.datatransfer.DataFlavor;
005import java.awt.datatransfer.Transferable;
006import java.awt.datatransfer.UnsupportedFlavorException;
007import java.io.IOException;
008import java.util.List;
009import java.util.stream.Collectors;
010import java.util.stream.Stream;
011
012import org.openstreetmap.josm.data.osm.Changeset;
013
014/**
015 * This class allows to transfer a list of {@link Changeset}s
016 */
017public class ChangesetTransferable implements Transferable {
018    private final List<Changeset> changesets;
019
020    /**
021     * Constructs a new transferable
022     * @param changesets the list of changesets
023     */
024    public ChangesetTransferable(List<Changeset> changesets) {
025        this.changesets = changesets;
026    }
027
028    @Override
029    public DataFlavor[] getTransferDataFlavors() {
030        return new DataFlavor[]{DataFlavor.stringFlavor};
031    }
032
033    @Override
034    public boolean isDataFlavorSupported(DataFlavor flavor) {
035        return Stream.of(getTransferDataFlavors()).anyMatch(f -> f.equals(flavor));
036    }
037
038    @Override
039    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
040        if (DataFlavor.stringFlavor.equals(flavor)) {
041            return changesets.stream().map(Changeset::toString).collect(Collectors.joining("\n"));
042        } else {
043            throw new UnsupportedFlavorException(flavor);
044        }
045    }
046}