ProjectDataTreePanel openView(URL projectView) {

		ProjectManager projectManager = tool.getProjectManager();
		Project activeProject = tool.getProject();

		ProjectDataTreePanel dtp = getViewPanel(projectView);

		if (dtp != null) {
			readOnlyTab.setSelectedComponent(dtp);
			try {
				activeProject.addProjectView(projectView, true);
				projectManager.rememberViewedProject(projectView);
				return dtp;
			}
			catch (Exception e) {
				projectManager.forgetViewedProject(projectView);
				Msg.showError(getClass(), tool.getToolFrame(), "Error Adding View", e.toString());
			}
			return null;
		}

		try {
			// TODO: addProjectView should be done in a model task
			ProjectData projectData = activeProject.addProjectView(projectView, true);
			if (projectData == null) {
				return null; // repository connection may have been cancelled
			}
			projectManager.rememberViewedProject(projectView);
			String viewName = projectData.getProjectLocator().getName();
			final ProjectDataTreePanel newPanel =
				new ProjectDataTreePanel(viewName, false /*isActiveProject*/, frontEndPlugin, null); // no filter

			newPanel.setProjectData(viewName, projectData);
			newPanel.setHelpLocation(
				new HelpLocation(frontEndPlugin.getName(), "ReadOnlyProjectDataPanel"));
			readOnlyTab.insertTab(viewName, null, newPanel, null, 0);
			int index = readOnlyTab.indexOfComponent(newPanel);
			readOnlyTab.setTabComponentAt(index, new DockingTabRenderer(readOnlyTab, viewName,
				viewName, e -> viewRemoved(newPanel, getProjectURL(newPanel), true)));
			readOnlyTab.setSelectedIndex(0);
			readOnlyViews.put(projectData.getProjectLocator(), newPanel);
			setViewsVisible(true);
			return newPanel;
		}
		catch (NotConnectedException e) {
			// already handled (e..g, cancelled login) - ignore
		}
		catch (Exception e) {
			projectManager.forgetViewedProject(projectView);
			Msg.showError(getClass(), tool.getToolFrame(), "Error Adding View",
				"Failed to view project/repository: " + e.getMessage(), e);
		}
		finally {
			validate();
		}
		return null;
	}
Open specified project URL in tabbed READ-Only project views
@param projectView project URL to be opened/added to view
@return corresponding tree panel or null on failure
Ghidra/Framework/Project/src/main/java/ghidra/framework/main/ProjectDataPanel.java