package org.exist.client.xacml;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.JTree;
import javax.swing.KeyStroke;
import javax.swing.tree.TreePath;
public class NodeCopyAction extends AbstractAction implements ClipboardOwner
{
private JTree tree;
private XACMLTreeNode contextNode;
private NodeCopyAction() {}
public NodeCopyAction(JTree tree)
{
super("Copy as XML");
if(tree == null)
throw new NullPointerException("Tree cannot be null");
putValue(MNEMONIC_KEY, new Integer(KeyEvent.VK_C));
putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("ctrl C"));
this.tree = tree;
}
public String getName()
{
return (String)getValue(NAME);
}
public KeyStroke getTrigger()
{
return (KeyStroke)getValue(ACCELERATOR_KEY);
}
public void actionPerformed(ActionEvent event)
{
Object source = event.getSource();
XACMLTreeNode node;
if(source == tree)
{
TreePath path = tree.getSelectionPath();
if(path == null)
return;
node = (XACMLTreeNode)path.getLastPathComponent();
}
else
node = contextNode;
if(node == null)
return;
Transferable data = new NodeTransferable(node);
Toolkit toolkit = Toolkit.getDefaultToolkit();
Clipboard clipboard = toolkit.getSystemClipboard();
clipboard.setContents(data, this);
contextNode = null;
}
public void setContextNode(XACMLTreeNode contextNode)
{
this.contextNode = contextNode;
}
// ClipboardOwnder method
public void lostOwnership(Clipboard clipboard, Transferable data) {}
}