private void doRestoreState() {

		if (isTableModelDisposed()) {
			// This can happen if a client manually disposes its model directly instead of calling
			// GTable.dispose().  Not sure if this can happen, but since we buffer restore
			// requests, it is possible.
			return;
		}

		restoring = true;

		try {
			DockingWindowManager dockingWindowManager = DockingWindowManager.getInstance(table);
			if (dockingWindowManager == null) {
				setDefaultColumnsVisible();
				return;
			}

			String key = getPreferenceKey();
			PreferenceState preferenceState = dockingWindowManager.getPreferenceState(key);
			if (preferenceState == null) {
				// If we don't have the column save state for an object based model, then set
				// the columns that are shown by default and their order.
				setDefaultColumnsVisible();
				return;
			}

			Element xmlElement = preferenceState.getXmlElement(XML_COLUMN_DATA);
			restoreFromXML(xmlElement);
		}
		finally {
			restoring = false;
		}
	}
Gets the most unique identifier possible for a given column.
Ghidra/Framework/Docking/src/main/java/docking/widgets/table/TableColumnModelState.java