public void restoreFromXml(Element root) {
		String tmp = root.getAttributeValue("NAME");
		if (tmp != null) {
			name = tmp;
		}

		String activeStr = root.getAttributeValue("ACTIVE");
		isActive = (activeStr != null && activeStr.equalsIgnoreCase("true"));

		String defaultTool = System.getProperty("ghidra.defaulttool");
		if (defaultTool != null && !defaultTool.equals("")) {
			PluginTool tool = toolManager.getTool(defaultTool);
			tool.setVisible(isActive);
			runningTools.add(tool);
			toolManager.fireToolAddedEvent(this, tool);
			return;
		}

		Iterator<?> iter = root.getChildren("RUNNING_TOOL").iterator();
		while (iter.hasNext()) {
			Element element = (Element) iter.next();
			String toolName = element.getAttributeValue(ToolTemplate.TOOL_NAME_XML_NAME);
			if (toolName == null) {
				continue;
			}

			PluginTool tool = toolManager.getTool(toolName);
			if (tool == null) {
				continue;
			}

			tool.setVisible(isActive);
			boolean hadChanges = tool.hasConfigChanged();
			tool.restoreWindowingDataFromXml(element);

			Element toolDataElem = element.getChild("DATA_STATE");
			tool.restoreDataStateFromXml(toolDataElem);
			if (hadChanges) {
				// restore the dirty state, which is cleared by the restoreDataState call
				tool.setConfigChanged(true);
			}

			runningTools.add(tool);
			toolManager.fireToolAddedEvent(this, tool);
		}
	}
restores the object from an XML element

@param root an XML element to restore from
Ghidra/Framework/Project/src/main/java/ghidra/framework/project/tool/WorkspaceImpl.java