Fix some null warnings
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / tmf / ui / project / wizards / SelectRootNodeWizardPage.java
CommitLineData
dc62dbee
CB
1/*******************************************************************************
2 * Copyright (c) 2015 École Polytechnique de Montréal
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 * Cédric Biancheri - Initial API and implementation
11 *******************************************************************************/
12
13package org.eclipse.tracecompass.tmf.ui.project.wizards;
14
15import java.util.ArrayList;
16import java.util.List;
17
18import org.eclipse.jdt.annotation.NonNull;
19import org.eclipse.jface.viewers.CheckStateChangedEvent;
20import org.eclipse.jface.viewers.CheckboxTreeViewer;
21import org.eclipse.jface.viewers.ColumnLabelProvider;
22import org.eclipse.jface.viewers.ICheckStateListener;
23import org.eclipse.jface.viewers.TreeViewer;
24import org.eclipse.jface.viewers.TreeViewerColumn;
25import org.eclipse.jface.viewers.ViewerSorter;
26import org.eclipse.jface.wizard.WizardPage;
27import org.eclipse.swt.SWT;
28import org.eclipse.swt.graphics.Image;
29import org.eclipse.swt.layout.GridData;
30import org.eclipse.swt.layout.GridLayout;
31import org.eclipse.swt.widgets.Composite;
32import org.eclipse.swt.widgets.Tree;
33import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentElement;
34import org.eclipse.tracecompass.tmf.ui.project.model.TmfNavigatorContentProvider;
35import org.eclipse.tracecompass.tmf.ui.project.model.TmfNavigatorLabelProvider;
36import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
37import org.eclipse.ui.dialogs.FilteredTree;
38import org.eclipse.ui.dialogs.PatternFilter;
39
40/**
41 * Implementation of a wizard page for selecting a root node for
42 * synchronization.
43 *
44 * @author Cedric Biancheri
45 * @since 2.0
46 *
47 */
48public class SelectRootNodeWizardPage extends WizardPage {
49
50 // ------------------------------------------------------------------------
51 // Attributes
52 // ------------------------------------------------------------------------
53
54 private final TmfExperimentElement fExperiment;
55 private CheckboxTreeViewer fCheckboxTreeViewer;
56 private TmfNavigatorContentProvider fContentProvider;
57 private TmfNavigatorLabelProvider fLabelProvider;
58 private TmfTraceElement rootNode;
59
60 // ------------------------------------------------------------------------
61 // Constructor
62 // ------------------------------------------------------------------------
63
64 /**
65 * @param experiment
66 * The experiment where the synchronization will be made.
67 */
68 protected SelectRootNodeWizardPage(TmfExperimentElement experiment) {
69 super(""); //$NON-NLS-1$
70 fExperiment = experiment;
71 }
72
73 @Override
74 public void createControl(Composite parent) {
75 Composite container = new Composite(parent, SWT.NULL);
76 container.setLayout(new GridLayout(2, false));
77 setControl(container);
78 setTitle(Messages.SelectRootNodeWizardPage_WindowTitle);
79 setDescription(Messages.SelectRootNodeWizardPage_Description);
80
81 new FilteredTree(container, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER, new PatternFilter(), true) {
82 @Override
83 protected TreeViewer doCreateTreeViewer(Composite aparent, int style) {
84 return SelectRootNodeWizardPage.this.doCreateTreeViewer(aparent);
85 }
86 };
87 }
88
89 private TreeViewer doCreateTreeViewer(Composite parent) {
90 fCheckboxTreeViewer = new CheckboxTreeViewer(parent, SWT.BORDER);
91
92 fContentProvider = new TmfNavigatorContentProvider() {
93
94 @Override
95 public Object[] getElements(Object inputElement) {
96 return getChildren(inputElement);
97 }
98
99 @Override
100 public synchronized Object[] getChildren(Object parentElement) {
101 if (parentElement instanceof TmfExperimentElement) {
102 return ((TmfExperimentElement) parentElement).getTraces().toArray();
103 }
104 return null;
105 }
106
107 @Override
108 public boolean hasChildren(Object element) {
109 if (element instanceof TmfExperimentElement) {
110 return !(((TmfExperimentElement) element).getTraces().isEmpty());
111 }
112 return false;
113 }
114 };
115 fCheckboxTreeViewer.setContentProvider(fContentProvider);
116 fLabelProvider = new TmfNavigatorLabelProvider();
117 fCheckboxTreeViewer.setLabelProvider(fLabelProvider);
118 fCheckboxTreeViewer.setSorter(new ViewerSorter());
119
120 final Tree tree = fCheckboxTreeViewer.getTree();
121 GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
122 tree.setLayoutData(gd);
123 tree.setHeaderVisible(true);
124
125 final TreeViewerColumn column = new TreeViewerColumn(fCheckboxTreeViewer, SWT.NONE);
126 column.getColumn().setText(Messages.SelectRootNodeWizardPage_TraceColumnHeader);
127 column.setLabelProvider(new ColumnLabelProvider() {
128 @Override
129 public String getText(Object element) {
130 return fLabelProvider.getText(element);
131 }
132
133 @Override
134 public Image getImage(Object element) {
135 return fLabelProvider.getImage(element);
136 }
137 });
138
139 // Populate the list of traces from the experiment
140 fCheckboxTreeViewer.setInput(fExperiment);
141 column.getColumn().pack();
142
143 fCheckboxTreeViewer.addCheckStateListener(new ICheckStateListener() {
144 @Override
145 public void checkStateChanged(CheckStateChangedEvent event) {
146 Object element = event.getElement();
147 // Uncheck all elements
148 for (Object checkedElement : fCheckboxTreeViewer.getCheckedElements()) {
149 fCheckboxTreeViewer.setChecked(checkedElement, false);
150 }
151 fCheckboxTreeViewer.setChecked(element, event.getChecked());
152 setPageComplete(event.getChecked());
153 }
154 });
155
156 setPageComplete(true);
157 // Checks the first element by default
158 fCheckboxTreeViewer.getTree().getItem(0).setChecked(true);
159 return fCheckboxTreeViewer;
160 }
161
162 /**
163 * Method to finalize the select operation.
164 *
165 * @return <code>true</code> if successful. Should always be successful.
166 */
167 public boolean performFinish() {
168
169 TmfTraceElement[] selection = getSelection();
170
171 if (selection.length > 0 && selection[0] != null) {
172 setRootNode(selection[0]);
173 }
174
175 return true;
176 }
177
178 /**
179 * Get the list of selected traces
180 */
181 private @NonNull TmfTraceElement[] getSelection() {
182 List<TmfTraceElement> traces = new ArrayList<>();
183 Object[] selection = fCheckboxTreeViewer.getCheckedElements();
184 for (Object sel : selection) {
185 if (sel instanceof TmfTraceElement) {
186 traces.add((TmfTraceElement) sel);
187 }
188 }
aa353506 189 return traces.toArray(new @NonNull TmfTraceElement[0]);
dc62dbee
CB
190 }
191
192 /**
193 * Gets the root node.
194 *
195 * @return The root node
196 */
197 public TmfTraceElement getRootNode() {
198 return rootNode;
199 }
200
201 /**
202 * Sets the root node
203 *
204 * @param rootNode
205 * The root node
206 */
207 private void setRootNode(TmfTraceElement rootNode) {
208 this.rootNode = rootNode;
209 }
210
211}
This page took 0.034389 seconds and 5 git commands to generate.