tmf: Expose TmfExperiment.getTraces() up to ITmfTrace
authorAlexandre Montplaisir <alexmonthy@voxpopuli.im>
Wed, 27 Mar 2013 19:00:33 +0000 (15:00 -0400)
committerAlexandre Montplaisir <alexmonthy@voxpopuli.im>
Fri, 12 Apr 2013 17:37:13 +0000 (13:37 -0400)
When a view should display information about either 1 stand-alone
trace or an experiment, it will be able to call trace.getTraces()
directly, without having to do clunky instanceof checks every
single time.

Change-Id: I2f962a1dc4e6e34bf956aa0e62ba8b42cb234a99
Signed-off-by: Alexandre Montplaisir <alexmonthy@voxpopuli.im>
Reviewed-on: https://git.eclipse.org/r/11531
Tested-by: Hudson CI
Reviewed-by: Bernd Hufmann <bhufmann@gmail.com>
Tested-by: Bernd Hufmann <bhufmann@gmail.com>
Reviewed-by: Patrick Tasse <patrick.tasse@gmail.com>
IP-Clean: Patrick Tasse <patrick.tasse@gmail.com>

org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowView.java
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesView.java
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/internal/tmf/core/statesystem/HistoryBuilder.java
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/ITmfTrace.java
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfExperiment.java
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfTrace.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/statistics/TmfStatisticsViewer.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/environment/TmfEnvironmentView.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/statistics/TmfStatisticsView.java

index 8c1d147d64ec7a8c3f9bd6d29b149895f4434984..25845b645e53f6c9cc6f41167717dd4dd4fafdd5 100644 (file)
@@ -48,7 +48,6 @@ import org.eclipse.linuxtools.tmf.core.timestamp.ITmfTimestamp;
 import org.eclipse.linuxtools.tmf.core.timestamp.TmfTimeRange;
 import org.eclipse.linuxtools.tmf.core.timestamp.TmfTimestamp;
 import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
-import org.eclipse.linuxtools.tmf.core.trace.TmfExperiment;
 import org.eclipse.linuxtools.tmf.ui.views.TmfView;
 import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.ITimeGraphRangeListener;
 import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.ITimeGraphSelectionListener;
