2010-10-26 Francois Chouinard <fchouinard@gmail.com> Contribution for Bug309042
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng.ui / src / org / eclipse / linuxtools / lttng / ui / views / project / ProjectView.java
CommitLineData
6e512b93 1/*******************************************************************************
2fbfb67b 2 * Copyright (c) 2009, 2010 Ericsson
6e512b93
ASL
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.lttng.ui.views.project;
14
8d2e2848
FC
15import java.io.FileNotFoundException;
16
62d1696a 17import org.eclipse.core.resources.IResource;
6e512b93
ASL
18import org.eclipse.core.resources.IResourceChangeEvent;
19import org.eclipse.core.resources.IResourceChangeListener;
20import org.eclipse.core.resources.IWorkspace;
21import org.eclipse.core.resources.ResourcesPlugin;
22import org.eclipse.jface.action.MenuManager;
2fbfb67b 23import org.eclipse.jface.viewers.StructuredSelection;
6e512b93
ASL
24import org.eclipse.jface.viewers.TreeSelection;
25import org.eclipse.jface.viewers.TreeViewer;
2fbfb67b 26import org.eclipse.jface.viewers.ViewerSorter;
e31e01e8 27import org.eclipse.linuxtools.lttng.event.LttngEvent;
8827c197 28import org.eclipse.linuxtools.lttng.state.experiment.StateManagerFactory;
82e04272 29import org.eclipse.linuxtools.lttng.trace.LTTngExperiment;
6d848cce 30import org.eclipse.linuxtools.lttng.trace.LTTngTrace;
2fbfb67b
FC
31import org.eclipse.linuxtools.lttng.ui.views.project.model.ILTTngProjectTreeNode;
32import org.eclipse.linuxtools.lttng.ui.views.project.model.LTTngExperimentNode;
33import org.eclipse.linuxtools.lttng.ui.views.project.model.LTTngProjectContentProvider;
34import org.eclipse.linuxtools.lttng.ui.views.project.model.LTTngProjectLabelProvider;
35import org.eclipse.linuxtools.lttng.ui.views.project.model.LTTngProjectRoot;
36import org.eclipse.linuxtools.lttng.ui.views.project.model.LTTngTraceNode;
e31e01e8 37import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
ff4ed569 38import org.eclipse.linuxtools.tmf.signal.TmfExperimentSelectedSignal;
62d1696a 39import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
8d2e2848 40import org.eclipse.linuxtools.tmf.ui.views.TmfView;
6e512b93
ASL
41import org.eclipse.swt.SWT;
42import org.eclipse.swt.events.MouseAdapter;
43import org.eclipse.swt.events.MouseEvent;
44import org.eclipse.swt.widgets.Composite;
45import org.eclipse.swt.widgets.Menu;
46import org.eclipse.swt.widgets.Tree;
47
48/**
49 * <b><u>ProjectView</u></b>
50 * <p>
51 * The ProjectView keeps track of the LTTng projects in the workspace.
52 */
8d2e2848 53public class ProjectView extends TmfView {
6e512b93 54
62d1696a 55 public static final String ID = "org.eclipse.linuxtools.lttng.ui.views.project";
6e512b93 56
2fbfb67b
FC
57 // ------------------------------------------------------------------------
58 // Main data structures
59 // ------------------------------------------------------------------------
60
6e512b93 61 private TreeViewer fViewer;
2fbfb67b 62 private LTTngProjectRoot fProjectRoot;
82e04272 63 private LTTngExperiment<LttngEvent> fSelectedExperiment = null;
2fbfb67b
FC
64
65 private IWorkspace fWorkspace;
66 private IResourceChangeListener fResourceChangeListener;
67
68 // ------------------------------------------------------------------------
69 // View refresher
70 // ------------------------------------------------------------------------
6e512b93 71
2fbfb67b 72 // Perform updates on the UI thread
6e512b93 73 private Runnable fViewRefresher = new Runnable() {
d4011df2
FC
74 @Override
75 public void run() {
db1ea19b 76 if ((fViewer != null) && (!fViewer.getTree().isDisposed())) {
2fbfb67b 77 Object[] elements = fViewer.getExpandedElements();
6e512b93 78 fViewer.refresh();
2fbfb67b
FC
79 fViewer.setExpandedElements(elements);
80 }
6e512b93
ASL
81 }
82 };
83
97bf4cb7
FC
84 public LTTngProjectRoot getRoot() {
85 return fProjectRoot;
86 }
87
2fbfb67b
FC
88 // ------------------------------------------------------------------------
89 // Constructor
90 // ------------------------------------------------------------------------
6e512b93
ASL
91
92 public ProjectView() {
2fbfb67b 93
fc6ccf6f 94 super("ProjectView");
2fbfb67b 95 fProjectRoot = new LTTngProjectRoot(this);
98029bc9
FC
96
97 fWorkspace = ResourcesPlugin.getWorkspace();
2fbfb67b 98 fResourceChangeListener = new IResourceChangeListener() {
d4011df2
FC
99 @Override
100 public void resourceChanged(IResourceChangeEvent event) {
6e512b93 101 if (event.getType() == IResourceChangeEvent.POST_CHANGE) {
2fbfb67b
FC
102 fProjectRoot.refreshChildren();
103 refresh();
6e512b93
ASL
104 }
105 }
106 };
107 fWorkspace.addResourceChangeListener(fResourceChangeListener);
108 }
109
2fbfb67b
FC
110 public void refresh() {
111 Tree tree = fViewer.getTree();
112 if (tree != null && !tree.isDisposed())
113 tree.getDisplay().asyncExec(fViewRefresher);
114 }
115
116 public void setSelection(ILTTngProjectTreeNode node) {
117 fViewer.setSelection(new StructuredSelection(node), true);
118 }
119
6e512b93
ASL
120 @Override
121 public void dispose() {
2fbfb67b 122 fWorkspace.removeResourceChangeListener(fResourceChangeListener);
6e512b93
ASL
123 }
124
125 @Override
126 public void createPartControl(Composite parent) {
5e7ce884
FC
127
128 fViewer = new TreeViewer(parent, SWT.SINGLE);
5e7ce884 129 fViewer.setContentProvider(new LTTngProjectContentProvider());
2fbfb67b
FC
130 fViewer.setSorter(new ViewerSorter());
131 fViewer.setLabelProvider(new LTTngProjectLabelProvider());
132 fViewer.setInput(fProjectRoot);
6e512b93 133
2fbfb67b 134 getSite().setSelectionProvider(fViewer);
6e512b93 135 hookMouse();
2fbfb67b 136
6e512b93
ASL
137 createContextMenu();
138 }
139
2fbfb67b
FC
140 // ------------------------------------------------------------------------
141 // ViewPart
142 // ------------------------------------------------------------------------
143
144 @Override
145 public String toString() {
146 return "[ProjectView]";
147 }
148
149 // ------------------------------------------------------------------------
150 // hookMouse
151 // ------------------------------------------------------------------------
152
6e512b93
ASL
153 private void hookMouse() {
154 fViewer.getTree().addMouseListener(new MouseAdapter() {
5e7ce884 155 @Override
6e512b93
ASL
156 public void mouseDoubleClick(MouseEvent event) {
157 TreeSelection selection = (TreeSelection) fViewer.getSelection();
158 Object element = selection.getFirstElement();
2fbfb67b
FC
159 if (element instanceof LTTngExperimentNode) {
160 LTTngExperimentNode experiment = (LTTngExperimentNode) element;
5e7ce884 161 selectExperiment(experiment);
6e512b93
ASL
162 }
163 }
164 });
165 }
166
8827c197 167 private boolean waitForCompletion = true;
98029bc9 168
8827c197
FC
169 /**
170 * @param experiment
171 */
f0fb9602 172 public void selectExperiment(LTTngExperimentNode experiment) {
5e7ce884 173 String expId = experiment.getName();
550d787e
FC
174 if (fSelectedExperiment != null) {
175// System.out.println(fSelectedExperiment.getName() + ": nbEvents=" + fSelectedExperiment.getNbEvents() +
176// ", nbReads=" + ((LTTngTrace) fSelectedExperiment.getTraces()[0]).nbEventsRead);
2fb2eb37 177 fSelectedExperiment.dispose();
550d787e 178 }
6e512b93 179 try {
2fbfb67b 180 LTTngTraceNode[] traceEntries = experiment.getTraces();
5e7ce884
FC
181 int nbTraces = traceEntries.length;
182 ITmfTrace[] traces = new ITmfTrace[nbTraces];
183 for (int i = 0; i < nbTraces; i++) {
2fbfb67b 184 IResource res = traceEntries[i].getFolder();
5e7ce884
FC
185 String location = res.getLocation().toOSString();
186 ITmfTrace trace = new LTTngTrace(location, waitForCompletion);
0546c023 187 traces[i] = trace;
62d1696a 188 }
82e04272 189 fSelectedExperiment = new LTTngExperiment<LttngEvent>(LttngEvent.class, expId, traces);
550d787e 190
8827c197
FC
191 // Make sure the lttng-core, experiment selection context is ready
192 // for an event request from any view
193 StateManagerFactory.getExperimentManager().experimentSelected_prep(
194 (TmfExperiment<LttngEvent>) fSelectedExperiment);
195
9b635e61 196// System.out.println(System.currentTimeMillis() + ": Experiment selected");
951d134a 197 broadcast(new TmfExperimentSelectedSignal<LttngEvent>(this, fSelectedExperiment));
8d2e2848 198 } catch (FileNotFoundException e) {
8d2e2848 199 return;
6e512b93
ASL
200 } catch (Exception e) {
201 e.printStackTrace();
202 }
203 }
204
2fbfb67b
FC
205 // ------------------------------------------------------------------------
206 // createContextMenu
207 // ------------------------------------------------------------------------
208
209 // Populated from the plug-in
6e512b93
ASL
210 private void createContextMenu() {
211 MenuManager menuManager = new MenuManager("#PopupMenu");
212 menuManager.setRemoveAllWhenShown(true);
213 Menu menu = menuManager.createContextMenu(fViewer.getControl());
214 fViewer.getControl().setMenu(menu);
215 getSite().registerContextMenu(menuManager, fViewer);
216 }
2fbfb67b 217
e31e01e8 218}
This page took 0.043297 seconds and 5 git commands to generate.