public boolean isValidDataTypeDestination(GTreeNode destinationNode, DataFlavor[] flavors,
			int dropAction) {
		// can't drop/paste on the root node
		if (destinationNode == null || destinationNode.getParent() == null) {
			return false;
		}

		// can only drop/paste nodes from other dataType trees
		if (!containsFlavor(flavors, localDataTypeTreeFlavor)) {
			return false;
		}

		// destination node must belong to either a modifiable archive or a program archive.
		// i.e. it must be writable.
		ArchiveNode archiveNode = ((DataTypeTreeNode) destinationNode).getArchiveNode();
		if (archiveNode == null || !archiveNode.isModifiable()) {
			return false;
		}

		return true;
	}
Verifies the given destination node can accept the given drop/copy/paste action and content
flavors.
@param destinationNode the node accepting the action
@param flavors the supported flavors of the action
@param dropAction the actual action see {@link DnDConstants}
@return true if valid
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DataTypeDragNDropHandler.java