public ItemCheckoutStatus checkout(CheckoutType checkoutType, String user, String projectPath)
			throws IOException {
		synchronized (fileSystem) {
			validate();
			repository.validateWritePrivilege(user); // don't allow checkout if read-only 
			ItemCheckoutStatus coStatus = databaseItem.checkout(checkoutType, user, projectPath);
			if (coStatus != null && checkoutType != CheckoutType.NORMAL && repositoryItem != null &&
				repositoryItem.getFileID() == null) {
				repositoryItem = null; // force refresh since fileID should get reset
			}
			return coStatus;
		}
	}
Request a checkout of the underlying item.
@param checkoutType checkout type requested
@param user user who initiated the request
@param projectPath user's project path which will own checkout
@return checkout data if successful.  Null is returned if exclusive checkout
failed due to existing checkout(s).
@throws UserAccessException if user is denied write access
@throws IOException if an IO error occurs
Ghidra/Features/GhidraServer/src/main/java/ghidra/server/store/RepositoryFile.java