1 /*******************************************************************************
2 + * Copyright (c) 2009, 2010 Ericsson
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * Alvaro Sanchez-Leon (alvsan09@gmail.com) - Initial API and implementation
11 *******************************************************************************/
12 package org
.eclipse
.linuxtools
.lttng
.state
.experiment
;
14 import org
.eclipse
.linuxtools
.lttng
.TraceDebug
;
15 import org
.eclipse
.linuxtools
.lttng
.control
.LttngCoreProviderFactory
;
16 import org
.eclipse
.linuxtools
.lttng
.control
.LttngSyntheticEventProvider
;
17 import org
.eclipse
.linuxtools
.lttng
.event
.LttngEvent
;
18 import org
.eclipse
.linuxtools
.lttng
.model
.LTTngTreeNode
;
19 import org
.eclipse
.linuxtools
.lttng
.request
.ILttngSyntEventRequest
;
20 import org
.eclipse
.linuxtools
.lttng
.request
.IRequestStatusListener
;
21 import org
.eclipse
.linuxtools
.lttng
.signal
.ILttExperimentSelectedListener
;
22 import org
.eclipse
.linuxtools
.lttng
.signal
.StateExperimentListener
;
23 import org
.eclipse
.linuxtools
.lttng
.state
.evProcessor
.ITransEventProcessor
;
24 import org
.eclipse
.linuxtools
.lttng
.state
.trace
.IStateTraceManager
;
25 import org
.eclipse
.linuxtools
.tmf
.event
.TmfTimeRange
;
26 import org
.eclipse
.linuxtools
.tmf
.experiment
.TmfExperiment
;
27 import org
.eclipse
.linuxtools
.tmf
.signal
.TmfExperimentUpdatedSignal
;
28 import org
.eclipse
.linuxtools
.tmf
.trace
.ITmfTrace
;
34 public class StateExperimentManager
extends LTTngTreeNode
implements
35 ILttExperimentSelectedListener
, IStateExperimentManager
{
37 // ========================================================================
39 // =======================================================================
40 private LTTngTreeNode fSelectedExperiment
= null; // one selected experiment
42 private final StateExperimentListener fexperimentListener
;
43 private boolean fwaitForCompletion
= false;
46 // ========================================================================
48 // =======================================================================
49 public StateExperimentManager(Long id
, String name
) {
50 super(id
, null, name
, null);
51 fexperimentListener
= new StateExperimentListener("Experiment Manager",
56 // ========================================================================
58 // =======================================================================
61 * @see org.eclipse.linuxtools.lttng.state.experiment.IStateExperimentManager#readExperimentTimeWindow(org.eclipse.linuxtools.tmf.event.TmfTimeRange, java.lang.String, org.eclipse.linuxtools.lttng.state.IStateDataRequestListener)
63 public ILttngSyntEventRequest
readExperimentTimeWindow(TmfTimeRange trange
,
64 Object source
, IRequestStatusListener listener
,
65 ITransEventProcessor processor
) {
67 ILttngSyntEventRequest request
= null;
70 if (fSelectedExperiment
!= null) {
71 // Get all trace manager nodes
72 LTTngTreeNode
[] traceMgrs
= fSelectedExperiment
.getChildren();
74 if (traceMgrs
!= null && traceMgrs
.length
> 0) {
75 IStateTraceManager traceManager
;
76 // Trigger one request per trace
77 for (LTTngTreeNode traceNode
: traceMgrs
) {
78 traceManager
= (IStateTraceManager
) traceNode
;
79 request
= traceManager
.executeDataRequest(trange
, source
,
85 if (fSelectedExperiment
== null) {
86 TraceDebug
.debug("No experiment selected");
94 * @see org.eclipse.linuxtools.lttng.state.experiment.IStateExperimentManager#readExperiment(java.lang.String, org.eclipse.linuxtools.lttng.state.IStateDataRequestListener)
96 @SuppressWarnings("unchecked")
97 public void readExperiment(Object source
, IRequestStatusListener listener
,
98 ITransEventProcessor processor
) {
100 if (fSelectedExperiment
!= null) {
101 TmfExperiment
<LttngEvent
> experiment
= (TmfExperiment
<LttngEvent
>) fSelectedExperiment
103 TmfTimeRange trange
= experiment
.getTimeRange();
104 readExperimentTimeWindow(trange
, source
, listener
, processor
);
106 TraceDebug
.debug("No selected experiment available");
116 * org.eclipse.linuxtools.lttng.state.experiment.IStateExperimentManager
117 * #experimentSelected_prep
118 * (org.eclipse.linuxtools.tmf.experiment.TmfExperiment)
120 public void experimentSelected_prep(TmfExperiment
<LttngEvent
> experiment
) {
121 LTTngTreeNode experimentNode
= null;
122 if (experiment
!= null) {
123 experimentNode
= getChildByName(experiment
.getName());
124 // keep experiment if already loaded with the same value
125 if (experimentNode
!= null
126 && experimentNode
.getValue() != experiment
) {
127 // rebuild the experiment nodes from scratch
128 removeChild(experimentNode
);
129 experimentNode
= null;
132 // Make sure all traces involved have a corresponding state manager
134 // state system to request its initial data
135 if (experimentNode
== null) {
136 // Create the new experiment tree node
137 experimentNode
= new LTTngTreeNode(getNextUniqueId(), this,
138 experiment
.getName(), experiment
);
139 // add the new experiment to this children list
140 addChild(experimentNode
);
143 // Make sure the traces exists in the tree
144 ITmfTrace
[] rtraces
= experiment
.getTraces();
146 LTTngTreeNode traceStateManagerNode
;
147 // StateStacksHandler
148 for (ITmfTrace rtrace
: rtraces
) {
149 traceName
= rtrace
.getName();
150 traceStateManagerNode
= experimentNode
.getChildByName(traceName
);
151 // Node does not exist for this experiment, so needs to be
153 if (traceStateManagerNode
== null) {
154 traceStateManagerNode
= StateManagerFactory
.getManager(
155 rtrace
, experimentNode
);
156 experimentNode
.addChild(traceStateManagerNode
);
160 // Reset event provider to handle requests for the new experiment
161 LttngSyntheticEventProvider synEventProvider
= LttngCoreProviderFactory
163 synEventProvider
.reset(experimentNode
);
165 // preserve the selected experiment
166 fSelectedExperiment
= experimentNode
;
173 * @see org.eclipse.linuxtools.lttng.signal.ILttExperimentSelectedListener#
174 * experimentSelected(java.lang.Object,
175 * org.eclipse.linuxtools.tmf.experiment.TmfExperiment)
177 public void experimentSelected(Object source
,
178 TmfExperiment
<LttngEvent
> experiment
) {
180 if (experiment
== null) {
184 LTTngTreeNode experimentNode
= getChildByName(experiment
.getName());
185 if (experimentNode
!= null) {
186 // get the trace manager nodes
187 LTTngTreeNode
[] traceNodes
= experimentNode
.getChildren();
188 for (LTTngTreeNode traceStateManagerNode
: traceNodes
) {
189 // The trace node needs to perform its first data request
190 // for this experiment with the main goal of building its
192 if (traceStateManagerNode
instanceof ILttExperimentSelectedListener
) {
193 // no need to provide the trace to the trace manager
194 ((ILttExperimentSelectedListener
) traceStateManagerNode
).experimentUpdated(
195 new TmfExperimentUpdatedSignal(source
, experiment
, null), fwaitForCompletion
);
204 * @see org.eclipse.linuxtools.lttng.signal.ILttExperimentSelectedListener#
206 * (org.eclipse.linuxtools.tmf.signal.TmfExperimentUpdatedSignal, boolean)
208 public void experimentUpdated(TmfExperimentUpdatedSignal signal
, boolean wait
) {
209 // NOTE: This represents the end of TMF indexing for a trace, however
210 // the node was already existing and the state system check points are
211 // already requested and built upon selection.
212 // No action for the time being
217 * @return the SelectedExperiment tree node
219 public LTTngTreeNode
getSelectedExperiment() {
220 return fSelectedExperiment
;
224 * @see org.eclipse.linuxtools.lttng.state.experiment.IStateExperimentManager#getExperimentTimeRange()
226 @SuppressWarnings("unchecked")
227 public TmfTimeRange
getExperimentTimeRange() {
228 TmfTimeRange timeRangeResult
= null;
229 if (fSelectedExperiment
!= null) {
230 timeRangeResult
= ((TmfExperiment
<LttngEvent
>) fSelectedExperiment
231 .getValue()).getTimeRange();
233 return timeRangeResult
;
239 * @see java.lang.Object#finalize()
241 protected void finalize() {
242 fexperimentListener
.dispose();
250 * org.eclipse.linuxtools.lttng.state.experiment.IStateExperimentManager
251 * #waitForComplete(boolean)
253 public void waitForCompletion(boolean wait
) {
254 fwaitForCompletion
= wait
;