package org.freeplane.plugin.workspace.actions; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.Transferable; import java.awt.dnd.DnDConstants; import java.awt.event.ActionEvent; import org.freeplane.core.ui.EnabledAction; import org.freeplane.core.util.LogUtils; import org.freeplane.plugin.workspace.dnd.IDropAcceptor; import org.freeplane.plugin.workspace.dnd.WorkspaceTransferable; import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode; @EnabledAction(checkOnPopup = true) public class NodePasteAction extends AWorkspaceAction { private static final long serialVersionUID = 1L; public NodePasteAction() { super("workspace.action.node.paste"); } public void setEnabled() { try { if(Toolkit.getDefaultToolkit().getSystemClipboard().isDataFlavorAvailable(WorkspaceTransferable.WORKSPACE_FILE_LIST_FLAVOR) || Toolkit.getDefaultToolkit().getSystemClipboard().isDataFlavorAvailable(WorkspaceTransferable.WORKSPACE_URI_LIST_FLAVOR) || Toolkit.getDefaultToolkit().getSystemClipboard().isDataFlavorAvailable(WorkspaceTransferable.WORKSPACE_NODE_FLAVOR) || Toolkit.getDefaultToolkit().getSystemClipboard().isDataFlavorAvailable(WorkspaceTransferable.WORKSPACE_FREEPLANE_NODE_FLAVOR) ) { setEnabled(true); } else { setEnabled(false); } } catch (Exception ex) { // if the system clipboard has a problem LogUtils.warn(ex.getLocalizedMessage()); } } public void setEnabledFor(AWorkspaceTreeNode node) { if(!(node instanceof IDropAcceptor)) { setEnabled(false); return; } super.setEnabledFor(node); } public void actionPerformed(final ActionEvent e) { AWorkspaceTreeNode targetNode = getNodeFromActionEvent(e); if(targetNode instanceof IDropAcceptor) { Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard(); Transferable transf = clip.getContents(null); if(transf == null) { return; } ((IDropAcceptor) targetNode).processDrop(transf, DnDConstants.ACTION_COPY); } } }