TMF: Register analysis module to parameter provider only if trace active
authorGeneviève Bastien <gbastien+lttng@versatic.net>
Fri, 13 Jun 2014 19:18:50 +0000 (15:18 -0400)
committerGenevieve Bastien <gbastien+lttng@versatic.net>
Fri, 4 Jul 2014 18:32:48 +0000 (14:32 -0400)
Sometimes a module will register itself to a parameter provider, but it does
not correspond to the currently active trace, especially for modules from both
traces and experiments. This registers only the module for the currently
selected trace.

Change-Id: If29264c3823968530063cba4c6edd18c679baf69
Signed-off-by: Geneviève Bastien <gbastien+lttng@versatic.net>
Reviewed-on: https://git.eclipse.org/r/29356
Tested-by: Hudson CI
org.eclipse.linuxtools.tmf.core/META-INF/MANIFEST.MF
org.eclipse.linuxtools.tmf.core/pom.xml
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/analysis/TmfAbstractAnalysisModule.java
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/analysis/TmfAbstractAnalysisParamProvider.java

index 21f1670900c841e70865105aa3f0c057df2aa84a..819a5ca8212b1068ca3397c406c033798121f81b 100644 (file)
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
-Bundle-Version: 3.0.0.qualifier
+Bundle-Version: 3.1.0.qualifier
 Bundle-Localization: plugin
 Bundle-SymbolicName: org.eclipse.linuxtools.tmf.core;singleton:=true
 Bundle-Activator: org.eclipse.linuxtools.internal.tmf.core.Activator
index 595239641abf410271bbb2b9e0e534ae81ba19f3..c4e4a511bd924fb1b06015f516c8c8b3b61bdc4e 100644 (file)
@@ -18,7 +18,7 @@
   </parent>
 
   <artifactId>org.eclipse.linuxtools.tmf.core</artifactId>
-  <version>3.0.0-SNAPSHOT</version>
+  <version>3.1.0-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
   <name>Linux Tools TMF Core Plug-in</name>
index fefb3a4b20b391865a385a56bea520708daa9443..4747c733e16f5409214e491d31dc83d8095e945c 100644 (file)
@@ -33,6 +33,7 @@ import org.eclipse.linuxtools.tmf.core.exceptions.TmfAnalysisException;
 import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;
 import org.eclipse.linuxtools.tmf.core.signal.TmfStartAnalysisSignal;
 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.TmfTraceManager;
 import org.eclipse.osgi.util.NLS;
@@ -382,6 +383,26 @@ public abstract class TmfAbstractAnalysisModule extends TmfComponent implements
         }
     }
 
+    /**
+     * Signal handler for when the trace becomes active
+     *
+     * @param signal
+     *            Trace selected signal
+     * @since 3.1
+     */
+    @TmfSignalHandler
+    public void traceSelected(TmfTraceSelectedSignal signal) {
+        /*
+         * Since some parameter providers may handle many traces, we need to
+         * register the current trace to it
+         */
+        if (signal.getTrace() == fTrace) {
+            for (IAnalysisParameterProvider provider : fParameterProviders) {
+                provider.registerModule(this);
+            }
+        }
+    }
+
     /**
      * Returns a full help text to display
      *
index cec9f213e3dceb06afdf1383afa9ace814450c2b..7f56b5d2211dae91b8490c0b8c2812e87184d0a1 100644 (file)
@@ -12,6 +12,9 @@
 
 package org.eclipse.linuxtools.tmf.core.analysis;
 
+import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
+import org.eclipse.linuxtools.tmf.core.trace.TmfTraceManager;
+
 /**
  * Abstract class for parameter providers, implements methods and
  * functionalities to warn the analysis module of parameter changed
@@ -31,7 +34,17 @@ public abstract class TmfAbstractAnalysisParamProvider implements IAnalysisParam
         if (module == null) {
             throw new IllegalArgumentException();
         }
-        fModule = module;
+        ITmfTrace selectedTrace = TmfTraceManager.getInstance().getActiveTrace();
+        /* If no trace is active, just register the module */
+        if (selectedTrace == null) {
+            fModule = module;
+            return;
+        }
+        IAnalysisModule selectedModule = selectedTrace.getAnalysisModule(module.getId());
+        /* register only if the module is for the currently selected trace */
+        if (selectedModule == module) {
+            fModule = module;
+        }
     }
 
     /**
This page took 0.030024 seconds and 5 git commands to generate.