package org.xmind.ui.internal.editor;
import java.net.URI;
import java.net.URISyntaxException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.ui.IElementFactory;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IPersistable;
import org.xmind.ui.internal.MindMapUIPlugin;
import org.xmind.ui.mindmap.IWorkbookRef;
public class MindMapEditorInputFactory implements IElementFactory {
public static final String ID = "org.xmind.ui.MindMapEditorInputFactory"; //$NON-NLS-1$
private static final String TAG_URI = "uri"; //$NON-NLS-1$
private static final String TAG_STATE = "state"; //$NON-NLS-1$
public IAdaptable createElement(IMemento memento) {
String uriString = memento.getString(TAG_URI);
if (uriString == null)
return null;
URI uri;
try {
uri = new URI(uriString);
} catch (URISyntaxException e) {
MindMapUIPlugin.getDefault().getLog().log(new Status(IStatus.ERROR,
MindMapUIPlugin.PLUGIN_ID, "Invalid URI: " + uriString, e)); //$NON-NLS-1$
return null;
}
IMemento state = memento.getChild(TAG_STATE);
if (state != null) {
IWorkbookRef workbookRef = MindMapUIPlugin.getDefault()
.getWorkbookRefFactory().createWorkbookRef(uri, state);
if (workbookRef != null) {
return new MindMapEditorInput(workbookRef);
}
}
return new MindMapEditorInput(uri);
}
public static void saveState(MindMapEditorInput input, IMemento memento) {
URI uri = input.getURI();
if (uri == null)
return;
String uriString = uri.toString();
memento.putString(TAG_URI, uriString);
IWorkbookRef workbookRef = input.getWorkbookRef();
if (workbookRef != null) {
IPersistable persistable = MindMapUIPlugin.getAdapter(workbookRef,
IPersistable.class);
if (persistable != null) {
IMemento state = memento.createChild(TAG_STATE);
persistable.saveState(state);
}
}
}
}