// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.dialogs.relation.actions; import java.awt.datatransfer.FlavorEvent; import java.awt.datatransfer.FlavorListener; import java.awt.event.ActionEvent; import java.util.Optional; import javax.swing.TransferHandler.TransferSupport; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils; import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor; import org.openstreetmap.josm.gui.dialogs.relation.MemberTable; import org.openstreetmap.josm.gui.dialogs.relation.MemberTransferHandler; import org.openstreetmap.josm.gui.layer.OsmDataLayer; /** * Paste members. * @since 9496 */ public class PasteMembersAction extends AddFromSelectionAction implements FlavorListener { /** * Constructs a new {@code PasteMembersAction}. * @param memberTable member table * @param layer OSM data layer * @param editor relation editor */ public PasteMembersAction(MemberTable memberTable, OsmDataLayer layer, IRelationEditor editor) { super(memberTable, null, null, null, null, layer, editor); updateEnabledState(); } @Override public void actionPerformed(ActionEvent e) { try { new MemberTransferHandler().importData(getSupport()); } catch (IllegalStateException ex) { Main.error(ex); } } private TransferSupport getSupport() { return new TransferSupport(memberTable, Optional.ofNullable(ClipboardUtils.getClipboardContent()) .orElseThrow(() -> new IllegalStateException("Failed to retrieve clipboard content"))); } @Override protected void updateEnabledState() { try { setEnabled(new MemberTransferHandler().canImport(getSupport())); } catch (IllegalStateException ex) { Main.error(ex); } } @Override public void flavorsChanged(FlavorEvent e) { updateEnabledState(); } }