1 /*******************************************************************************
2 * Copyright (c) 2011 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 * Polytechnique Montréal - Initial API and implementation
11 * Bernd Hufmann - Productification, enhancements and fixes
13 *******************************************************************************/
14 package org
.eclipse
.linuxtools
.lttng
.ui
.tracecontrol
.dialogs
;
16 import java
.util
.HashMap
;
18 import java
.util
.concurrent
.TimeUnit
;
20 import org
.eclipse
.linuxtools
.lttng
.core
.tracecontrol
.model
.TargetResource
;
21 import org
.eclipse
.linuxtools
.lttng
.core
.tracecontrol
.service
.ILttControllerService
;
22 import org
.eclipse
.linuxtools
.lttng
.ui
.LTTngUiPlugin
;
23 import org
.eclipse
.linuxtools
.lttng
.ui
.tracecontrol
.Messages
;
24 import org
.eclipse
.linuxtools
.lttng
.ui
.tracecontrol
.TraceControlConstants
;
25 import org
.eclipse
.linuxtools
.lttng
.ui
.tracecontrol
.subsystems
.TraceSubSystem
;
26 import org
.eclipse
.rse
.services
.clientserver
.messages
.SystemMessageException
;
27 import org
.eclipse
.rse
.ui
.SystemBasePlugin
;
28 import org
.eclipse
.swt
.SWT
;
29 import org
.eclipse
.swt
.graphics
.Point
;
30 import org
.eclipse
.swt
.layout
.FillLayout
;
31 import org
.eclipse
.swt
.layout
.GridData
;
32 import org
.eclipse
.swt
.layout
.GridLayout
;
33 import org
.eclipse
.swt
.widgets
.Button
;
34 import org
.eclipse
.swt
.widgets
.Composite
;
35 import org
.eclipse
.swt
.widgets
.Dialog
;
36 import org
.eclipse
.swt
.widgets
.Display
;
37 import org
.eclipse
.swt
.widgets
.Event
;
38 import org
.eclipse
.swt
.widgets
.Label
;
39 import org
.eclipse
.swt
.widgets
.Listener
;
40 import org
.eclipse
.swt
.widgets
.Shell
;
41 import org
.eclipse
.swt
.widgets
.Table
;
42 import org
.eclipse
.swt
.widgets
.TableColumn
;
43 import org
.eclipse
.swt
.widgets
.TableItem
;
44 import org
.eclipse
.tm
.tcf
.protocol
.IToken
;
45 import org
.eclipse
.tm
.tcf
.util
.TCFTask
;
48 * <b><u>ConfigureMarkersDialog</u></b>
50 * Dialog box to configure markers for a given target resource.
53 public class ConfigureMarkersDialog
extends Dialog
{
55 // ------------------------------------------------------------------------
57 // ------------------------------------------------------------------------
59 private String
[] fMarkersList
;
60 private TargetResource fTarget
;
61 private Boolean fOkClicked
;
62 Map
<String
, Boolean
> fMap
;
63 private TableItem
[] fTableLines
;
64 private Boolean
[] fInitialMarkersStates
;
66 private TraceSubSystem fSubSystem
;
68 // ------------------------------------------------------------------------
70 // ------------------------------------------------------------------------
75 * @param parent The parent shell
76 * @param subSystem The trace SubSystem
78 public ConfigureMarkersDialog(Shell parent
, TraceSubSystem subSystem
) {
81 fSubSystem
= subSystem
;
87 * @param parent The parent shell
88 * @param style The dialog box style
89 * @param subSystem The trace SubSystem
92 public ConfigureMarkersDialog(Shell parent
, int style
, TraceSubSystem subSystem
) {
95 fSubSystem
= subSystem
;
98 // ------------------------------------------------------------------------
100 // ------------------------------------------------------------------------
101 public Map
<String
, Boolean
> open(TargetResource aTarget
) {
104 Shell parent
= getParent();
105 final Display display
= parent
.getDisplay();
106 final Shell shell
= new Shell(parent
, SWT
.TITLE
| SWT
.BORDER
| SWT
.APPLICATION_MODAL
| SWT
.RESIZE
);
107 shell
.setText(Messages
.ConfigureMarkersDialog_Title
);
108 shell
.setImage(LTTngUiPlugin
.getDefault().getImage(LTTngUiPlugin
.ICON_ID_CONFIG_MARKERS
));
109 shell
.setLayout(new FillLayout());
110 Composite composite
= new Composite(shell
, SWT
.NONE
);
111 composite
.setLayout(new GridLayout());
115 final ILttControllerService service
= fSubSystem
.getControllerService();
117 // Create future task
118 fMarkersList
= new TCFTask
<String
[]>() {
122 // Get markers using Lttng controller service proxy
123 service
.getMarkers(fTarget
.getParent().getName(), fTarget
.getName(), new ILttControllerService
.DoneGetMarkers() {
126 public void doneGetMarkers(IToken token
, Exception error
, String
[] str
) {
133 // Notify about success
137 }}.get(TraceControlConstants
.DEFAULT_TCF_TASK_TIMEOUT
, TimeUnit
.SECONDS
);
138 } catch (Exception e
) {
139 SystemMessageException sysExp
;
140 if (e
instanceof SystemMessageException
) {
141 sysExp
= (SystemMessageException
)e
;
143 sysExp
= new SystemMessageException(LTTngUiPlugin
.getDefault().getMessage(e
));
145 SystemBasePlugin
.logError(Messages
.Lttng_Control_ErrorGetMarkers
+ " (" + //$NON-NLS-1$
146 Messages
.Lttng_Resource_Target
+ ": " + fTarget
.getName() + ")", sysExp
); //$NON-NLS-1$ //$NON-NLS-2$
150 for (int i
= 0; i
< fMarkersList
.length
; i
++) {
151 fMarkersList
[i
] = fMarkersList
[i
].trim();
153 final Table table
= new Table(composite
, SWT
.BORDER
| SWT
.CHECK
);
154 TableColumn tc0
= new TableColumn(table
, SWT
.LEFT
| SWT
.CENTER
);
155 TableColumn tc1
= new TableColumn(table
, SWT
.LEFT
);
156 TableColumn tc2
= new TableColumn(table
, SWT
.LEFT
);
157 TableColumn tc3
= new TableColumn(table
, SWT
.LEFT
);
158 TableColumn tc4
= new TableColumn(table
, SWT
.LEFT
);
159 TableColumn tc5
= new TableColumn(table
, SWT
.LEFT
);
160 TableColumn tc6
= new TableColumn(table
, SWT
.LEFT
);
161 tc1
.setText(Messages
.ConfigureMarkersDialog_NameColumn
);
162 tc2
.setText(Messages
.ConfigureMarkersDialog_Location
);
163 tc3
.setText(Messages
.ConfigureMarkersDialog_Format
);
164 tc4
.setText(Messages
.ConfigureMarkersDialog_EventId
);
165 tc5
.setText(Messages
.ConfigureMarkersDialog_Call
);
166 tc6
.setText(Messages
.ConfigureMarkersDialog_Probe_Single
);
174 table
.setHeaderVisible(true);
175 table
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
176 fTableLines
= new TableItem
[fMarkersList
.length
];
177 fInitialMarkersStates
= new Boolean
[fMarkersList
.length
];
179 for (int i
= 0; i
< fMarkersList
.length
; i
++) {
180 fTableLines
[i
] = new TableItem(table
, SWT
.NONE
);
181 String markerInfoResult
= null;
182 final String currentMarker
= fMarkersList
[i
];
186 final ILttControllerService service
= fSubSystem
.getControllerService();
188 // Create future task
189 markerInfoResult
= new TCFTask
<String
>() {
193 // Get marker info using Lttng controller service proxy
194 service
.getMarkerInfo(fTarget
.getParent().getName(), fTarget
.getName(), currentMarker
, new ILttControllerService
.DoneGetMarkerInfo() {
197 public void doneGetMarkerInfo(IToken token
, Exception error
, String str
) {
204 // Notify about success
208 }}.get(TraceControlConstants
.DEFAULT_TCF_TASK_TIMEOUT
, TimeUnit
.SECONDS
);
209 } catch (Exception e
) {
210 SystemMessageException sysExp
;
211 if (e
instanceof SystemMessageException
) {
212 sysExp
= (SystemMessageException
)e
;
214 sysExp
= new SystemMessageException(LTTngUiPlugin
.getDefault().getMessage(e
));
216 SystemBasePlugin
.logError(Messages
.Lttng_Control_ErrorGetMarkerInfo
+ " (" + //$NON-NLS-1$
217 Messages
.Lttng_Resource_Target
+ ": " + fTarget
.getName() + ", " + //$NON-NLS-1$ //$NON-NLS-2$
218 Messages
.Lttng_Resource_Marker
+ ": " + currentMarker
+ ")", sysExp
); //$NON-NLS-1$ //$NON-NLS-2$
222 String markerInfos
= markerInfoResult
.substring(1, markerInfoResult
.length() - 1);
223 // System.out.println("markerInfos " + markerInfos);
226 // BAD : payload CAN contain comma!!!
228 * String[] infosList = markerInfos.split(","); for(int j=0 ; j<infosList.length ; j++) { infosList[j] = infosList[j].trim(); String[] tempTable = infosList[j].split("="); infosList[j] = tempTable[1]; System.out.print(infosList[j] + " ");
229 * } System.out.println("");
233 int nbOfEqualsHack
= 0;
234 for (int x
= 0; x
< markerInfos
.length(); x
++) {
235 if (markerInfos
.charAt(x
) == '=') {
240 if (nbOfEqualsHack
> 0) {
241 String
[] infosList
= new String
[nbOfEqualsHack
];
242 @SuppressWarnings("unused")
243 String name
= ""; //$NON-NLS-1$
244 String value
= ""; //$NON-NLS-1$
251 while ((curPos
< markerInfos
.length()) && (eqPos
>= 0)) {
252 eqPos
= markerInfos
.indexOf("=", curPos
); //$NON-NLS-1$
255 name
= markerInfos
.substring(curPos
, eqPos
- 1);
257 prevPos
= markerInfos
.lastIndexOf(",", eqPos
); //$NON-NLS-1$
259 prevPos
= markerInfos
.length() - 1;
263 value
= markerInfos
.substring(curPos
, prevPos
);
265 infosList
[nbDone
] = value
;
271 fTableLines
[i
].setText(new String
[] { null, fMarkersList
[i
], infosList
[3], infosList
[4], infosList
[2], infosList
[0], infosList
[5] });
273 if (infosList
[1].compareTo("1") == 0) { //$NON-NLS-1$
274 fTableLines
[i
].setChecked(true);
275 fInitialMarkersStates
[i
] = true;
277 fTableLines
[i
].setForeground(display
.getSystemColor(SWT
.COLOR_DARK_GRAY
));
278 fInitialMarkersStates
[i
] = false;
283 table
.addListener(SWT
.Selection
, new Listener() {
285 public void handleEvent(Event event
) {
286 if (event
.detail
== SWT
.CHECK
) {
287 TableItem ti
= (TableItem
) event
.item
;
288 if (!ti
.getChecked()) {
289 ti
.setForeground(display
.getSystemColor(SWT
.COLOR_DARK_GRAY
));
291 ti
.setForeground(display
.getSystemColor(SWT
.COLOR_BLACK
));
297 final Composite buttonComposite
= new Composite(composite
, SWT
.NONE
);
298 buttonComposite
.setLayoutData(new GridData(SWT
.FILL
, SWT
.CENTER
, true, false));
299 GridLayout gl
= new GridLayout(4, false);
300 gl
.verticalSpacing
= 10;
301 buttonComposite
.setLayout(gl
);
303 Label shadow_sep_h
= new Label(buttonComposite
, SWT
.SEPARATOR
| SWT
.SHADOW_OUT
| SWT
.HORIZONTAL
);
304 GridData gd
= new GridData(SWT
.FILL
, SWT
.CENTER
, true, false, 4, 1);
305 shadow_sep_h
.setLayoutData(gd
);
307 Button selectAllButton
= new Button(buttonComposite
, SWT
.PUSH
);
308 selectAllButton
.setText(Messages
.ConfigureMarkersDialog_Select_All
);
309 gd
= new GridData(SWT
.CENTER
, SWT
.CENTER
, false, false);
311 selectAllButton
.setLayoutData(gd
);
312 selectAllButton
.addListener(SWT
.Selection
, new Listener() {
314 public void handleEvent(Event e
) {
315 for (int i
= 0; i
< fTableLines
.length
; i
++) {
316 fTableLines
[i
].setChecked(true);
317 fTableLines
[i
].setForeground(display
.getSystemColor(SWT
.COLOR_BLACK
));
322 Button deselectAllButton
= new Button(buttonComposite
, SWT
.PUSH
);
323 deselectAllButton
.setText(Messages
.ConfigureMarkersDialog_Deselect_All
);
324 gd
= new GridData(SWT
.CENTER
, SWT
.CENTER
, false, false);
326 deselectAllButton
.setLayoutData(gd
);
327 deselectAllButton
.addListener(SWT
.Selection
, new Listener() {
329 public void handleEvent(Event e
) {
330 for (int i
= 0; i
< fTableLines
.length
; i
++) {
331 fTableLines
[i
].setChecked(false);
332 fTableLines
[i
].setForeground(display
.getSystemColor(SWT
.COLOR_DARK_GRAY
));
337 Button cancelButton
= new Button(buttonComposite
, SWT
.PUSH
);
338 cancelButton
.setText(Messages
.ConfigureMarkersDialog_Cancel
);
340 gd
= new GridData(SWT
.RIGHT
, SWT
.CENTER
, true, false);
342 cancelButton
.setLayoutData(gd
);
343 cancelButton
.addListener(SWT
.Selection
, new Listener() {
345 public void handleEvent(Event e
) {
346 fOkClicked
= Boolean
.valueOf(false);
351 Button okButton
= new Button(buttonComposite
, SWT
.PUSH
);
352 okButton
.setText(Messages
.ConfigureMarkersDialog_Ok
);
353 gd
= new GridData(SWT
.CENTER
, SWT
.CENTER
, false, false);
355 okButton
.setLayoutData(gd
);
356 okButton
.addListener(SWT
.Selection
, new Listener() {
358 public void handleEvent(Event e
) {
359 fOkClicked
= Boolean
.valueOf(true);
360 fMap
= new HashMap
<String
, Boolean
>();
361 for (int k
= 0; k
< fTableLines
.length
; k
++) {
362 Boolean isChecked
= fTableLines
[k
].getChecked();
363 if (isChecked
.booleanValue() != fInitialMarkersStates
[k
].booleanValue()) {
365 fMap
.put(fMarkersList
[k
], Boolean
.valueOf(true));
367 fMap
.put(fMarkersList
[k
], Boolean
.valueOf(false));
375 shell
.addListener(SWT
.Traverse
, new Listener() {
377 public void handleEvent(Event event
) {
378 if (event
.detail
== SWT
.TRAVERSE_ESCAPE
) {
384 TableItem
[] items
= table
.getItems();
385 for (int i
= 0; i
< items
.length
; i
++) {
387 items
[i
].setBackground(Display
.getDefault().getSystemColor(SWT
.COLOR_TITLE_INACTIVE_BACKGROUND
));
391 Point minSize
= composite
.computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
);
392 shell
.setMinimumSize(shell
.computeSize(minSize
.x
, minSize
.y
).x
, 200);
393 shell
.setSize(shell
.computeSize(composite
.computeSize(SWT
.DEFAULT
, SWT
.DEFAULT
).x
, 300));
396 while (!shell
.isDisposed()) {
397 if (!display
.readAndDispatch()) {