/**
* Copyright (c) 2005-2012 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package org.python.pydev.shared_ui.editor_input;
import java.io.File;
import org.eclipse.core.resources.IStorage;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorRegistry;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IPathEditorInput;
import org.eclipse.ui.IPersistableElement;
import org.eclipse.ui.IStorageEditorInput;
import org.eclipse.ui.PlatformUI;
/**
* This editor input enables Eclipse to open and show the contents of a file within a zip file.
*
* @author Fabio
*/
public class PydevZipFileEditorInput implements IStorageEditorInput, IPathEditorInput, IPersistableElement {
/**
* This is the file that we're wrapping in this editor input.
*/
private final PydevZipFileStorage storage;
public PydevZipFileEditorInput(PydevZipFileStorage storage) {
this.storage = storage;
}
@Override
public IStorage getStorage() throws CoreException {
return this.storage;
}
public File getFile() {
return this.storage.zipFile;
}
public String getZipPath() {
return this.storage.zipPath;
}
@Override
public boolean exists() {
return true;
}
@Override
public ImageDescriptor getImageDescriptor() {
IEditorRegistry registry = PlatformUI.getWorkbench().getEditorRegistry();
return registry.getImageDescriptor(getContentType());
}
@Override
public String getName() {
return this.storage.getName();
}
@Override
public IPersistableElement getPersistable() {
return this;
}
public String getContentType() {
return this.storage.getFullPath().getFileExtension();
}
@Override
public String getToolTipText() {
IPath fullPath = storage.getFullPath();
if (fullPath == null) {
return null;
}
return fullPath.toString();
}
@Override
@SuppressWarnings("unchecked")
public <T> T getAdapter(Class<T> adapter) {
if (adapter.isInstance(this)) {
return (T) this;
}
return null;
}
@Override
public IPath getPath() {
return storage.getFullPath();
}
@Override
public void saveState(IMemento memento) {
PyEditorInputFactory.saveState(memento, this);
}
@Override
public String getFactoryId() {
return PyEditorInputFactory.FACTORY_ID;
}
// It seems that it's not possible to define an URI to an element inside a zip file,
// so, we can't properly implement ILocationProvider nor ILocationProviderExtension (meaning that the document connect
// needs to be overridden to deal with external files).
//
// public IPath getPath(Object element) {
// if(element instanceof PydevZipFileEditorInput){
// PydevZipFileEditorInput editorInput = (PydevZipFileEditorInput) element;
// return editorInput.getPath();
//
// }
// return null;
// }
//
// public URI getURI(Object element) {
// if(element instanceof PydevZipFileEditorInput){
// try {
// PydevZipFileEditorInput editorInput = (PydevZipFileEditorInput) element;
// URL url = editorInput.storage.zipFile.toURI().toURL();
// String externalForm = url.toExternalForm();
// return new URL("zip:"+externalForm+"!"+editorInput.storage.zipPath).toURI();
// } catch (Exception e) {
// Log.log(e);
// }
//
// }
// return null;
// }
}