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