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}