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.IRelationEditor; 013import org.openstreetmap.josm.gui.dialogs.relation.MemberTable; 014import org.openstreetmap.josm.gui.dialogs.relation.MemberTransferHandler; 015import org.openstreetmap.josm.gui.layer.OsmDataLayer; 016import org.openstreetmap.josm.tools.Logging; 017 018/** 019 * Paste members. 020 * @since 9496 021 */ 022public class PasteMembersAction extends AddFromSelectionAction implements FlavorListener { 023 024 /** 025 * Constructs a new {@code PasteMembersAction}. 026 * @param memberTable member table 027 * @param layer OSM data layer 028 * @param editor relation editor 029 */ 030 public PasteMembersAction(MemberTable memberTable, OsmDataLayer layer, IRelationEditor editor) { 031 super(memberTable, null, null, null, null, layer, editor); 032 updateEnabledState(); 033 } 034 035 @Override 036 public void actionPerformed(ActionEvent e) { 037 try { 038 new MemberTransferHandler().importData(getSupport()); 039 } catch (IllegalStateException ex) { 040 Logging.error(ex); 041 } 042 } 043 044 private TransferSupport getSupport() { 045 return new TransferSupport(memberTable, Optional.ofNullable(ClipboardUtils.getClipboardContent()) 046 .orElseThrow(() -> new IllegalStateException("Failed to retrieve clipboard content"))); 047 } 048 049 @Override 050 protected void updateEnabledState() { 051 try { 052 setEnabled(new MemberTransferHandler().canImport(getSupport())); 053 } catch (IllegalStateException ex) { 054 Logging.error(ex); 055 } 056 } 057 058 @Override 059 public void flavorsChanged(FlavorEvent e) { 060 updateEnabledState(); 061 } 062}