/*******************************************************************************
- * 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.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 FileInfo fFileInfo;
+ private ITmfTimestamp fStartTime = null;
+ private ITmfTimestamp fEndTime = null;
// ------------------------------------------------------------------------
// Constructors
public IFile createBookmarksFile() throws CoreException {
IFile file = getBookmarksFile();
if (getResource() instanceof IFolder) {
- return createBookmarksFile(getProject().getTracesFolder().getResource(), ITmfEventsEditorConstants.TRACE_EDITOR_INPUT_TYPE);
+ 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;
}
// 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;
+ }
}
}
}
// 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;
+ }
}
}
}
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();
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);
+ }
+
}