@Override
	public void dragOver(DropTargetDragEvent dtde) {

		Transferable transferable = dtde.getTransferable();
		if (!transferable.isDataFlavorSupported(SymbolDataFlavor.DATA_FLAVOR)) {
			return;
		}

		try {
			SymbolTransferData symbolData =
				(SymbolTransferData) transferable.getTransferData(SymbolDataFlavor.DATA_FLAVOR);

			Component source = symbolData.getSource();
			if (source == table) {
				// don't allow dragging within the same component
				dtde.rejectDrag();
				return;
			}

			// Ghidra tables only support the concept of one program per table.  We can change this
			// in the future if we find a need to mix table rows that use more than one program.
			if (!hasSameProgram(symbolData)) {
				dtde.rejectDrag();
				return;
			}
		}
		catch (UnsupportedFlavorException | IOException e) {
			// shouldn't happen, since we checked the flavor above
			Msg.error(this, "Unable to perform drop operation", e);
		}

		DataFlavor[] dropFlavors = dtde.getCurrentDataFlavors();
		if (!supportsDropFlavor(dropFlavors)) {
			dtde.rejectDrag();
			return;
		}

		dtde.acceptDrag(dtde.getDropAction());
	}
Called when symbols are dropped onto the component using this adapter.
@param symbols the dropped symbols
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/SymbolTableDnDAdapter.java