1 /******************************************************************************
2 * Copyright (c) 2015, 2016 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
8 *******************************************************************************/
10 package org
.eclipse
.tracecompass
.analysis
.timing
.ui
.views
.segmentstore
.density
;
12 import java
.util
.List
;
14 import org
.eclipse
.jdt
.annotation
.Nullable
;
15 import org
.eclipse
.jface
.action
.Action
;
16 import org
.eclipse
.jface
.action
.IToolBarManager
;
17 import org
.eclipse
.swt
.SWT
;
18 import org
.eclipse
.swt
.custom
.SashForm
;
19 import org
.eclipse
.swt
.widgets
.Composite
;
20 import org
.eclipse
.tracecompass
.analysis
.timing
.ui
.views
.segmentstore
.table
.AbstractSegmentStoreTableViewer
;
21 import org
.eclipse
.tracecompass
.segmentstore
.core
.ISegment
;
22 import org
.eclipse
.tracecompass
.tmf
.core
.signal
.TmfTraceSelectedSignal
;
23 import org
.eclipse
.tracecompass
.tmf
.core
.trace
.ITmfTrace
;
24 import org
.eclipse
.tracecompass
.tmf
.core
.trace
.TmfTraceManager
;
25 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.TmfView
;
27 import com
.google
.common
.annotations
.VisibleForTesting
;
30 * Displays the segment store analysis data in a density chart and a table
31 * corresponding to the selected latencies.
33 * @author Matthew Khouzam
34 * @author Marc-Andre Laperle
36 public abstract class AbstractSegmentStoreDensityView
extends TmfView
{
38 private static final int[] DEFAULT_WEIGHTS
= new int[] { 4, 6 };
40 private @Nullable AbstractSegmentStoreDensityViewer fDensityViewer
;
41 private @Nullable AbstractSegmentStoreTableViewer fTableViewer
;
44 * Constructs a segment store density view
47 * the name of the view
49 public AbstractSegmentStoreDensityView(String viewName
) {
54 * Used to keep the table in sync with the density viewer.
56 private final class DataChangedListener
implements ISegmentStoreDensityViewerDataListener
{
58 public void dataChanged(List
<ISegment
> data
) {
59 updateTableModel(data
);
62 private void updateTableModel(@Nullable List
<ISegment
> data
) {
63 final AbstractSegmentStoreTableViewer viewer
= fTableViewer
;
64 if (viewer
!= null && data
!= null) {
65 viewer
.updateModel(data
.toArray(new ISegment
[] {}));
70 public void dataSelectionChanged(@Nullable List
<ISegment
> data
) {
71 updateTableModel(data
);
76 public void createPartControl(@Nullable Composite parent
) {
77 super.createPartControl(parent
);
79 final SashForm sashForm
= new SashForm(parent
, SWT
.NONE
);
81 fTableViewer
= createSegmentStoreTableViewer(sashForm
);
82 fDensityViewer
= createSegmentStoreDensityViewer(sashForm
);
83 fDensityViewer
.addDataListener(new DataChangedListener());
85 sashForm
.setWeights(DEFAULT_WEIGHTS
);
87 Action zoomOut
= new ZoomOutAction(this);
88 IToolBarManager toolBar
= getViewSite().getActionBars().getToolBarManager();
90 ITmfTrace trace
= TmfTraceManager
.getInstance().getActiveTrace();
92 TmfTraceSelectedSignal signal
= new TmfTraceSelectedSignal(this, trace
);
93 if (fDensityViewer
!= null) {
94 fDensityViewer
.traceSelected(signal
);
96 if (fTableViewer
!= null) {
97 fTableViewer
.traceSelected(signal
);
103 * Create a table viewer suitable for displaying the segment store content.
106 * the parent composite
107 * @return the table viewer
109 protected abstract AbstractSegmentStoreTableViewer
createSegmentStoreTableViewer(Composite parent
);
112 * Create a density viewer suitable for displaying the segment store
116 * the parent composite
117 * @return the density viewer
119 protected abstract AbstractSegmentStoreDensityViewer
createSegmentStoreDensityViewer(Composite parent
);
122 public void setFocus() {
123 final AbstractSegmentStoreDensityViewer viewer
= fDensityViewer
;
124 if (viewer
!= null) {
125 viewer
.getControl().setFocus();
130 public void dispose() {
131 final AbstractSegmentStoreDensityViewer densityViewer
= fDensityViewer
;
132 if (densityViewer
!= null) {
133 densityViewer
.dispose();
136 final AbstractSegmentStoreTableViewer tableViewer
= fTableViewer
;
137 if (tableViewer
!= null) {
138 tableViewer
.dispose();
145 * Get the density viewer
147 * @return the density viewer
151 public @Nullable AbstractSegmentStoreDensityViewer
getDensityViewer() {
152 return fDensityViewer
;
156 * Get the table viewer
158 * @return the table viewer
162 public @Nullable AbstractSegmentStoreTableViewer
getTableViewer() {