- Introduced TmfExperiment (single trace for now)
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng.ui / src / org / eclipse / linuxtools / lttng / ui / views / project / ProjectView.java
CommitLineData
6e512b93 1/*******************************************************************************
8035003b 2 * Copyright (c) 2009 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
62d1696a
FC
15import org.eclipse.core.internal.resources.Folder;
16import org.eclipse.core.resources.IResource;
6e512b93
ASL
17import org.eclipse.core.resources.IResourceChangeEvent;
18import org.eclipse.core.resources.IResourceChangeListener;
19import org.eclipse.core.resources.IWorkspace;
8b29a712 20import org.eclipse.core.resources.IWorkspaceRoot;
6e512b93 21import org.eclipse.core.resources.ResourcesPlugin;
8b29a712 22import org.eclipse.core.runtime.Platform;
8035003b
ASL
23import org.eclipse.jface.action.IMenuListener;
24import org.eclipse.jface.action.IMenuManager;
6e512b93 25import org.eclipse.jface.action.MenuManager;
6e512b93
ASL
26import org.eclipse.jface.viewers.TreeSelection;
27import org.eclipse.jface.viewers.TreeViewer;
8b29a712
FC
28import org.eclipse.linuxtools.lttng.stubs.LTTngEventParserStub;
29import org.eclipse.linuxtools.lttng.stubs.LTTngEventStreamStub;
8b29a712 30import org.eclipse.linuxtools.tmf.signal.TmfSignalManager;
62d1696a
FC
31import org.eclipse.linuxtools.tmf.trace.ITmfEventParser;
32import org.eclipse.linuxtools.tmf.trace.ITmfTrace;
33import org.eclipse.linuxtools.tmf.trace.TmfExperiment;
34import org.eclipse.linuxtools.tmf.trace.TmfExperimentSelectedSignal;
6e512b93
ASL
35import org.eclipse.swt.SWT;
36import org.eclipse.swt.events.MouseAdapter;
37import org.eclipse.swt.events.MouseEvent;
38import org.eclipse.swt.widgets.Composite;
39import org.eclipse.swt.widgets.Menu;
40import org.eclipse.swt.widgets.Tree;
8b29a712 41import org.eclipse.ui.part.ViewPart;
6e512b93
ASL
42
43/**
44 * <b><u>ProjectView</u></b>
45 * <p>
46 * The ProjectView keeps track of the LTTng projects in the workspace.
8035003b
ASL
47 *
48 * TODO: Implement me. Please.
8b29a712
FC
49 * TODO: Display only LTTng projects (nature)
50 * TODO: Add context menu
51 * TODO: Identify LTTng traces and hook doubleClick properly
8035003b 52 * TODO: Handle multiple traces
6e512b93 53 */
8b29a712
FC
54@SuppressWarnings("restriction")
55public class ProjectView extends ViewPart {
6e512b93 56
62d1696a 57 public static final String ID = "org.eclipse.linuxtools.lttng.ui.views.project";
6e512b93 58
8035003b
ASL
59 private final IWorkspace fWorkspace;
60 private final IResourceChangeListener fResourceChangeListener;
6e512b93 61 private TreeViewer fViewer;
6e512b93 62
8035003b 63 // To perform updates on the UI thread
6e512b93
ASL
64 private Runnable fViewRefresher = new Runnable() {
65 public void run() {
8035003b 66 if (fViewer != null)
6e512b93 67 fViewer.refresh();
6e512b93
ASL
68 }
69 };
70
8035003b
ASL
71 // ========================================================================
72 // Constructor/Destructor
73 // ========================================================================
6e512b93 74
8035003b
ASL
75 /**
76 * This view needs to react to workspace resource changes
77 */
6e512b93 78 public ProjectView() {
8b29a712 79 fWorkspace = ResourcesPlugin.getWorkspace();
8035003b 80 fResourceChangeListener = new IResourceChangeListener() {
6e512b93
ASL
81 public void resourceChanged(IResourceChangeEvent event) {
82 if (event.getType() == IResourceChangeEvent.POST_CHANGE) {
8035003b
ASL
83 Tree tree = fViewer.getTree();
84 if (tree != null && !tree.isDisposed())
85 tree.getDisplay().asyncExec(fViewRefresher);
6e512b93
ASL
86 }
87 }
88 };
89 fWorkspace.addResourceChangeListener(fResourceChangeListener);
90 }
91
8035003b
ASL
92 /**
93 *
94 */
6e512b93
ASL
95 @Override
96 public void dispose() {
8035003b 97 fWorkspace.removeResourceChangeListener(fResourceChangeListener);
6e512b93
ASL
98 }
99
8035003b
ASL
100 /* (non-Javadoc)
101 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
102 */
6e512b93
ASL
103 @Override
104 public void createPartControl(Composite parent) {
8b29a712
FC
105 IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
106 fViewer = new TreeViewer(parent, SWT.SINGLE);
107 fViewer.setContentProvider(new ProjectContentProvider());
108 fViewer.setLabelProvider(new ProjectLabelProvider());
109 fViewer.setInput(root);
6e512b93 110
6e512b93 111 hookMouse();
6e512b93
ASL
112 createContextMenu();
113 }
114
8035003b 115 /**
62d1696a 116 *
8035003b 117 */
6e512b93
ASL
118 private void hookMouse() {
119 fViewer.getTree().addMouseListener(new MouseAdapter() {
8b29a712 120 @Override
6e512b93
ASL
121 public void mouseDoubleClick(MouseEvent event) {
122 TreeSelection selection = (TreeSelection) fViewer.getSelection();
123 Object element = selection.getFirstElement();
62d1696a
FC
124 if (element instanceof Folder) {
125 selectExperiment((Folder) element);
6e512b93
ASL
126 }
127 }
128 });
129 }
130
8035003b 131 /**
8b29a712 132 * @param trace
8035003b 133 *
62d1696a 134 * TODO: Tie the proper parser to the trace
8035003b 135 */
62d1696a
FC
136 private void selectExperiment(Folder folder) {
137 String expId = folder.getName();
138 TmfExperiment experiment = new TmfExperiment(expId, new ITmfTrace[] { });
6e512b93 139 try {
8b29a712 140 ITmfEventParser parser = new LTTngEventParserStub();
62d1696a
FC
141 for (IResource res : folder.members()) {
142 String traceId = Platform.getLocation() + res.getFullPath().toOSString();
143 ITmfTrace trace = new LTTngEventStreamStub(traceId, parser);
144 trace.indexStream(false);
145 experiment.addTrace(trace);
146 }
6e512b93
ASL
147 } catch (Exception e) {
148 e.printStackTrace();
149 }
62d1696a 150 TmfSignalManager.dispatchSignal(new TmfExperimentSelectedSignal(this, experiment));
6e512b93
ASL
151 }
152
8035003b
ASL
153 /**
154 *
155 */
6e512b93
ASL
156 private void createContextMenu() {
157 MenuManager menuManager = new MenuManager("#PopupMenu");
158 menuManager.setRemoveAllWhenShown(true);
8035003b
ASL
159 menuManager.addMenuListener(new IMenuListener() {
160 public void menuAboutToShow(IMenuManager manager) {
161 ProjectView.this.fillContextMenu(manager);
162 }
163 });
164
6e512b93
ASL
165 Menu menu = menuManager.createContextMenu(fViewer.getControl());
166 fViewer.getControl().setMenu(menu);
167 getSite().registerContextMenu(menuManager, fViewer);
168 }
8035003b
ASL
169
170 /**
171 * @param manager
172 */
173 private void fillContextMenu(IMenuManager manager) {
174 }
175
176 /* (non-Javadoc)
177 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
178 */
179 @Override
180 public void setFocus() {
181 // TODO Auto-generated method stub
8035003b 182
8035003b
ASL
183 }
184
185}
This page took 0.032774 seconds and 5 git commands to generate.