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;
015import org.openstreetmap.josm.gui.history.HistoryBrowserModel.TagTableModel;
016
017/**
018 * This transfer handler allows to select and copy tags from a table with the {@link TagTableColumnModel}.
019 * @author Michael Zangl
020 * @since 10637
021 */
022public class TagInfoTransferHandler extends TransferHandler {
023
024    @Override
025    public void exportToClipboard(JComponent comp, Clipboard clip, int action) {
026        if (comp instanceof JTable) {
027            TableModel model = ((JTable) comp).getModel();
028            if (model instanceof TagTableModel) {
029                exportFromModel((JTable) comp, (TagTableModel) model);
030            }
031        }
032    }
033
034    private static void exportFromModel(JTable comp, TagTableModel model) {
035        int[] selected = comp.getSelectedRows();
036        TagMap tags = new TagMap();
037        for (int row : selected) {
038            String key = model.getKeyAt(row);
039            String value = model.getValue(key);
040            if (value != null) {
041                tags.put(key, value);
042            }
043        }
044        TagTransferData data = new TagTransferData(tags);
045        ClipboardUtils.copy(new TagTransferable(data));
046    }
047}