tmf: Support folders in tracing projects
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / project / wizards / SelectTracesWizardPage.java
1 /*******************************************************************************
2 * Copyright (c) 2009, 2014 Ericsson, É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 * Francois Chouinard - Initial API and implementation
11 * Geneviève Bastien - Moved the add and remove code to the experiment class
12 * Patrick Tasse - Add support for folder elements
13 *******************************************************************************/
14
15 package org.eclipse.linuxtools.tmf.ui.project.wizards;
16
17 import java.util.HashMap;
18 import java.util.Map;
19 import java.util.Set;
20 import java.util.Vector;
21
22 import org.eclipse.core.resources.IFolder;
23 import org.eclipse.core.runtime.CoreException;
24 import org.eclipse.jface.viewers.CheckboxTableViewer;
25 import org.eclipse.jface.viewers.ViewerSorter;
26 import org.eclipse.jface.wizard.WizardPage;
27 import org.eclipse.linuxtools.internal.tmf.ui.Activator;
28 import org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement;
29 import org.eclipse.linuxtools.tmf.ui.project.model.TmfExperimentElement;
30 import org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectElement;
31 import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceElement;
32 import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceFolder;
33 import org.eclipse.linuxtools.tmf.ui.project.model.TraceFolderContentProvider;
34 import org.eclipse.linuxtools.tmf.ui.project.model.TraceFolderLabelProvider;
35 import org.eclipse.swt.SWT;
36 import org.eclipse.swt.layout.FormAttachment;
37 import org.eclipse.swt.layout.FormData;
38 import org.eclipse.swt.layout.FormLayout;
39 import org.eclipse.swt.widgets.Composite;
40 import org.eclipse.swt.widgets.Table;
41 import org.eclipse.swt.widgets.TableColumn;
42
43 /**
44 * Implementation of a wizard page for selecting trace for an experiment.
45 * <p>
46 *
47 * @version 1.0
48 * @author Francois Chouinard
49 */
50 public class SelectTracesWizardPage extends WizardPage {
51
52 // ------------------------------------------------------------------------
53 // Attributes
54 // ------------------------------------------------------------------------
55
56 private final TmfProjectElement fProject;
57 private final TmfExperimentElement fExperiment;
58 private Map<String, TmfTraceElement> fPreviousTraces;
59 private CheckboxTableViewer fCheckboxTableViewer;
60
61 // ------------------------------------------------------------------------
62 // Constructor
63 // ------------------------------------------------------------------------
64 /**
65 * Constructor
66 * @param project The project model element.
67 * @param experiment The experiment model experiment.
68 */
69 protected SelectTracesWizardPage(TmfProjectElement project, TmfExperimentElement experiment) {
70 super(""); //$NON-NLS-1$
71 setTitle(Messages.SelectTracesWizardPage_WindowTitle);
72 setDescription(Messages.SelectTracesWizardPage_Description);
73 fProject = project;
74 fExperiment = experiment;
75 }
76
77 // ------------------------------------------------------------------------
78 // Dialog
79 // ------------------------------------------------------------------------
80
81 @Override
82 public void createControl(Composite parent) {
83 Composite container = new Composite(parent, SWT.NULL);
84 container.setLayout(new FormLayout());
85 setControl(container);
86
87 fCheckboxTableViewer = CheckboxTableViewer.newCheckList(container, SWT.BORDER);
88 fCheckboxTableViewer.setContentProvider(new TraceFolderContentProvider());
89 fCheckboxTableViewer.setLabelProvider(new TraceFolderLabelProvider());
90 fCheckboxTableViewer.setSorter(new ViewerSorter());
91
92 final Table table = fCheckboxTableViewer.getTable();
93 final FormData formData = new FormData();
94 formData.bottom = new FormAttachment(100, 0);
95 formData.right = new FormAttachment(100, 0);
96 formData.top = new FormAttachment(0, 0);
97 formData.left = new FormAttachment(0, 0);
98 table.setLayoutData(formData);
99 table.setHeaderVisible(true);
100
101 final TableColumn tableColumn = new TableColumn(table, SWT.NONE);
102 tableColumn.setWidth(200);
103 tableColumn.setText(Messages.SelectTracesWizardPage_TraceColumnHeader);
104
105 // Get the list of traces already part of the experiment
106 fPreviousTraces = new HashMap<>();
107 for (ITmfProjectModelElement child : fExperiment.getChildren()) {
108 if (child instanceof TmfTraceElement) {
109 TmfTraceElement trace = (TmfTraceElement) child;
110 String name = trace.getElementPath();
111 fPreviousTraces.put(name, trace);
112 }
113 }
114
115 // Populate the list of traces to choose from
116 Set<String> keys = fPreviousTraces.keySet();
117 TmfTraceFolder traceFolder = fProject.getTracesFolder();
118 fCheckboxTableViewer.setInput(traceFolder);
119
120 // Set the checkbox for the traces already included
121 int index = 0;
122 Object element = fCheckboxTableViewer.getElementAt(index++);
123 while (element != null) {
124 if (element instanceof TmfTraceElement) {
125 TmfTraceElement trace = (TmfTraceElement) element;
126 if (keys.contains(trace.getElementPath())) {
127 fCheckboxTableViewer.setChecked(element, true);
128 }
129 }
130 element = fCheckboxTableViewer.getElementAt(index++);
131 }
132 }
133
134 /**
135 * Method to finalize the select operation.
136 * @return <code>true</code> if successful else <code>false</code>
137 */
138 public boolean performFinish() {
139
140 IFolder experiment = fExperiment.getResource();
141 boolean changed = false;
142
143 // Add the selected traces to the experiment
144 Set<String> keys = fPreviousTraces.keySet();
145 TmfTraceElement[] traces = getSelection();
146 for (TmfTraceElement trace : traces) {
147 String name = trace.getElementPath();
148 if (keys.contains(name)) {
149 fPreviousTraces.remove(name);
150 } else {
151 fExperiment.addTrace(trace);
152 changed = true;
153 }
154 }
155
156 // Remove traces that were unchecked (thus left in fPreviousTraces)
157 keys = fPreviousTraces.keySet();
158 for (String key : keys) {
159 try {
160 fExperiment.removeTrace(fPreviousTraces.get(key));
161 } catch (CoreException e) {
162 Activator.getDefault().logError("Error selecting traces for experiment " + experiment.getName(), e); //$NON-NLS-1$
163 }
164 changed = true;
165 }
166 if (changed) {
167 fExperiment.closeEditors();
168 fExperiment.deleteSupplementaryResources();
169 }
170
171 return true;
172 }
173
174 /**
175 * Get the list of selected traces
176 */
177 private TmfTraceElement[] getSelection() {
178 Vector<TmfTraceElement> traces = new Vector<>();
179 Object[] selection = fCheckboxTableViewer.getCheckedElements();
180 for (Object sel : selection) {
181 if (sel instanceof TmfTraceElement) {
182 traces.add((TmfTraceElement) sel);
183 }
184 }
185 TmfTraceElement[] result = new TmfTraceElement[traces.size()];
186 traces.toArray(result);
187 return result;
188 }
189
190 }
This page took 0.03399 seconds and 5 git commands to generate.