private static boolean copyToInstallationFolder(ExtensionDetails extension, File sourceFolder,
			TaskMonitor monitor) throws IOException, CancelledException {

		log.trace("Copying extension from " + sourceFolder);

		ApplicationLayout layout = Application.getApplicationLayout();
		ResourceFile installDir = layout.getExtensionInstallationDirs().get(0);
		File installDirRoot = installDir.getFile(false);
		File destinationFolder = new File(installDirRoot, sourceFolder.getName());
		if (hasExistingExtension(destinationFolder, monitor)) {
			return false;
		}

		log.trace("Copying extension to " + destinationFolder);
		FileUtilities.copyDir(sourceFolder, destinationFolder, monitor);
		extension.setInstallDir(destinationFolder);
		return true;
	}
Copies the given folder to the extension install location. Any existing folder at that
location will be deleted.
<p>
Note: Any existing folder with the same name will be overwritten.

@param extension the extension
@param sourceFolder the extension folder
@param monitor the task monitor
@return true if successful
@throws IOException if the delete or copy fails
@throws CancelledException if the user cancels the copy
Ghidra/Framework/Generic/src/main/java/ghidra/util/extensions/ExtensionUtils.java