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