final boolean doOpenProject(ProjectLocator projectLocator) {
		Project project = null;
		try {
			// first close the active project (if there is one)
			// but if user cancels operation, don't continue
			if (!closeProject(false)) {
				return true;
			}
			ProjectManager pm = plugin.getProjectManager();
			project = pm.openProject(projectLocator, true, false);
			firingProjectOpened = true;
			tool.setActiveProject(project);
			openProjectAndNotify(project);
			firingProjectOpened = false;
			Msg.info(this, "Opened project: " + projectLocator.getName());
		}
		catch (NotFoundException nfe) {
			String msg = "Project not found for " + projectLocator;
			Msg.showInfo(getClass(), tool.getToolFrame(), "Error Opening Project", msg);
			Msg.error(this, msg);
		}
		catch (NotOwnerException e) {
			Msg.showError(this, null, "Not Project Owner", "Cannot open project " + projectLocator +
				"\n" + e.getMessage() +
				"\n \nEach user must create their own project. If needed, another user's project may be viewed\n" +
				"and files copied, using the View Other action from your own open project.  Alternatively, \n" +
				"creating a \"Shared Project\" will allow a group of users to use a shared server-based repository.");
			Msg.error(this,  "Cannot open project: " + e.getMessage());
		}
		catch (LockException e) {
			Msg.showInfo(this, null, "Open Project Failed", e.getMessage());
		}
		catch (Exception e) {
			Msg.showError(this, null, "Open Project Failed",
				"Error opening project: " + projectLocator, e);
		}
		finally {
			// update our list of recent projects
			plugin.rebuildRecentMenus();
		}

		return project != null;
	}
Open an existing project, using a file chooser to specify where the
existing project folder is stored.
@param projectLocator the project locator
@return true if the project was opened
Ghidra/Framework/Project/src/main/java/ghidra/framework/main/FileActionManager.java