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; 007import java.util.Optional; 008 009import javax.swing.TransferHandler.TransferSupport; 010 011import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils; 012import org.openstreetmap.josm.gui.dialogs.relation.MemberTransferHandler; 013import org.openstreetmap.josm.tools.Logging; 014 015/** 016 * Paste members. 017 * @since 9496 018 */ 019public class PasteMembersAction extends AddFromSelectionAction implements FlavorListener { 020 private static final long serialVersionUID = 1L; 021 022 /** 023 * Constructs a new {@code PasteMembersAction}. 024 * @param editorAccess An interface to access the relation editor contents. 025 */ 026 public PasteMembersAction(IRelationEditorActionAccess editorAccess) { 027 super(editorAccess); 028 updateEnabledState(); 029 } 030 031 @Override 032 public void actionPerformed(ActionEvent e) { 033 try { 034 new MemberTransferHandler().importData(getSupport()); 035 } catch (IllegalStateException ex) { 036 Logging.error(ex); 037 } 038 } 039 040 private TransferSupport getSupport() { 041 return new TransferSupport(editorAccess.getMemberTable(), Optional.ofNullable(ClipboardUtils.getClipboardContent()) 042 .orElseThrow(() -> new IllegalStateException("Failed to retrieve clipboard content"))); 043 } 044 045 @Override 046 protected void updateEnabledState() { 047 try { 048 setEnabled(new MemberTransferHandler().canImport(getSupport())); 049 } catch (IllegalStateException ex) { 050 Logging.error(ex); 051 } 052 } 053 054 @Override 055 public void flavorsChanged(FlavorEvent e) { 056 updateEnabledState(); 057 } 058}