1 /*******************************************************************************
2 * Copyright (c) 2009, 2014 Ericsson, École Polytechnique de Montréal
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 * 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 *******************************************************************************/
15 package org
.eclipse
.linuxtools
.tmf
.ui
.project
.wizards
;
17 import java
.util
.HashMap
;
20 import java
.util
.Vector
;
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
;
44 * Implementation of a wizard page for selecting trace for an experiment.
48 * @author Francois Chouinard
50 public class SelectTracesWizardPage
extends WizardPage
{
52 // ------------------------------------------------------------------------
54 // ------------------------------------------------------------------------
56 private final TmfProjectElement fProject
;
57 private final TmfExperimentElement fExperiment
;
58 private Map
<String
, TmfTraceElement
> fPreviousTraces
;
59 private CheckboxTableViewer fCheckboxTableViewer
;
61 // ------------------------------------------------------------------------
63 // ------------------------------------------------------------------------
66 * @param project The project model element.
67 * @param experiment The experiment model experiment.
69 protected SelectTracesWizardPage(TmfProjectElement project
, TmfExperimentElement experiment
) {
70 super(""); //$NON-NLS-1$
71 setTitle(Messages
.SelectTracesWizardPage_WindowTitle
);
72 setDescription(Messages
.SelectTracesWizardPage_Description
);
74 fExperiment
= experiment
;
77 // ------------------------------------------------------------------------
79 // ------------------------------------------------------------------------
82 public void createControl(Composite parent
) {
83 Composite container
= new Composite(parent
, SWT
.NULL
);
84 container
.setLayout(new FormLayout());
85 setControl(container
);
87 fCheckboxTableViewer
= CheckboxTableViewer
.newCheckList(container
, SWT
.BORDER
);
88 fCheckboxTableViewer
.setContentProvider(new TraceFolderContentProvider());
89 fCheckboxTableViewer
.setLabelProvider(new TraceFolderLabelProvider());
90 fCheckboxTableViewer
.setSorter(new ViewerSorter());
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);
101 final TableColumn tableColumn
= new TableColumn(table
, SWT
.NONE
);
102 tableColumn
.setWidth(200);
103 tableColumn
.setText(Messages
.SelectTracesWizardPage_TraceColumnHeader
);
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
);
115 // Populate the list of traces to choose from
116 Set
<String
> keys
= fPreviousTraces
.keySet();
117 TmfTraceFolder traceFolder
= fProject
.getTracesFolder();
118 fCheckboxTableViewer
.setInput(traceFolder
);
120 // Set the checkbox for the traces already included
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);
130 element
= fCheckboxTableViewer
.getElementAt(index
++);
135 * Method to finalize the select operation.
136 * @return <code>true</code> if successful else <code>false</code>
138 public boolean performFinish() {
140 IFolder experiment
= fExperiment
.getResource();
141 boolean changed
= false;
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
);
151 fExperiment
.addTrace(trace
);
156 // Remove traces that were unchecked (thus left in fPreviousTraces)
157 keys
= fPreviousTraces
.keySet();
158 for (String key
: keys
) {
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$
167 fExperiment
.closeEditors();
168 fExperiment
.deleteSupplementaryResources();
175 * Get the list of selected traces
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
);
185 TmfTraceElement
[] result
= new TmfTraceElement
[traces
.size()];
186 traces
.toArray(result
);