Rationalize ITmfTrace.initTrace()
[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
8636b448 133 trace.initTrace(traceElement.getName(), traceElement.getLocation().getPath(), traceEvent.getClass(), 0);\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
8636b448
FC
143 experiment.initTrace(null, null, null, 0);\r
144 experiment.indexTrace(true);\r
828e5592
PT
145 break;\r
146 }\r
147 }\r
148 } else if (traceTypeId.equals(TmfTrace.class.getCanonicalName())) {\r
09d11238 149 // Special case: trace bookmark resource\r
828e5592 150 TmfNavigatorContentProvider ncp = new TmfNavigatorContentProvider();\r
a1091415
PT
151 ncp.getChildren(fFile.getProject()); // force the model to be populated\r
152 TmfProjectElement project = TmfProjectRegistry.getProject(fFile.getProject());\r
828e5592 153 for (ITmfProjectModelElement projectElement : project.getTracesFolder().getChildren()) {\r
a1091415 154 String traceName = fFile.getParent().getName();\r
09d11238 155 if (projectElement.getName().equals(traceName)) {\r
828e5592 156 TmfTraceElement traceElement = (TmfTraceElement) projectElement;\r
09d11238 157 // Instantiate the trace\r
828e5592
PT
158 ITmfTrace trace = traceElement.instantiateTrace();\r
159 TmfEvent traceEvent = traceElement.instantiateEvent();\r
160 if (trace == null || traceEvent == null) {\r
161 throw new PartInitException(Messages.OpenTraceHandler_NoTraceType);\r
162 }\r
163 try {\r
8636b448
FC
164 trace.initTrace(traceElement.getName(), traceElement.getLocation().getPath(), traceEvent.getClass(), 0);\r
165 trace.indexTrace(false);\r
828e5592
PT
166 } catch (FileNotFoundException e) {\r
167 }\r
a1091415 168 trace.setResource(traceElement.getResource());\r
09d11238 169 fTrace = trace;\r
828e5592
PT
170 break;\r
171 }\r
172 }\r
09d11238
PT
173 } else {\r
174 TmfNavigatorContentProvider ncp = new TmfNavigatorContentProvider();\r
a1091415
PT
175 ncp.getChildren(fFile.getProject()); // force the model to be populated\r
176 TmfProjectElement project = TmfProjectRegistry.getProject(fFile.getProject());\r
09d11238 177 for (ITmfProjectModelElement projectElement : project.getTracesFolder().getChildren()) {\r
a1091415 178 if (projectElement.getResource().equals(fFile)) {\r
09d11238
PT
179 TmfTraceElement traceElement = (TmfTraceElement) projectElement;\r
180 // Instantiate the trace\r
181 ITmfTrace trace = traceElement.instantiateTrace();\r
182 TmfEvent traceEvent = traceElement.instantiateEvent();\r
183 if (trace == null || traceEvent == null) {\r
184 throw new PartInitException(Messages.OpenTraceHandler_NoTraceType);\r
185 }\r
186 try {\r
8636b448
FC
187 trace.initTrace(traceElement.getName(), traceElement.getLocation().getPath(), traceEvent.getClass(), 0);\r
188 trace.indexTrace(false);\r
09d11238
PT
189 } catch (FileNotFoundException e) {\r
190 }\r
191 if (trace instanceof TmfTrace) {\r
192 ((TmfTrace) trace).setResource(traceElement.getResource());\r
193 }\r
194 fTrace = trace;\r
4bf17f4a 195 break;\r
196 }\r
197 }\r
198 }\r
199 } catch (InvalidRegistryObjectException e) {\r
200 e.printStackTrace();\r
828e5592
PT
201 } catch (PartInitException e) {\r
202 throw e;\r
abfad0aa 203 } catch (CoreException e) {\r
4bf17f4a 204 e.printStackTrace();\r
abfad0aa
FC
205 }\r
206 } else {\r
3b38ea61 207 throw new PartInitException("Invalid IEditorInput: " + input.getClass()); //$NON-NLS-1$\r
abfad0aa
FC
208 }\r
209 if (fTrace == null) {\r
a1091415 210 throw new PartInitException("Invalid IEditorInput: " + fFile.getName()); //$NON-NLS-1$\r
abfad0aa
FC
211 }\r
212 super.setSite(site);\r
213 super.setInput(input);\r
214 }\r
215\r
216 @Override\r
217 public boolean isDirty() {\r
218 return false;\r
219 }\r
220\r
221 @Override\r
222 public boolean isSaveAsAllowed() {\r
223 return false;\r
224 }\r
225\r
226 @Override\r
227 public void setInput(IEditorInput input) {\r
228 super.setInput(input);\r
229 firePropertyChange(IEditorPart.PROP_INPUT);\r
230 }\r
231\r
d4011df2
FC
232 @Override\r
233 public void propertyChanged(Object source, int propId) {\r
abfad0aa
FC
234 if (propId == IEditorPart.PROP_INPUT) {\r
235 broadcast(new TmfTraceClosedSignal(this, fTrace));\r
a1091415 236 fFile = ((TmfEditorInput) getEditorInput()).getFile();\r
abfad0aa 237 fTrace = ((TmfEditorInput) getEditorInput()).getTrace();\r
a1091415 238 super.setInput(new FileEditorInput(fFile));\r
abfad0aa
FC
239 fEventsTable.dispose();\r
240 if (fTrace != null) {\r
241 fEventsTable = createEventsTable(fParent, fTrace.getCacheSize());\r
529ee6a9 242 fEventsTable.setTrace(fTrace, true);\r
a1091415
PT
243 fEventsTable.refreshBookmarks(fFile);\r
244 broadcast(new TmfTraceOpenedSignal(this, fTrace, fFile, fEventsTable));\r
abfad0aa
FC
245 } else {\r
246 fEventsTable = new TmfEventsTable(fParent, 0);\r
247 }\r
248 fParent.layout();\r
249 }\r
250 }\r
251\r
252 @Override\r
253 public void createPartControl(Composite parent) {\r
254 fParent = parent;\r
abfad0aa 255 if (fTrace != null) {\r
a1091415 256 setPartName(fTrace.getName());\r
abfad0aa 257 fEventsTable = createEventsTable(parent, fTrace.getCacheSize());\r
529ee6a9 258 fEventsTable.setTrace(fTrace, true);\r
a1091415
PT
259 fEventsTable.refreshBookmarks(fFile);\r
260 broadcast(new TmfTraceOpenedSignal(this, fTrace, fFile, fEventsTable));\r
abfad0aa 261 } else {\r
a1091415 262 setPartName(getEditorInput().getName());\r
abfad0aa
FC
263 fEventsTable = new TmfEventsTable(parent, 0);\r
264 }\r
265 addPropertyListener(this);\r
e2561baf 266 ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);\r
abfad0aa
FC
267 }\r
268\r
269 @Override\r
270 public void dispose() {\r
e2561baf
FC
271 ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);\r
272 removePropertyListener(this);\r
abfad0aa
FC
273 if (fTrace != null) {\r
274 broadcast(new TmfTraceClosedSignal(this, fTrace));\r
275 }\r
276 if (fEventsTable != null) {\r
277 fEventsTable.dispose();\r
278 }\r
279 super.dispose();\r
280 }\r
281\r
282 protected TmfEventsTable createEventsTable(Composite parent, int cacheSize) {\r
12c155f5 283 TmfEventsTable eventsTable = getEventsTable(parent, cacheSize);\r
abfad0aa
FC
284 if (eventsTable == null) {\r
285 eventsTable = new TmfEventsTable(parent, cacheSize);\r
286 }\r
287 return eventsTable;\r
288 }\r
289 \r
12c155f5 290 private TmfEventsTable getEventsTable(Composite parent, int cacheSize) {\r
828e5592
PT
291 if (fTrace instanceof TmfExperiment) {\r
292 return getExperimentEventsTable((TmfExperiment<?>) fTrace, parent, cacheSize);\r
293 }\r
12c155f5 294 TmfEventsTable eventsTable = null;\r
12c155f5 295 try {\r
ab10b179
PT
296 if (fTrace.getResource() == null) {\r
297 return null;\r
298 }\r
299 String traceType = fTrace.getResource().getPersistentProperty(TmfTraceElement.TRACETYPE);\r
a1091415
PT
300 if (traceType == null) {\r
301 return null;\r
302 }\r
4bf17f4a 303 if (traceType.startsWith(CustomTxtTrace.class.getCanonicalName())) {\r
304 return new CustomEventsTable(((CustomTxtTrace) fTrace).getDefinition(), parent, cacheSize);\r
305 }\r
306 if (traceType.startsWith(CustomXmlTrace.class.getCanonicalName())) {\r
307 return new CustomEventsTable(((CustomXmlTrace) fTrace).getDefinition(), parent, cacheSize);\r
308 }\r
309 for (IConfigurationElement ce : TmfTraceType.getTypeElements()) {\r
310 if (ce.getAttribute(TmfTraceType.ID_ATTR).equals(traceType)) {\r
311 IConfigurationElement[] eventsTableTypeCE = ce.getChildren(TmfTraceType.EVENTS_TABLE_TYPE_ELEM);\r
12c155f5
FC
312 if (eventsTableTypeCE.length != 1) {\r
313 break;\r
314 }\r
4bf17f4a 315 String eventsTableType = eventsTableTypeCE[0].getAttribute(TmfTraceType.CLASS_ATTR);\r
12c155f5
FC
316 if (eventsTableType == null || eventsTableType.length() == 0) {\r
317 break;\r
318 }\r
319 Bundle bundle = Platform.getBundle(ce.getContributor().getName());\r
320 Class<?> c = bundle.loadClass(eventsTableType);\r
321 Class<?>[] constructorArgs = new Class[] { Composite.class, int.class };\r
322 Constructor<?> constructor = c.getConstructor(constructorArgs);\r
323 Object[] args = new Object[] { parent, cacheSize };\r
324 eventsTable = (TmfEventsTable) constructor.newInstance(args);\r
325 break;\r
326 }\r
327 }\r
328 } catch (InvalidRegistryObjectException e) {\r
329 e.printStackTrace();\r
330 } catch (CoreException e) {\r
331 e.printStackTrace();\r
332 } catch (ClassNotFoundException e) {\r
333 e.printStackTrace();\r
334 } catch (SecurityException e) {\r
335 e.printStackTrace();\r
336 } catch (NoSuchMethodException e) {\r
337 e.printStackTrace();\r
338 } catch (IllegalArgumentException e) {\r
339 e.printStackTrace();\r
340 } catch (InstantiationException e) {\r
341 e.printStackTrace();\r
342 } catch (IllegalAccessException e) {\r
343 e.printStackTrace();\r
344 } catch (InvocationTargetException e) {\r
345 e.printStackTrace();\r
346 }\r
347 return eventsTable;\r
348 }\r
349\r
828e5592
PT
350 /**\r
351 * Get the events table for an experiment.\r
352 * If all traces in the experiment are of the same type,\r
353 * use the extension point specified event table\r
354 * @param experiment the experiment\r
355 * @param parent the parent Composite\r
356 * @param cacheSize the event table cache size\r
357 * @return an events table of the appropriate type\r
358 */\r
359 private TmfEventsTable getExperimentEventsTable(TmfExperiment<?> experiment, Composite parent, int cacheSize) {\r
360 TmfEventsTable eventsTable = null;\r
361 String commonTraceType = null;\r
362 try {\r
363 for (ITmfTrace<?> trace : experiment.getTraces()) {\r
a1091415 364 IResource resource = trace.getResource();\r
828e5592
PT
365 if (resource == null) {\r
366 return null;\r
367 }\r
368 String traceType = resource.getPersistentProperty(TmfTraceElement.TRACETYPE);\r
369 if (commonTraceType != null && !commonTraceType.equals(traceType)) {\r
370 return null;\r
371 }\r
372 commonTraceType = traceType;\r
373 }\r
374 if (commonTraceType == null) {\r
375 return null;\r
376 }\r
377 if (commonTraceType.startsWith(CustomTxtTrace.class.getCanonicalName())) {\r
378 return new CustomEventsTable(((CustomTxtTrace) experiment.getTraces()[0]).getDefinition(), parent, cacheSize);\r
379 }\r
380 if (commonTraceType.startsWith(CustomXmlTrace.class.getCanonicalName())) {\r
381 return new CustomEventsTable(((CustomXmlTrace) experiment.getTraces()[0]).getDefinition(), parent, cacheSize);\r
382 }\r
383 for (IConfigurationElement ce : TmfTraceType.getTypeElements()) {\r
384 if (ce.getAttribute(TmfTraceType.ID_ATTR).equals(commonTraceType)) {\r
385 IConfigurationElement[] eventsTableTypeCE = ce.getChildren(TmfTraceType.EVENTS_TABLE_TYPE_ELEM);\r
386 if (eventsTableTypeCE.length != 1) {\r
387 break;\r
388 }\r
389 String eventsTableType = eventsTableTypeCE[0].getAttribute(TmfTraceType.CLASS_ATTR);\r
390 if (eventsTableType == null || eventsTableType.length() == 0) {\r
391 break;\r
392 }\r
393 Bundle bundle = Platform.getBundle(ce.getContributor().getName());\r
394 Class<?> c = bundle.loadClass(eventsTableType);\r
395 Class<?>[] constructorArgs = new Class[] { Composite.class, int.class };\r
396 Constructor<?> constructor = c.getConstructor(constructorArgs);\r
397 Object[] args = new Object[] { parent, cacheSize };\r
398 eventsTable = (TmfEventsTable) constructor.newInstance(args);\r
399 break;\r
400 }\r
401 }\r
402 } catch (CoreException e) {\r
403 e.printStackTrace();\r
404 } catch (InvalidRegistryObjectException e) {\r
405 e.printStackTrace();\r
406 } catch (SecurityException e) {\r
407 e.printStackTrace();\r
408 } catch (IllegalArgumentException e) {\r
409 e.printStackTrace();\r
410 } catch (ClassNotFoundException e) {\r
411 e.printStackTrace();\r
412 } catch (NoSuchMethodException e) {\r
413 e.printStackTrace();\r
414 } catch (InstantiationException e) {\r
415 e.printStackTrace();\r
416 } catch (IllegalAccessException e) {\r
417 e.printStackTrace();\r
418 } catch (InvocationTargetException e) {\r
419 e.printStackTrace();\r
420 }\r
421 return eventsTable;\r
422 }\r
423\r
d4011df2 424 @Override\r
12c155f5 425 public ITmfTrace<?> getTrace() {\r
abfad0aa
FC
426 return fTrace;\r
427 }\r
428\r
e2561baf 429 @Override\r
a1091415
PT
430 public IFile getBookmarksFile() {\r
431 return fFile;\r
e2561baf
FC
432 }\r
433\r
abfad0aa
FC
434 @Override\r
435 public void setFocus() {\r
436 fEventsTable.setFocus();\r
437 if (fTrace != null) {\r
438 broadcast(new TmfTraceSelectedSignal(this, fTrace));\r
439 }\r
440 }\r
441\r
e2561baf
FC
442 @Override\r
443 @SuppressWarnings("rawtypes")\r
444 public Object getAdapter(Class adapter) {\r
445 if (IGotoMarker.class.equals(adapter)) {\r
446 return fEventsTable;\r
447 }\r
448 return super.getAdapter(adapter);\r
449 }\r
450\r
451 @Override\r
452 public void resourceChanged(IResourceChangeEvent event) {\r
828e5592 453 for (IMarkerDelta delta : event.findMarkerDeltas(IMarker.BOOKMARK, false)) {\r
a1091415 454 if (delta.getResource().equals(fFile)) {\r
828e5592
PT
455 if (delta.getKind() == IResourceDelta.REMOVED) {\r
456 final IMarker bookmark = delta.getMarker();\r
457 Display.getDefault().asyncExec(new Runnable() {\r
458 @Override\r
459 public void run() {\r
460 fEventsTable.removeBookmark(bookmark);\r
461 }\r
462 });\r
463 } else if (delta.getKind() == IResourceDelta.CHANGED) {\r
464 Display.getDefault().asyncExec(new Runnable() {\r
465 @Override\r
466 public void run() {\r
467 fEventsTable.getTable().refresh();\r
468 }\r
469 });\r
470 }\r
471 }\r
472 }\r
e2561baf 473 }\r
828e5592 474\r
e2561baf
FC
475 // ------------------------------------------------------------------------\r
476 // Global commands\r
477 // ------------------------------------------------------------------------\r
478\r
479 public void addBookmark() {\r
a1091415 480 fEventsTable.addBookmark(fFile);\r
e2561baf
FC
481 }\r
482 \r
483\r
abfad0aa
FC
484 // ------------------------------------------------------------------------\r
485 // Signal handlers\r
486 // ------------------------------------------------------------------------\r
487 \r
4bf17f4a 488 @SuppressWarnings("unchecked")\r
abfad0aa
FC
489 @TmfSignalHandler\r
490 public void traceParserUpdated(TmfTraceParserUpdatedSignal signal) {\r
a1091415 491 if (signal.getTraceResource().equals(fFile)) {\r
abfad0aa 492 broadcast(new TmfTraceClosedSignal(this, fTrace));\r
4bf17f4a 493 try {\r
0710697b 494 String name = fTrace.getName();\r
4bf17f4a 495 fTrace = null;\r
a1091415 496 String traceTypeId = fFile.getPersistentProperty(TmfTraceElement.TRACETYPE);\r
4bf17f4a 497 if (traceTypeId != null) {\r
498 for (IConfigurationElement ce : TmfTraceType.getTypeElements()) {\r
499 if (traceTypeId.equals(ce.getAttribute(TmfTraceType.ID_ATTR))) {\r
500 fTrace = (ITmfTrace<?>) ce.createExecutableExtension(TmfTraceType.TRACE_TYPE_ATTR);\r
501 TmfEvent event = (TmfEvent) ce.createExecutableExtension(TmfTraceType.EVENT_TYPE_ATTR);\r
a1091415 502 String path = fFile.getLocationURI().getPath();\r
8636b448
FC
503 fTrace.initTrace(name, path, event.getClass(), 0);\r
504 fTrace.indexTrace(false);\r
4bf17f4a 505 break;\r
506 }\r
507 }\r
508 }\r
509 } catch (InvalidRegistryObjectException e) {\r
510 e.printStackTrace();\r
511 } catch (FileNotFoundException e) {\r
512 e.printStackTrace();\r
513 } catch (CoreException e) {\r
514 e.printStackTrace();\r
515 }\r
abfad0aa
FC
516 fEventsTable.dispose();\r
517 if (fTrace != null) {\r
518 fEventsTable = createEventsTable(fParent, fTrace.getCacheSize());\r
529ee6a9 519 fEventsTable.setTrace(fTrace, true);\r
a1091415 520 broadcast(new TmfTraceOpenedSignal(this, fTrace, fFile, fEventsTable));\r
abfad0aa
FC
521 } else {\r
522 fEventsTable = new TmfEventsTable(fParent, 0);\r
523 }\r
524 fParent.layout();\r
525 }\r
526 }\r
527\r
528 @TmfSignalHandler\r
529 public void traceSelected(TmfTraceSelectedSignal signal) {\r
530 if (signal.getSource() != this && signal.getTrace().equals(fTrace)) {\r
531 getSite().getPage().bringToTop(this);\r
532 }\r
533 }\r
534\r
535}\r
This page took 0.055832 seconds and 5 git commands to generate.