X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=org.eclipse.linuxtools.tmf.ui%2Fsrc%2Forg%2Feclipse%2Flinuxtools%2Ftmf%2Fui%2Fproject%2Fmodel%2FTmfTraceElement.java;h=fabef20eb9b662e70033fab6a09239b9c2bcbeea;hb=d04ec5a723064f4f1b26100362491b7f07e27cca;hp=8df3310b6d334d50394c7c72bdc18c82e7476bb3;hpb=fb31225ecb3858defe42621ebf00ae3c113f332e;p=deliverable%2Ftracecompass.git diff --git a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfTraceElement.java b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfTraceElement.java index 8df3310b6d..fabef20eb9 100644 --- a/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfTraceElement.java +++ b/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfTraceElement.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010, 2011 Ericsson + * Copyright (c) 2010, 2013 Ericsson, École Polytechnique de Montréal * * All rights reserved. This program and the accompanying materials are * made available under the terms of the Eclipse Public License v1.0 which @@ -8,23 +8,26 @@ * * 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 *******************************************************************************/ package org.eclipse.linuxtools.tmf.ui.project.model; +import java.io.ByteArrayInputStream; +import java.io.InputStream; import java.util.Arrays; import java.util.HashMap; import java.util.Map; +import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Status; -import org.eclipse.linuxtools.internal.tmf.ui.TmfUiPlugin; +import org.eclipse.linuxtools.internal.tmf.ui.Activator; import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomTxtEvent; import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomTxtTrace; import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomTxtTraceDefinition; @@ -34,24 +37,35 @@ import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomXmlTraceDefin import org.eclipse.linuxtools.tmf.core.TmfCommonConstants; 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.ui.IActionFilter; import org.eclipse.ui.views.properties.IPropertyDescriptor; import org.eclipse.ui.views.properties.IPropertySource2; -import org.eclipse.ui.views.properties.TextPropertyDescriptor; /** - * TmfTraceElement - *

+ * Implementation of trace model element representing a trace. It provides + * methods to instantiate ITmfTrace and ITmfEvent as + * well as editor ID from the trace type extension definition. + * + * @version 1.0 + * @author Francois Chouinard */ -public class TmfTraceElement extends TmfProjectModelElement implements IActionFilter, IPropertySource2 { +public class TmfTraceElement extends TmfWithFolderElement implements IActionFilter, IPropertySource2 { // ------------------------------------------------------------------------ // Constants // ------------------------------------------------------------------------ // Other attributes + /** + * Bundle attribute name + */ public static final String BUNDLE = "bundle"; //$NON-NLS-1$ + /** + * IsLinked attribute name. + */ public static final String IS_LINKED = "isLinked"; //$NON-NLS-1$ // Property View stuff @@ -62,11 +76,11 @@ public class TmfTraceElement extends TmfProjectModelElement implements IActionFi private static final String sfEventType = "type"; //$NON-NLS-1$ private static final String sfIsLinked = "linked"; //$NON-NLS-1$ - private static final TextPropertyDescriptor sfNameDescriptor = new TextPropertyDescriptor(sfName, sfName); - private static final TextPropertyDescriptor sfPathDescriptor = new TextPropertyDescriptor(sfPath, sfPath); - private static final TextPropertyDescriptor sfLocationDescriptor = new TextPropertyDescriptor(sfLocation, sfLocation); - private static final TextPropertyDescriptor sfTypeDescriptor = new TextPropertyDescriptor(sfEventType, sfEventType); - private static final TextPropertyDescriptor sfIsLinkedDescriptor = new TextPropertyDescriptor(sfIsLinked, sfIsLinked); + private static final ReadOnlyTextPropertyDescriptor sfNameDescriptor = new ReadOnlyTextPropertyDescriptor(sfName, sfName); + private static final ReadOnlyTextPropertyDescriptor sfPathDescriptor = new ReadOnlyTextPropertyDescriptor(sfPath, sfPath); + private static final ReadOnlyTextPropertyDescriptor sfLocationDescriptor = new ReadOnlyTextPropertyDescriptor(sfLocation, sfLocation); + private static final ReadOnlyTextPropertyDescriptor sfTypeDescriptor = new ReadOnlyTextPropertyDescriptor(sfEventType, sfEventType); + private static final ReadOnlyTextPropertyDescriptor sfIsLinkedDescriptor = new ReadOnlyTextPropertyDescriptor(sfIsLinked, sfIsLinked); private static final IPropertyDescriptor[] sfDescriptors = { sfNameDescriptor, sfPathDescriptor, sfLocationDescriptor, sfTypeDescriptor, sfIsLinkedDescriptor }; @@ -78,7 +92,9 @@ public class TmfTraceElement extends TmfProjectModelElement implements IActionFi sfTypeDescriptor.setCategory(sfInfoCategory); sfIsLinkedDescriptor.setCategory(sfInfoCategory); } - + + private static final String BOOKMARKS_HIDDEN_FILE = ".bookmarks"; //$NON-NLS-1$ + // ------------------------------------------------------------------------ // Attributes // ------------------------------------------------------------------------ @@ -90,11 +106,15 @@ public class TmfTraceElement extends TmfProjectModelElement implements IActionFi // 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 sfTraceTypeAttributes = new HashMap(); private static final Map sfTraceCategories = new HashMap(); - // Initialize statically at startup + /** + * 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); for (IConfigurationElement ce : config) { @@ -112,11 +132,30 @@ public class TmfTraceElement extends TmfProjectModelElement implements IActionFi // ------------------------------------------------------------------------ // 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) + */ 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) + */ public TmfTraceElement(String name, IResource trace, TmfExperimentElement parent) { this(name, trace, (TmfProjectModelElement) parent); } @@ -130,20 +169,34 @@ public class TmfTraceElement extends TmfProjectModelElement implements IActionFi // ------------------------------------------------------------------------ // Operations // ------------------------------------------------------------------------ - + /** + * Returns the trace type ID. + * + * @return trace type ID. + */ public String getTraceType() { return fTraceTypeId; } + /** + * Refreshes the trace type filed by reading the trace type persistent + * property of the resource referenece. + */ public void refreshTraceType() { try { fTraceTypeId = getResource().getPersistentProperty(TmfCommonConstants.TRACETYPE); } catch (CoreException e) { - e.printStackTrace(); + Activator.getDefault().logError("Error refreshing trace type pesistent property for trace " + getName(), e); //$NON-NLS-1$ } } - public ITmfTrace instantiateTrace() { + /** + * Instantiate a ITmfTrace object based on the trace type and + * the corresponding extension. + * + * @return the ITmfTrace or null for an error + */ + public ITmfTrace instantiateTrace() { try { // make sure that supplementary folder exists @@ -165,15 +218,24 @@ public class TmfTraceElement extends TmfProjectModelElement implements IActionFi } } IConfigurationElement ce = sfTraceTypeAttributes.get(fTraceTypeId); - ITmfTrace trace = (ITmfTrace) ce.createExecutableExtension(TmfTraceType.TRACE_TYPE_ATTR); + if (ce == null) { + return null; + } + ITmfTrace trace = (ITmfTrace) ce.createExecutableExtension(TmfTraceType.TRACE_TYPE_ATTR); return trace; } } catch (CoreException e) { - e.printStackTrace(); + Activator.getDefault().logError("Error instantiating ITmfTrace object for trace " + getName(), e); //$NON-NLS-1$ } return null; } + /** + * Instantiate a ITmfEvent object based on the trace type and + * the corresponding extension. + * + * @return the ITmfEvent or null for an error + */ public ITmfEvent instantiateEvent() { try { if (fTraceTypeId != null) { @@ -192,15 +254,23 @@ public class TmfTraceElement extends TmfProjectModelElement implements IActionFi } } IConfigurationElement ce = sfTraceTypeAttributes.get(fTraceTypeId); + if (ce == null) { + return null; + } ITmfEvent event = (ITmfEvent) ce.createExecutableExtension(TmfTraceType.EVENT_TYPE_ATTR); return event; } } catch (CoreException e) { - e.printStackTrace(); + Activator.getDefault().logError("Error instantiating ITmfEvent object for trace " + getName(), e); //$NON-NLS-1$ } return null; } + /** + * Returns the optional editor ID from the trace type extension. + * + * @return the editor ID or null if not defined. + */ public String getEditorId() { if (fTraceTypeId != null) { if (fTraceTypeId.startsWith(CustomTxtTrace.class.getCanonicalName())) { @@ -219,163 +289,73 @@ public class TmfTraceElement extends TmfProjectModelElement implements IActionFi } /** - * Returns the TmfTraceElement located under the TmfTracesFolder. - * - * @return this if this element is under the TmfTracesFolder - * else the corresponding TmfTraceElement if this element is under - * TmfExperimentElement. + * 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 + * @since 2.0 */ - public TmfTraceElement getElementUnderTraceFolder() { - - // 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 aTrace; + public IFile createBookmarksFile() throws CoreException { + IFile file = getBookmarksFile(); + if (fResource instanceof IFolder) { + if (!file.exists()) { + final IFile bookmarksFile = getProject().getTracesFolder().getResource().getFile(BOOKMARKS_HIDDEN_FILE); + if (!bookmarksFile.exists()) { + final InputStream source = new ByteArrayInputStream(new byte[0]); + bookmarksFile.create(source, true, null); } + bookmarksFile.setHidden(true); + file.createLink(bookmarksFile.getLocation(), IResource.REPLACE, null); + file.setHidden(true); + file.setPersistentProperty(TmfCommonConstants.TRACETYPE, TmfTrace.class.getCanonicalName()); } } - return this; - } - - /** - * Deletes the trace specific supplementary folder. - */ - public void deleteSupplementaryFolder() { - IFolder supplFolder = getTraceSupplementaryFolder(fResource.getName()); - if (supplFolder.exists()) { - try { - supplFolder.delete(true, new NullProgressMonitor()); - } catch (CoreException e) { - TmfUiPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, TmfUiPlugin.PLUGIN_ID, "Error deleting supplementary folder " + supplFolder, e)); //$NON-NLS-1$ - } - } + return file; } /** - * Renames the trace specific supplementary folder according to the new trace name. - * - * @param newTraceName The new trace name + * Returns the file resource used to store bookmarks. The file may not + * exist. + * + * @return the bookmarks file + * @since 2.0 */ - public void renameSupplementaryFolder(String newTraceName) { - IFolder oldSupplFolder = getTraceSupplementaryFolder(fResource.getName()); - IFolder newSupplFolder = getTraceSupplementaryFolder(newTraceName); - - // Rename supplementary folder - if (oldSupplFolder.exists()) { - try { - oldSupplFolder.move(newSupplFolder.getFullPath(), true, new NullProgressMonitor()); - } catch (CoreException e) { - TmfUiPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, TmfUiPlugin.PLUGIN_ID, "Error renaming supplementary folder " + oldSupplFolder, e)); //$NON-NLS-1$ - } + public IFile getBookmarksFile() { + IFile file = null; + if (fResource instanceof IFile) { + file = (IFile) fResource; + } else if (fResource instanceof IFolder) { + final IFolder folder = (IFolder) fResource; + file = folder.getFile(getName() + '_'); } + return file; } /** - * Copies the trace specific supplementary folder to the new trace name. - * - * @param newTraceName The new trace name - */ - public void copySupplementaryFolder(String newTraceName) { - IFolder oldSupplFolder = getTraceSupplementaryFolder(fResource.getName()); - IFolder newSupplFolder = getTraceSupplementaryFolder(newTraceName); - - // copy supplementary folder - if (oldSupplFolder.exists()) { - try { - oldSupplFolder.copy(newSupplFolder.getFullPath(), true, new NullProgressMonitor()); - } catch (CoreException e) { - TmfUiPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, TmfUiPlugin.PLUGIN_ID, "Error renaming supplementary folder " + oldSupplFolder, e)); //$NON-NLS-1$ - } - } - } - - /** - * Copies the trace specific supplementary folder a new folder. - * - * @param destination The destination folder to copy to. - */ - public void copySupplementaryFolder(IFolder destination) { - IFolder oldSupplFolder = getTraceSupplementaryFolder(fResource.getName()); - - // copy supplementary folder - if (oldSupplFolder.exists()) { - try { - oldSupplFolder.copy(destination.getFullPath(), true, new NullProgressMonitor()); - } catch (CoreException e) { - TmfUiPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, TmfUiPlugin.PLUGIN_ID, "Error renaming supplementary folder " + oldSupplFolder, e)); //$NON-NLS-1$ - } - } - } - - - /** - * Refreshes the trace specific supplementary folder information. It creates the folder if not exists. - * It sets the persistence property of the trace resource - */ - public void refreshSupplementaryFolder() { - createSupplementaryDirectory(); - } - - /** - * Checks if supplementary resource exist or not. - * - * @return true if one or more files are under the trace supplementary folder - */ - public boolean hasSupplementaryResources() { - IResource[] resources = getSupplementaryResources(); - return (resources.length > 0); - } - - /** - * Returns the supplementary resources under the trace supplementary folder. - * - * @return array of resources under the trace supplementary folder. - */ - public IResource[] getSupplementaryResources() { - IFolder supplFolder = getTraceSupplementaryFolder(fResource.getName()); - if (supplFolder.exists()) { - try { - return supplFolder.members(); - } catch (CoreException e) { - TmfUiPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, TmfUiPlugin.PLUGIN_ID, "Error deleting supplementary folder " + supplFolder, e)); //$NON-NLS-1$ - } - } - return new IResource[0]; - } - - /** - * Deletes the given resources. - * - * @param resources array of resources to delete. + * Returns the TmfTraceElement located under the + * TmfTracesFolder. + * + * @return this if this element is under the + * TmfTracesFolder else the corresponding + * TmfTraceElement if this element is under + * TmfExperimentElement. */ - public void deleteSupplementaryResources(IResource[] resources) { - - for (int i = 0; i < resources.length; i++) { - try { - resources[i].delete(true, new NullProgressMonitor()); - } catch (CoreException e) { - TmfUiPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, TmfUiPlugin.PLUGIN_ID, "Error deleting supplementary resource " + resources[i], e)); //$NON-NLS-1$ - } - } - } + public TmfTraceElement getElementUnderTraceFolder() { - private void createSupplementaryDirectory() { - IFolder supplFolder = getTraceSupplementaryFolder(fResource.getName()); - if (!supplFolder.exists()) { - try { - supplFolder.create(true, true, new NullProgressMonitor()); - } catch (CoreException e) { - TmfUiPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, TmfUiPlugin.PLUGIN_ID, "Error creating resource supplementary file " + supplFolder, e)); //$NON-NLS-1$ + // 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 aTrace; + } } } - - try { - fResource.setPersistentProperty(TmfCommonConstants.TRACE_SUPPLEMENTARY_FOLDER, supplFolder.getLocationURI().getPath()); - } catch (CoreException e) { - TmfUiPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, TmfUiPlugin.PLUGIN_ID, "Error setting persistant property " + TmfCommonConstants.TRACE_SUPPLEMENTARY_FOLDER, e)); //$NON-NLS-1$ - } - + return this; } // ------------------------------------------------------------------------ @@ -422,7 +402,7 @@ public class TmfTraceElement extends TmfProjectModelElement implements IActionFi @Override public IPropertyDescriptor[] getPropertyDescriptors() { - return (sfDescriptors != null) ? Arrays.copyOf(sfDescriptors, sfDescriptors.length) : null; + return Arrays.copyOf(sfDescriptors, sfDescriptors.length); } @Override @@ -454,7 +434,7 @@ public class TmfTraceElement extends TmfProjectModelElement implements IActionFi return null; } - private String getCategory(IConfigurationElement ce) { + private static String getCategory(IConfigurationElement ce) { String categoryId = ce.getAttribute(TmfTraceType.CATEGORY_ATTR); if (categoryId != null) { IConfigurationElement category = sfTraceCategories.get(categoryId); @@ -483,4 +463,19 @@ public class TmfTraceElement extends TmfProjectModelElement implements IActionFi return false; } + /** + * Copy this trace in the trace folder. No other parameters are mentioned so + * the trace is copied in this element's project trace folder + * + * @param string + * The new trace name + * @return the new Resource object + * @since 2.0 + */ + public TmfTraceElement copy(String string) { + TmfTraceFolder folder = this.getProject().getTracesFolder(); + IResource res = super.copy(string, false); + return new TmfTraceElement(string, res, folder); + } + }