@Override
	protected boolean isDropSiteOk(ProgramNode node, DropTargetDragEvent e) {
		int dropAction = e.getDropAction();
		DataFlavor chosen = DropTgtAdapter.getFirstMatchingFlavor(e, acceptableFlavors);
		if (chosen.equals(GroupTransferable.localGroupFlavor)) {

			// don't allow drop if node is a fragment and the
			// action is not a move
			if (node.isFragment() && dropAction != DnDConstants.ACTION_MOVE) {
				return false;
			}
		}
		else if (chosen.equals(SelectionTransferable.localProgramSelectionFlavor)) {
			if ((node.isFragment() && dropAction != DnDConstants.ACTION_MOVE) ||
				(node.isModule() && dropAction != DnDConstants.ACTION_MOVE)) {
				return false;
			}
			try {
				Object data = e.getTransferable()
						.getTransferData(SelectionTransferable.localProgramSelectionFlavor);
				SelectionTransferData transferData = (SelectionTransferData) data;
				return program.getDomainFile().getPathname().equals(transferData.getProgramPath());
			}
			catch (UnsupportedFlavorException e1) {
				return false;
			}
			catch (IOException e1) {
				return false;
			}
		}
		else if (chosen.equals(ProgramTreeTransferable.localTreeNodeFlavor)) {
			// fromObject is null, so we know this is
			// from another tree, so don't allow the drop
			return false;
		}
		return true;
	}
Return true if the node can accept the given data flavor
and allow the dropAction; called by the base class when
a drag operation is in progress, and the drag did not
initiate on this tree.
@param node drop site
@param e event that has current state of drag and drop operation 
@see DragNDropTree#isDropOk
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/ProgramDnDTree.java