// 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.Map.Entry; import java.util.stream.Stream; import org.openstreetmap.josm.gui.datatransfer.data.TagTransferData; /** * This is a transferable that only transfers the tags. * @author Michael Zangl * @since 10637 */ public class TagTransferable implements Transferable { private final TagTransferData data; /** * Transfer the tag transfer data. * @param data The data. */ public TagTransferable(TagTransferData data) { this.data = data; } @Override public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[] {TagTransferData.FLAVOR, DataFlavor.stringFlavor}; } @Override public boolean isDataFlavorSupported(DataFlavor flavor) { return Stream.of(getTransferDataFlavors()).anyMatch(f -> f.equals(flavor)); } @Override public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { if (DataFlavor.stringFlavor.equals(flavor)) { return getStringData(); } else if (TagTransferData.FLAVOR.equals(flavor)) { return data; } else { throw new UnsupportedFlavorException(flavor); } } private String getStringData() { StringBuilder string = new StringBuilder(); for (Entry<String, String> e : data.getTags().entrySet()) { if (string.length() > 0) { string.append('\n'); } string.append(e.getKey()); string.append('='); string.append(e.getValue()); } return string.toString(); } }