package org.erlide.ui.editors.util;
import java.net.URI;
import java.net.URISyntaxException;
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.ui.IElementFactory;
import org.eclipse.ui.IMemento;
import org.erlide.engine.ErlangEngine;
import org.erlide.engine.model.ErlModelException;
import org.erlide.engine.model.root.IErlElementLocator;
import org.erlide.engine.model.root.IErlModel;
import org.erlide.engine.model.root.IErlModule;
public class ErlangExternalEditorInputFactory implements IElementFactory {
public static final String ID = "org.erlide.ui.ErlangExternalEditorInputFactory";
private static final String TAG_EXTERNAL_MODULE_PATH = "external_module_path";
private static final String TAG_URI = "uri";
public static void saveState(final IMemento memento,
final ErlangExternalEditorInput input) {
final IErlElementLocator model = ErlangEngine.getInstance().getModel();
final String externalModulePath = ErlangEngine.getInstance().getModelUtilService()
.getExternalModulePath(model, input.getModule());
memento.putString(TAG_EXTERNAL_MODULE_PATH, externalModulePath);
final URI uri = input.getURI();
memento.putString(TAG_URI, uri.toString());
}
@Override
public IAdaptable createElement(final IMemento memento) {
// Get the file name.
final String externalModulePath = memento.getString(TAG_EXTERNAL_MODULE_PATH);
if (externalModulePath == null) {
return null;
}
IErlModule module;
try {
final IErlModel model = ErlangEngine.getInstance().getModel();
module = ErlangEngine.getInstance().getModelUtilService()
.getModuleFromExternalModulePath(model, externalModulePath);
} catch (final ErlModelException e1) {
return null;
}
if (module == null) {
return null;
}
// Get the file name.
final String uriString = memento.getString(TAG_URI);
if (uriString == null) {
return null;
}
URI uri;
try {
uri = new URI(uriString);
} catch (final URISyntaxException e) {
return null;
}
try {
return new ErlangExternalEditorInput(EFS.getStore(uri), module);
} catch (final CoreException e) {
return null;
}
}
}