/******************************************************************************* * Copyright (c) 2013 Association for Decentralized Information Management * in Industry THTH ry. * 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: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ package org.simantics.graphfile.hack; import java.net.URI; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IStorage; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.PlatformObject; import org.eclipse.core.runtime.content.IContentType; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.IMemento; import org.eclipse.ui.IPathEditorInput; import org.eclipse.ui.IPersistableElement; import org.eclipse.ui.IURIEditorInput; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.IDE; import org.eclipse.ui.model.IWorkbenchAdapter; /** * Editor input for files stored in the graph. * * Note: this class is required, since FileEditorInput is not able to load/save GraphFile references. * Contents of this class are mostly copy-pasted from FileEditorInput. * * @author Marko Luukkainen * */ public class GraphFileEditorInput extends PlatformObject implements IFileEditorInput, IPathEditorInput, IURIEditorInput, IPersistableElement { private GraphFile file; /** * Creates an editor input based of the given file resource. * * @param file the file resource */ public GraphFileEditorInput(GraphFile file) { if (file == null) throw new IllegalArgumentException(); this.file = file; } /* (non-Javadoc) * Method declared on Object. */ public int hashCode() { return file.hashCode(); } /* (non-Javadoc) * Method declared on Object. * * The FileEditorInput implementation of this Object * method bases the equality of two FileEditorInput objects on the * equality of their underlying IFile resources. */ public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof IFileEditorInput)) { return false; } IFileEditorInput other = (IFileEditorInput) obj; return file.equals(other.getFile()); } /* (non-Javadoc) * Method declared on IEditorInput. */ public boolean exists() { return file.exists(); } /* (non-Javadoc) * Method declared on IPersistableElement. */ public String getFactoryId() { return GraphFileEditorInputFactory.getFactoryId(); } /* (non-Javadoc) * Method declared on IFileEditorInput. */ public IFile getFile() { return file; } /* (non-Javadoc) * Method declared on IEditorInput. */ public ImageDescriptor getImageDescriptor() { IContentType contentType = IDE.getContentType(file); return PlatformUI.getWorkbench().getEditorRegistry() .getImageDescriptor(file.getName(), contentType); } /* (non-Javadoc) * Method declared on IEditorInput. */ public String getName() { return file.getName(); } /* (non-Javadoc) * Method declared on IEditorInput. */ public IPersistableElement getPersistable() { return this; } /* (non-Javadoc) * Method declared on IStorageEditorInput. */ public IStorage getStorage() { return file; } /* (non-Javadoc) * Method declared on IEditorInput. */ public String getToolTipText() { return file.getFullPath().makeRelative().toString(); } /* (non-Javadoc) * Method declared on IPersistableElement. */ public void saveState(IMemento memento) { GraphFileEditorInputFactory.saveState(memento, this); } /* (non-Javadoc) * @see org.eclipse.ui.IURIEditorInput#getURI() */ public URI getURI() { return file.getLocationURI(); } /* (non-Javadoc) * @see org.eclipse.ui.IPathEditorInput#getPath() */ public IPath getPath() { IPath location = file.getLocation(); if (location != null) return location; throw new IllegalArgumentException(); } /* (non-Javadoc) * @see java.lang.Object#toString() */ public String toString() { return getClass().getName() + "(" + getFile().getFullPath() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ } /* * Allows for the return of an {@link IWorkbenchAdapter} adapter. * * @since 3.5 * * @see org.eclipse.core.runtime.PlatformObject#getAdapter(java.lang.Class) */ @SuppressWarnings("rawtypes") public Object getAdapter(Class adapter) { if (IWorkbenchAdapter.class.equals(adapter)) { return new IWorkbenchAdapter() { public Object[] getChildren(Object o) { return new Object[0]; } public ImageDescriptor getImageDescriptor(Object object) { return GraphFileEditorInput.this.getImageDescriptor(); } public String getLabel(Object o) { return GraphFileEditorInput.this.getName(); } public Object getParent(Object o) { return GraphFileEditorInput.this.getFile().getParent(); } }; } return super.getAdapter(adapter); } }