timing.core/ui/tests: add function density test
[deliverable/tracecompass.git] / analysis / org.eclipse.tracecompass.analysis.timing.ui / src / org / eclipse / tracecompass / analysis / timing / ui / views / segmentstore / density / AbstractSegmentStoreDensityView.java
1 /******************************************************************************
2 * Copyright (c) 2015, 2016 Ericsson
3 *
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 *******************************************************************************/
9
10 package org.eclipse.tracecompass.analysis.timing.ui.views.segmentstore.density;
11
12 import java.util.List;
13
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;
26
27 import com.google.common.annotations.VisibleForTesting;
28
29 /**
30 * Displays the segment store analysis data in a density chart and a table
31 * corresponding to the selected latencies.
32 *
33 * @author Matthew Khouzam
34 * @author Marc-Andre Laperle
35 */
36 public abstract class AbstractSegmentStoreDensityView extends TmfView {
37
38 private static final int[] DEFAULT_WEIGHTS = new int[] { 4, 6 };
39
40 private @Nullable AbstractSegmentStoreDensityViewer fDensityViewer;
41 private @Nullable AbstractSegmentStoreTableViewer fTableViewer;
42
43 /**
44 * Constructs a segment store density view
45 *
46 * @param viewName
47 * the name of the view
48 */
49 public AbstractSegmentStoreDensityView(String viewName) {
50 super(viewName);
51 }
52
53 /**
54 * Used to keep the table in sync with the density viewer.
55 */
56 private final class DataChangedListener implements ISegmentStoreDensityViewerDataListener {
57 @Override
58 public void dataChanged(List<ISegment> data) {
59 updateTableModel(data);
60 }
61
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[] {}));
66 }
67 }
68
69 @Override
70 public void dataSelectionChanged(@Nullable List<ISegment> data) {
71 updateTableModel(data);
72 }
73 }
74
75 @Override
76 public void createPartControl(@Nullable Composite parent) {
77 super.createPartControl(parent);
78
79 final SashForm sashForm = new SashForm(parent, SWT.NONE);
80
81 fTableViewer = createSegmentStoreTableViewer(sashForm);
82 fDensityViewer = createSegmentStoreDensityViewer(sashForm);
83 fDensityViewer.addDataListener(new DataChangedListener());
84
85 sashForm.setWeights(DEFAULT_WEIGHTS);
86
87 Action zoomOut = new ZoomOutAction(this);
88 IToolBarManager toolBar = getViewSite().getActionBars().getToolBarManager();
89 toolBar.add(zoomOut);
90 ITmfTrace trace = TmfTraceManager.getInstance().getActiveTrace();
91 if (trace != null) {
92 TmfTraceSelectedSignal signal = new TmfTraceSelectedSignal(this, trace);
93 if (fDensityViewer != null) {
94 fDensityViewer.traceSelected(signal);
95 }
96 if (fTableViewer != null) {
97 fTableViewer.traceSelected(signal);
98 }
99 }
100 }
101
102 /**
103 * Create a table viewer suitable for displaying the segment store content.
104 *
105 * @param parent
106 * the parent composite
107 * @return the table viewer
108 */
109 protected abstract AbstractSegmentStoreTableViewer createSegmentStoreTableViewer(Composite parent);
110
111 /**
112 * Create a density viewer suitable for displaying the segment store
113 * content.
114 *
115 * @param parent
116 * the parent composite
117 * @return the density viewer
118 */
119 protected abstract AbstractSegmentStoreDensityViewer createSegmentStoreDensityViewer(Composite parent);
120
121 @Override
122 public void setFocus() {
123 final AbstractSegmentStoreDensityViewer viewer = fDensityViewer;
124 if (viewer != null) {
125 viewer.getControl().setFocus();
126 }
127 }
128
129 @Override
130 public void dispose() {
131 final AbstractSegmentStoreDensityViewer densityViewer = fDensityViewer;
132 if (densityViewer != null) {
133 densityViewer.dispose();
134 }
135
136 final AbstractSegmentStoreTableViewer tableViewer = fTableViewer;
137 if (tableViewer != null) {
138 tableViewer.dispose();
139 }
140
141 super.dispose();
142 }
143
144 /**
145 * Get the density viewer
146 *
147 * @return the density viewer
148 * @since 1.2
149 */
150 @VisibleForTesting
151 public @Nullable AbstractSegmentStoreDensityViewer getDensityViewer() {
152 return fDensityViewer;
153 }
154
155 /**
156 * Get the table viewer
157 *
158 * @return the table viewer
159 * @since 1.2
160 */
161 @VisibleForTesting
162 public @Nullable AbstractSegmentStoreTableViewer getTableViewer() {
163 return fTableViewer;
164 }
165 }
This page took 0.033644 seconds and 5 git commands to generate.