/******************************************************************************
* Copyright (C) 2011-2012 Fabio Zadrozny
*
* 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:
* Fabio Zadrozny <fabiofz@gmail.com> - initial API and implementation
******************************************************************************/
package org.python.pydev.shared_ui.editor_input;
import java.io.File;
import java.net.URI;
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.ui.IElementFactory;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.ide.FileStoreEditorInput;
import org.eclipse.ui.part.FileEditorInput;
public class PyEditorInputFactory implements IElementFactory {
public static final String FACTORY_ID = "org.python.pydev.editorinput.pyEditorInputFactory";
@Override
public IAdaptable createElement(IMemento memento) {
String fileStr = memento.getString(TAG_FILE);
if (fileStr == null || fileStr.length() == 0) {
return null;
}
String zipPath = memento.getString(TAG_ZIP_PATH);
final File file = new File(fileStr);
if (zipPath == null || zipPath.length() == 0) {
//return EditorInputFactory.create(new File(file), false);
final URI uri = file.toURI();
IFile[] ret = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocationURI(uri,
IContainer.INCLUDE_HIDDEN | IContainer.INCLUDE_PHANTOMS | IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS);
if (ret != null && ret.length > 0) {
return new FileEditorInput(ret[0]);
}
try {
return new FileStoreEditorInput(EFS.getStore(uri));
} catch (CoreException e) {
return new PydevFileEditorInput(file);
}
}
return new PydevZipFileEditorInput(new PydevZipFileStorage(file, zipPath));
}
private static final String TAG_FILE = "file"; //$NON-NLS-1$
private static final String TAG_ZIP_PATH = "zip_path"; //$NON-NLS-1$
public static void saveState(IMemento memento, PydevZipFileEditorInput pydevZipFileEditorInput) {
memento.putString(TAG_FILE, pydevZipFileEditorInput.getFile().toString());
memento.putString(TAG_ZIP_PATH, pydevZipFileEditorInput.getZipPath());
}
public static void saveState(IMemento memento, PydevFileEditorInput pydevFileEditorInput) {
memento.putString(TAG_FILE, pydevFileEditorInput.getFile().toString());
}
}