01: /*******************************************************************************
02: * Copyright (c) 2000, 2006 IBM Corporation and others.
03: * All rights reserved. This program and the accompanying materials
04: * are made available under the terms of the Eclipse Public License v1.0
05: * which accompanies this distribution, and is available at
06: * http://www.eclipse.org/legal/epl-v10.html
07: *
08: * Contributors:
09: * IBM Corporation - initial API and implementation
10: *******************************************************************************/package org.eclipse.ui.part;
11:
12: import org.eclipse.core.resources.IFile;
13: import org.eclipse.core.resources.ResourcesPlugin;
14: import org.eclipse.core.runtime.IAdaptable;
15: import org.eclipse.core.runtime.Path;
16: import org.eclipse.ui.IElementFactory;
17: import org.eclipse.ui.IMemento;
18:
19: /**
20: * Factory for saving and restoring a <code>FileEditorInput</code>.
21: * The stored representation of a <code>FileEditorInput</code> remembers
22: * the full path of the file (that is, <code>IFile.getFullPath</code>).
23: * <p>
24: * The workbench will automatically create instances of this class as required.
25: * It is not intended to be instantiated or subclassed by the client.
26: * </p>
27: */
28: public class FileEditorInputFactory implements IElementFactory {
29: /**
30: * Factory id. The workbench plug-in registers a factory by this name
31: * with the "org.eclipse.ui.elementFactories" extension point.
32: */
33: private static final String ID_FACTORY = "org.eclipse.ui.part.FileEditorInputFactory"; //$NON-NLS-1$
34:
35: /**
36: * Tag for the IFile.fullPath of the file resource.
37: */
38: private static final String TAG_PATH = "path"; //$NON-NLS-1$
39:
40: /**
41: * Creates a new factory.
42: */
43: public FileEditorInputFactory() {
44: }
45:
46: /* (non-Javadoc)
47: * Method declared on IElementFactory.
48: */
49: public IAdaptable createElement(IMemento memento) {
50: // Get the file name.
51: String fileName = memento.getString(TAG_PATH);
52: if (fileName == null) {
53: return null;
54: }
55:
56: // Get a handle to the IFile...which can be a handle
57: // to a resource that does not exist in workspace
58: IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(
59: new Path(fileName));
60: if (file != null) {
61: return new FileEditorInput(file);
62: } else {
63: return null;
64: }
65: }
66:
67: /**
68: * Returns the element factory id for this class.
69: *
70: * @return the element factory id
71: */
72: public static String getFactoryId() {
73: return ID_FACTORY;
74: }
75:
76: /**
77: * Saves the state of the given file editor input into the given memento.
78: *
79: * @param memento the storage area for element state
80: * @param input the file editor input
81: */
82: public static void saveState(IMemento memento, FileEditorInput input) {
83: IFile file = input.getFile();
84: memento.putString(TAG_PATH, file.getFullPath().toString());
85: }
86: }
|