001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.datatransfer.importers; 003 004import static org.openstreetmap.josm.gui.help.HelpUtil.ht; 005 006import java.awt.datatransfer.DataFlavor; 007import java.awt.datatransfer.UnsupportedFlavorException; 008import java.io.IOException; 009import java.util.Map; 010 011import javax.swing.TransferHandler.TransferSupport; 012 013import org.openstreetmap.josm.Main; 014import org.openstreetmap.josm.tools.TextTagParser; 015 016/** 017 * This transfer support allows us to import tags from the text that was copied to the clipboard. 018 * @author Michael Zangl 019 * @since 10604 020 */ 021public final class TextTagPaster extends AbstractTagPaster { 022 private static final String help = ht("/Action/PasteTags"); 023 024 /** 025 * Create a new {@link TextTagPaster} 026 */ 027 public TextTagPaster() { 028 super(DataFlavor.stringFlavor); 029 } 030 031 @Override 032 public boolean supports(TransferSupport support) { 033 try { 034 return super.supports(support) && containsValidTags(support); 035 } catch (UnsupportedFlavorException | IOException e) { 036 Main.warn(e); 037 return false; 038 } 039 } 040 041 private boolean containsValidTags(TransferSupport support) throws UnsupportedFlavorException, IOException { 042 return !getTagsImpl(support).isEmpty(); 043 } 044 045 @Override 046 protected Map<String, String> getTags(TransferSupport support) throws UnsupportedFlavorException, IOException { 047 Map<String, String> tags = getTagsImpl(support); 048 if (tags.isEmpty()) { 049 TextTagParser.showBadBufferMessage(help); 050 throw new IOException("Invalid tags to paste."); 051 } 052 if (!TextTagParser.validateTags(tags)) { 053 throw new IOException("Tags to paste are not valid."); 054 } 055 return tags; 056 } 057 058 private Map<String, String> getTagsImpl(TransferSupport support) throws UnsupportedFlavorException, IOException { 059 return TextTagParser.readTagsFromText((String) support.getTransferable().getTransferData(df)); 060 } 061}