@Override
	public void moveCategory(Category category, TaskMonitor monitor) throws DuplicateNameException {
		if (mgr != category.getDataTypeManager()) {
			throw new IllegalArgumentException("Category does not belong to my DataTypeManager");
		}
		if (!(category instanceof CategoryDB)) {
			throw new IllegalArgumentException("Category is not a CategoryDB");
		}
		CategoryDB categoryDB = (CategoryDB) category;
		mgr.lock.acquire();
		try {
			checkDeleted();
			if (getCategory(categoryDB.getName()) != null) {
				throw new DuplicateNameException(
					"Category named " + categoryDB.getName() + " already exists");
			}
			CategoryPath destCategoryPath = getCategoryPath();
			CategoryPath movedCategoryOriginalPath = categoryDB.getCategoryPath();
			if (destCategoryPath.isAncestorOrSelf(movedCategoryOriginalPath)) {
				throw new IllegalArgumentException(
					"Moved category is an ancestor of destination category!");
			}
			try {
				categoryDB.setParent(this);
			}
			catch (IOException e) {
				mgr.dbError(e);
			}
			subcategoryMap.put(categoryDB.getName(), categoryDB);
			mgr.categoryMoved(movedCategoryOriginalPath, categoryDB);
		}
		finally {
			mgr.lock.release();
		}
	}
@see ghidra.program.model.data.Category#moveCategory(ghidra.program.model.data.Category, ghidra.util.task.TaskMonitor)
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/CategoryDB.java