[Bug 303523] LTTng/TMF udpates:
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng.ui / src / org / eclipse / linuxtools / lttng / ui / views / project / ProjectView.java
1 /*******************************************************************************
2 * Copyright (c) 2009 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
13 package org.eclipse.linuxtools.lttng.ui.views.project;
14
15 import java.io.FileNotFoundException;
16
17 import org.eclipse.core.resources.IResource;
18 import org.eclipse.core.resources.IResourceChangeEvent;
19 import org.eclipse.core.resources.IResourceChangeListener;
20 import org.eclipse.core.resources.IWorkspace;
21 import org.eclipse.core.resources.ResourcesPlugin;
22 import org.eclipse.jface.action.IMenuListener;
23 import org.eclipse.jface.action.IMenuManager;
24 import org.eclipse.jface.action.MenuManager;
25 import org.eclipse.jface.viewers.TreeSelection;
26 import org.eclipse.jface.viewers.TreeViewer;
27 import org.eclipse.linuxtools.lttng.event.LttngEvent;
28 import org.eclipse.linuxtools.lttng.trace.LTTngTrace;
29 import org.eclipse.linuxtools.lttng.ui.views.project.model.LTTngExperimentEntry;
30 import org.eclipse.linuxtools.lttng.ui.views.project.model.LTTngTraceEntry;
31 import org.eclipse.linuxtools.tmf.experiment.TmfExperiment;
32 import org.eclipse.linuxtools.tmf.experiment.TmfExperimentSelectedSignal;
33 import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
34 import org.eclipse.linuxtools.tmf.ui.views.TmfView;
35 import org.eclipse.swt.SWT;
36 import org.eclipse.swt.events.MouseAdapter;
37 import org.eclipse.swt.events.MouseEvent;
38 import org.eclipse.swt.widgets.Composite;
39 import org.eclipse.swt.widgets.Menu;
40 import org.eclipse.swt.widgets.Tree;
41
42 /**
43 * <b><u>ProjectView</u></b>
44 * <p>
45 * The ProjectView keeps track of the LTTng projects in the workspace.
46 *
47 * TODO: Implement me. Please.
48 * TODO: Put all actions in a context menu
49 * TODO: Identify LTTng traces vs. experiments and hook doubleClick properly
50 * TODO: Handle multiple traces
51 */
52 public class ProjectView extends TmfView {
53
54 public static final String ID = "org.eclipse.linuxtools.lttng.ui.views.project";
55
56 private final IWorkspace fWorkspace;
57 private final IResourceChangeListener fResourceChangeListener;
58 private TreeViewer fViewer;
59 private TmfExperiment<LttngEvent> fExperiment = null;
60 // private Object fSelection = null;
61
62 // To perform updates on the UI thread
63 private Runnable fViewRefresher = new Runnable() {
64 public void run() {
65 if (fViewer != null)
66 fViewer.refresh();
67 }
68 };
69
70 // ========================================================================
71 // Constructor/Destructor
72 // ========================================================================
73
74 /**
75 * This view needs to react to workspace resource changes
76 */
77 public ProjectView() {
78
79 // TmfTraceContext.init();
80
81 fWorkspace = ResourcesPlugin.getWorkspace();
82 fResourceChangeListener = new IResourceChangeListener() {
83 public void resourceChanged(IResourceChangeEvent event) {
84 if (event.getType() == IResourceChangeEvent.POST_CHANGE) {
85 Tree tree = fViewer.getTree();
86 if (tree != null && !tree.isDisposed())
87 tree.getDisplay().asyncExec(fViewRefresher);
88 }
89 }
90 };
91 fWorkspace.addResourceChangeListener(fResourceChangeListener);
92 }
93
94 /**
95 *
96 */
97 @Override
98 public void dispose() {
99 fWorkspace.removeResourceChangeListener(fResourceChangeListener);
100 }
101
102 /* (non-Javadoc)
103 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
104 */
105 @Override
106 public void createPartControl(Composite parent) {
107
108 fViewer = new TreeViewer(parent, SWT.SINGLE);
109 fViewer.setLabelProvider(new LTTngProjectLabelProvider());
110 fViewer.setContentProvider(new LTTngProjectContentProvider());
111 fViewer.setInput(ResourcesPlugin.getWorkspace().getRoot());
112
113 hookMouse();
114 hookDragAndDrop();
115 createContextMenu();
116 }
117
118 /**
119 *
120 */
121 private void hookMouse() {
122 fViewer.getTree().addMouseListener(new MouseAdapter() {
123 @Override
124 public void mouseDoubleClick(MouseEvent event) {
125 TreeSelection selection = (TreeSelection) fViewer.getSelection();
126 Object element = selection.getFirstElement();
127 if (element instanceof LTTngExperimentEntry) {
128 LTTngExperimentEntry experiment = (LTTngExperimentEntry) element;
129 selectExperiment(experiment);
130 }
131 }
132 });
133 }
134
135 private void hookDragAndDrop() {
136 new TraceDragSource(fViewer);
137 new TraceDropTarget(fViewer);
138 }
139
140 /**
141 * @param experiment
142 *
143 * TODO: Tie the proper parser to the trace
144 */
145 // FIXME: Troubleshooting hack - start
146 private boolean waitForCompletion = true;
147 // FIXME: Troubleshooting hack - end
148
149 private void selectExperiment(LTTngExperimentEntry experiment) {
150 String expId = experiment.getName();
151 if (fExperiment != null)
152 fExperiment.deregister();
153 try {
154 LTTngTraceEntry[] traceEntries = experiment.getTraces();
155 int nbTraces = traceEntries.length;
156 ITmfTrace[] traces = new ITmfTrace[nbTraces];
157 for (int i = 0; i < nbTraces; i++) {
158 IResource res = traceEntries[i].getResource();
159 String location = res.getLocation().toOSString();
160 ITmfTrace trace = new LTTngTrace(location, waitForCompletion);
161 traces[i] = trace;
162 }
163 fExperiment = new TmfExperiment<LttngEvent>(LttngEvent.class, expId, traces);
164 fExperiment.indexExperiment(waitForCompletion);
165 broadcast(new TmfExperimentSelectedSignal(this, fExperiment));
166 } catch (FileNotFoundException e) {
167 // TODO: Why not tell the user? He would appreciate...
168 // e.printStackTrace();
169 return;
170 } catch (Exception e) {
171 e.printStackTrace();
172 }
173 }
174
175 /**
176 *
177 */
178 private void createContextMenu() {
179 MenuManager menuManager = new MenuManager("#PopupMenu");
180 menuManager.setRemoveAllWhenShown(true);
181 menuManager.addMenuListener(new IMenuListener() {
182 public void menuAboutToShow(IMenuManager manager) {
183 ProjectView.this.fillContextMenu(manager);
184 }
185 });
186
187 Menu menu = menuManager.createContextMenu(fViewer.getControl());
188 fViewer.getControl().setMenu(menu);
189 getSite().registerContextMenu(menuManager, fViewer);
190 }
191
192 /**
193 * @param manager
194 */
195 private void fillContextMenu(IMenuManager manager) {
196 }
197
198 /* (non-Javadoc)
199 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
200 */
201 @Override
202 public void setFocus() {
203 // TODO Auto-generated method stub
204 }
205
206 /* (non-Javadoc)
207 * @see java.lang.Object#toString()
208 */
209 @Override
210 public String toString() {
211 return "[ProjectView]";
212 }
213
214 }
This page took 0.034242 seconds and 5 git commands to generate.