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.Map.Entry; 009import java.util.stream.Stream; 010 011import org.openstreetmap.josm.gui.datatransfer.data.TagTransferData; 012 013/** 014 * This is a transferable that only transfers the tags. 015 * @author Michael Zangl 016 * @since 10637 017 */ 018public class TagTransferable implements Transferable { 019 private final TagTransferData data; 020 021 /** 022 * Transfer the tag transfer data. 023 * @param data The data. 024 */ 025 public TagTransferable(TagTransferData data) { 026 this.data = data; 027 } 028 029 @Override 030 public DataFlavor[] getTransferDataFlavors() { 031 return new DataFlavor[] {TagTransferData.FLAVOR, DataFlavor.stringFlavor}; 032 } 033 034 @Override 035 public boolean isDataFlavorSupported(DataFlavor flavor) { 036 return Stream.of(getTransferDataFlavors()).anyMatch(f -> f.equals(flavor)); 037 } 038 039 @Override 040 public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { 041 if (DataFlavor.stringFlavor.equals(flavor)) { 042 return getStringData(); 043 } else if (TagTransferData.FLAVOR.equals(flavor)) { 044 return data; 045 } else { 046 throw new UnsupportedFlavorException(flavor); 047 } 048 } 049 050 private String getStringData() { 051 StringBuilder string = new StringBuilder(); 052 for (Entry<String, String> e : data.getTags().entrySet()) { 053 if (string.length() > 0) { 054 string.append('\n'); 055 } 056 string.append(e.getKey()); 057 string.append('='); 058 string.append(e.getValue()); 059 } 060 return string.toString(); 061 } 062}