tmf: Add a TmfTraceUtils class for advanced getter methods
authorAlexandre Montplaisir <alexmonthy@voxpopuli.im>
Thu, 27 Nov 2014 22:50:20 +0000 (17:50 -0500)
committerAlexandre Montplaisir <alexmonthy@voxpopuli.im>
Fri, 28 Nov 2014 22:13:04 +0000 (17:13 -0500)
For instance, the various getModuleFromClass() methods should not
be part of the base interface, the trace should only expose a basic
getter. The more fancy functions can however be implemented in a
separate utility class.

Change-Id: I8d957971abfbcc7e3afe81f5db2dba43cbebe84d
Signed-off-by: Alexandre Montplaisir <alexmonthy@voxpopuli.im>
Reviewed-on: https://git.eclipse.org/r/37218
Tested-by: Hudson CI
20 files changed:
org.eclipse.tracecompass.examples/src/org/eclipse/tracecompass/examples/ui/viewers/histogram/NewHistogramViewer.java
org.eclipse.tracecompass.lttng2.kernel.core/src/org/eclipse/tracecompass/lttng2/kernel/core/analysis/cpuusage/LttngKernelCpuUsageAnalysis.java
org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/views/cpuusage/CpuUsageComposite.java
org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/views/cpuusage/CpuUsageXYViewer.java
org.eclipse.tracecompass.lttng2.ust.ui/src/org/eclipse/tracecompass/internal/lttng2/ust/ui/views/memusage/MemoryUsageViewer.java
org.eclipse.tracecompass.tmf.analysis.xml.ui/src/org/eclipse/tracecompass/internal/tmf/analysis/xml/ui/views/xychart/XmlXYViewer.java
org.eclipse.tracecompass.tmf.analysis.xml.ui/src/org/eclipse/tracecompass/tmf/analysis/xml/ui/views/timegraph/XmlTimeGraphView.java
org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/trace/AllTests.java
org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/trace/TmfExperimentTest.java
org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/trace/TmfTraceTest.java
org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/trace/TmfTraceUtilsTest.java [new file with mode: 0644]
org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statesystem/TmfStateSystemAnalysisModule.java
org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/ITmfTrace.java
org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/TmfTrace.java
org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/TmfTraceUtils.java [new file with mode: 0644]
org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/experiment/TmfExperimentUtils.java
org.eclipse.tracecompass.tmf.pcap.ui/src/org/eclipse/tracecompass/internal/tmf/pcap/ui/stream/StreamListView.java
org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/viewers/statistics/TmfStatisticsViewer.java
org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/callstack/CallStackView.java
org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/statesystem/TmfStateSystemViewer.java

index aa4d0e37ca19f739ad208b95e0d23e3998ca974d..61d0ba3e2976a8f638e2303138424a329745c86b 100644 (file)
@@ -22,6 +22,7 @@ import org.eclipse.tracecompass.tmf.core.statistics.ITmfStatistics;
 import org.eclipse.tracecompass.tmf.core.statistics.TmfStatisticsModule;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 import org.eclipse.tracecompass.tmf.ui.viewers.xycharts.barcharts.TmfBarChartViewer;
 import org.swtchart.Chart;
 import org.swtchart.IAxis;
