001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.dialogs.relation.actions; 003 004import java.awt.datatransfer.FlavorEvent; 005import java.awt.datatransfer.FlavorListener; 006import java.awt.event.ActionEvent; 007 008import javax.swing.TransferHandler.TransferSupport; 009 010import org.openstreetmap.josm.Main; 011import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils; 012import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor; 013import org.openstreetmap.josm.gui.dialogs.relation.MemberTable; 014import org.openstreetmap.josm.gui.dialogs.relation.MemberTransferHandler; 015import org.openstreetmap.josm.gui.layer.OsmDataLayer; 016 017/** 018 * Paste members. 019 * @since 9496 020 */ 021public class PasteMembersAction extends AddFromSelectionAction implements FlavorListener { 022 023 /** 024 * Constructs a new {@code PasteMembersAction}. 025 * @param memberTable member table 026 * @param layer OSM data layer 027 * @param editor relation editor 028 */ 029 public PasteMembersAction(MemberTable memberTable, OsmDataLayer layer, IRelationEditor editor) { 030 super(memberTable, null, null, null, null, layer, editor); 031 updateEnabledState(); 032 } 033 034 @Override 035 public void actionPerformed(ActionEvent e) { 036 try { 037 new MemberTransferHandler().importData(getSupport()); 038 } catch (IllegalStateException ex) { 039 Main.error(ex); 040 } 041 } 042 043 private TransferSupport getSupport() { 044 return new TransferSupport(memberTable, ClipboardUtils.getClipboard().getContents(null)); 045 } 046 047 @Override 048 protected void updateEnabledState() { 049 try { 050 setEnabled(new MemberTransferHandler().canImport(getSupport())); 051 } catch (IllegalStateException ex) { 052 Main.error(ex); 053 } 054 } 055 056 @Override 057 public void flavorsChanged(FlavorEvent e) { 058 updateEnabledState(); 059 } 060}