Move trace type extension point from tmf.core to tmf.ui
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / editors / TmfEventsEditor.java
CommitLineData
abfad0aa
FC
1/*******************************************************************************\r
2 * Copyright (c) 2010 Ericsson\r
3 * \r
4 * All rights reserved. This program and the accompanying materials are\r
5 * made available under the terms of the Eclipse Public License v1.0 which\r
6 * accompanies this distribution, and is available at\r
7 * http://www.eclipse.org/legal/epl-v10.html\r
8 * \r
9 * Contributors:\r
10 * Patrick Tasse - Initial API and implementation\r
11 *******************************************************************************/\r
12\r
13package org.eclipse.linuxtools.tmf.ui.editors;\r
14\r
4bf17f4a 15import java.io.FileNotFoundException;\r
12c155f5
FC
16import java.lang.reflect.Constructor;\r
17import java.lang.reflect.InvocationTargetException;\r
828e5592 18import java.util.List;\r
12c155f5 19\r
a1091415 20import org.eclipse.core.resources.IFile;\r
e2561baf
FC
21import org.eclipse.core.resources.IMarker;\r
22import org.eclipse.core.resources.IMarkerDelta;\r
abfad0aa 23import org.eclipse.core.resources.IResource;\r
e2561baf
FC
24import org.eclipse.core.resources.IResourceChangeEvent;\r
25import org.eclipse.core.resources.IResourceChangeListener;\r
26import org.eclipse.core.resources.IResourceDelta;\r
27import org.eclipse.core.resources.ResourcesPlugin;\r
abfad0aa 28import org.eclipse.core.runtime.CoreException;\r
12c155f5 29import org.eclipse.core.runtime.IConfigurationElement;\r
abfad0aa 30import org.eclipse.core.runtime.IProgressMonitor;\r
12c155f5 31import org.eclipse.core.runtime.InvalidRegistryObjectException;\r
12c155f5 32import org.eclipse.core.runtime.Platform;\r
d34665f9
FC
33import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomEventsTable;\r
34import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomTxtTrace;\r
35import org.eclipse.linuxtools.internal.tmf.ui.parsers.custom.CustomXmlTrace;\r
36import org.eclipse.linuxtools.internal.tmf.ui.project.handlers.Messages;\r
6c13869b 37import org.eclipse.linuxtools.tmf.core.event.TmfEvent;\r
828e5592 38import org.eclipse.linuxtools.tmf.core.experiment.TmfExperiment;\r
6c13869b
FC
39import org.eclipse.linuxtools.tmf.core.signal.TmfSignalHandler;\r
40import org.eclipse.linuxtools.tmf.core.signal.TmfTraceSelectedSignal;\r
41import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;\r
828e5592 42import org.eclipse.linuxtools.tmf.core.trace.TmfTrace;\r
828e5592
PT
43import org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement;\r
44import org.eclipse.linuxtools.tmf.ui.project.model.TmfExperimentElement;\r
45import org.eclipse.linuxtools.tmf.ui.project.model.TmfNavigatorContentProvider;\r
46import org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectElement;\r
47import org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectRegistry;\r
12c155f5 48import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceElement;\r
bfc779a0 49import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceType;\r
1b5ad3d9
FC
50import org.eclipse.linuxtools.tmf.ui.signal.TmfTraceClosedSignal;\r
51import org.eclipse.linuxtools.tmf.ui.signal.TmfTraceOpenedSignal;\r
52import org.eclipse.linuxtools.tmf.ui.signal.TmfTraceParserUpdatedSignal;\r
abfad0aa 53import org.eclipse.linuxtools.tmf.ui.viewers.events.TmfEventsTable;\r
abfad0aa 54import org.eclipse.swt.widgets.Composite;\r
e2561baf 55import org.eclipse.swt.widgets.Display;\r
abfad0aa
FC
56import org.eclipse.ui.IEditorInput;\r
57import org.eclipse.ui.IEditorPart;\r
58import org.eclipse.ui.IEditorSite;\r
59import org.eclipse.ui.IFileEditorInput;\r
60import org.eclipse.ui.IPropertyListener;\r
61import org.eclipse.ui.IReusableEditor;\r
62import org.eclipse.ui.PartInitException;\r
e2561baf 63import org.eclipse.ui.ide.IGotoMarker;\r
a1091415 64import org.eclipse.ui.part.FileEditorInput;\r
12c155f5 65import org.osgi.framework.Bundle;\r
abfad0aa
FC
66\r
67/**\r
68 * <b><u>TmfEventsEditor</u></b>\r
69 */\r
e2561baf 70public class TmfEventsEditor extends TmfEditor implements ITmfTraceEditor, IReusableEditor, IPropertyListener, IResourceChangeListener {\r
abfad0aa 71\r
3b38ea61 72 public static final String ID = "org.eclipse.linuxtools.tmf.ui.editors.events"; //$NON-NLS-1$\r
abfad0aa
FC
73 \r
74 private TmfEventsTable fEventsTable;\r
a1091415 75 private IFile fFile;\r
4bf17f4a 76 @SuppressWarnings("rawtypes")\r
77 private ITmfTrace fTrace;\r
abfad0aa
FC
78 private Composite fParent;\r
79\r
80 @Override\r
81 public void doSave(IProgressMonitor monitor) {\r
82 }\r
83\r
84 @Override\r
85 public void doSaveAs() {\r
86 }\r
87\r
828e5592 88 @SuppressWarnings({ "unchecked", "rawtypes" })\r
abfad0aa
FC
89 @Override\r
90 public void init(IEditorSite site, IEditorInput input) throws PartInitException {\r
91 if (input instanceof TmfEditorInput) {\r
a1091415 92 fFile = ((TmfEditorInput) input).getFile();\r
abfad0aa 93 fTrace = ((TmfEditorInput) input).getTrace();\r
a1091415 94 input = new FileEditorInput(fFile);\r
abfad0aa 95 } else if (input instanceof IFileEditorInput) {\r
a1091415
PT
96 fFile = ((IFileEditorInput) input).getFile();\r
97 if (fFile == null) {\r
828e5592
PT
98 throw new PartInitException("Invalid IFileEditorInput: " + input); //$NON-NLS-1$\r
99 }\r
abfad0aa 100 try {\r
a1091415 101 String traceTypeId = fFile.getPersistentProperty(TmfTraceElement.TRACETYPE);\r
09d11238
PT
102 if (traceTypeId == null) {\r
103 throw new PartInitException(Messages.OpenTraceHandler_NoTraceType);\r
104 }\r
828e5592
PT
105 if (traceTypeId.equals(TmfExperiment.class.getCanonicalName())) {\r
106 // Special case: experiment bookmark resource\r
107 TmfNavigatorContentProvider ncp = new TmfNavigatorContentProvider();\r
a1091415
PT
108 ncp.getChildren(fFile.getProject()); // force the model to be populated\r
109 TmfProjectElement project = TmfProjectRegistry.getProject(fFile.getProject());\r
828e5592
PT
110 if (project == null) {\r
111 throw new PartInitException(Messages.OpenExperimentHandler_NoTraceType);\r
112 }\r
113 for (ITmfProjectModelElement projectElement : project.getExperimentsFolder().getChildren()) {\r
a1091415 114 String traceName = fFile.getParent().getName();\r
828e5592
PT
115 if (projectElement.getName().equals(traceName)) {\r
116 TmfExperimentElement experimentElement = (TmfExperimentElement) projectElement;\r
117 // Instantiate the experiment's traces\r
118 List<TmfTraceElement> traceEntries = experimentElement.getTraces();\r
119 int nbTraces = traceEntries.size();\r
120 int cacheSize = Integer.MAX_VALUE;\r
121 ITmfTrace<?>[] traces = new ITmfTrace[nbTraces];\r
122 for (int i = 0; i < nbTraces; i++) {\r
123 TmfTraceElement traceElement = traceEntries.get(i);\r
124 ITmfTrace trace = traceElement.instantiateTrace();\r
125 TmfEvent traceEvent = traceElement.instantiateEvent();\r
126 if (trace == null || traceEvent == null) {\r
127 for (int j = 0; j < i; j++) {\r
128 traces[j].dispose();\r
129 }\r
130 throw new PartInitException(Messages.OpenExperimentHandler_NoTraceType);\r
131 }\r
132 try {\r
0710697b 133 trace.initTrace(traceElement.getName(), traceElement.getLocation().getPath(), traceEvent.getClass(), false);\r
828e5592
PT
134 } catch (FileNotFoundException e) {\r
135 }\r
a1091415 136 trace.setResource(traceElement.getResource());\r
828e5592
PT
137 cacheSize = Math.min(cacheSize, trace.getCacheSize());\r
138 traces[i] = trace;\r
139 }\r
140 TmfExperiment experiment = new TmfExperiment(TmfEvent.class, experimentElement.getName(), traces, cacheSize);\r
a1091415 141 experiment.setBookmarksFile(fFile);\r
828e5592 142 fTrace = experiment;\r
0710697b 143 experiment.initTrace(null, null, null, true);\r
828e5592
PT
144 break;\r
145 }\r
146 }\r
147 } else if (traceTypeId.equals(TmfTrace.class.getCanonicalName())) {\r
09d11238 148 // Special case: trace bookmark resource\r
828e5592 149 TmfNavigatorContentProvider ncp = new TmfNavigatorContentProvider();\r
a1091415
PT
150 ncp.getChildren(fFile.getProject()); // force the model to be populated\r
151 TmfProjectElement project = TmfProjectRegistry.getProject(fFile.getProject());\r
828e5592 152 for (ITmfProjectModelElement projectElement : project.getTracesFolder().getChildren()) {\r
a1091415 153 String traceName = fFile.getParent().getName();\r
09d11238 154 if (projectElement.getName().equals(traceName)) {\r
828e5592 155 TmfTraceElement traceElement = (TmfTraceElement) projectElement;\r
09d11238 156 // Instantiate the trace\r
828e5592
PT
157 ITmfTrace trace = traceElement.instantiateTrace();\r
158 TmfEvent traceEvent = traceElement.instantiateEvent();\r
159 if (trace == null || traceEvent == null) {\r
160 throw new PartInitException(Messages.OpenTraceHandler_NoTraceType);\r
161 }\r
162 try {\r
0710697b 163 trace.initTrace(traceElement.getName(), traceElement.getLocation().getPath(), traceEvent.getClass(), true);\r
828e5592
PT
164 } catch (FileNotFoundException e) {\r
165 }\r
a1091415 166 trace.setResource(traceElement.getResource());\r
09d11238 167 fTrace = trace;\r
828e5592
PT
168 break;\r
169 }\r
170 }\r
09d11238
PT
171 } else {\r
172 TmfNavigatorContentProvider ncp = new TmfNavigatorContentProvider();\r
a1091415
PT
173 ncp.getChildren(fFile.getProject()); // force the model to be populated\r
174 TmfProjectElement project = TmfProjectRegistry.getProject(fFile.getProject());\r
09d11238 175 for (ITmfProjectModelElement projectElement : project.getTracesFolder().getChildren()) {\r
a1091415 176 if (projectElement.getResource().equals(fFile)) {\r
09d11238
PT
177 TmfTraceElement traceElement = (TmfTraceElement) projectElement;\r
178 // Instantiate the trace\r
179 ITmfTrace trace = traceElement.instantiateTrace();\r
180 TmfEvent traceEvent = traceElement.instantiateEvent();\r
181 if (trace == null || traceEvent == null) {\r
182 throw new PartInitException(Messages.OpenTraceHandler_NoTraceType);\r
183 }\r
184 try {\r
0710697b 185 trace.initTrace(traceElement.getName(), traceElement.getLocation().getPath(), traceEvent.getClass(), true);\r
09d11238
PT
186 } catch (FileNotFoundException e) {\r
187 }\r
188 if (trace instanceof TmfTrace) {\r
189 ((TmfTrace) trace).setResource(traceElement.getResource());\r
190 }\r
191 fTrace = trace;\r
4bf17f4a 192 break;\r
193 }\r
194 }\r
195 }\r
196 } catch (InvalidRegistryObjectException e) {\r
197 e.printStackTrace();\r
828e5592
PT
198 } catch (PartInitException e) {\r
199 throw e;\r
abfad0aa 200 } catch (CoreException e) {\r
4bf17f4a 201 e.printStackTrace();\r
abfad0aa
FC
202 }\r
203 } else {\r
3b38ea61 204 throw new PartInitException("Invalid IEditorInput: " + input.getClass()); //$NON-NLS-1$\r
abfad0aa
FC
205 }\r
206 if (fTrace == null) {\r
a1091415 207 throw new PartInitException("Invalid IEditorInput: " + fFile.getName()); //$NON-NLS-1$\r
abfad0aa
FC
208 }\r
209 super.setSite(site);\r
210 super.setInput(input);\r
211 }\r
212\r
213 @Override\r
214 public boolean isDirty() {\r
215 return false;\r
216 }\r
217\r
218 @Override\r
219 public boolean isSaveAsAllowed() {\r
220 return false;\r
221 }\r
222\r
223 @Override\r
224 public void setInput(IEditorInput input) {\r
225 super.setInput(input);\r
226 firePropertyChange(IEditorPart.PROP_INPUT);\r
227 }\r
228\r
d4011df2
FC
229 @Override\r
230 public void propertyChanged(Object source, int propId) {\r
abfad0aa
FC
231 if (propId == IEditorPart.PROP_INPUT) {\r
232 broadcast(new TmfTraceClosedSignal(this, fTrace));\r
a1091415 233 fFile = ((TmfEditorInput) getEditorInput()).getFile();\r
abfad0aa 234 fTrace = ((TmfEditorInput) getEditorInput()).getTrace();\r
a1091415 235 super.setInput(new FileEditorInput(fFile));\r
abfad0aa
FC
236 fEventsTable.dispose();\r
237 if (fTrace != null) {\r
238 fEventsTable = createEventsTable(fParent, fTrace.getCacheSize());\r
529ee6a9 239 fEventsTable.setTrace(fTrace, true);\r
a1091415
PT
240 fEventsTable.refreshBookmarks(fFile);\r
241 broadcast(new TmfTraceOpenedSignal(this, fTrace, fFile, fEventsTable));\r
abfad0aa
FC
242 } else {\r
243 fEventsTable = new TmfEventsTable(fParent, 0);\r
244 }\r
245 fParent.layout();\r
246 }\r
247 }\r
248\r
249 @Override\r
250 public void createPartControl(Composite parent) {\r
251 fParent = parent;\r
abfad0aa 252 if (fTrace != null) {\r
a1091415 253 setPartName(fTrace.getName());\r
abfad0aa 254 fEventsTable = createEventsTable(parent, fTrace.getCacheSize());\r
529ee6a9 255 fEventsTable.setTrace(fTrace, true);\r
a1091415
PT
256 fEventsTable.refreshBookmarks(fFile);\r
257 broadcast(new TmfTraceOpenedSignal(this, fTrace, fFile, fEventsTable));\r
abfad0aa 258 } else {\r
a1091415 259 setPartName(getEditorInput().getName());\r
abfad0aa
FC
260 fEventsTable = new TmfEventsTable(parent, 0);\r
261 }\r
262 addPropertyListener(this);\r
e2561baf 263 ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);\r
abfad0aa
FC
264 }\r
265\r
266 @Override\r
267 public void dispose() {\r
e2561baf
FC
268 ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);\r
269 removePropertyListener(this);\r
abfad0aa
FC
270 if (fTrace != null) {\r
271 broadcast(new TmfTraceClosedSignal(this, fTrace));\r
272 }\r
273 if (fEventsTable != null) {\r
274 fEventsTable.dispose();\r
275 }\r
276 super.dispose();\r
277 }\r
278\r
279 protected TmfEventsTable createEventsTable(Composite parent, int cacheSize) {\r
12c155f5 280 TmfEventsTable eventsTable = getEventsTable(parent, cacheSize);\r
abfad0aa
FC
281 if (eventsTable == null) {\r
282 eventsTable = new TmfEventsTable(parent, cacheSize);\r
283 }\r
284 return eventsTable;\r
285 }\r
286 \r
12c155f5 287 private TmfEventsTable getEventsTable(Composite parent, int cacheSize) {\r
828e5592
PT
288 if (fTrace instanceof TmfExperiment) {\r
289 return getExperimentEventsTable((TmfExperiment<?>) fTrace, parent, cacheSize);\r
290 }\r
12c155f5 291 TmfEventsTable eventsTable = null;\r
12c155f5 292 try {\r
ab10b179
PT
293 if (fTrace.getResource() == null) {\r
294 return null;\r
295 }\r
296 String traceType = fTrace.getResource().getPersistentProperty(TmfTraceElement.TRACETYPE);\r
a1091415
PT
297 if (traceType == null) {\r
298 return null;\r
299 }\r
4bf17f4a 300 if (traceType.startsWith(CustomTxtTrace.class.getCanonicalName())) {\r
301 return new CustomEventsTable(((CustomTxtTrace) fTrace).getDefinition(), parent, cacheSize);\r
302 }\r
303 if (traceType.startsWith(CustomXmlTrace.class.getCanonicalName())) {\r
304 return new CustomEventsTable(((CustomXmlTrace) fTrace).getDefinition(), parent, cacheSize);\r
305 }\r
306 for (IConfigurationElement ce : TmfTraceType.getTypeElements()) {\r
307 if (ce.getAttribute(TmfTraceType.ID_ATTR).equals(traceType)) {\r
308 IConfigurationElement[] eventsTableTypeCE = ce.getChildren(TmfTraceType.EVENTS_TABLE_TYPE_ELEM);\r
12c155f5
FC
309 if (eventsTableTypeCE.length != 1) {\r
310 break;\r
311 }\r
4bf17f4a 312 String eventsTableType = eventsTableTypeCE[0].getAttribute(TmfTraceType.CLASS_ATTR);\r
12c155f5
FC
313 if (eventsTableType == null || eventsTableType.length() == 0) {\r
314 break;\r
315 }\r
316 Bundle bundle = Platform.getBundle(ce.getContributor().getName());\r
317 Class<?> c = bundle.loadClass(eventsTableType);\r
318 Class<?>[] constructorArgs = new Class[] { Composite.class, int.class };\r
319 Constructor<?> constructor = c.getConstructor(constructorArgs);\r
320 Object[] args = new Object[] { parent, cacheSize };\r
321 eventsTable = (TmfEventsTable) constructor.newInstance(args);\r
322 break;\r
323 }\r
324 }\r
325 } catch (InvalidRegistryObjectException e) {\r
326 e.printStackTrace();\r
327 } catch (CoreException e) {\r
328 e.printStackTrace();\r
329 } catch (ClassNotFoundException e) {\r
330 e.printStackTrace();\r
331 } catch (SecurityException e) {\r
332 e.printStackTrace();\r
333 } catch (NoSuchMethodException e) {\r
334 e.printStackTrace();\r
335 } catch (IllegalArgumentException e) {\r
336 e.printStackTrace();\r
337 } catch (InstantiationException e) {\r
338 e.printStackTrace();\r
339 } catch (IllegalAccessException e) {\r
340 e.printStackTrace();\r
341 } catch (InvocationTargetException e) {\r
342 e.printStackTrace();\r
343 }\r
344 return eventsTable;\r
345 }\r
346\r
828e5592
PT
347 /**\r
348 * Get the events table for an experiment.\r
349 * If all traces in the experiment are of the same type,\r
350 * use the extension point specified event table\r
351 * @param experiment the experiment\r
352 * @param parent the parent Composite\r
353 * @param cacheSize the event table cache size\r
354 * @return an events table of the appropriate type\r
355 */\r
356 private TmfEventsTable getExperimentEventsTable(TmfExperiment<?> experiment, Composite parent, int cacheSize) {\r
357 TmfEventsTable eventsTable = null;\r
358 String commonTraceType = null;\r
359 try {\r
360 for (ITmfTrace<?> trace : experiment.getTraces()) {\r
a1091415 361 IResource resource = trace.getResource();\r
828e5592
PT
362 if (resource == null) {\r
363 return null;\r
364 }\r
365 String traceType = resource.getPersistentProperty(TmfTraceElement.TRACETYPE);\r
366 if (commonTraceType != null && !commonTraceType.equals(traceType)) {\r
367 return null;\r
368 }\r
369 commonTraceType = traceType;\r
370 }\r
371 if (commonTraceType == null) {\r
372 return null;\r
373 }\r
374 if (commonTraceType.startsWith(CustomTxtTrace.class.getCanonicalName())) {\r
375 return new CustomEventsTable(((CustomTxtTrace) experiment.getTraces()[0]).getDefinition(), parent, cacheSize);\r
376 }\r
377 if (commonTraceType.startsWith(CustomXmlTrace.class.getCanonicalName())) {\r
378 return new CustomEventsTable(((CustomXmlTrace) experiment.getTraces()[0]).getDefinition(), parent, cacheSize);\r
379 }\r
380 for (IConfigurationElement ce : TmfTraceType.getTypeElements()) {\r
381 if (ce.getAttribute(TmfTraceType.ID_ATTR).equals(commonTraceType)) {\r
382 IConfigurationElement[] eventsTableTypeCE = ce.getChildren(TmfTraceType.EVENTS_TABLE_TYPE_ELEM);\r
383 if (eventsTableTypeCE.length != 1) {\r
384 break;\r
385 }\r
386 String eventsTableType = eventsTableTypeCE[0].getAttribute(TmfTraceType.CLASS_ATTR);\r
387 if (eventsTableType == null || eventsTableType.length() == 0) {\r
388 break;\r
389 }\r
390 Bundle bundle = Platform.getBundle(ce.getContributor().getName());\r
391 Class<?> c = bundle.loadClass(eventsTableType);\r
392 Class<?>[] constructorArgs = new Class[] { Composite.class, int.class };\r
393 Constructor<?> constructor = c.getConstructor(constructorArgs);\r
394 Object[] args = new Object[] { parent, cacheSize };\r
395 eventsTable = (TmfEventsTable) constructor.newInstance(args);\r
396 break;\r
397 }\r
398 }\r
399 } catch (CoreException e) {\r
400 e.printStackTrace();\r
401 } catch (InvalidRegistryObjectException e) {\r
402 e.printStackTrace();\r
403 } catch (SecurityException e) {\r
404 e.printStackTrace();\r
405 } catch (IllegalArgumentException e) {\r
406 e.printStackTrace();\r
407 } catch (ClassNotFoundException e) {\r
408 e.printStackTrace();\r
409 } catch (NoSuchMethodException e) {\r
410 e.printStackTrace();\r
411 } catch (InstantiationException e) {\r
412 e.printStackTrace();\r
413 } catch (IllegalAccessException e) {\r
414 e.printStackTrace();\r
415 } catch (InvocationTargetException e) {\r
416 e.printStackTrace();\r
417 }\r
418 return eventsTable;\r
419 }\r
420\r
d4011df2 421 @Override\r
12c155f5 422 public ITmfTrace<?> getTrace() {\r
abfad0aa
FC
423 return fTrace;\r
424 }\r
425\r
e2561baf 426 @Override\r
a1091415
PT
427 public IFile getBookmarksFile() {\r
428 return fFile;\r
e2561baf
FC
429 }\r
430\r
abfad0aa
FC
431 @Override\r
432 public void setFocus() {\r
433 fEventsTable.setFocus();\r
434 if (fTrace != null) {\r
435 broadcast(new TmfTraceSelectedSignal(this, fTrace));\r
436 }\r
437 }\r
438\r
e2561baf
FC
439 @Override\r
440 @SuppressWarnings("rawtypes")\r
441 public Object getAdapter(Class adapter) {\r
442 if (IGotoMarker.class.equals(adapter)) {\r
443 return fEventsTable;\r
444 }\r
445 return super.getAdapter(adapter);\r
446 }\r
447\r
448 @Override\r
449 public void resourceChanged(IResourceChangeEvent event) {\r
828e5592 450 for (IMarkerDelta delta : event.findMarkerDeltas(IMarker.BOOKMARK, false)) {\r
a1091415 451 if (delta.getResource().equals(fFile)) {\r
828e5592
PT
452 if (delta.getKind() == IResourceDelta.REMOVED) {\r
453 final IMarker bookmark = delta.getMarker();\r
454 Display.getDefault().asyncExec(new Runnable() {\r
455 @Override\r
456 public void run() {\r
457 fEventsTable.removeBookmark(bookmark);\r
458 }\r
459 });\r
460 } else if (delta.getKind() == IResourceDelta.CHANGED) {\r
461 Display.getDefault().asyncExec(new Runnable() {\r
462 @Override\r
463 public void run() {\r
464 fEventsTable.getTable().refresh();\r
465 }\r
466 });\r
467 }\r
468 }\r
469 }\r
e2561baf 470 }\r
828e5592 471\r
e2561baf
FC
472 // ------------------------------------------------------------------------\r
473 // Global commands\r
474 // ------------------------------------------------------------------------\r
475\r
476 public void addBookmark() {\r
a1091415 477 fEventsTable.addBookmark(fFile);\r
e2561baf
FC
478 }\r
479 \r
480\r
abfad0aa
FC
481 // ------------------------------------------------------------------------\r
482 // Signal handlers\r
483 // ------------------------------------------------------------------------\r
484 \r
4bf17f4a 485 @SuppressWarnings("unchecked")\r
abfad0aa
FC
486 @TmfSignalHandler\r
487 public void traceParserUpdated(TmfTraceParserUpdatedSignal signal) {\r
a1091415 488 if (signal.getTraceResource().equals(fFile)) {\r
abfad0aa 489 broadcast(new TmfTraceClosedSignal(this, fTrace));\r
4bf17f4a 490 try {\r
0710697b 491 String name = fTrace.getName();\r
4bf17f4a 492 fTrace = null;\r
a1091415 493 String traceTypeId = fFile.getPersistentProperty(TmfTraceElement.TRACETYPE);\r
4bf17f4a 494 if (traceTypeId != null) {\r
495 for (IConfigurationElement ce : TmfTraceType.getTypeElements()) {\r
496 if (traceTypeId.equals(ce.getAttribute(TmfTraceType.ID_ATTR))) {\r
497 fTrace = (ITmfTrace<?>) ce.createExecutableExtension(TmfTraceType.TRACE_TYPE_ATTR);\r
498 TmfEvent event = (TmfEvent) ce.createExecutableExtension(TmfTraceType.EVENT_TYPE_ATTR);\r
a1091415 499 String path = fFile.getLocationURI().getPath();\r
0710697b 500 fTrace.initTrace(name, path, event.getClass(), true);\r
4bf17f4a 501 break;\r
502 }\r
503 }\r
504 }\r
505 } catch (InvalidRegistryObjectException e) {\r
506 e.printStackTrace();\r
507 } catch (FileNotFoundException e) {\r
508 e.printStackTrace();\r
509 } catch (CoreException e) {\r
510 e.printStackTrace();\r
511 }\r
abfad0aa
FC
512 fEventsTable.dispose();\r
513 if (fTrace != null) {\r
514 fEventsTable = createEventsTable(fParent, fTrace.getCacheSize());\r
529ee6a9 515 fEventsTable.setTrace(fTrace, true);\r
a1091415 516 broadcast(new TmfTraceOpenedSignal(this, fTrace, fFile, fEventsTable));\r
abfad0aa
FC
517 } else {\r
518 fEventsTable = new TmfEventsTable(fParent, 0);\r
519 }\r
520 fParent.layout();\r
521 }\r
522 }\r
523\r
524 @TmfSignalHandler\r
525 public void traceSelected(TmfTraceSelectedSignal signal) {\r
526 if (signal.getSource() != this && signal.getTrace().equals(fTrace)) {\r
527 getSite().getPage().bringToTop(this);\r
528 }\r
529 }\r
530\r
531}\r
This page took 0.054808 seconds and 5 git commands to generate.