@@ -505,14 +504,7 @@ public class ControlFlowView extends TmfView {
         final long time = signal.getCurrentTime().normalize(0, ITmfTimestamp.NANOSECOND_SCALE).getValue();
 
         int thread = -1;
-        ITmfTrace[] traces;
-        if (fTrace instanceof TmfExperiment) {
-            TmfExperiment experiment = (TmfExperiment) fTrace;
-            traces = experiment.getTraces();
-        } else {
-            traces = new ITmfTrace[] { fTrace };
-        }
-        for (ITmfTrace trace : traces) {
+        for (ITmfTrace trace : fTrace.getTraces()) {
             if (thread > 0) {
                 break;
             }
@@ -609,15 +601,8 @@ public class ControlFlowView extends TmfView {
     private void buildEventList(final ITmfTrace trace, IProgressMonitor monitor) {
         fStartTime = Long.MAX_VALUE;
         fEndTime = Long.MIN_VALUE;
-        ITmfTrace[] traces;
-        if (trace instanceof TmfExperiment) {
-            TmfExperiment experiment = (TmfExperiment) trace;
-            traces = experiment.getTraces();
-        } else {
-            traces = new ITmfTrace[] { trace };
-        }
         ArrayList<ControlFlowEntry> rootList = new ArrayList<ControlFlowEntry>();
-        for (ITmfTrace aTrace : traces) {
+        for (ITmfTrace aTrace : trace.getTraces()) {
             if (monitor.isCanceled()) {
                 return;
             }
index de062eafa6dc8c58cdb759c9131a89c55145024f..2ed9e30f05718684e7c778d99f732a9f071e4c3f 100644 (file)
@@ -44,7 +44,6 @@ import org.eclipse.linuxtools.tmf.core.timestamp.ITmfTimestamp;
 import org.eclipse.linuxtools.tmf.core.timestamp.TmfTimeRange;
 import org.eclipse.linuxtools.tmf.core.timestamp.TmfTimestamp;
 import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
-import org.eclipse.linuxtools.tmf.core.trace.TmfExperiment;
 import org.eclipse.linuxtools.tmf.ui.views.TmfView;
 import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.ITimeGraphRangeListener;
 import org.eclipse.linuxtools.tmf.ui.widgets.timegraph.ITimeGraphTimeListener;
@@ -479,15 +478,8 @@ public class ResourcesView extends TmfView {
     private void buildEventList(final ITmfTrace trace, IProgressMonitor monitor) {
         fStartTime = Long.MAX_VALUE;
         fEndTime = Long.MIN_VALUE;
-        ITmfTrace[] traces;
-        if (trace instanceof TmfExperiment) {
-            TmfExperiment experiment = (TmfExperiment) trace;
-            traces = experiment.getTraces();
-        } else {
-            traces = new ITmfTrace[] { trace };
-        }
         ArrayList<TraceEntry> entryList = new ArrayList<TraceEntry>();
-        for (ITmfTrace aTrace : traces) {
+        for (ITmfTrace aTrace : trace.getTraces()) {
             if (monitor.isCanceled()) {
                 return;
             }
index e8b14c8a75d57a0a925a1a4a33e7dba4d0ce5ed8..d0c454321158e5f5661d58a390aa3f0049c99135 100644 (file)
@@ -29,7 +29,6 @@ import org.eclipse.linuxtools.tmf.core.statesystem.ITmfStateSystem;
 import org.eclipse.linuxtools.tmf.core.statesystem.ITmfStateSystemBuilder;
 import org.eclipse.linuxtools.tmf.core.timestamp.TmfTimeRange;
 import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
-import org.eclipse.linuxtools.tmf.core.trace.TmfExperiment;
 
 /**
  * This is the high-level wrapper around the State History and its input and
@@ -159,26 +158,27 @@ public class HistoryBuilder extends TmfComponent {
      */
     @TmfSignalHandler
     public void traceRangeUpdated(final TmfTraceRangeUpdatedSignal signal) {
-        ITmfTrace trace = signal.getTrace();
-        if (signal.getTrace() instanceof TmfExperiment) {
-            TmfExperiment experiment = (TmfExperiment) signal.getTrace();
-            for (ITmfTrace expTrace : experiment.getTraces()) {
-                if (expTrace == sci.getTrace()) {
-                    trace = expTrace;
-                    break;
-                }
+        /*
+         * Check if this signal is for this trace, or for an experiment
+         * containing this trace.
+         */
+        ITmfTrace sender = signal.getTrace();
+        ITmfTrace target = null;
+        for (ITmfTrace trace : sender.getTraces()) {
+            if (trace == sci.getTrace()) {
+                target = trace;
+                break;
             }
         }
-        if (trace != sci.getTrace()) {
+
+        if (target == null) {
             return;
         }
-        /* the signal is for this trace or for an experiment containing this trace */
 
         if (!started) {
             started = true;
             StateSystemBuildRequest request = new StateSystemBuildRequest(this);
-            trace = signal.getTrace();
-            trace.sendRequest(request);
+            sender.sendRequest(request);
         }
     }
 
@@ -190,22 +190,19 @@ public class HistoryBuilder extends TmfComponent {
      */
     @TmfSignalHandler
     public void traceClosed(TmfTraceClosedSignal signal) {
-        ITmfTrace trace = signal.getTrace();
-        if (signal.getTrace() instanceof TmfExperiment) {
-            TmfExperiment experiment = (TmfExperiment) signal.getTrace();
-            for (ITmfTrace expTrace : experiment.getTraces()) {
-                if (expTrace == sci.getTrace()) {
-                    trace = expTrace;
-                    break;
-                }
+        /*
+         * Check if this signal is for this trace, or for an experiment
+         * containing this trace.
+         */
+        boolean found = false;
+        for (ITmfTrace trace : signal.getTrace().getTraces()) {
+            if (trace == sci.getTrace()) {
+                found = true;
+                break;
             }
         }
-        if (trace != sci.getTrace()) {
-            return;
-        }
-        /* the signal is for this trace or for an experiment containing this trace */
 
-        if (!started) {
+        if (found && !started) {
             close(true);
         }
     }
index 8ea4666ff96598c0efb5f6c40b97ed6b1c828dd0..7badaff5531f74d9698e9a688555fcd071902b6c 100644 (file)
@@ -156,6 +156,20 @@ public interface ITmfTrace extends ITmfDataProvider {
     // Basic getters
     // ------------------------------------------------------------------------
 
+    /**
+     * If this trace is used as a container for sub-traces, this can be used to
+     * get the sub-traces themselves. If the trace is stand-alone, this should
+     * return an array with only "this" inside. For this reason, be careful if
+     * calling this recursively.
+     *
+     * This offers a standard way of iterating through compound traces (like
+     * experiments).
+     *
+     * @return The array of sub-traces.
+     * @since 2.0
+     */
+    public ITmfTrace[] getTraces();
+
     /**
      * @return the trace event type
      */
index 06758abbbc4a3d317511d4384b631d7280010a94..0b0bebf039e6a5fafcaa1e3ed19c6ae712a9877d 100644 (file)
@@ -191,11 +191,7 @@ public class TmfExperiment extends TmfTrace implements ITmfEventParser {
     // Accessors
     // ------------------------------------------------------------------------
 
-    /**
-     * Get the list of traces. Handle with care...
-     *
-     * @return the experiment traces
-     */
+    @Override
     public ITmfTrace[] getTraces() {
         return fTraces;
     }
index 5fc15d9c77fc84602e4c26717b7cec809e546608..6e5108b91841b9a0ba0eb2ca6ff0175358e053b5 100644 (file)
@@ -339,6 +339,14 @@ public abstract class TmfTrace extends TmfEventProvider implements ITmfTrace {
     // ITmfTrace - Basic getters
     // ------------------------------------------------------------------------
 
+    /**
+     * @since 2.0
+     */
+    @Override
+    public ITmfTrace[] getTraces() {
+        return new ITmfTrace[] { this };
+    }
+
     /* (non-Javadoc)
      * @see org.eclipse.linuxtools.tmf.core.trace.ITmfTrace#getEventType()
      */
@@ -716,40 +724,41 @@ public abstract class TmfTrace extends TmfEventProvider implements ITmfTrace {
      */
     @TmfSignalHandler
     public void traceOpened(TmfTraceOpenedSignal signal) {
-        ITmfTrace trace = signal.getTrace();
-        if (signal.getTrace() instanceof TmfExperiment) {
-            TmfExperiment experiment = (TmfExperiment) signal.getTrace();
-            for (ITmfTrace expTrace : experiment.getTraces()) {
-                if (expTrace == this) {
-                    trace = expTrace;
-                    break;
-                }
+        ITmfTrace trace = null;
+        for (ITmfTrace expTrace : signal.getTrace().getTraces()) {
+            if (expTrace == this) {
+                trace = expTrace;
+                break;
             }
         }
-        if (trace == this) {
-            /* the signal is for this trace or for an experiment containing this trace */
-            try {
-                buildStatistics();
-            } catch (TmfTraceException e) {
-                e.printStackTrace();
-            }
-            try {
-                buildStateSystem();
-            } catch (TmfTraceException e) {
-                e.printStackTrace();
-            }
 
-            /* Refresh the project, so it can pick up new files that got created. */
-            try {
-                if (fResource != null) {
-                    fResource.getProject().refreshLocal(IResource.DEPTH_INFINITE, null);
-                }
-            } catch (CoreException e) {
-                e.printStackTrace();
+        if (trace == null) {
+            /* This signal is not for us */
+            return;
+        }
+
+        /*
+         * The signal is for this trace, or for an experiment containing
+         * this trace.
+         */
+        try {
+            buildStatistics();
+            buildStateSystem();
+        } catch (TmfTraceException e) {
+            e.printStackTrace();
+        }
+
+        /* Refresh the project, so it can pick up new files that got created. */
+        try {
+            if (fResource != null) {
+                fResource.getProject().refreshLocal(IResource.DEPTH_INFINITE, null);
             }
+        } catch (CoreException e) {
+            e.printStackTrace();
         }
+
         if (signal.getTrace() == this) {
-            /* the signal is for this trace or experiment */
+            /* Additionally, the signal is directly for this trace or experiment. */
             if (getNbEvents() == 0) {
                 return;
             }
index 984cd414cb3c7fd1dc5bc1b719f6899ac6a8bf6b..b8a9264bc1844a5e9da133cf76fd50f22c15a180 100644 (file)
@@ -564,14 +564,8 @@ public class TmfStatisticsViewer extends TmfViewer {
             // Checks if the trace is already in the statistics tree.
             int numNodeTraces = statisticsTreeNode.getNbChildren();
 
-            int numTraces = 1;
-            ITmfTrace[] trace = { fTrace };
-            // For experiment, gets all the traces within it
-            if (fTrace instanceof TmfExperiment) {
-                TmfExperiment experiment = (TmfExperiment) fTrace;
-                numTraces = experiment.getTraces().length;
-                trace = experiment.getTraces();
-            }
+            ITmfTrace[] traces = fTrace.getTraces();
+            int numTraces = traces.length;
 
             if (numTraces == numNodeTraces) {
                 boolean same = true;
@@ -580,7 +574,7 @@ public class TmfStatisticsViewer extends TmfViewer {
                  * previously selected.
                  */
                 for (int i = 0; i < numTraces; i++) {
-                    String traceName = trace[i].getName();
+                    String traceName = traces[i].getName();
                     if (!statisticsTreeNode.containsChild(traceName)) {
                         same = false;
                         break;
@@ -711,13 +705,7 @@ public class TmfStatisticsViewer extends TmfViewer {
                 statTree.resetTimeRangeValue();
             }
 
-            ITmfTrace[] traces;
-            if (trace instanceof TmfExperiment) {
-                TmfExperiment experiment = (TmfExperiment) trace;
-                traces = experiment.getTraces();
-            } else {
-                traces = new ITmfTrace[] { trace };
-            }
+            ITmfTrace[] traces = trace.getTraces();
             for (final ITmfTrace aTrace : traces) {
                 if (!isListeningTo(aTrace)) {
                     continue;
index ed7b249e97c8a98bef540ac9e4d00966f092a662..aa95186b982c7ff825972f6cd529008afa7e53e3 100644 (file)
@@ -17,7 +17,6 @@ import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceClosedSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceSelectedSignal;
 import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
-import org.eclipse.linuxtools.tmf.core.trace.TmfExperiment;
 import org.eclipse.linuxtools.tmf.ui.views.TmfView;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
@@ -77,13 +76,7 @@ public class TmfEnvironmentView extends TmfView {
             return;
         }
 
-        ITmfTrace[] traces;
-        if (fTrace instanceof TmfExperiment) {
-            TmfExperiment experiment = (TmfExperiment) fTrace;
-            traces = experiment.getTraces();
-        } else {
-            traces = new ITmfTrace[] { fTrace };
-        }
+        ITmfTrace[] traces = fTrace.getTraces();
 
         for (ITmfTrace trace : traces) {
             if (trace instanceof CtfTmfTrace) {
index 0cd3c286d58f50b9efc60092e89516b23fb5c465..8fd763493eabf5691f336c1bf48790ce9778db3b 100755 (executable)
@@ -26,7 +26,6 @@ import org.eclipse.linuxtools.tmf.core.signal.TmfTraceOpenedSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceRangeUpdatedSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceSelectedSignal;
 import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
-import org.eclipse.linuxtools.tmf.core.trace.TmfExperiment;
 import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceType;
 import org.eclipse.linuxtools.tmf.ui.viewers.ITmfViewer;
 import org.eclipse.linuxtools.tmf.ui.viewers.statistics.TmfStatisticsViewer;
@@ -252,13 +251,7 @@ public class TmfStatisticsView extends TmfView {
 
             String traceName;
             IResource traceResource;
-            ITmfTrace[] traces;
-            if (fTrace instanceof TmfExperiment) {
-                TmfExperiment experiment = (TmfExperiment) fTrace;
-                traces = experiment.getTraces();
-            } else {
-                traces = new ITmfTrace[] { fTrace };
-            }
+            ITmfTrace[] traces = fTrace.getTraces();
             // Creates a statistics viewer for each trace.
             for (ITmfTrace trace : traces) {
                 traceName = trace.getName();
This page took 0.032729 seconds and 5 git commands to generate.