* Contributors:
* Francois Chouinard - Initial API and implementation
* Bernd Hufmann - Added supplementary files handling
- * Geneviève Bastien - Moved supplementary files handling to parent class, added
- * code to copy trace
+ * Geneviève Bastien - Moved supplementary files handling to parent class,
+ * added code to copy trace
+ * Patrick Tasse - Close editors to release resources
*******************************************************************************/
package org.eclipse.linuxtools.tmf.ui.project.model;
import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;
import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
import org.eclipse.linuxtools.tmf.core.trace.TmfTrace;
-import org.eclipse.linuxtools.tmf.core.util.ReadOnlyTextPropertyDescriptor;
import org.eclipse.linuxtools.tmf.ui.editors.TmfEventsEditor;
+import org.eclipse.linuxtools.tmf.ui.properties.ReadOnlyTextPropertyDescriptor;
import org.eclipse.ui.IActionFilter;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
import org.eclipse.ui.views.properties.IPropertySource2;
/**
- * Implementation of trace model element representing a trace. It provides methods to instantiate
- * <code>ITmfTrace</code> and <code>ITmfEvent</code> as well as editor ID from the trace type
- * extension definition.
+ * Implementation of trace model element representing a trace. It provides
+ * methods to instantiate <code>ITmfTrace</code> and <code>ITmfEvent</code> as
+ * well as editor ID from the trace type extension definition.
*
* @version 1.0
* @author Francois Chouinard
// Static initialization
// ------------------------------------------------------------------------
- // The mapping of available trace type IDs to their corresponding configuration element
+ // The mapping of available trace type IDs to their corresponding
+ // configuration element
private static final Map<String, IConfigurationElement> sfTraceTypeAttributes = new HashMap<String, IConfigurationElement>();
private static final Map<String, IConfigurationElement> sfTraceCategories = new HashMap<String, IConfigurationElement>();
/**
- * Initialize statically at startup by getting extensions from the platform extension registry.
+ * Initialize statically at startup by getting extensions from the platform
+ * extension registry.
*/
public static void init() {
IConfigurationElement[] config = Platform.getExtensionRegistry().getConfigurationElementsFor(TmfTraceType.TMF_TRACE_TYPE_ID);
// Constructors
// ------------------------------------------------------------------------
/**
- * Constructor.
- * Creates trace model element under the trace folder.
- * @param name The name of trace
- * @param trace The trace resource.
- * @param parent The parent element (trace folder)
+ * Constructor. Creates trace model element under the trace folder.
+ *
+ * @param name
+ * The name of trace
+ * @param trace
+ * The trace resource.
+ * @param parent
+ * The parent element (trace folder)
*/
public TmfTraceElement(String name, IResource trace, TmfTraceFolder parent) {
this(name, trace, (TmfProjectModelElement) parent);
}
+
/**
- * Constructor.
- * Creates trace model element under the experiment folder.
- * @param name The name of trace
- * @param trace The trace resource.
- * @param parent The parent element (experiment folder)
+ * Constructor. Creates trace model element under the experiment folder.
+ *
+ * @param name
+ * The name of trace
+ * @param trace
+ * The trace resource.
+ * @param parent
+ * The parent element (experiment folder)
*/
public TmfTraceElement(String name, IResource trace, TmfExperimentElement parent) {
this(name, trace, (TmfProjectModelElement) parent);
// ------------------------------------------------------------------------
/**
* Returns the trace type ID.
+ *
* @return trace type ID.
*/
public String getTraceType() {
}
/**
- * Refreshes the trace type filed by reading the trace type persistent property of the resource
- * referenece.
+ * Refreshes the trace type filed by reading the trace type persistent
+ * property of the resource referenece.
*/
public void refreshTraceType() {
try {
}
/**
- * Instantiate a <code>ITmfTrace</code> object based on the trace type and the corresponding extension.
+ * Instantiate a <code>ITmfTrace</code> object based on the trace type and
+ * the corresponding extension.
*
* @return the <code>ITmfTrace</code> or <code>null</code> for an error
*/
}
}
IConfigurationElement ce = sfTraceTypeAttributes.get(fTraceTypeId);
+ if (ce == null) {
+ return null;
+ }
ITmfTrace trace = (ITmfTrace) ce.createExecutableExtension(TmfTraceType.TRACE_TYPE_ATTR);
return trace;
}
}
/**
- * Instantiate a <code>ITmfEvent</code> object based on the trace type and the corresponding extension.
+ * Instantiate a <code>ITmfEvent</code> object based on the trace type and
+ * the corresponding extension.
*
* @return the <code>ITmfEvent</code> or <code>null</code> for an error
*/
}
}
IConfigurationElement ce = sfTraceTypeAttributes.get(fTraceTypeId);
+ if (ce == null) {
+ return null;
+ }
ITmfEvent event = (ITmfEvent) ce.createExecutableExtension(TmfTraceType.EVENT_TYPE_ATTR);
return event;
}
/**
* Returns the optional editor ID from the trace type extension.
+ *
* @return the editor ID or <code>null</code> if not defined.
*/
public String getEditorId() {
}
/**
- * Returns the file resource used to store bookmarks after creating it if necessary.
- * If the trace resource is a file, it is returned directly.
- * If the trace resource is a folder, a linked file is returned.
- * The file will be created if it does not exist.
+ * Returns the file resource used to store bookmarks after creating it if
+ * necessary. If the trace resource is a file, it is returned directly. If
+ * the trace resource is a folder, a linked file is returned. The file will
+ * be created if it does not exist.
+ *
* @return the bookmarks file
- * @throws CoreException if the bookmarks file cannot be created
+ * @throws CoreException
+ * if the bookmarks file cannot be created
* @since 2.0
*/
public IFile createBookmarksFile() throws CoreException {
}
/**
- * Returns the file resource used to store bookmarks.
- * The file may not exist.
+ * Returns the file resource used to store bookmarks. The file may not
+ * exist.
+ *
* @return the bookmarks file
* @since 2.0
*/
}
/**
- * Returns the <code>TmfTraceElement</code> located under the <code>TmfTracesFolder</code>.
+ * Returns the <code>TmfTraceElement</code> located under the
+ * <code>TmfTracesFolder</code>.
*
- * @return <code>this</code> if this element is under the <code>TmfTracesFolder</code>
- * else the corresponding <code>TmfTraceElement</code> if this element is under
+ * @return <code>this</code> if this element is under the
+ * <code>TmfTracesFolder</code> else the corresponding
+ * <code>TmfTraceElement</code> if this element is under
* <code>TmfExperimentElement</code>.
*/
public TmfTraceElement getElementUnderTraceFolder() {
- // If trace is under an experiment, return original trace from the traces folder
+ // If trace is under an experiment, return original trace from the
+ // traces folder
if (getParent() instanceof TmfExperimentElement) {
for (TmfTraceElement aTrace : getProject().getTracesFolder().getTraces()) {
if (aTrace.getName().equals(getName())) {
return new TmfTraceElement(string, res, folder);
}
+ /**
+ * Close opened editors associated with this trace.
+ * @since 2.0
+ */
+ public void closeEditors() {
+ // Close the trace if open
+ IFile file = getBookmarksFile();
+ FileEditorInput input = new FileEditorInput(file);
+ IWorkbench wb = PlatformUI.getWorkbench();
+ for (IWorkbenchWindow wbWindow : wb.getWorkbenchWindows()) {
+ for (IWorkbenchPage wbPage : wbWindow.getPages()) {
+ for (IEditorReference editorReference : wbPage.getEditorReferences()) {
+ try {
+ if (editorReference.getEditorInput().equals(input)) {
+ wbPage.closeEditor(editorReference.getEditor(false), false);
+ }
+ } catch (PartInitException e) {
+ Activator.getDefault().logError("Error closing editor for trace " + getName(), e); //$NON-NLS-1$
+ }
+ }
+ }
+ }
+
+ // Close experiments that contain the trace if open
+ if (getParent() instanceof TmfTraceFolder) {
+ TmfExperimentFolder experimentFolder = getProject().getExperimentsFolder();
+ for (ITmfProjectModelElement experiment : experimentFolder.getChildren()) {
+ for (ITmfProjectModelElement child : experiment.getChildren()) {
+ if (child.getName().equals(getName())) {
+ ((TmfExperimentElement) experiment).closeEditors();
+ break;
+ }
+ }
+ }
+ } else if (getParent() instanceof TmfExperimentElement) {
+ TmfExperimentElement experiment = (TmfExperimentElement) getParent();
+ experiment.closeEditors();
+ }
+ }
}