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