1 /*******************************************************************************
2 * Copyright (c) 2013 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 * Matthew Khouzam - Initial API and implementation
11 *******************************************************************************/
13 package org
.eclipse
.linuxtools
.tmf
.ui
.project
.wizards
.importtrace
;
15 import java
.util
.ArrayList
;
16 import java
.util
.List
;
18 import org
.eclipse
.jface
.viewers
.CheckStateChangedEvent
;
19 import org
.eclipse
.jface
.viewers
.CheckboxTreeViewer
;
20 import org
.eclipse
.jface
.viewers
.ICheckStateListener
;
21 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
22 import org
.eclipse
.jface
.viewers
.ITreeContentProvider
;
23 import org
.eclipse
.jface
.viewers
.LabelProvider
;
24 import org
.eclipse
.linuxtools
.tmf
.core
.project
.model
.TraceTypeHelper
;
25 import org
.eclipse
.swt
.SWT
;
26 import org
.eclipse
.swt
.layout
.GridData
;
27 import org
.eclipse
.swt
.layout
.GridLayout
;
28 import org
.eclipse
.swt
.widgets
.Button
;
29 import org
.eclipse
.swt
.widgets
.Composite
;
30 import org
.eclipse
.swt
.widgets
.Event
;
31 import org
.eclipse
.swt
.widgets
.Listener
;
32 import org
.eclipse
.ui
.IWorkbench
;
35 * <b>Select trace types to import</b>, this page is the first of three pages
36 * shown. This one selects the type of traces that are to be scanned.
38 * @author Matthew Khouzam
41 public class ImportTraceWizardSelectTraceTypePage
extends AbstractImportTraceWizardPage
{
43 private CheckboxTreeViewer fTreeView
;
44 private final TraceTypeContentProvider fProvider
= new TraceTypeContentProvider();
47 * Select trace types to import
50 * The name of the page.
52 * The current selection
54 protected ImportTraceWizardSelectTraceTypePage(String name
, IStructuredSelection selection
) {
55 super(name
, selection
);
59 * Select trace types to import
62 * The workbench reference.
64 * The current selection
66 public ImportTraceWizardSelectTraceTypePage(IWorkbench workbench
, IStructuredSelection selection
) {
67 super(workbench
, selection
);
71 public void createControl(Composite parent
) {
72 super.createControl(parent
);
73 Composite control
= (Composite
) this.getControl();
75 final ICheckStateListener listener
= new TraceTypeCheckListener();
77 setTitle(Messages
.ImportTraceWizardSelectTraceTypePageTitle
);
79 fTreeView
= new CheckboxTreeViewer(control
, SWT
.BORDER
);
80 fTreeView
.getControl().setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
81 fTreeView
.setContentProvider(fProvider
);
82 fTreeView
.setInput(fProvider
);
83 fTreeView
.setLabelProvider(new LabelProvider() {
85 public String
getText(Object element
) {
86 return element
.toString();
89 fTreeView
.addCheckStateListener(listener
);
91 // populateTree(treeView);
93 Composite buttonArea
= new Composite(control
, SWT
.NONE
);
94 buttonArea
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, false));
95 buttonArea
.setLayout(new GridLayout(2, false));
97 Button selectAll
= new Button(buttonArea
, SWT
.NONE
);
98 selectAll
.setText(Messages
.ImportTraceWizardSelectAll
);
99 selectAll
.setLayoutData(new GridData(SWT
.RIGHT
, SWT
.CENTER
, true, false));
100 selectAll
.addListener(SWT
.Selection
, new Listener() {
102 public void handleEvent(Event event
) {
103 String elements
[] = (String
[]) ((ITreeContentProvider
) fTreeView
.getContentProvider()).getElements(null);
104 for (String key
: elements
) {
105 fTreeView
.setSubtreeChecked(key
, true);
107 getWizard().getContainer().updateButtons();
111 Button selectNone
= new Button(buttonArea
, SWT
.NONE
);
112 selectNone
.setText(Messages
.ImportTraceWizardPageSelectNone
);
113 selectNone
.setLayoutData(new GridData(SWT
.CENTER
, SWT
.CENTER
, false, false));
114 selectNone
.addListener(SWT
.Selection
, new Listener() {
116 public void handleEvent(Event event
) {
117 String elements
[] = (String
[]) ((ITreeContentProvider
) fTreeView
.getContentProvider()).getElements(null);
118 for (String key
: elements
) {
119 fTreeView
.setSubtreeChecked(key
, false);
121 getWizard().getContainer().updateButtons();
124 fTreeView
.expandAll();
128 public boolean canFlipToNextPage() {
129 List
<String
> tracesToScan
= new ArrayList
<>();
130 String elements
[] = (String
[]) fProvider
.getElements(null);
131 for (String traceFamily
: elements
) {
132 final TraceTypeHelper
[] children
= (TraceTypeHelper
[]) fProvider
.getChildren(traceFamily
);
133 if (children
!= null) {
134 for (TraceTypeHelper traceType
: children
) {
135 if (fTreeView
.getChecked(traceType
)) {
136 tracesToScan
.add(traceType
.getCanonicalName());
141 ((BatchImportTraceWizard
) getWizard()).setTraceTypesToScan(tracesToScan
);
142 if (tracesToScan
.isEmpty()) {
143 setErrorMessage(Messages
.ImportTraceWizardPageSelectHint
);
145 setErrorMessage(null);
147 return super.canFlipToNextPage() && !tracesToScan
.isEmpty();
150 private final class TraceTypeCheckListener
implements ICheckStateListener
{
152 public void checkStateChanged(CheckStateChangedEvent event
) {
154 boolean checkStatus
= event
.getChecked();
155 Object element
= event
.getElement();
157 fTreeView
.setGrayed(element
, false);
158 fTreeView
.setSubtreeChecked(element
, checkStatus
);
159 ITreeContentProvider tcp
= (ITreeContentProvider
) fTreeView
.getContentProvider();
160 String parentElement
= (String
) tcp
.getParent(element
);
161 if (parentElement
!= null) {
162 TraceTypeHelper
[] siblings
= (TraceTypeHelper
[]) tcp
.getChildren(parentElement
);
163 final TraceTypeHelper first
= siblings
[0];
164 final boolean isFirstChecked
= fTreeView
.getChecked(first
);
165 boolean allSame
= true;
166 for (TraceTypeHelper peer
: siblings
) {
167 final boolean peerChecked
= fTreeView
.getChecked(peer
);
168 if (peerChecked
!= isFirstChecked
) {
173 fTreeView
.setGrayed(parentElement
, false);
174 fTreeView
.setChecked(parentElement
, checkStatus
);
176 fTreeView
.setChecked(parentElement
, false);
177 fTreeView
.setGrayed(parentElement
, true);
180 getWizard().getContainer().updateButtons();