Update Javadoc for the public API in legacy LTTng
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / project / wizards / SelectTracesWizardPage.java
CommitLineData
12c155f5
FC
1/*******************************************************************************
2 * Copyright (c) 2009, 2010, 2011 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 * Francois Chouinard - Initial API and implementation
11 *******************************************************************************/
12
13package org.eclipse.linuxtools.tmf.ui.project.wizards;
14
15import java.util.HashMap;
16import java.util.Map;
17import java.util.Set;
18import java.util.Vector;
19
20import org.eclipse.core.resources.IFile;
21import org.eclipse.core.resources.IFolder;
22import org.eclipse.core.resources.IResource;
23import org.eclipse.core.resources.IWorkspace;
24import org.eclipse.core.resources.ResourcesPlugin;
25import org.eclipse.core.runtime.CoreException;
26import org.eclipse.core.runtime.IPath;
27import org.eclipse.core.runtime.QualifiedName;
28import org.eclipse.jface.viewers.CheckboxTableViewer;
29import org.eclipse.jface.wizard.WizardPage;
8fd82db5 30import org.eclipse.linuxtools.internal.tmf.ui.Activator;
e12ecd30 31import org.eclipse.linuxtools.tmf.core.TmfCommonConstants;
12c155f5
FC
32import org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement;
33import org.eclipse.linuxtools.tmf.ui.project.model.TmfExperimentElement;
34import org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectElement;
35import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceElement;
36import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceFolder;
37import org.eclipse.linuxtools.tmf.ui.project.model.TraceFolderContentProvider;
38import org.eclipse.linuxtools.tmf.ui.project.model.TraceFolderLabelProvider;
39import org.eclipse.swt.SWT;
40import org.eclipse.swt.layout.FormAttachment;
41import org.eclipse.swt.layout.FormData;
42import org.eclipse.swt.layout.FormLayout;
43import org.eclipse.swt.widgets.Composite;
44import org.eclipse.swt.widgets.Table;
45import org.eclipse.swt.widgets.TableColumn;
46
47/**
48 * <b><u>SelectTracesWizardPage</u></b>
49 * <p>
50 */
51public class SelectTracesWizardPage extends WizardPage {
52
53 // ------------------------------------------------------------------------
54 // Attributes
55 // ------------------------------------------------------------------------
56
57 private final TmfProjectElement fProject;
58 private final TmfExperimentElement fExperiment;
9fa32496 59 private Map<String, TmfTraceElement> fPreviousTraces;
12c155f5
FC
60 private CheckboxTableViewer fCheckboxTableViewer;
61
62 // ------------------------------------------------------------------------
63 // Constructor
64 // ------------------------------------------------------------------------
65
66 protected SelectTracesWizardPage(TmfProjectElement project, TmfExperimentElement experiment) {
67 super(""); //$NON-NLS-1$
68 setTitle(Messages.SelectTracesWizardPage_WindowTitle);
69 setDescription(Messages.SelectTracesWizardPage_Description);
70 fProject = project;
71 fExperiment = experiment;
72 }
73
74 // ------------------------------------------------------------------------
75 // Dialog
76 // ------------------------------------------------------------------------
77
78 @Override
79 public void createControl(Composite parent) {
80 Composite container = new Composite(parent, SWT.NULL);
81 container.setLayout(new FormLayout());
82 setControl(container);
83
84 fCheckboxTableViewer = CheckboxTableViewer.newCheckList(container, SWT.BORDER);
85 fCheckboxTableViewer.setContentProvider(new TraceFolderContentProvider());
86 fCheckboxTableViewer.setLabelProvider(new TraceFolderLabelProvider());
87
88 final Table table = fCheckboxTableViewer.getTable();
89 final FormData formData = new FormData();
90 formData.bottom = new FormAttachment(100, 0);
91 formData.right = new FormAttachment(100, 0);
92 formData.top = new FormAttachment(0, 0);
93 formData.left = new FormAttachment(0, 0);
94 table.setLayoutData(formData);
95 table.setHeaderVisible(true);
96
97 final TableColumn tableColumn = new TableColumn(table, SWT.NONE);
98 tableColumn.setWidth(200);
99 tableColumn.setText(Messages.SelectTracesWizardPage_TraceColumnHeader);
100
101 // Get the list of traces already part of the experiment
102 fPreviousTraces = new HashMap<String, TmfTraceElement>();
103 for (ITmfProjectModelElement child : fExperiment.getChildren()) {
104 if (child instanceof TmfTraceElement) {
105 TmfTraceElement trace = (TmfTraceElement) child;
106 String name = trace.getResource().getName();
107 fPreviousTraces.put(name, trace);
108 }
109 }
110
111 // Populate the list of traces to choose from
112 Set<String> keys = fPreviousTraces.keySet();
113 TmfTraceFolder traceFolder = fProject.getTracesFolder();
114 fCheckboxTableViewer.setInput(traceFolder);
115
116 // Set the checkbox for the traces already included
117 int index = 0;
118 Object element = fCheckboxTableViewer.getElementAt(index++);
119 while (element != null) {
120 if (element instanceof TmfTraceElement) {
121 TmfTraceElement trace = (TmfTraceElement) element;
122 if (keys.contains(trace.getResource().getName())) {
123 fCheckboxTableViewer.setChecked(element, true);
124 }
125 }
126 element = fCheckboxTableViewer.getElementAt(index++);
127 }
128 }
129
130 public boolean performFinish() {
131
132 IFolder experiment = fExperiment.getResource();
133
134 // Add the selected traces to the experiment
135 Set<String> keys = fPreviousTraces.keySet();
136 TmfTraceElement[] traces = getSelection();
137 for (TmfTraceElement trace : traces) {
138 String name = trace.getResource().getName();
139 if (keys.contains(name)) {
140 fPreviousTraces.remove(name);
141 } else {
142 IResource resource = trace.getResource();
143 IPath location = resource.getLocation();
144 createLink(experiment, trace, resource, location);
145 }
146 }
147
148 // Remove traces that were unchecked (thus left in fPreviousTraces)
149 keys = fPreviousTraces.keySet();
150 for (String key : keys) {
151 fExperiment.removeChild(fPreviousTraces.get(key));
152 IResource resource = experiment.findMember(key);
153 try {
154 resource.delete(true, null);
155 } catch (CoreException e) {
8fd82db5 156 Activator.getDefault().logError("Error selecting traces for experiment " + experiment.getName(), e); //$NON-NLS-1$
12c155f5
FC
157 }
158 }
159 fProject.refresh();
160
161 return true;
162 }
163
164 /**
165 * Create a link to the actual trace and set the trace type
166 */
167 private void createLink(IFolder experiment, TmfTraceElement trace, IResource resource, IPath location) {
168 IWorkspace workspace = ResourcesPlugin.getWorkspace();
169 try {
170 Map<QualifiedName, String> properties = trace.getResource().getPersistentProperties();
e12ecd30
BH
171 String bundleName = properties.get(TmfCommonConstants.TRACEBUNDLE);
172 String traceType = properties.get(TmfCommonConstants.TRACETYPE);
173 String iconUrl = properties.get(TmfCommonConstants.TRACEICON);
12c155f5
FC
174
175 if (resource instanceof IFolder) {
176 IFolder folder = experiment.getFolder(trace.getName());
177 if (workspace.validateLinkLocation(folder, location).isOK()) {
178 folder.createLink(location, IResource.REPLACE, null);
179 setProperties(folder, bundleName, traceType, iconUrl);
180
181 } else {
8fd82db5 182 Activator.getDefault().logError("Error creating link. Invalid trace location " + location); //$NON-NLS-1$
12c155f5
FC
183 }
184 } else {
185 IFile file = experiment.getFile(trace.getName());
186 if (workspace.validateLinkLocation(file, location).isOK()) {
187 file.createLink(location, IResource.REPLACE, null);
188 setProperties(file, bundleName, traceType, iconUrl);
189 } else {
8fd82db5 190 Activator.getDefault().logError("Error creating link. Invalid trace location " + location); //$NON-NLS-1$
12c155f5
FC
191 }
192 }
193 } catch (CoreException e) {
8fd82db5 194 Activator.getDefault().logError("Error creating link to location " + location, e); //$NON-NLS-1$
12c155f5
FC
195 }
196 }
197
198 private void setProperties(IResource resource, String bundleName, String traceType, String iconUrl) throws CoreException {
e12ecd30
BH
199 resource.setPersistentProperty(TmfCommonConstants.TRACEBUNDLE, bundleName);
200 resource.setPersistentProperty(TmfCommonConstants.TRACETYPE, traceType);
201 resource.setPersistentProperty(TmfCommonConstants.TRACEICON, iconUrl);
12c155f5
FC
202 }
203
204 /**
205 * Get the list of selected traces
206 */
207 private TmfTraceElement[] getSelection() {
208 Vector<TmfTraceElement> traces = new Vector<TmfTraceElement>();
209 Object[] selection = fCheckboxTableViewer.getCheckedElements();
210 for (Object sel : selection) {
211 if (sel instanceof TmfTraceElement)
212 traces.add((TmfTraceElement) sel);
213 }
214 TmfTraceElement[] result = new TmfTraceElement[traces.size()];
215 traces.toArray(result);
216 return result;
217 }
218
219}
This page took 0.04519 seconds and 5 git commands to generate.