@@ -75,7 +76,7 @@ public class NewHistogramViewer extends TmfBarChartViewer {
                     for (ITmfTrace trace : TmfTraceManager.getTraceSet(getTrace())) {
                         /* Retrieve the statistics object */
                         final TmfStatisticsModule statsMod =
-                               trace.getAnalysisModuleOfClass(TmfStatisticsModule.class, TmfStatisticsModule.ID);
+                               TmfTraceUtils.getAnalysisModuleOfClass(trace, TmfStatisticsModule.class, TmfStatisticsModule.ID);
                         if (statsMod == null) {
                             /* No statistics module available for this trace */
                             continue;
index bc20ad202de3e1dfed658918a783692cf83fed7d..569b0fe71af895e3014f8b070f86fc0965d26cba 100644 (file)
@@ -35,6 +35,7 @@ import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
 import org.eclipse.tracecompass.tmf.core.statesystem.ITmfStateProvider;
 import org.eclipse.tracecompass.tmf.core.statesystem.TmfStateSystemAnalysisModule;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 
 /**
  * This analysis module computes the CPU usage of a system from a kernel trace.
@@ -87,9 +88,11 @@ public class LttngKernelCpuUsageAnalysis extends TmfStateSystemAnalysisModule {
          * This analysis depends on the LTTng kernel analysis, so it's added to
          * dependent modules.
          */
-        Iterable<LttngKernelAnalysis> kernelModules = trace.getAnalysisModulesOfClass(LttngKernelAnalysis.class);
-        if (kernelModules.iterator().hasNext()) {
-            modules.add(kernelModules.iterator().next());
+        Iterable<LttngKernelAnalysis> kernelModules = TmfTraceUtils.getAnalysisModulesOfClass(trace, LttngKernelAnalysis.class);
+        for (LttngKernelAnalysis kernelModule : kernelModules) {
+            /* Only add the first one we find, if there is one */
+            modules.add(kernelModule);
+            break;
         }
         return modules;
     }
index c7dbf7252ee5cbdfaaed844c97ac8173b0627232..182e3c6e2a90b2dd1d2218fd3d04f264bd1abb32 100644 (file)
@@ -35,6 +35,7 @@ import org.eclipse.tracecompass.statesystem.core.interval.ITmfStateInterval;
 import org.eclipse.tracecompass.statesystem.core.statevalue.ITmfStateValue;
 import org.eclipse.tracecompass.tmf.core.statesystem.TmfStateSystemAnalysisModule;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 import org.eclipse.tracecompass.tmf.ui.viewers.tree.AbstractTmfTreeViewer;
 import org.eclipse.tracecompass.tmf.ui.viewers.tree.ITmfTreeColumnDataProvider;
 import org.eclipse.tracecompass.tmf.ui.viewers.tree.ITmfTreeViewerEntry;
@@ -194,7 +195,7 @@ public class CpuUsageComposite extends AbstractTmfTreeViewer {
 
     @Override
     public void initializeDataSource() {
-        fModule = getTrace().getAnalysisModuleOfClass(LttngKernelCpuUsageAnalysis.class, LttngKernelCpuUsageAnalysis.ID);
+        fModule = TmfTraceUtils.getAnalysisModuleOfClass(getTrace(), LttngKernelCpuUsageAnalysis.class, LttngKernelCpuUsageAnalysis.ID);
         if (fModule == null) {
             return;
         }
index cf2ee31763bbedbfe3de1e9bb8f91054dc8ee827..9b273a7d3494b12ca2a0e8b4b05c407b97a1d297 100644 (file)
@@ -24,6 +24,7 @@ import org.eclipse.tracecompass.internal.lttng2.kernel.ui.Activator;
 import org.eclipse.tracecompass.lttng2.kernel.core.analysis.cpuusage.LttngKernelCpuUsageAnalysis;
 import org.eclipse.tracecompass.statesystem.core.ITmfStateSystem;
 import org.eclipse.tracecompass.statesystem.core.exceptions.StateValueTypeException;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 import org.eclipse.tracecompass.tmf.ui.viewers.xycharts.linecharts.TmfCommonXLineChartViewer;
 
 /**
@@ -63,7 +64,7 @@ public class CpuUsageXYViewer extends TmfCommonXLineChartViewer {
     @Override
     protected void initializeDataSource() {
         if (getTrace() != null) {
-            fModule = getTrace().getAnalysisModuleOfClass(LttngKernelCpuUsageAnalysis.class, LttngKernelCpuUsageAnalysis.ID);
+            fModule = TmfTraceUtils.getAnalysisModuleOfClass(getTrace(), LttngKernelCpuUsageAnalysis.class, LttngKernelCpuUsageAnalysis.ID);
             if (fModule == null) {
                 return;
             }
index cf8a76bb698a3901bcd1ee8eff202fe95eca6fff..3a51cd6357c0b62fdded655f1e942d8edac065c9 100644 (file)
@@ -29,6 +29,7 @@ import org.eclipse.tracecompass.statesystem.core.exceptions.StateValueTypeExcept
 import org.eclipse.tracecompass.statesystem.core.exceptions.TimeRangeException;
 import org.eclipse.tracecompass.statesystem.core.statevalue.ITmfStateValue;
 import org.eclipse.tracecompass.tmf.core.statesystem.TmfStateSystemAnalysisModule;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 import org.eclipse.tracecompass.tmf.ui.viewers.xycharts.linecharts.TmfCommonXLineChartViewer;
 
 /**
@@ -63,7 +64,7 @@ public class MemoryUsageViewer extends TmfCommonXLineChartViewer {
     @Override
     protected void initializeDataSource() {
         if (getTrace() != null) {
-            fModule = getTrace().getAnalysisModuleOfClass(TmfStateSystemAnalysisModule.class, UstMemoryAnalysisModule.ID);
+            fModule = TmfTraceUtils.getAnalysisModuleOfClass(getTrace(), TmfStateSystemAnalysisModule.class, UstMemoryAnalysisModule.ID);
             if (fModule == null) {
                 return;
             }
index c69c722ab02ac6543b0e99e8369eb4bd18fac01b..b102158df0189f56b64bdda5e01e19c1f43335a0 100644 (file)
@@ -43,6 +43,7 @@ import org.eclipse.tracecompass.tmf.analysis.xml.core.stateprovider.TmfXmlString
 import org.eclipse.tracecompass.tmf.core.statesystem.ITmfAnalysisModuleWithStateSystems;
 import org.eclipse.tracecompass.tmf.core.statesystem.TmfStateSystemAnalysisModule;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 import org.eclipse.tracecompass.tmf.ui.viewers.xycharts.linecharts.TmfCommonXLineChartViewer;
 import org.w3c.dom.Element;
 
@@ -337,12 +338,12 @@ public class XmlXYViewer extends TmfCommonXLineChartViewer {
             /*
              * No analysis specified, take all state system analysis modules
              */
-            for (ITmfAnalysisModuleWithStateSystems module : trace.getAnalysisModulesOfClass(ITmfAnalysisModuleWithStateSystems.class)) {
+            for (ITmfAnalysisModuleWithStateSystems module : TmfTraceUtils.getAnalysisModulesOfClass(trace, ITmfAnalysisModuleWithStateSystems.class)) {
                 stateSystemModules.add(module);
             }
         } else {
             for (String moduleId : analysisIds) {
-                ITmfAnalysisModuleWithStateSystems module = trace.getAnalysisModuleOfClass(ITmfAnalysisModuleWithStateSystems.class, moduleId);
+                ITmfAnalysisModuleWithStateSystems module = TmfTraceUtils.getAnalysisModuleOfClass(trace, ITmfAnalysisModuleWithStateSystems.class, moduleId);
                 if (module != null) {
                     stateSystemModules.add(module);
                 }
index 2b99035d65b4935d4dc32344af6a4037a79af98f..c11c40731fab1b5aea36a877ddd7e033b6d33637 100644 (file)
@@ -50,6 +50,7 @@ import org.eclipse.tracecompass.tmf.core.statesystem.ITmfAnalysisModuleWithState
 import org.eclipse.tracecompass.tmf.core.statesystem.TmfStateSystemAnalysisModule;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 import org.eclipse.tracecompass.tmf.ui.views.timegraph.AbstractTimeGraphView;
 import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.ITimeGraphPresentationProvider2;
 import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ILinkEvent;
@@ -253,12 +254,12 @@ public class XmlTimeGraphView extends AbstractTimeGraphView {
                 /*
                  * No analysis specified, take all state system analysis modules
                  */
-                for (ITmfAnalysisModuleWithStateSystems module : aTrace.getAnalysisModulesOfClass(ITmfAnalysisModuleWithStateSystems.class)) {
+                for (ITmfAnalysisModuleWithStateSystems module : TmfTraceUtils.getAnalysisModulesOfClass(aTrace, ITmfAnalysisModuleWithStateSystems.class)) {
                     stateSystemModules.add(module);
                 }
             } else {
                 for (String moduleId : analysisIds) {
-                    ITmfAnalysisModuleWithStateSystems module = aTrace.getAnalysisModuleOfClass(ITmfAnalysisModuleWithStateSystems.class, moduleId);
+                    ITmfAnalysisModuleWithStateSystems module = TmfTraceUtils.getAnalysisModuleOfClass(aTrace, ITmfAnalysisModuleWithStateSystems.class, moduleId);
                     if (module != null) {
                         stateSystemModules.add(module);
                     }
index abc62de7928d55cb9350ba777dc18d4cb0920c11..454f8a60e769dd395e55df8b4da405953ee3cedb 100644 (file)
@@ -26,6 +26,7 @@ import org.junit.runners.Suite;
     TmfExperimentTest.class,
     TmfExperimentUtilsTest.class,
     TmfMultiTraceExperimentTest.class,
-    TmfTraceTest.class
+    TmfTraceTest.class,
+    TmfTraceUtilsTest.class
 })
 public class AllTests {}
\ No newline at end of file
index 4b05e658d4662b0579d5340ced885bb346fae113..af6a2d3e528b5030da2a2aa69b565d62cdf55fd4 100644 (file)
@@ -44,6 +44,7 @@ import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
 import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment;
 import org.eclipse.tracecompass.tmf.core.trace.location.ITmfLocation;
 import org.eclipse.tracecompass.tmf.core.trace.location.TmfLongLocation;
@@ -201,7 +202,7 @@ public class TmfExperimentTest {
         /* Open the experiment, the modules should be populated */
         fExperiment.traceOpened(new TmfTraceOpenedSignal(this, fExperiment, null));
         modules = fExperiment.getAnalysisModules();
-        Iterable<TestExperimentAnalysis> testModules = fExperiment.getAnalysisModulesOfClass(TestExperimentAnalysis.class);
+        Iterable<TestExperimentAnalysis> testModules = TmfTraceUtils.getAnalysisModulesOfClass(fExperiment, TestExperimentAnalysis.class);
         assertTrue(modules.iterator().hasNext());
         assertTrue(testModules.iterator().hasNext());
     }
index f81471baa71a7d4314bcfa4ef7adfd01b8c82b44..c9ca107af4b4d7d218a5ff8ca096eeb808742183 100644 (file)
@@ -34,8 +34,8 @@ import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
 import org.eclipse.tracecompass.tmf.core.component.ITmfEventProvider;
 import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
 import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
-import org.eclipse.tracecompass.tmf.core.request.TmfEventRequest;
 import org.eclipse.tracecompass.tmf.core.request.ITmfEventRequest.ExecutionType;
+import org.eclipse.tracecompass.tmf.core.request.TmfEventRequest;
 import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager;
 import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
 import org.eclipse.tracecompass.tmf.core.tests.TmfCoreTestPlugin;
@@ -439,7 +439,7 @@ public class TmfTraceTest {
     // ------------------------------------------------------------------------
 
     @Test
-    public void testGetModulesByClass() {
+    public void testGetModules() {
         /* There should not be any modules at this point */
         Iterable<IAnalysisModule> modules = fTrace.getAnalysisModules();
         assertFalse(modules.iterator().hasNext());
@@ -448,22 +448,26 @@ public class TmfTraceTest {
         fTrace.traceOpened(new TmfTraceOpenedSignal(this, fTrace, null));
 
         modules = fTrace.getAnalysisModules();
-        Iterable<TestAnalysis> testModules = fTrace.getAnalysisModulesOfClass(TestAnalysis.class);
         assertTrue(modules.iterator().hasNext());
-        assertTrue(testModules.iterator().hasNext());
 
         /*
          * Make sure all modules of type TestAnalysis are returned in the second
          * call
          */
+        int count = 0;
         for (IAnalysisModule module : modules) {
             if (module instanceof TestAnalysis) {
+                count++;
                 IAnalysisModule otherModule = fTrace.getAnalysisModule(module.getId());
                 assertNotNull(otherModule);
-                assertTrue(otherModule.equals(module));
+                assertEquals(otherModule, module);
             }
         }
-
+        /*
+         * FIXME: The exact count depends on the context the test is run (full
+         * test suite or this file only), but there must be at least 2 modules
+         */
+        assertTrue(count >= 2);
     }
 
     // ------------------------------------------------------------------------
diff --git a/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/trace/TmfTraceUtilsTest.java b/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/trace/TmfTraceUtilsTest.java
new file mode 100644 (file)
index 0000000..cf051a7
--- /dev/null
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Alexandre Montplaisir - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.tmf.core.tests.trace;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
+import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
+import org.eclipse.tracecompass.tmf.core.signal.TmfSignalManager;
+import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
+import org.eclipse.tracecompass.tmf.core.tests.TmfCoreTestPlugin;
+import org.eclipse.tracecompass.tmf.core.tests.analysis.AnalysisManagerTest;
+import org.eclipse.tracecompass.tmf.core.tests.shared.TmfTestTrace;
+import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
+import org.eclipse.tracecompass.tmf.tests.stubs.analysis.TestAnalysis;
+import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Test suite for {@link TmfTraceUtils}
+ */
+public class TmfTraceUtilsTest {
+
+    private static final TmfTestTrace TEST_TRACE = TmfTestTrace.A_TEST_10K;
+
+    private TmfTrace fTrace;
+
+    // ------------------------------------------------------------------------
+    // Housekeeping
+    // ------------------------------------------------------------------------
+
+    /**
+     * Test setup
+     */
+    @Before
+    public void setUp() {
+        try {
+            final URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(TEST_TRACE.getFullPath()), null);
+            final File test = new File(FileLocator.toFileURL(location).toURI());
+            fTrace = new TmfTraceStub(test.toURI().getPath(), ITmfTrace.DEFAULT_TRACE_CACHE_SIZE, false, null);
+            TmfSignalManager.deregister(fTrace);
+            fTrace.indexTrace(true);
+        } catch (final TmfTraceException | URISyntaxException | IOException e) {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Test cleanup
+     */
+    @After
+    public void tearDown() {
+        fTrace.dispose();
+        fTrace = null;
+    }
+
+    // ------------------------------------------------------------------------
+    // Test methods
+    // ------------------------------------------------------------------------
+
+    /**
+     * Test the {@link TmfTraceUtils#getAnalysisModuleOfClass} method.
+     */
+    @Test
+    public void testGetModulesByClass() {
+        /* Open the trace, the modules should be populated */
+        fTrace.traceOpened(new TmfTraceOpenedSignal(this, fTrace, null));
+
+        Iterable<TestAnalysis> testModules = TmfTraceUtils.getAnalysisModulesOfClass(fTrace, TestAnalysis.class);
+        assertTrue(testModules.iterator().hasNext());
+
+        int count = 0;
+        for (TestAnalysis module : testModules) {
+            assertNotNull(module);
+            count++;
+        }
+        /*
+         * FIXME: The exact count depends on the context the test is run (full
+         * test suite or this file only), but there must be at least 2 modules
+         */
+        assertTrue(count >= 2);
+
+        TestAnalysis module = TmfTraceUtils.getAnalysisModuleOfClass(fTrace, TestAnalysis.class, AnalysisManagerTest.MODULE_PARAM);
+        assertNotNull(module);
+        IAnalysisModule traceModule = fTrace.getAnalysisModule(AnalysisManagerTest.MODULE_PARAM);
+        assertNotNull(traceModule);
+        assertEquals(module, traceModule);
+
+    }
+}
index 28f04a13060ae2aa378fb1d054f33f1f3d3f623d..4bc675f8596c31babf208d458dda6754e93debba 100644 (file)
@@ -45,6 +45,7 @@ import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTraceCompleteness;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment;
 
 /**
@@ -109,7 +110,7 @@ public abstract class TmfStateSystemAnalysisModule extends TmfAbstractAnalysisMo
      */
     public static @Nullable ITmfStateSystem getStateSystem(ITmfTrace trace, String moduleId) {
         TmfStateSystemAnalysisModule module =
-                trace.getAnalysisModuleOfClass(TmfStateSystemAnalysisModule.class, moduleId);
+                TmfTraceUtils.getAnalysisModuleOfClass(trace, TmfStateSystemAnalysisModule.class, moduleId);
         if (module != null) {
             IStatus status = module.schedule();
             if (status.isOK()) {
index 15b491e1f319658073697a5737ad700a74870b15..aede3ca57d7d0ff2f9fb0aeca32229f485338e7b 100644 (file)
@@ -243,46 +243,15 @@ public interface ITmfTrace extends ITmfEventProvider {
      *            The analysis module ID
      * @return The {@link IAnalysisModule} object, or null if an analysis with
      *         the given ID does no exist.
-     * @since 3.0
      */
-    @Nullable
-    IAnalysisModule getAnalysisModule(String id);
+    @Nullable IAnalysisModule getAnalysisModule(String id);
 
     /**
      * Get a list of all analysis modules currently available for this trace.
      *
      * @return An iterable view of the analysis modules
-     * @since 3.0
-     */
-    @NonNull
-    Iterable<IAnalysisModule> getAnalysisModules();
-
-    /**
-     * Get an analysis module belonging to this trace, with the specified ID and
-     * class.
-     *
-     * @param moduleClass
-     *            Returned modules must extend this class
-     * @param id
-     *            The ID of the analysis module
-     * @return The analysis module with specified class and ID, or null if no
-     *         such module exists.
-     * @since 3.0
-     */
-    @Nullable
-    <T extends IAnalysisModule> T getAnalysisModuleOfClass(Class<T> moduleClass, String id);
-
-    /**
-     * Return the analysis modules that are of a given class. Module are already
-     * casted to the requested class.
-     *
-     * @param moduleClass
-     *            Returned modules must extend this class
-     * @return List of modules of class moduleClass
-     * @since 3.0
      */
-    @NonNull
-    <T> Iterable<T> getAnalysisModulesOfClass(Class<T> moduleClass);
+    @NonNull Iterable<IAnalysisModule> getAnalysisModules();
 
     // ------------------------------------------------------------------------
     // Aspect getters
index fd3b7481145cc4a7b18c0d119234c9fbcfb3e129..07cc7d348eb0bbafebb7eed077fc75ed1157b62f 100644 (file)
@@ -22,7 +22,6 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Set;
 
 import org.eclipse.core.resources.IResource;
@@ -339,36 +338,6 @@ public abstract class TmfTrace extends TmfEventProvider implements ITmfTrace, IT
         }
     }
 
-    /**
-     * @since 3.0
-     */
-    @Override
-    public <T extends IAnalysisModule> T getAnalysisModuleOfClass(Class<T> moduleClass, String id) {
-        Iterable<T> modules = getAnalysisModulesOfClass(moduleClass);
-        for (T module : modules) {
-            if (id.equals(module.getId())) {
-                return module;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * @since 3.0
-     */
-    @Override
-    public <T> Iterable<T> getAnalysisModulesOfClass(Class<T> moduleClass) {
-        Set<T> modules = new HashSet<>();
-        synchronized (fAnalysisModules) {
-            for (Entry<String, IAnalysisModule> entry : fAnalysisModules.entrySet()) {
-                if (moduleClass.isAssignableFrom(entry.getValue().getClass())) {
-                    modules.add(moduleClass.cast(entry.getValue()));
-                }
-            }
-        }
-        return modules;
-    }
-
     @Override
     public Iterable<ITmfEventAspect> getEventAspects() {
         /* By default we provide only the base aspects valid for all trace types */
diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/TmfTraceUtils.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/TmfTraceUtils.java
new file mode 100644 (file)
index 0000000..e82bc76
--- /dev/null
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Alexandre Montplaisir - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.tmf.core.trace;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
+
+/**
+ * Utility methods for ITmfTrace's.
+ *
+ * @author Alexandre Montplaisir
+ */
+public final class TmfTraceUtils {
+
+    private TmfTraceUtils() {}
+
+    /**
+     * Get an analysis module belonging to this trace, with the specified ID and
+     * class.
+     *
+     * @param trace
+     *            The trace for which you want the modules
+     * @param moduleClass
+     *            Returned modules must extend this class
+     * @param id
+     *            The ID of the analysis module
+     * @return The analysis module with specified class and ID, or null if no
+     *         such module exists.
+     */
+    public static @Nullable <T extends IAnalysisModule> T getAnalysisModuleOfClass(ITmfTrace trace,
+            Class<T> moduleClass, String id) {
+        Iterable<T> modules = getAnalysisModulesOfClass(trace, moduleClass);
+        for (T module : modules) {
+            if (id.equals(module.getId())) {
+                return module;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Return the analysis modules that are of a given class. Module will be
+     * casted to the requested class.
+     *
+     * @param trace
+     *            The trace for which you want the modules
+     * @param moduleClass
+     *            Returned modules must extend this class
+     * @return List of modules of class moduleClass
+     */
+    public static @NonNull <T> Iterable<T> getAnalysisModulesOfClass(ITmfTrace trace, Class<T> moduleClass) {
+        Iterable<IAnalysisModule> analysisModules = trace.getAnalysisModules();
+        Set<T> modules = new HashSet<>();
+        for  (IAnalysisModule module : analysisModules) {
+            if (moduleClass.isAssignableFrom(module.getClass())) {
+                modules.add(moduleClass.cast(module));
+            }
+        }
+        return modules;
+    }
+}
index 1695ad10326ad69413f7c243ecbd40aebdef27cc..74b8d0ee80b129352f24a10d71a7763c83a97246 100644 (file)
@@ -19,6 +19,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
 import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 
 /**
  * This utility class contains some utility methods to retrieve specific traces
@@ -86,7 +87,7 @@ public final class TmfExperimentUtils {
      */
     public static @Nullable <T extends IAnalysisModule> T getAnalysisModuleOfClassForHost(TmfExperiment experiment, String hostId, Class<T> moduleClass) {
         for (ITmfTrace trace : getTracesFromHost(experiment, hostId)) {
-            for (T module : trace.getAnalysisModulesOfClass(moduleClass)) {
+            for (T module : TmfTraceUtils.getAnalysisModulesOfClass(trace, moduleClass)) {
                 return module;
             }
         }
index 7c49d154067f0f29ab6b84a3a9c48a1ef678c9cb..7fed461c008427ddcd4451388adace9d765fa133 100644 (file)
@@ -53,6 +53,7 @@ import org.eclipse.tracecompass.tmf.core.signal.TmfTraceClosedSignal;
 import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
 import org.eclipse.tracecompass.tmf.core.signal.TmfTraceSelectedSignal;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 import org.eclipse.tracecompass.tmf.ui.project.model.TraceUtils;
 import org.eclipse.tracecompass.tmf.ui.views.TmfView;
 import org.eclipse.tracecompass.tmf.ui.views.filter.FilterManager;
@@ -189,7 +190,7 @@ public class StreamListView extends TmfView {
                 if (trace == null || (!(trace instanceof PcapTrace))) {
                     return;
                 }
-                StreamListAnalysis analysis = trace.getAnalysisModuleOfClass(StreamListAnalysis.class, StreamListAnalysis.ID);
+                StreamListAnalysis analysis = TmfTraceUtils.getAnalysisModuleOfClass(trace, StreamListAnalysis.class, StreamListAnalysis.ID);
                 if (analysis == null) {
                     return;
                 }
@@ -265,7 +266,7 @@ public class StreamListView extends TmfView {
                     return;
                 }
 
-                StreamListAnalysis analysis = trace.getAnalysisModuleOfClass(StreamListAnalysis.class, StreamListAnalysis.ID);
+                StreamListAnalysis analysis = TmfTraceUtils.getAnalysisModuleOfClass(trace, StreamListAnalysis.class, StreamListAnalysis.ID);
                 if (analysis == null) {
                     return;
                 }
index 75f07721405abff56e96980ee79299527e189b90..ba9a62995483b9aa53dbf11a023c9baf31c02440 100644 (file)
@@ -49,6 +49,7 @@ import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp;
 import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment;
 import org.eclipse.tracecompass.tmf.ui.TmfUiRefreshHandler;
 import org.eclipse.tracecompass.tmf.ui.viewers.TmfViewer;
@@ -642,7 +643,7 @@ public class TmfStatisticsViewer extends TmfViewer {
             }
 
             /* Retrieve the statistics object */
-            final TmfStatisticsModule statsMod = aTrace.getAnalysisModuleOfClass(TmfStatisticsModule.class, TmfStatisticsModule.ID);
+            final TmfStatisticsModule statsMod = TmfTraceUtils.getAnalysisModuleOfClass(aTrace, TmfStatisticsModule.class, TmfStatisticsModule.ID);
             if (statsMod == null) {
                 /* No statistics module available for this trace */
                 continue;
index 3cde0c68b22fe29835b34ad60a5abe80c8cc6831..503e9a7719b81d76805a0a1c9d8a4007c8dea65e 100644 (file)
@@ -84,6 +84,7 @@ import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
 import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestampDelta;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 import org.eclipse.tracecompass.tmf.ui.editors.ITmfTraceEditor;
 import org.eclipse.tracecompass.tmf.ui.views.TmfView;
 import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.ITimeGraphContentProvider;
@@ -1320,7 +1321,7 @@ public class CallStackView extends TmfView {
          * will search using the analysis type.
          */
         Iterable<AbstractCallStackAnalysis> modules =
-                trace.getAnalysisModulesOfClass(AbstractCallStackAnalysis.class);
+                TmfTraceUtils.getAnalysisModulesOfClass(trace, AbstractCallStackAnalysis.class);
         Iterator<AbstractCallStackAnalysis> it = modules.iterator();
         if (!it.hasNext()) {
             /* This trace does not provide a call-stack analysis */
index 5bcd2718d90c16830787b04cc5a7b2fe2bee10fb..462196d71b378cb88a6191bf01bbfba43dce22d8 100644 (file)
@@ -42,6 +42,7 @@ import org.eclipse.tracecompass.tmf.core.timestamp.ITmfTimestamp;
 import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
+import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 import org.eclipse.tracecompass.tmf.ui.viewers.tree.AbstractTmfTreeViewer;
 import org.eclipse.tracecompass.tmf.ui.viewers.tree.ITmfTreeColumnDataProvider;
 import org.eclipse.tracecompass.tmf.ui.viewers.tree.ITmfTreeViewerEntry;
@@ -206,7 +207,7 @@ public class TmfStateSystemViewer extends AbstractTmfTreeViewer {
 
     private static TmfTreeViewerEntry createTraceEntry(ITmfTrace trace) {
         TmfTreeViewerEntry traceEntry = new TmfTreeViewerEntry(trace.getName());
-        Iterable<ITmfAnalysisModuleWithStateSystems> modules = trace.getAnalysisModulesOfClass(ITmfAnalysisModuleWithStateSystems.class);
+        Iterable<ITmfAnalysisModuleWithStateSystems> modules = TmfTraceUtils.getAnalysisModulesOfClass(trace, ITmfAnalysisModuleWithStateSystems.class);
         for (ITmfAnalysisModuleWithStateSystems module : modules) {
             /* Just schedule the module, the data will be filled when available */
             module.schedule();
This page took 0.049378 seconds and 5 git commands to generate.