/*******************************************************************************
- * Copyright (c) 2010, 2015 Ericsson, École Polytechnique de Montréal
+ * Copyright (c) 2010, 2017 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
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.URIUtil;
+import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.tracecompass.internal.tmf.ui.Activator;
import org.eclipse.tracecompass.internal.tmf.ui.editors.ITmfEventsEditorConstants;
import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType;
import org.eclipse.tracecompass.tmf.core.project.model.TraceTypeHelper;
import org.eclipse.tracecompass.tmf.core.synchronization.TimestampTransformFactory;
+import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp;
import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestampFormat;
import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
private static final String PATH = Messages.TmfTraceElement_Path;
private static final String LOCATION = Messages.TmfTraceElement_Location;
private static final String TRACE_TYPE = Messages.TmfTraceElement_EventType;
+ private static final String TRACE_TYPE_ID = Messages.TmfTraceElement_TraceTypeId;
private static final String IS_LINKED_PROPERTY = Messages.TmfTraceElement_IsLinked;
private static final String SOURCE_LOCATION = Messages.TmfTraceElement_SourceLocation;
private static final String TIME_OFFSET = Messages.TmfTraceElement_TimeOffset;
private static final ReadOnlyTextPropertyDescriptor PATH_DESCRIPTOR = new ReadOnlyTextPropertyDescriptor(PATH, PATH);
private static final ReadOnlyTextPropertyDescriptor LOCATION_DESCRIPTOR = new ReadOnlyTextPropertyDescriptor(LOCATION, LOCATION);
private static final ReadOnlyTextPropertyDescriptor TYPE_DESCRIPTOR = new ReadOnlyTextPropertyDescriptor(TRACE_TYPE, TRACE_TYPE);
+ private static final ReadOnlyTextPropertyDescriptor TYPE_ID_DESCRIPTOR = new ReadOnlyTextPropertyDescriptor(TRACE_TYPE_ID, TRACE_TYPE_ID);
private static final ReadOnlyTextPropertyDescriptor IS_LINKED_DESCRIPTOR = new ReadOnlyTextPropertyDescriptor(IS_LINKED_PROPERTY, IS_LINKED_PROPERTY);
private static final ReadOnlyTextPropertyDescriptor SOURCE_LOCATION_DESCRIPTOR = new ReadOnlyTextPropertyDescriptor(SOURCE_LOCATION, SOURCE_LOCATION);
private static final ReadOnlyTextPropertyDescriptor TIME_OFFSET_DESCRIPTOR = new ReadOnlyTextPropertyDescriptor(TIME_OFFSET, TIME_OFFSET);
private static final ReadOnlyTextPropertyDescriptor SIZE_DESCRIPTOR = new ReadOnlyTextPropertyDescriptor(SIZE, SIZE);
private static final IPropertyDescriptor[] sfDescriptors = { NAME_DESCRIPTOR, PATH_DESCRIPTOR, LOCATION_DESCRIPTOR,
- TYPE_DESCRIPTOR, IS_LINKED_DESCRIPTOR, SOURCE_LOCATION_DESCRIPTOR,
+ TYPE_DESCRIPTOR, TYPE_ID_DESCRIPTOR, IS_LINKED_DESCRIPTOR, SOURCE_LOCATION_DESCRIPTOR,
TIME_OFFSET_DESCRIPTOR, LAST_MODIFIED_DESCRIPTOR, SIZE_DESCRIPTOR };
static {
PATH_DESCRIPTOR.setCategory(RESOURCE_PROPERTIES_CATEGORY);
LOCATION_DESCRIPTOR.setCategory(RESOURCE_PROPERTIES_CATEGORY);
TYPE_DESCRIPTOR.setCategory(RESOURCE_PROPERTIES_CATEGORY);
+ TYPE_ID_DESCRIPTOR.setCategory(RESOURCE_PROPERTIES_CATEGORY);
IS_LINKED_DESCRIPTOR.setCategory(RESOURCE_PROPERTIES_CATEGORY);
SOURCE_LOCATION_DESCRIPTOR.setCategory(RESOURCE_PROPERTIES_CATEGORY);
TIME_OFFSET_DESCRIPTOR.setCategory(RESOURCE_PROPERTIES_CATEGORY);
// ------------------------------------------------------------------------
private FileInfo fFileInfo;
+ private ITmfTimestamp fStartTime = null;
+ private ITmfTimestamp fEndTime = null;
// ------------------------------------------------------------------------
// Constructors
// Operations
// ------------------------------------------------------------------------
+ /**
+ * @since 2.0
+ */
+ @Override
+ public @NonNull Image getIcon() {
+ Image icon = super.getIcon();
+ return (icon == null ? TmfProjectModelIcons.DEFAULT_TRACE_ICON : icon);
+ }
+
+ /**
+ * @since 2.0
+ */
+ @Override
+ public String getLabelText() {
+ if (getParent() instanceof TmfExperimentElement) {
+ return getElementPath();
+ }
+ return getName();
+ }
+
/**
* Instantiate a <code>ITmfTrace</code> object based on the trace type and
* the corresponding extension.
@Override
public IFile createBookmarksFile() throws CoreException {
IFile file = getBookmarksFile();
- if (fResource instanceof IFolder) {
- return createBookmarksFile(getProject().getTracesFolder().getResource(), ITmfEventsEditorConstants.TRACE_EDITOR_INPUT_TYPE);
+ if (getResource() instanceof IFolder) {
+ TmfTraceFolder tracesFolder = getProject().getTracesFolder();
+ if (tracesFolder == null) {
+ throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.TmfProject_TracesFolderNotExists));
+ }
+ return createBookmarksFile(tracesFolder.getResource(), ITmfEventsEditorConstants.TRACE_EDITOR_INPUT_TYPE);
}
return file;
}
@Override
public IFile getBookmarksFile() {
IFile file = null;
- if (fResource instanceof IFile) {
- file = (IFile) fResource;
- } else if (fResource instanceof IFolder) {
- final IFolder folder = (IFolder) fResource;
+ IResource resource = getResource();
+ if (resource instanceof IFile) {
+ file = (IFile) resource;
+ } else if (resource instanceof IFolder) {
+ final IFolder folder = (IFolder) resource;
file = folder.getFile(getName() + '_');
}
return file;
// 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.getElementPath().equals(getElementPath())) {
- return aTrace;
+ TmfTraceFolder tracesFolder = getProject().getTracesFolder();
+ if (tracesFolder != null) {
+ for (TmfTraceElement aTrace : tracesFolder.getTraces()) {
+ if (aTrace.getElementPath().equals(getElementPath())) {
+ return aTrace;
+ }
}
}
}
propertyDescriptorArray[index] = descriptor;
index++;
}
- for (int i = 0; i < sfDescriptors.length; i++) {
- propertyDescriptorArray[index] = sfDescriptors[i];
- index++;
- }
+ System.arraycopy(sfDescriptors, 0, propertyDescriptorArray, index, sfDescriptors.length);
return propertyDescriptorArray;
}
return Arrays.copyOf(sfDescriptors, sfDescriptors.length);
return ""; //$NON-NLS-1$
}
+ if (TRACE_TYPE_ID.equals(id)) {
+ if (getTraceType() != null) {
+ TraceTypeHelper helper = TmfTraceType.getTraceType(getTraceType());
+ if (helper != null) {
+ return helper.getTraceTypeId();
+ }
+ }
+ return ""; //$NON-NLS-1$
+ }
+
if (TIME_OFFSET.equals(id)) {
long offset = TimestampTransformFactory.getTimestampTransform(getElementUnderTraceFolder().getResource()).transform(0);
if (offset != 0) {
// Close experiments that contain the trace if open
if (getParent() instanceof TmfTraceFolder) {
TmfExperimentFolder experimentsFolder = getProject().getExperimentsFolder();
- for (TmfExperimentElement experiment : experimentsFolder.getExperiments()) {
- for (TmfTraceElement trace : experiment.getTraces()) {
- if (trace.getElementPath().equals(getElementPath())) {
- experiment.closeEditors();
- break;
+ if (experimentsFolder != null) {
+ for (TmfExperimentElement experiment : experimentsFolder.getExperiments()) {
+ for (TmfTraceElement trace : experiment.getTraces()) {
+ if (trace.getElementPath().equals(getElementPath())) {
+ experiment.closeEditors();
+ break;
+ }
}
}
}
}
});
- IPath path = fResource.getLocation();
+ IPath path = getResource().getLocation();
if (path != null) {
if (getParent() instanceof TmfTraceFolder) {
TmfExperimentFolder experimentFolder = getProject().getExperimentsFolder();
// Propagate the removal to traces
- for (TmfExperimentElement experiment : experimentFolder.getExperiments()) {
- List<TmfTraceElement> toRemove = new LinkedList<>();
- for (TmfTraceElement trace : experiment.getTraces()) {
- if (trace.getElementPath().equals(getElementPath())) {
- toRemove.add(trace);
+ if (experimentFolder != null) {
+ for (TmfExperimentElement experiment : experimentFolder.getExperiments()) {
+ List<TmfTraceElement> toRemove = new LinkedList<>();
+ for (TmfTraceElement trace : experiment.getTraces()) {
+ if (trace.getElementPath().equals(getElementPath())) {
+ toRemove.add(trace);
+ }
+ }
+ for (TmfTraceElement child : toRemove) {
+ experiment.removeTrace(child);
}
- }
- for (TmfTraceElement child : toRemove) {
- experiment.removeTrace(child);
}
}
-
// Delete supplementary files
deleteSupplementaryFolder();
}
// Finally, delete the trace
- fResource.delete(true, progressMonitor);
+ getResource().delete(true, progressMonitor);
+ }
+
+ /**
+ * Update the trace's start time
+ *
+ * @param startTime
+ * updated start time for this trace
+ * @since 3.0
+ */
+ public void setStartTime(ITmfTimestamp startTime) {
+ fStartTime = startTime;
+ }
+
+ /**
+ * Getter for the trace start time
+ *
+ * @return the start time from the trace if available, or from self when
+ * read in advance from supplementary files or from fast trace read.
+ * Return null if completely unknown.
+ * @since 3.0
+ */
+ public ITmfTimestamp getStartTime() {
+ ITmfTrace trace = getTrace();
+ if (trace != null) {
+ setStartTime(trace.getStartTime());
+ }
+ return fStartTime;
+ }
+
+ /**
+ * Update the trace's end time
+ *
+ * @param end
+ * updated end time for this trace
+ * @since 3.0
+ */
+ public void setEndTime(@NonNull ITmfTimestamp end) {
+ if (fEndTime == null || end.compareTo(fEndTime) > 0) {
+ fEndTime = end;
+ }
+ }
+
+ /**
+ * Getter for the trace end time
+ *
+ * @return the end time from the trace if available, or from self when read
+ * in advance from supplementary files or from fast trace read.
+ * Return null if completely unknown.
+ * @since 3.0
+ */
+ public ITmfTimestamp getEndTime() {
+ ITmfTrace trace = getTrace();
+ if (trace != null) {
+ setEndTime(trace.getEndTime());
+ }
+ return fEndTime;
+ }
+
+ @Override
+ public void deleteSupplementaryResources(IResource[] resources) {
+ /* Invalidate the cached trace bounds */
+ fStartTime = null;
+ fEndTime = null;
+
+ super.deleteSupplementaryResources(resources);
}
}