001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.history;
003
004import java.awt.datatransfer.Clipboard;
005
006import javax.swing.JComponent;
007import javax.swing.JTable;
008import javax.swing.TransferHandler;
009import javax.swing.table.TableModel;
010
011import org.openstreetmap.josm.data.osm.TagMap;
012import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
013import org.openstreetmap.josm.gui.datatransfer.TagTransferable;
014import org.openstreetmap.josm.gui.datatransfer.data.TagTransferData;
015
016/**
017 * This transfer handler allows to select and copy tags from a table with the {@link TagTableColumnModel}.
018 * @author Michael Zangl
019 * @since 10637
020 */
021public class TagInfoTransferHandler extends TransferHandler {
022
023    @Override
024    public void exportToClipboard(JComponent comp, Clipboard clip, int action) {
025        if (comp instanceof JTable) {
026            TableModel model = ((JTable) comp).getModel();
027            if (model instanceof TagTableModel) {
028                exportFromModel((JTable) comp, (TagTableModel) model);
029            }
030        }
031    }
032
033    private static void exportFromModel(JTable comp, TagTableModel model) {
034        int[] selected = comp.getSelectedRows();
035        TagMap tags = new TagMap();
036        for (int row : selected) {
037            String key = model.getKeyAt(row);
038            String value = model.getValue(key);
039            if (value != null) {
040                tags.put(key, value);
041            }
042        }
043        TagTransferData data = new TagTransferData(tags);
044        ClipboardUtils.copy(new TagTransferable(data));
045    }
046}