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}