lttng.control: Replacing isKernel with an enum for the domain type
[deliverable/tracecompass.git] / lttng / org.eclipse.tracecompass.lttng2.control.ui / src / org / eclipse / tracecompass / internal / lttng2 / control / ui / views / dialogs / EnableUstEventsComposite.java
1 /**********************************************************************
2 * Copyright (c) 2012, 2015 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 * Contributors:
10 * Bernd Hufmann - Initial API and implementation
11 * Bernd Hufmann - Updated for support of LTTng Tools 2.1
12 * Marc-Andre Laperle - Add filtering textbox
13 **********************************************************************/
14 package org.eclipse.tracecompass.internal.lttng2.control.ui.views.dialogs;
15
16 import java.util.ArrayList;
17 import java.util.Arrays;
18 import java.util.HashSet;
19 import java.util.List;
20 import java.util.Set;
21
22 import org.eclipse.jface.dialogs.MessageDialog;
23 import org.eclipse.jface.viewers.CheckStateChangedEvent;
24 import org.eclipse.jface.viewers.CheckboxTreeViewer;
25 import org.eclipse.jface.viewers.ICheckStateListener;
26 import org.eclipse.jface.viewers.TreeViewer;
27 import org.eclipse.swt.SWT;
28 import org.eclipse.swt.custom.CCombo;
29 import org.eclipse.swt.events.SelectionAdapter;
30 import org.eclipse.swt.events.SelectionEvent;
31 import org.eclipse.swt.graphics.Image;
32 import org.eclipse.swt.layout.GridData;
33 import org.eclipse.swt.layout.GridLayout;
34 import org.eclipse.swt.widgets.Button;
35 import org.eclipse.swt.widgets.Composite;
36 import org.eclipse.swt.widgets.Group;
37 import org.eclipse.swt.widgets.Label;
38 import org.eclipse.swt.widgets.Text;
39 import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceDomainType;
40 import org.eclipse.tracecompass.internal.lttng2.control.core.model.LogLevelType;
41 import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceLogLevel;
42 import org.eclipse.tracecompass.internal.lttng2.control.ui.views.messages.Messages;
43 import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.ITraceControlComponent;
44 import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.BaseEventComponent;
45 import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.TargetNodeComponent;
46 import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.TraceControlContentProvider;
47 import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.TraceControlLabelProvider;
48 import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.TraceProviderGroup;
49 import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.UstProviderComponent;
50 import org.eclipse.ui.dialogs.FilteredTree;
51 import org.eclipse.ui.dialogs.PatternFilter;
52
53 /**
54 * <p>
55 * A composite for collecting information about UST events to be enabled.
56 * </p>
57 *
58 * @author Bernd Hufmann
59 */
60 public class EnableUstEventsComposite extends Composite implements IEnableUstEvents {
61
62 // ------------------------------------------------------------------------
63 // Constants
64 // ------------------------------------------------------------------------
65
66 private enum GroupEnum { TRACEPOINTS, WILDCARD, LOGLEVEL }
67
68 // ------------------------------------------------------------------------
69 // Attributes
70 // ------------------------------------------------------------------------
71
72 /**
73 * A button to enable/disable the tracepoints group
74 */
75 private Button fTracepointsActivateButton;
76 /**
77 * A tree viewer for diplaying and selection of available tracepoints.
78 */
79 private CheckboxTreeViewer fTracepointsViewer;
80 /**
81 * A button to enable/disable the wildcard group
82 */
83 private Button fWildcardActivateButton;
84 /**
85 * A Text field for the event's wildcard.
86 */
87 private Text fWildcardText;
88 /**
89 * A button to enable/disable the log level group
90 */
91 private Button fLogLevelActivateButton;
92 /**
93 * A Text field for the event name for the log level enablement.
94 */
95 private Text fLogLevelEventNameText;
96 /**
97 * A Combo box for selecting the log level.
98 */
99 private CCombo fLogLevelCombo;
100 /**
101 * A button for selecting the log level (range 0 to level).
102 */
103 private Button fLogLevelButton;
104 /**
105 * A button for selecting the specified log level only.
106 */
107 private Button fLogLevelOnlyButton;
108 /**
109 * The filter text
110 */
111 private Text fFilterText;
112
113 /**
114 * The referenced trace provider group containing the UST providers
115 * component which contains a list of available tracepoints.
116 */
117 private final TraceProviderGroup fProviderGroup;
118 /**
119 * The flag indicating that tracepoints are selected.
120 */
121 private boolean fIsTracepoints;
122 /**
123 * The flag indicating that all tracepoints (across providers) are selected.
124 */
125 private boolean fIsAllTracepoints;
126 /**
127 * The list of tracepoints to be enabled.
128 */
129 private List<String> fSelectedEvents;
130 /**
131 * The flag indicating that all wildcard are selected..
132 */
133 private boolean fIsWildcard;
134 /**
135 * The wildcard if wildcard is selected.
136 */
137 private String fWildcard;
138 /**
139 * The flag indicating that all log level are selected.
140 */
141 private boolean fIsLogLevel;
142 /**
143 * The event name for the log level enablement.
144 */
145 private String fLogLevelEventName;
146 /**
147 * The type of the log level (loglevel or loglevel-only)
148 */
149 private LogLevelType fLogLevelType;
150 /**
151 * The actual selected log level.
152 */
153 private TraceLogLevel fLogLevel;
154 /**
155 * The filter expression
156 */
157 private String fFilterExpression;
158 /**
159 * A button to enable/disable the exclusion of event(s).
160 */
161 private Button fExcludedEventsButton;
162 /**
163 * A Text field for the excluded event(s).
164 */
165 private Text fExcludedEventsText;
166 /**
167 * A list of event(s) to be excluded.
168 */
169 private List<String> fExcludedEvents;
170 /**
171 * The flag indicating that excluded event(s) are selected.
172 */
173 private boolean fIsExcludedEvents;
174
175 // ------------------------------------------------------------------------
176 // Constructors
177 // ------------------------------------------------------------------------
178 /**
179 * Constructor
180 * @param parent - a parent composite
181 * @param style - a composite style
182 * @param providerGroup - the trace provider group
183 */
184 public EnableUstEventsComposite(Composite parent, int style, TraceProviderGroup providerGroup) {
185 super(parent, style);
186 fProviderGroup = providerGroup;
187 }
188
189 // ------------------------------------------------------------------------
190 // Accessors
191 // ------------------------------------------------------------------------
192
193 @Override
194 public boolean isTracepoints() {
195 return fIsTracepoints;
196 }
197
198 @Override
199 public boolean isAllTracePoints() {
200 return fIsAllTracepoints;
201 }
202
203 @Override
204 public List<String> getEventNames() {
205 return new ArrayList<>(fSelectedEvents);
206 }
207
208 @Override
209 public boolean isWildcard() {
210 return fIsWildcard;
211 }
212
213 @Override
214 public String getWildcard() {
215 return fWildcard;
216 }
217
218 @Override
219 public boolean isLogLevel() {
220 return fIsLogLevel;
221 }
222
223 @Override
224 public LogLevelType getLogLevelType() {
225 return fLogLevelType;
226 }
227
228 @Override
229 public TraceLogLevel getLogLevel() {
230 return fLogLevel;
231 }
232
233 @Override
234 public String getLogLevelEventName() {
235 return fLogLevelEventName;
236 }
237
238 @Override
239 public String getFilterExpression() {
240 return fFilterExpression;
241 }
242
243 @Override
244 public List<String> getExcludedEvents(){
245 return fExcludedEvents;
246 }
247
248 // ------------------------------------------------------------------------
249 // Operations
250 // ------------------------------------------------------------------------
251
252 /**
253 * Create the contents of this event composite
254 */
255 public void createContent() {
256
257 // Tracepoints Group
258 createTracepointsGroup();
259
260 // Wildcard Group
261 createWildCardGroup();
262
263 // Exclude event(s)
264 createExcludeGroup();
265
266 // Log Level Group
267 createLogLevelGroup();
268
269 // Filter Group
270 createFilterGroup();
271
272 // Set default enablements
273 setEnablements(GroupEnum.TRACEPOINTS);
274 }
275
276 /**
277 * Validates the UST composite input data.
278 *
279 * @return true if configured data is valid and can be retrieved.
280 */
281 public boolean isValid() {
282
283 fIsTracepoints = fTracepointsActivateButton.getSelection();
284 fIsWildcard = fWildcardActivateButton.getSelection();
285 fIsLogLevel = fLogLevelActivateButton.getSelection();
286 fIsExcludedEvents = fExcludedEventsButton.getSelection();
287
288 // initialize tracepoint fields
289 fIsAllTracepoints = false;
290 fSelectedEvents = new ArrayList<>();
291 if (fIsTracepoints) {
292 Set<String> set = new HashSet<>();
293 Object[] checkedElements = fTracepointsViewer.getCheckedElements();
294 int totalNbEvents = 0;
295 for (int i = 0; i < checkedElements.length; i++) {
296 ITraceControlComponent component = (ITraceControlComponent) checkedElements[i];
297 if (component instanceof BaseEventComponent) {
298 totalNbEvents++;
299 if (!set.contains(component.getName())) {
300 set.add(component.getName());
301 fSelectedEvents.add(component.getName());
302 }
303 }
304
305 }
306
307 // verify if all events are selected
308 int nbUstEvents = 0;
309 List<ITraceControlComponent> comps = fProviderGroup.getChildren(UstProviderComponent.class);
310 for (ITraceControlComponent comp : comps) {
311 nbUstEvents += comp.getChildren().length;
312 }
313 fIsAllTracepoints = (nbUstEvents == totalNbEvents);
314 }
315
316 // Get the list of event(s) to exclude
317 fExcludedEvents = null;
318 if (fIsExcludedEvents) {
319 String tmpExcludedEvent = fExcludedEventsText.getText();
320 if (tmpExcludedEvent.trim().isEmpty()) {
321 MessageDialog.openError(getShell(),
322 Messages.TraceControl_EnableEventsDialogTitle,
323 Messages.TraceControl_InvalidExcludedEventsError);
324
325 return false;
326 }
327 // Format the text to a List<String>
328 // Removing all non visible characters
329 tmpExcludedEvent = tmpExcludedEvent.replaceAll("\\s", ""); //$NON-NLS-1$ //$NON-NLS-2$
330 // Splitting the different events that are separated by commas
331 fExcludedEvents = Arrays.asList(tmpExcludedEvent.split(",")); //$NON-NLS-1$
332 }
333
334
335 // initialize log level event name string
336 fLogLevelType = LogLevelType.LOGLEVEL_NONE;
337 fLogLevelEventName = null;
338
339 if (fIsLogLevel) {
340 if (fLogLevelButton.getSelection()) {
341 fLogLevelType = LogLevelType.LOGLEVEL;
342 } else if (fLogLevelOnlyButton.getSelection()) {
343 fLogLevelType = LogLevelType.LOGLEVEL_ONLY;
344 }
345
346 String temp = fLogLevelEventNameText.getText();
347 if (temp.trim().isEmpty() ||
348 (!temp.matches("^[\\s]{0,}$") && !temp.matches("^[a-zA-Z0-9\\-\\_]{1,}$"))) { //$NON-NLS-1$ //$NON-NLS-2$
349 MessageDialog.openError(getShell(),
350 Messages.TraceControl_EnableEventsDialogTitle,
351 Messages.TraceControl_InvalidLogLevelEventNameError + " (" + temp + ") \n"); //$NON-NLS-1$ //$NON-NLS-2$
352
353 return false;
354 }
355
356 fLogLevelEventName = temp;
357
358 TraceLogLevel[] levels = TraceLogLevel.values();
359 int id = fLogLevelCombo.getSelectionIndex();
360
361 if (id < 0) {
362 MessageDialog.openError(getShell(),
363 Messages.TraceControl_EnableEventsDialogTitle,
364 Messages.TraceControl_InvalidLogLevel + " (" + temp + ") \n"); //$NON-NLS-1$ //$NON-NLS-2$
365
366 return false;
367 }
368 fLogLevel = levels[id];
369 }
370
371 // initialize wildcard with null
372 fWildcard = null;
373 if (fIsWildcard) {
374 String tempWildcard = fWildcardText.getText();
375 if (tempWildcard.trim().isEmpty() ||
376 (!tempWildcard.matches("^[\\s]{0,}$") && !tempWildcard.matches("^[a-zA-Z0-9\\-\\_\\*\\\\\\']{1,}$"))) { //$NON-NLS-1$ //$NON-NLS-2$
377 MessageDialog.openError(getShell(),
378 Messages.TraceControl_EnableEventsDialogTitle,
379 Messages.TraceControl_InvalidWildcardError + " (" + tempWildcard + ") \n"); //$NON-NLS-1$ //$NON-NLS-2$
380
381 return false;
382 }
383
384 fWildcard = tempWildcard;
385 }
386
387 // initialize filter with null
388 fFilterExpression = null;
389 if (fProviderGroup.isEventFilteringSupported(TraceDomainType.UST)) {
390 String tempFilter = fFilterText.getText();
391
392 if(!tempFilter.trim().isEmpty()) {
393 fFilterExpression = tempFilter;
394 }
395 }
396
397 // validation successful -> call super.okPressed()
398 return true;
399 }
400
401 // ------------------------------------------------------------------------
402 // Helper methods
403 // ------------------------------------------------------------------------
404
405 /**
406 * Creates tracepoints group.
407 */
408 private void createTracepointsGroup() {
409 Group tpMainGroup = new Group(this, SWT.SHADOW_NONE);
410 tpMainGroup.setText(Messages.TraceControl_EnableEventsTracepointGroupName);
411 GridLayout layout = new GridLayout(2, false);
412 tpMainGroup.setLayout(layout);
413 GridData data = new GridData(GridData.FILL_BOTH);
414 tpMainGroup.setLayoutData(data);
415
416 Composite buttonComposite = new Composite(tpMainGroup, SWT.NONE);
417 layout = new GridLayout(1, true);
418 buttonComposite.setLayout(layout);
419 data = new GridData(SWT.BEGINNING, SWT.CENTER, false, true);
420 buttonComposite.setLayoutData(data);
421
422 fTracepointsActivateButton = new Button(buttonComposite, SWT.RADIO);
423 fTracepointsActivateButton.setText(Messages.TraceControl_EnableGroupSelectionName);
424 data = new GridData(GridData.FILL_HORIZONTAL);
425 fTracepointsActivateButton.setLayoutData(data);
426 fTracepointsActivateButton.addSelectionListener(new SelectionAdapter() {
427 @Override
428 public void widgetSelected(SelectionEvent e) {
429 setEnablements(GroupEnum.TRACEPOINTS);
430 }
431 });
432
433 Group tpGroup = new Group(tpMainGroup, SWT.SHADOW_NONE);
434 layout = new GridLayout(1, true);
435 tpGroup.setLayout(layout);
436 data = new GridData(GridData.FILL_BOTH);
437 tpGroup.setLayoutData(data);
438 new FilteredTree(tpGroup, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER, new PatternFilter(), true) {
439 @Override
440 protected TreeViewer doCreateTreeViewer(Composite aparent, int style) {
441 fTracepointsViewer = new CheckboxTreeViewer(aparent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
442 fTracepointsViewer.getTree().setToolTipText(Messages.TraceControl_EnableEventsTracepointTreeTooltip);
443 fTracepointsViewer.setContentProvider(new UstContentProvider());
444
445 fTracepointsViewer.setLabelProvider(new UstLabelProvider());
446 fTracepointsViewer.addCheckStateListener(new UstCheckStateListener());
447
448 fTracepointsViewer.setInput(fProviderGroup.getParent());
449 fTracepointsViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
450 return fTracepointsViewer;
451 }
452 };
453 }
454
455 /**
456 * Creates wildcard group.
457 */
458 private void createWildCardGroup() {
459 Group wildcardMainGroup = new Group(this, SWT.SHADOW_NONE);
460 wildcardMainGroup.setText(Messages.TraceControl_EnableEventsWildcardGroupName);
461 GridLayout layout = new GridLayout(2, false);
462 wildcardMainGroup.setLayout(layout);
463 GridData data = new GridData(GridData.FILL_HORIZONTAL);
464 wildcardMainGroup.setLayoutData(data);
465
466 Composite buttonComposite = new Composite(wildcardMainGroup, SWT.NONE);
467 layout = new GridLayout(1, false);
468 buttonComposite.setLayout(layout);
469 data = new GridData(SWT.BEGINNING, SWT.CENTER, false, true);
470 buttonComposite.setLayoutData(data);
471
472 fWildcardActivateButton = new Button(buttonComposite, SWT.RADIO);
473 fWildcardActivateButton.setText(Messages.TraceControl_EnableGroupSelectionName);
474 fWildcardActivateButton.setSelection(false);
475 data = new GridData(GridData.FILL_HORIZONTAL);
476 fWildcardActivateButton.setLayoutData(data);
477 fWildcardActivateButton.addSelectionListener(new SelectionAdapter() {
478 @Override
479 public void widgetSelected(SelectionEvent e) {
480 setEnablements(GroupEnum.WILDCARD);
481 }
482 });
483
484 Group wildcardGroup = new Group(wildcardMainGroup, SWT.SHADOW_NONE);
485 layout = new GridLayout(3, true);
486 wildcardGroup.setLayout(layout);
487 data = new GridData(GridData.FILL_HORIZONTAL);
488 wildcardGroup.setLayoutData(data);
489
490 Label wildcardLabel = new Label(wildcardGroup, SWT.LEFT);
491 wildcardLabel.setText(Messages.TraceControl_EnableEventsWildcardLabel);
492 data = new GridData(GridData.FILL_HORIZONTAL);
493 data.horizontalSpan = 1;
494 wildcardLabel.setLayoutData(data);
495
496 fWildcardText = new Text(wildcardGroup, SWT.LEFT);
497 fWildcardText.setToolTipText(Messages.TraceControl_EnableEventsWildcardTooltip);
498 data = new GridData(GridData.FILL_HORIZONTAL);
499 data.horizontalSpan = 2;
500 fWildcardText.setLayoutData(data);
501 }
502
503 /**
504 * Creates exclude events group.
505 */
506 private void createExcludeGroup() {
507 Group excludedEventMainGroup = new Group(this, SWT.SHADOW_NONE);
508 excludedEventMainGroup.setText(Messages.TraceControl_EnableEventsExcludedEventGroupName);
509 GridLayout layout = new GridLayout(2, false);
510 excludedEventMainGroup.setLayout(layout);
511 GridData data = new GridData(GridData.FILL_HORIZONTAL);
512 excludedEventMainGroup.setLayoutData(data);
513
514 Composite buttonComposite = new Composite(excludedEventMainGroup, SWT.NONE);
515 layout = new GridLayout(1, false);
516 buttonComposite.setLayout(layout);
517 data = new GridData(SWT.BEGINNING, SWT.CENTER, false, true);
518 buttonComposite.setLayoutData(data);
519
520 fExcludedEventsButton = new Button(buttonComposite, SWT.CHECK);
521 fExcludedEventsButton.setText(Messages.TraceControl_EnableGroupSelectionName);
522 fExcludedEventsButton.setSelection(false);
523
524 data = new GridData(GridData.FILL_HORIZONTAL);
525 fExcludedEventsButton.setLayoutData(data);
526
527 fExcludedEventsButton.addSelectionListener(new SelectionAdapter() {
528 @Override
529 public void widgetSelected(SelectionEvent e) {
530 fExcludedEventsText.setEnabled(fExcludedEventsButton.getSelection());
531 }
532 });
533
534 Group excludedEventGroup = new Group(excludedEventMainGroup, SWT.SHADOW_NONE);
535 layout = new GridLayout(3, true);
536 excludedEventGroup.setLayout(layout);
537 data = new GridData(GridData.FILL_HORIZONTAL);
538 excludedEventGroup.setLayoutData(data);
539
540 Label excludedEventLabel = new Label(excludedEventGroup, SWT.LEFT);
541 excludedEventLabel.setText(Messages.TraceControl_EnableEventsExcludedEventLabel);
542
543 data.horizontalSpan = 1;
544 excludedEventLabel.setLayoutData(data);
545
546 fExcludedEventsText = new Text(excludedEventGroup, SWT.LEFT);
547 fExcludedEventsText.setToolTipText(Messages.TraceControl_EnableEventsExcludedEventTooltip);
548 data = new GridData(GridData.FILL_HORIZONTAL);
549 data.horizontalSpan = 2;
550 fExcludedEventsText.setLayoutData(data);
551 fExcludedEventsText.setEnabled(false);
552 }
553
554
555 /**
556 * Creates log level group.
557 */
558 private void createLogLevelGroup() {
559 Group logLevelMainGroup = new Group(this, SWT.SHADOW_NONE);
560 logLevelMainGroup.setText(Messages.TraceControl_EnableEventsLogLevelGroupName);
561 GridLayout layout = new GridLayout(2, false);
562 logLevelMainGroup.setLayout(layout);
563 GridData data = new GridData(GridData.FILL_HORIZONTAL);
564 logLevelMainGroup.setLayoutData(data);
565
566 Composite buttonComposite = new Composite(logLevelMainGroup, SWT.NONE);
567 layout = new GridLayout(1, false);
568 buttonComposite.setLayout(layout);
569 data = new GridData(SWT.BEGINNING, SWT.CENTER, false, true);
570 buttonComposite.setLayoutData(data);
571
572 fLogLevelActivateButton = new Button(buttonComposite, SWT.RADIO);
573 fLogLevelActivateButton.setText(Messages.TraceControl_EnableGroupSelectionName);
574 fLogLevelActivateButton.setSelection(false);
575 data = new GridData(GridData.FILL_HORIZONTAL);
576 fLogLevelActivateButton.setLayoutData(data);
577 fLogLevelActivateButton.addSelectionListener(new SelectionAdapter() {
578 @Override
579 public void widgetSelected(SelectionEvent e) {
580 setEnablements(GroupEnum.LOGLEVEL);
581 }
582 });
583
584 Group logLevelGroup = new Group(logLevelMainGroup, SWT.SHADOW_NONE);
585 layout = new GridLayout(3, true);
586 logLevelGroup.setLayout(layout);
587 logLevelGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
588
589 Label logLevelEventNameLabel = new Label(logLevelGroup, SWT.LEFT);
590 logLevelEventNameLabel.setText(Messages.TraceControl_EnableEventsEventNameLabel);
591
592 data = new GridData(GridData.FILL_BOTH);
593 data.horizontalSpan = 1;
594 logLevelEventNameLabel.setLayoutData(data);
595
596 fLogLevelEventNameText = new Text(logLevelGroup, SWT.LEFT);
597 fLogLevelEventNameText.setToolTipText(Messages.TraceControl_EnableEventsLoglevelEventNameTooltip);
598 data = new GridData(GridData.FILL_BOTH);
599 data.horizontalSpan = 2;
600 fLogLevelEventNameText.setLayoutData(data);
601
602 fLogLevelButton = new Button(logLevelGroup, SWT.RADIO);
603 fLogLevelButton.setText(Messages.TraceControl_EnableEventsLogLevelTypeName);
604 fLogLevelButton.setToolTipText(Messages.TraceControl_EnableEventsLogLevelTypeTooltip);
605 data = new GridData(GridData.FILL_BOTH);
606 fLogLevelButton.setLayoutData(data);
607 fLogLevelButton.setSelection(true);
608
609 fLogLevelOnlyButton = new Button(logLevelGroup, SWT.RADIO);
610 fLogLevelOnlyButton.setText(Messages.TraceControl_EnableEventsLogLevelOnlyTypeName);
611 fLogLevelOnlyButton.setToolTipText(Messages.TraceControl_EnableEventsLogLevelOnlyTypeTooltip);
612 data = new GridData(GridData.FILL_BOTH);
613 fLogLevelButton.setLayoutData(data);
614
615 TraceLogLevel[] levels = TraceLogLevel.values();
616
617 String[] levelNames = new String[levels.length - 1];
618 int k = 0;
619 for (int i = 0; i < levels.length; i++) {
620 if (levels[i] != TraceLogLevel.LEVEL_UNKNOWN) {
621 levelNames[k++] = levels[i].getInName();
622 }
623 }
624
625 fLogLevelCombo = new CCombo(logLevelGroup, SWT.READ_ONLY);
626 fLogLevelCombo.setItems(levelNames);
627 fLogLevelCombo.setToolTipText(Messages.TraceControl_EnableEventsLogLevelTooltip);
628 data = new GridData(GridData.FILL_HORIZONTAL);
629 data.horizontalSpan = 4;
630 fLogLevelCombo.setLayoutData(data);
631 }
632
633 void createFilterGroup() {
634 if (fProviderGroup.isEventFilteringSupported(TraceDomainType.UST)) {
635 Group filterMainGroup = new Group(this, SWT.SHADOW_NONE);
636 filterMainGroup.setText(Messages.TraceControl_EnableEventsFilterGroupName);
637 GridLayout layout = new GridLayout(3, false);
638 filterMainGroup.setLayout(layout);
639 GridData data = new GridData(GridData.FILL_HORIZONTAL);
640 filterMainGroup.setLayoutData(data);
641
642 fFilterText = new Text(filterMainGroup, SWT.LEFT);
643 fFilterText.setToolTipText(Messages.TraceControl_EnableEventsFilterTooltip);
644 data = new GridData(GridData.FILL_HORIZONTAL);
645 fFilterText.setLayoutData(data);
646 }
647 }
648
649 /**
650 * Enable/selects widgets depending on the group specified.
651 * @param group - group to enable.
652 */
653 private void setEnablements(GroupEnum group) {
654
655 // Enable/disable trace point items
656 fTracepointsActivateButton.setSelection(group == GroupEnum.TRACEPOINTS);
657 fTracepointsViewer.getTree().setEnabled(group == GroupEnum.TRACEPOINTS);
658
659 // Enable/disable wildcard items
660 fWildcardActivateButton.setSelection(group == GroupEnum.WILDCARD);
661 fWildcardText.setEnabled(group == GroupEnum.WILDCARD);
662
663 // Enable/disable log level items
664 fLogLevelActivateButton.setSelection(group == GroupEnum.LOGLEVEL);
665 fLogLevelEventNameText.setEnabled(group == GroupEnum.LOGLEVEL);
666 fLogLevelCombo.setEnabled(group == GroupEnum.LOGLEVEL);
667 fLogLevelButton.setEnabled(group == GroupEnum.LOGLEVEL);
668 fLogLevelOnlyButton.setEnabled(group == GroupEnum.LOGLEVEL);
669 }
670
671 // ------------------------------------------------------------------------
672 // Local classes
673 // ------------------------------------------------------------------------
674 /**
675 * Content provider for the tracepoints tree.
676 */
677 public static final class UstContentProvider extends TraceControlContentProvider {
678 @Override
679 public Object[] getChildren(Object parentElement) {
680 if (parentElement instanceof TargetNodeComponent) {
681 List<ITraceControlComponent> children = ((ITraceControlComponent)parentElement).getChildren(TraceProviderGroup.class);
682 return children.toArray(new ITraceControlComponent[children.size()]);
683 }
684 if (parentElement instanceof TraceProviderGroup) {
685 List<ITraceControlComponent> children = ((ITraceControlComponent)parentElement).getChildren(UstProviderComponent.class);
686 return children.toArray(new ITraceControlComponent[children.size()]);
687 }
688 if (parentElement instanceof ITraceControlComponent) {
689 return ((ITraceControlComponent)parentElement).getChildren();
690 }
691 return new Object[0];
692 }
693 }
694
695 /**
696 * Content label for the tracepoints tree.
697 */
698 public static final class UstLabelProvider extends TraceControlLabelProvider {
699 @Override
700 public Image getImage(Object element) {
701 return null;
702 }
703 @Override
704 public String getText(Object element) {
705 if ((element != null) && (element instanceof TraceProviderGroup)) {
706 return Messages.TraceControl_EnableEventsTracepointTreeAllLabel;
707 }
708
709 if ((element != null) && (element instanceof UstProviderComponent)) {
710 return Messages.TraceControl_EnableEventsTracepointTreeAllLabel + " - " + ((UstProviderComponent)element).getName(); //$NON-NLS-1$
711 }
712 return super.getText(element);
713 }
714 }
715
716 /**
717 * Check state listener for the tracepoints tree.
718 */
719 public final class UstCheckStateListener implements ICheckStateListener {
720 @Override
721 public void checkStateChanged(CheckStateChangedEvent event) {
722 if (event.getChecked()) {
723 if (event.getElement() instanceof TraceProviderGroup) {
724 fTracepointsViewer.setSubtreeChecked(event.getElement(), true);
725 }
726 if (event.getElement() instanceof UstProviderComponent) {
727 fTracepointsViewer.setSubtreeChecked(event.getElement(), true);
728 }
729 } else {
730 if (event.getElement() instanceof TraceProviderGroup) {
731 fTracepointsViewer.setSubtreeChecked(event.getElement(), true);
732 }
733 if (event.getElement() instanceof UstProviderComponent) {
734 ITraceControlComponent component = (ITraceControlComponent) event.getElement();
735 fTracepointsViewer.setSubtreeChecked(event.getElement(), false);
736 fTracepointsViewer.setChecked(component.getParent(), false);
737 } else {
738 ITraceControlComponent component = (ITraceControlComponent) event.getElement();
739 fTracepointsViewer.setChecked(component.getParent(), false);
740 fTracepointsViewer.setChecked(component.getParent().getParent(), false);
741 }
742 }
743 }
744 }
745 }
This page took 0.049995 seconds and 5 git commands to generate.