blob: ea2f0a528a512e23819d71622c074b230b84b8fc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.internal;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IElementFactory;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IPersistableElement;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.XMLMemento;
/**
* Keeps the info to save, restore or identify and editor.
* Instances of this class are shared between history entries and there should be
* only one instance making reference to the same editor.
*/
public class NavigationHistoryEditorInfo {
String editorID;
IEditorInput editorInput;
int refCount = 0;
IMemento memento;
NavigationHistoryEditorInfo(IEditorPart part) {
editorID = part.getSite().getId();
editorInput = part.getEditorInput();
}
NavigationHistoryEditorInfo(IMemento memento) {
this.memento = memento;
}
boolean isPersistable() {
if (editorInput != null) {
IPersistableElement persistable = editorInput.getPersistable();
return persistable != null;
}
return memento != null;
}
void handlePartClosed() {
if (!isPersistable()) {
return;
}
if (memento == null) {
IPersistableElement persistable = editorInput.getPersistable();
memento = XMLMemento
.createWriteRoot(IWorkbenchConstants.TAG_EDITOR);
memento.putString(IWorkbenchConstants.TAG_ID, editorID);
memento.putString(IWorkbenchConstants.TAG_FACTORY_ID, persistable
.getFactoryId());
persistable.saveState(memento);
}
editorID = null;
editorInput = null;
}
void restoreEditor() {
if (memento == null) {
return;
}
String factoryID = memento
.getString(IWorkbenchConstants.TAG_FACTORY_ID);
IElementFactory factory = PlatformUI.getWorkbench().getElementFactory(
factoryID);
if (factory != null) {
IAdaptable element = factory.createElement(memento);
if (element instanceof IEditorInput) {
editorInput = (IEditorInput) element;
editorID = memento.getString(IWorkbenchConstants.TAG_ID);
}
}
memento = null;
}
void saveState(IMemento mem) {
if (editorInput != null) {
IPersistableElement persistable = editorInput.getPersistable();
mem.putString(IWorkbenchConstants.TAG_ID, editorID);
mem.putString(IWorkbenchConstants.TAG_FACTORY_ID, persistable
.getFactoryId());
persistable.saveState(mem);
} else if (memento != null) {
mem.putMemento(memento);
}
}
}