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}