package net.sourceforge.phpeclipse.builder;

import org.eclipse.core.resources.IStorage;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorRegistry;
import org.eclipse.ui.IPersistableElement;
import org.eclipse.ui.IStorageEditorInput;
import org.eclipse.ui.PlatformUI;

/**
 * An EditorInput for an external file.
 */
public class ExternalEditorInput implements IStorageEditorInput {

	IStorage externalFile;

	/**
	 * Two ExternalEditorInputs are equal if their IStorage's are equal.
	 * 
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (!(obj instanceof ExternalEditorInput))
			return false;
		ExternalEditorInput other = (ExternalEditorInput) obj;
		return externalFile.equals(other.externalFile);
	}

	/*
	 * @see IEditorInput#exists()
	 */
	public boolean exists() {
		// External file can not be deleted
		return true;
	}

	/*
	 * @see IAdaptable#getAdapter(Class)
	 */
	public Object getAdapter(Class adapter) {
		return null;
	}

	/*
	 * @see IEditorInput#getContentType()
	 */
	public String getContentType() {
		return externalFile.getFullPath().getFileExtension();
	}

	/*
	 * @see IEditorInput#getFullPath()
	 */
	public String getFullPath() {
		return externalFile.getFullPath().toString();
	}

	/*
	 * @see IEditorInput#getImageDescriptor()
	 */
	public ImageDescriptor getImageDescriptor() {
		IEditorRegistry registry = PlatformUI.getWorkbench()
				.getEditorRegistry();
		return registry.getImageDescriptor(externalFile.getFullPath()
				.getFileExtension());
	}

	/*
	 * @see IEditorInput#getName()
	 */
	public String getName() {
		return externalFile.getName();
	}

	/*
	 * @see IEditorInput#getPersistable()
	 */
	public IPersistableElement getPersistable() {
		return null;
	}

	/*
	 * see IStorageEditorInput#getStorage()
	 */
	public IStorage getStorage() {
		return externalFile;
	}

	/*
	 * @see IEditorInput#getToolTipText()
	 */
	public String getToolTipText() {
		return externalFile.getFullPath().toString();
	}

	public ExternalEditorInput(IStorage exFile) {
		externalFile = exFile;
	}
}