@Override
	public void restore() {
		// if there is a saved project, restore it
		File saveFile = new File(projectData.getProjectDir(), PROJECT_STATE);
		String errorMsg = null;
		Throwable error = null;
		try {
			if (!saveFile.exists()) {
				initializeNewProject();
				return;
			}
			InputStream is = new FileInputStream(saveFile);
			SAXBuilder sax = XmlUtilities.createSecureSAXBuilder(false, false);

			Element root = sax.build(is).getRootElement();

			// restore the saved tool template
			Iterator<?> it = root.getChildren(PROJECT_TOOL_CONFIG_XML_NAME).iterator();
			while (it.hasNext()) {
				Element elem = (Element) it.next();
				String name = elem.getAttributeValue("NAME");
				Element toolConfigElem = elem.getChild("TOOL_CONFIG");
				GhidraToolTemplate template =
					new GhidraToolTemplate(toolConfigElem, saveFile.getAbsolutePath());
				projectConfigMap.put(name, template);
			}

			List<?> dataChildren = root.getChildren(PROJECT_DATA_XML_NAME);
			for (Object object : dataChildren) {
				Element element = (Element) object;
				String name = element.getAttributeValue("NAME");
				List<?> saveStateChildren = element.getChildren("SAVE_STATE");
				for (Object saveStateObject : saveStateChildren) {
					SaveState saveState = new SaveState((Element) saveStateObject);
					dataMap.put(name, saveState);
				}
			}

			// restore the views that the user had showing
			it = root.getChildren(OPEN_VIEW_XML_NAME).iterator();
			while (it.hasNext()) {
				Element elem = (Element) it.next();
				String name = elem.getAttributeValue("NAME");
				String location = elem.getAttributeValue("LOCATION");
				URL url = GhidraURL.makeURL(location, name);
				try {
					addProjectView(url, true);
				}
				catch (IOException e) {
					Msg.error(this, "Project view not opended (" + GhidraURL.getDisplayString(url) +
						"): " + e.getMessage());
				}
			}
			it = root.getChildren(OPEN_REPOSITORY_VIEW_XML_NAME).iterator();
			while (it.hasNext()) {
				Element elem = (Element) it.next();
				String urlStr = elem.getAttributeValue("URL");
				URL url = new URL(urlStr);
				try {
					addProjectView(url, true);
				}
				catch (IOException e) {
					Msg.error(this, "Project view not opended (" + GhidraURL.getDisplayString(url) +
						"): " + e.getMessage());
				}
			}

			if (toolManager != null) {
				toolManager.restoreFromXml(root.getChild("TOOL_MANAGER"));
			}
			return;
		}
		catch (JDOMException e) {
			String msg = e.getMessage();
			if (msg == null) {
				msg = e.toString();
			}
			StringBuffer sb = new StringBuffer();
			StringTokenizer st = new StringTokenizer(msg, ":");
			while (st.hasMoreTokens()) {
				sb.append(st.nextToken());
				if (st.hasMoreTokens()) {
					sb.append("\n");
				}
			}
			errorMsg = "Invalid XML loading project " + projectLocator + ":\n" + sb.toString();
			error = e;
		}
		catch (NoClassDefFoundError e) {
			errorMsg = "Class definition missing: " + e;
			error = e;
		}
		catch (Exception e) {
			errorMsg = "Error restoring project " + projectLocator + "\n" + e;
			error = e;
		}
		Msg.showError(this, null, "Error Restoring Project", errorMsg, error);
		saveFile.delete();
		initializeNewProject();
	}
Get the local tool chest for the user logged in.

@return the tool chest
Ghidra/Framework/Project/src/main/java/ghidra/framework/project/DefaultProject.java