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
.NonNull
;
15 import org
.eclipse
.jdt
.annotation
.Nullable
;
16 import org
.eclipse
.jface
.action
.Action
;
17 import org
.eclipse
.jface
.action
.IToolBarManager
;
18 import org
.eclipse
.swt
.SWT
;
19 import org
.eclipse
.swt
.custom
.SashForm
;
20 import org
.eclipse
.swt
.widgets
.Composite
;
21 import org
.eclipse
.tracecompass
.analysis
.timing
.ui
.views
.segmentstore
.table
.AbstractSegmentStoreTableViewer
;
22 import org
.eclipse
.tracecompass
.segmentstore
.core
.ISegment
;
23 import org
.eclipse
.tracecompass
.tmf
.core
.signal
.TmfTraceSelectedSignal
;
24 import org
.eclipse
.tracecompass
.tmf
.core
.trace
.ITmfTrace
;
25 import org
.eclipse
.tracecompass
.tmf
.core
.trace
.TmfTraceManager
;
26 import org
.eclipse
.tracecompass
.tmf
.ui
.views
.TmfView
;
28 import com
.google
.common
.annotations
.VisibleForTesting
;
31 * Displays the segment store analysis data in a density chart and a table
32 * corresponding to the selected latencies.
34 * @author Matthew Khouzam
35 * @author Marc-Andre Laperle
37 public abstract class AbstractSegmentStoreDensityView
extends TmfView
{
39 private static final int[] DEFAULT_WEIGHTS
= new int[] { 4, 6 };
41 private @Nullable AbstractSegmentStoreDensityViewer fDensityViewer
;
42 private @Nullable AbstractSegmentStoreTableViewer fTableViewer
;
45 * Constructs a segment store density view
48 * the name of the view
50 public AbstractSegmentStoreDensityView(String viewName
) {
55 * Used to keep the table in sync with the density viewer.
57 private final class DataChangedListener
implements ISegmentStoreDensityViewerDataListener
{
60 public void dataChanged(List
<ISegment
> data
) {
61 updateTableModel(data
);
64 private void updateTableModel(@Nullable List
<ISegment
> data
) {
65 final AbstractSegmentStoreTableViewer viewer
= fTableViewer
;
66 if (viewer
!= null && data
!= null) {
67 viewer
.updateModel(data
);
71 private void updateTableModel(@Nullable Iterable
<?
extends ISegment
> data
) {
72 final AbstractSegmentStoreTableViewer viewer
= fTableViewer
;
73 if (viewer
!= null && data
!= null) {
74 viewer
.updateModel(data
);
80 public void dataSelectionChanged(@Nullable List
<ISegment
> data
) {
81 updateTableModel(data
);
85 public void viewDataChanged(@NonNull Iterable
<?
extends @NonNull ISegment
> newData
) {
86 updateTableModel(newData
);
90 public void selectedDataChanged(@Nullable Iterable
<?
extends @NonNull ISegment
> newSelectionData
) {
91 updateTableModel(newSelectionData
);
97 public void createPartControl(@Nullable Composite parent
) {
98 super.createPartControl(parent
);
100 final SashForm sashForm
= new SashForm(parent
, SWT
.NONE
);
102 fTableViewer
= createSegmentStoreTableViewer(sashForm
);
103 fDensityViewer
= createSegmentStoreDensityViewer(sashForm
);
104 fDensityViewer
.addDataListener(new DataChangedListener());
106 sashForm
.setWeights(DEFAULT_WEIGHTS
);
108 Action zoomOut
= new ZoomOutAction(this);
109 IToolBarManager toolBar
= getViewSite().getActionBars().getToolBarManager();
110 toolBar
.add(zoomOut
);
111 ITmfTrace trace
= TmfTraceManager
.getInstance().getActiveTrace();
113 TmfTraceSelectedSignal signal
= new TmfTraceSelectedSignal(this, trace
);
114 if (fDensityViewer
!= null) {
115 fDensityViewer
.traceSelected(signal
);
117 if (fTableViewer
!= null) {
118 fTableViewer
.traceSelected(signal
);
124 * Create a table viewer suitable for displaying the segment store content.
127 * the parent composite
128 * @return the table viewer
130 protected abstract AbstractSegmentStoreTableViewer
createSegmentStoreTableViewer(Composite parent
);
133 * Create a density viewer suitable for displaying the segment store
137 * the parent composite
138 * @return the density viewer
140 protected abstract AbstractSegmentStoreDensityViewer
createSegmentStoreDensityViewer(Composite parent
);
143 public void setFocus() {
144 final AbstractSegmentStoreDensityViewer viewer
= fDensityViewer
;
145 if (viewer
!= null) {
146 viewer
.getControl().setFocus();
151 public void dispose() {
152 final AbstractSegmentStoreDensityViewer densityViewer
= fDensityViewer
;
153 if (densityViewer
!= null) {
154 densityViewer
.dispose();
157 final AbstractSegmentStoreTableViewer tableViewer
= fTableViewer
;
158 if (tableViewer
!= null) {
159 tableViewer
.dispose();
166 * Get the density viewer
168 * @return the density viewer
172 public @Nullable AbstractSegmentStoreDensityViewer
getDensityViewer() {
173 return fDensityViewer
;
177 * Get the table viewer
179 * @return the table viewer
183 public @Nullable AbstractSegmentStoreTableViewer
getTableViewer() {