@Override
	public synchronized void moveFolder(String parentPath, String folderName, String newParentPath)
			throws InvalidNameException, IOException {

		checkDisposed();

		if (readOnly) {
			throw new ReadOnlyException();
		}

		testValidName(newParentPath, true);

		String folderPath = getPath(parentPath, folderName);
		Folder folder;
		boolean success = false;
		indexJournal.open();
		try {
			folder = getFolder(folderPath, GetFolderOption.READ_ONLY);

			// TODO Must scan for items in use !!!

			String newFolderPath = getPath(newParentPath, folderName);
			Folder newParentFolder = getFolder(newParentPath, GetFolderOption.CREATE_ALL_NOTIFY);
			if (newParentFolder.folders.get(folderName) != null) {
				throw new DuplicateFileException(newFolderPath + " already exists.");
			}

			indexJournal.moveFolder(folderPath, newFolderPath);

			folder.parent.folders.remove(folderName);
			folder.parent = newParentFolder;
			newParentFolder.folders.put(folderName, folder);

			success = true;
		}
		catch (NotFoundException e) {
			throw new FileNotFoundException(e.getMessage());
		}
		finally {
			indexJournal.close();
			if (!success) {
				deleteEmptyVersionedFolders(newParentPath);
			}
		}

		updateAffectedItemPaths(folder);

		eventManager.folderMoved(parentPath, folderName, newParentPath);
		deleteEmptyVersionedFolders(parentPath);
	}
Deallocate item storage
@param folderPath
@param itemName
Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/store/local/IndexedLocalFileSystem.java