Updated fix for bug 371528: Updates for bookmarks, editor for experiments, accelerato...
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / editors / EventsViewEditor.java
CommitLineData
09d11238
PT
1/*******************************************************************************
2* Copyright (c) 2012 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 * Patrick Tasse - Initial API and implementation
11 *******************************************************************************/
12
13package org.eclipse.linuxtools.tmf.ui.editors;
14
15import java.io.FileNotFoundException;
16import java.util.List;
17
18import org.eclipse.core.resources.IMarker;
19import org.eclipse.core.resources.IResource;
20import org.eclipse.core.runtime.CoreException;
21import org.eclipse.core.runtime.IProgressMonitor;
22import org.eclipse.core.runtime.InvalidRegistryObjectException;
23import org.eclipse.linuxtools.tmf.core.event.TmfEvent;
24import org.eclipse.linuxtools.tmf.core.experiment.TmfExperiment;
25import org.eclipse.linuxtools.tmf.core.signal.TmfExperimentSelectedSignal;
26import org.eclipse.linuxtools.tmf.core.signal.TmfSignalManager;
27import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
28import org.eclipse.linuxtools.tmf.core.trace.TmfTrace;
29import org.eclipse.linuxtools.tmf.ui.project.handlers.Messages;
30import org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement;
31import org.eclipse.linuxtools.tmf.ui.project.model.TmfExperimentElement;
32import org.eclipse.linuxtools.tmf.ui.project.model.TmfNavigatorContentProvider;
33import org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectElement;
34import org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectRegistry;
35import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceElement;
36import org.eclipse.linuxtools.tmf.ui.views.events.TmfEventsView;
37import org.eclipse.swt.widgets.Composite;
38import org.eclipse.swt.widgets.Display;
39import org.eclipse.ui.IEditorInput;
40import org.eclipse.ui.IEditorSite;
41import org.eclipse.ui.IFileEditorInput;
42import org.eclipse.ui.IViewPart;
43import org.eclipse.ui.IWorkbenchPage;
44import org.eclipse.ui.PartInitException;
45import org.eclipse.ui.ide.IGotoMarker;
46import org.eclipse.ui.part.EditorPart;
47
48/**
49 *
50 * This editor is used to open a trace in the Events view
51 * and set the trace as the current experiment.
52 * It intercepts the IGotoMarker adapter and dispatches
53 * the handling to the Events view' events table.
54 * The editor then closes itself and hides the
55 * editor area if no other editor is open.
56 *
57 */
58public class EventsViewEditor extends TmfEditor {
59
60 /**
61 * The editor ID
62 */
63 public static final String ID = "org.eclipse.linuxtools.tmf.ui.editors.eventsView"; //$NON-NLS-1$
64
65 private IResource fResource;
66 @SuppressWarnings("rawtypes")
67 private ITmfTrace fTrace;
68 private IMarker fGotoMarker;
69 private boolean fEditorAreaVisible;
70
71 /*
72 * (non-Javadoc)
73 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
74 */
75 @Override
76 public void doSave(IProgressMonitor monitor) {
77 }
78
79 @Override
80 public void doSaveAs() {
81 }
82
83 /*
84 * (non-Javadoc)
85 * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
86 */
87 @SuppressWarnings({ "unchecked", "rawtypes" })
88 @Override
89 public void init(IEditorSite site, IEditorInput input) throws PartInitException {
90 fEditorAreaVisible = site.getPage().isEditorAreaVisible();
91 if (input instanceof TmfEditorInput) {
92 fResource = ((TmfEditorInput) input).getResource();
93 fTrace = ((TmfEditorInput) input).getTrace();
94 } else if (input instanceof IFileEditorInput) {
95 fResource = ((IFileEditorInput) input).getFile();
96 if (fResource == null) {
97 throw new PartInitException("Invalid IFileEditorInput: " + input); //$NON-NLS-1$
98 }
99 TmfExperiment currentExperiment = TmfExperiment.getCurrentExperiment();
100 if (currentExperiment != null && fResource.equals(currentExperiment.getResource())) {
101 fTrace = currentExperiment;
102 super.setSite(site);
103 super.setInput(input);
104 return;
105 }
106 try {
107 String traceTypeId = fResource.getPersistentProperty(TmfTraceElement.TRACETYPE);
108 if (traceTypeId == null) {
109 throw new PartInitException(Messages.OpenTraceHandler_NoTraceType);
110 }
111 if (traceTypeId.equals(TmfExperiment.class.getCanonicalName())) {
112 // Special case: experiment bookmark resource
113 TmfNavigatorContentProvider ncp = new TmfNavigatorContentProvider();
114 ncp.getChildren(fResource.getProject()); // force the model to be populated
115 TmfProjectElement project = TmfProjectRegistry.getProject(fResource.getProject());
116 if (project == null) {
117 throw new PartInitException(Messages.OpenExperimentHandler_NoTraceType);
118 }
119 for (ITmfProjectModelElement projectElement : project.getExperimentsFolder().getChildren()) {
120 String traceName = fResource.getParent().getName();
121 if (projectElement.getName().equals(traceName)) {
122 TmfExperimentElement experimentElement = (TmfExperimentElement) projectElement;
123 // Instantiate the experiment's traces
124 List<TmfTraceElement> traceEntries = experimentElement.getTraces();
125 int nbTraces = traceEntries.size();
126 int cacheSize = Integer.MAX_VALUE;
127 ITmfTrace<?>[] traces = new ITmfTrace[nbTraces];
128 for (int i = 0; i < nbTraces; i++) {
129 TmfTraceElement traceElement = traceEntries.get(i);
130 ITmfTrace trace = traceElement.instantiateTrace();
131 TmfEvent traceEvent = traceElement.instantiateEvent();
132 if (trace == null || traceEvent == null) {
133 for (int j = 0; j < i; j++) {
134 traces[j].dispose();
135 }
136 throw new PartInitException(Messages.OpenExperimentHandler_NoTraceType);
137 }
138 try {
139 trace.initTrace(traceElement.getLocation().getPath(), traceEvent.getClass(), false);
140 } catch (FileNotFoundException e) {
141 }
142 if (trace instanceof TmfTrace) {
143 ((TmfTrace) trace).setResource(traceElement.getResource());
144 }
145 cacheSize = Math.min(cacheSize, trace.getCacheSize());
146 traces[i] = trace;
147 }
148 TmfExperiment experiment = new TmfExperiment(TmfEvent.class, experimentElement.getName(), traces, cacheSize);
149 experiment.setResource(fResource);
150 fTrace = experiment;
151 TmfExperiment.setCurrentExperiment(experiment);
152 TmfSignalManager.dispatchSignal(new TmfExperimentSelectedSignal(this, experiment));
153 break;
154 }
155 }
156 } else if (traceTypeId.equals(TmfTrace.class.getCanonicalName())) {
157 // Special case: trace bookmark resource
158 TmfNavigatorContentProvider ncp = new TmfNavigatorContentProvider();
159 ncp.getChildren(fResource.getProject()); // force the model to be populated
160 TmfProjectElement project = TmfProjectRegistry.getProject(fResource.getProject());
161 for (ITmfProjectModelElement projectElement : project.getTracesFolder().getChildren()) {
162 String traceName = fResource.getParent().getName();
163 if (projectElement.getName().equals(traceName)) {
164 TmfTraceElement traceElement = (TmfTraceElement) projectElement;
165 // Instantiate the experiment trace
166 ITmfTrace trace = traceElement.instantiateTrace();
167 TmfEvent traceEvent = traceElement.instantiateEvent();
168 if (trace == null || traceEvent == null) {
169 throw new PartInitException(Messages.OpenTraceHandler_NoTraceType);
170 }
171 try {
172 trace.initTrace(traceElement.getLocation().getPath(), traceEvent.getClass(), false);
173 } catch (FileNotFoundException e) {
174 }
175 if (trace instanceof TmfTrace) {
176 ((TmfTrace) trace).setResource(traceElement.getResource());
177 }
178 ITmfTrace[] traces = new ITmfTrace[] { trace };
179 TmfExperiment experiment = new TmfExperiment(traceEvent.getClass(), traceElement.getName(), traces, trace.getCacheSize());
180 experiment.setResource(fResource);
181 fTrace = experiment;
182 TmfExperiment.setCurrentExperiment(experiment);
183 TmfSignalManager.dispatchSignal(new TmfExperimentSelectedSignal(this, experiment));
184 break;
185 }
186 }
187 } else {
188 TmfNavigatorContentProvider ncp = new TmfNavigatorContentProvider();
189 ncp.getChildren(fResource.getProject()); // force the model to be populated
190 TmfProjectElement project = TmfProjectRegistry.getProject(fResource.getProject());
191 for (ITmfProjectModelElement projectElement : project.getTracesFolder().getChildren()) {
192 if (projectElement.getResource().equals(fResource)) {
193 TmfTraceElement traceElement = (TmfTraceElement) projectElement;
194 // Instantiate the experiment trace
195 ITmfTrace trace = traceElement.instantiateTrace();
196 TmfEvent traceEvent = traceElement.instantiateEvent();
197 if (trace == null || traceEvent == null) {
198 throw new PartInitException(Messages.OpenTraceHandler_NoTraceType);
199 }
200 try {
201 trace.initTrace(traceElement.getLocation().getPath(), traceEvent.getClass(), true);
202 } catch (FileNotFoundException e) {
203 }
204 if (trace instanceof TmfTrace) {
205 ((TmfTrace) trace).setResource(traceElement.getResource());
206 }
207 ITmfTrace[] traces = new ITmfTrace[] { trace };
208 TmfExperiment experiment = new TmfExperiment(traceEvent.getClass(), traceElement.getName(), traces, trace.getCacheSize());
209 experiment.setResource(fResource);
210 fTrace = experiment;
211 TmfExperiment.setCurrentExperiment(experiment);
212 TmfSignalManager.dispatchSignal(new TmfExperimentSelectedSignal(this, experiment));
213 break;
214 }
215 }
216 }
217 } catch (InvalidRegistryObjectException e) {
218 e.printStackTrace();
219 } catch (PartInitException e) {
220 throw e;
221 } catch (CoreException e) {
222 e.printStackTrace();
223 }
224 input = new TmfEditorInput(fResource, fTrace);
225 } else {
226 throw new PartInitException("Invalid IEditorInput: " + input.getClass()); //$NON-NLS-1$
227 }
228 if (fTrace == null) {
229 throw new PartInitException("Invalid IEditorInput: " + fResource.getName()); //$NON-NLS-1$
230 }
231 super.setSite(site);
232 super.setInput(input);
233 }
234
235 /*
236 * (non-Javadoc)
237 * @see org.eclipse.ui.part.EditorPart#isDirty()
238 */
239 @Override
240 public boolean isDirty() {
241 return false;
242 }
243
244 /*
245 * (non-Javadoc)
246 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
247 */
248 @Override
249 public boolean isSaveAsAllowed() {
250 return false;
251 }
252
253 /*
254 * (non-Javadoc)
255 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
256 */
257 @Override
258 public void createPartControl(Composite parent) {
259 setPartName(getEditorInput().getName());
260 }
261
262 /*
263 * (non-Javadoc)
264 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
265 */
266 @Override
267 public void setFocus() {
268 Display.getDefault().asyncExec(new Runnable() {
269 @Override
270 public void run() {
271 EditorPart editorPart = EventsViewEditor.this;
272 IWorkbenchPage page = editorPart.getEditorSite().getPage();
273 page.closeEditor(editorPart, false);
274 if (page.getEditorReferences().length == 0) {
275 page.setEditorAreaVisible(fEditorAreaVisible);
276 }
277 try {
278 IViewPart viewPart = page.showView(TmfEventsView.ID);
279 if (fGotoMarker != null) {
280 IGotoMarker adapter = (IGotoMarker) viewPart.getAdapter(IGotoMarker.class);
281 if (adapter != null) {
282 adapter.gotoMarker(fGotoMarker);
283 }
284 }
285 } catch (PartInitException e) {
286 e.printStackTrace();
287 }
288 }
289 });
290 }
291
292 /* (non-Javadoc)
293 * @see org.eclipse.ui.part.WorkbenchPart#getAdapter(java.lang.Class)
294 */
295 @SuppressWarnings("rawtypes")
296 @Override
297 public Object getAdapter(Class adapter) {
298 if (IGotoMarker.class.equals(adapter)) {
299 return new IGotoMarker() {
300 @Override
301 public void gotoMarker(IMarker marker) {
302 fGotoMarker = marker;
303 }
304 };
305 }
306 return super.getAdapter(adapter);
307 }
308
309}
This page took 0.054334 seconds and 5 git commands to generate.