@SuppressWarnings("unchecked")
	// the cast is safe, since we checked the flavor
	private boolean isPasteOk(ProgramNode destNode) {

		boolean isCutOperation = false;
		Clipboard systemClipboard = GClipboard.getSystemClipboard();
		if (!systemClipboard.isDataFlavorAvailable(ProgramTreeTransferable.localTreeNodeFlavor)) {
			return false;
		}

		// we will put items on the 'tempClipboard' when the cut action is executed
		Transferable temp = tempClipboard.getContents(this);
		isCutOperation = (temp != null);

		try {
			List<ProgramNode> list = (List<ProgramNode>) systemClipboard
					.getData(ProgramTreeTransferable.localTreeNodeFlavor);
			if (list == null) {
				return false;
			}

			boolean pasteEnabled = false;
			for (ProgramNode pasteNode : list) {
				boolean pasteAllowed =
					pasteManager.isPasteAllowed(destNode, pasteNode, isCutOperation);
				if (isCutOperation && !pasteAllowed) {
					// for cut operation all nodes must be able to be pasted at destNode
					return false;
				}
				else if (!isCutOperation && pasteAllowed) {
					// for copy operation at least one node must be able to be pasted at destNode
					return true;
				}
				pasteEnabled |= pasteAllowed;
			}
			return pasteEnabled;

		}
		catch (UnsupportedFlavorException e) {
			// data flavor is not supported
			throw new AssertException("Data flavor in clipboard is not supported.");
		}
		catch (IOException e) {
			// data is no longer available
			Msg.showError(this, null, "Cut from Clipboard Failed",
				"Data is no longer available for paste operation", e);
		}
		catch (Exception e) {
			String message = ExceptionUtils.getMessage(e);
			Msg.showError(this, null, "Check Clipboard Failed", message, e);
		}
		return false;
	}
Create a TreeTransferable object from the given paths, and
use it set the clipboard contents.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/ProgramTreeActionManager.java