Rename xxx.lttng to xxx.lttng.core
[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
12c155f5 18\r
e2561baf
FC
19import org.eclipse.core.resources.IMarker;\r
20import org.eclipse.core.resources.IMarkerDelta;\r
abfad0aa 21import org.eclipse.core.resources.IResource;\r
e2561baf
FC
22import org.eclipse.core.resources.IResourceChangeEvent;\r
23import org.eclipse.core.resources.IResourceChangeListener;\r
24import org.eclipse.core.resources.IResourceDelta;\r
25import org.eclipse.core.resources.ResourcesPlugin;\r
abfad0aa 26import org.eclipse.core.runtime.CoreException;\r
12c155f5 27import org.eclipse.core.runtime.IConfigurationElement;\r
abfad0aa 28import org.eclipse.core.runtime.IProgressMonitor;\r
12c155f5 29import org.eclipse.core.runtime.InvalidRegistryObjectException;\r
12c155f5 30import org.eclipse.core.runtime.Platform;\r
4bf17f4a 31import org.eclipse.linuxtools.tmf.event.TmfEvent;\r
abfad0aa 32import org.eclipse.linuxtools.tmf.signal.TmfSignalHandler;\r
abfad0aa
FC
33import org.eclipse.linuxtools.tmf.signal.TmfTraceSelectedSignal;\r
34import org.eclipse.linuxtools.tmf.trace.ITmfTrace;\r
4bf17f4a 35import org.eclipse.linuxtools.tmf.ui.parsers.custom.CustomEventsTable;\r
36import org.eclipse.linuxtools.tmf.ui.parsers.custom.CustomTxtTrace;\r
37import org.eclipse.linuxtools.tmf.ui.parsers.custom.CustomXmlTrace;\r
12c155f5 38import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceElement;\r
46ab8ce3 39import org.eclipse.linuxtools.tmf.ui.signal.TmfTraceClosedSignal;\r
e2561baf 40import org.eclipse.linuxtools.tmf.ui.signal.TmfTraceOpenedSignal;\r
46ab8ce3 41import org.eclipse.linuxtools.tmf.ui.signal.TmfTraceParserUpdatedSignal;\r
abfad0aa 42import org.eclipse.linuxtools.tmf.ui.viewers.events.TmfEventsTable;\r
4bf17f4a 43import org.eclipse.linuxtools.tmf.util.TmfTraceType;\r
abfad0aa 44import org.eclipse.swt.widgets.Composite;\r
e2561baf 45import org.eclipse.swt.widgets.Display;\r
abfad0aa
FC
46import org.eclipse.ui.IEditorInput;\r
47import org.eclipse.ui.IEditorPart;\r
48import org.eclipse.ui.IEditorSite;\r
49import org.eclipse.ui.IFileEditorInput;\r
50import org.eclipse.ui.IPropertyListener;\r
51import org.eclipse.ui.IReusableEditor;\r
52import org.eclipse.ui.PartInitException;\r
e2561baf 53import org.eclipse.ui.ide.IGotoMarker;\r
12c155f5 54import org.osgi.framework.Bundle;\r
abfad0aa
FC
55\r
56/**\r
57 * <b><u>TmfEventsEditor</u></b>\r
58 */\r
e2561baf 59public class TmfEventsEditor extends TmfEditor implements ITmfTraceEditor, IReusableEditor, IPropertyListener, IResourceChangeListener {\r
abfad0aa 60\r
3b38ea61 61 public static final String ID = "org.eclipse.linuxtools.tmf.ui.editors.events"; //$NON-NLS-1$\r
abfad0aa
FC
62 \r
63 private TmfEventsTable fEventsTable;\r
64 private IResource fResource;\r
4bf17f4a 65 @SuppressWarnings("rawtypes")\r
66 private ITmfTrace fTrace;\r
abfad0aa
FC
67 private Composite fParent;\r
68\r
69 @Override\r
70 public void doSave(IProgressMonitor monitor) {\r
71 }\r
72\r
73 @Override\r
74 public void doSaveAs() {\r
75 }\r
76\r
4bf17f4a 77 @SuppressWarnings("unchecked")\r
abfad0aa
FC
78 @Override\r
79 public void init(IEditorSite site, IEditorInput input) throws PartInitException {\r
80 if (input instanceof TmfEditorInput) {\r
81 fResource = ((TmfEditorInput) input).getResource();\r
82 fTrace = ((TmfEditorInput) input).getTrace();\r
83 } else if (input instanceof IFileEditorInput) {\r
84 fResource = ((IFileEditorInput) input).getFile();\r
abfad0aa 85 try {\r
4bf17f4a 86 String traceTypeId = fResource.getPersistentProperty(TmfTraceElement.TRACETYPE);\r
87 if (traceTypeId != null) {\r
88 for (IConfigurationElement ce : TmfTraceType.getTypeElements()) {\r
89 if (traceTypeId.equals(ce.getAttribute(TmfTraceType.ID_ATTR))) {\r
90 fTrace = (ITmfTrace<?>) ce.createExecutableExtension(TmfTraceType.TRACE_TYPE_ATTR);\r
91 TmfEvent event = (TmfEvent) ce.createExecutableExtension(TmfTraceType.EVENT_TYPE_ATTR);\r
92 String path = fResource.getLocation().toOSString();\r
93 fTrace.initTrace(path, event.getClass(), true);\r
94 break;\r
95 }\r
96 }\r
97 }\r
98 } catch (InvalidRegistryObjectException e) {\r
99 e.printStackTrace();\r
100 } catch (FileNotFoundException e) {\r
101 e.printStackTrace();\r
abfad0aa 102 } catch (CoreException e) {\r
4bf17f4a 103 e.printStackTrace();\r
abfad0aa 104 }\r
4bf17f4a 105 input = new TmfEditorInput(fResource, fTrace);\r
abfad0aa 106 } else {\r
3b38ea61 107 throw new PartInitException("Invalid IEditorInput: " + input.getClass()); //$NON-NLS-1$\r
abfad0aa
FC
108 }\r
109 if (fTrace == null) {\r
3b38ea61 110 throw new PartInitException("Invalid IEditorInput: " + fResource.getName()); //$NON-NLS-1$\r
abfad0aa
FC
111 }\r
112 super.setSite(site);\r
113 super.setInput(input);\r
114 }\r
115\r
116 @Override\r
117 public boolean isDirty() {\r
118 return false;\r
119 }\r
120\r
121 @Override\r
122 public boolean isSaveAsAllowed() {\r
123 return false;\r
124 }\r
125\r
126 @Override\r
127 public void setInput(IEditorInput input) {\r
128 super.setInput(input);\r
129 firePropertyChange(IEditorPart.PROP_INPUT);\r
130 }\r
131\r
d4011df2
FC
132 @Override\r
133 public void propertyChanged(Object source, int propId) {\r
abfad0aa
FC
134 if (propId == IEditorPart.PROP_INPUT) {\r
135 broadcast(new TmfTraceClosedSignal(this, fTrace));\r
136 fResource = ((TmfEditorInput) getEditorInput()).getResource();\r
137 fTrace = ((TmfEditorInput) getEditorInput()).getTrace();\r
138 fEventsTable.dispose();\r
139 if (fTrace != null) {\r
140 fEventsTable = createEventsTable(fParent, fTrace.getCacheSize());\r
529ee6a9 141 fEventsTable.setTrace(fTrace, true);\r
e2561baf
FC
142 fEventsTable.refreshBookmarks(fResource);\r
143 broadcast(new TmfTraceOpenedSignal(this, fTrace, fResource, fEventsTable));\r
abfad0aa
FC
144 } else {\r
145 fEventsTable = new TmfEventsTable(fParent, 0);\r
146 }\r
147 fParent.layout();\r
148 }\r
149 }\r
150\r
151 @Override\r
152 public void createPartControl(Composite parent) {\r
153 fParent = parent;\r
154 setPartName(getEditorInput().getName());\r
155 if (fTrace != null) {\r
156 fEventsTable = createEventsTable(parent, fTrace.getCacheSize());\r
529ee6a9 157 fEventsTable.setTrace(fTrace, true);\r
e2561baf
FC
158 fEventsTable.refreshBookmarks(fResource);\r
159 broadcast(new TmfTraceOpenedSignal(this, fTrace, fResource, fEventsTable));\r
abfad0aa
FC
160 } else {\r
161 fEventsTable = new TmfEventsTable(parent, 0);\r
162 }\r
163 addPropertyListener(this);\r
e2561baf 164 ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);\r
abfad0aa
FC
165 }\r
166\r
167 @Override\r
168 public void dispose() {\r
e2561baf
FC
169 ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);\r
170 removePropertyListener(this);\r
abfad0aa
FC
171 if (fTrace != null) {\r
172 broadcast(new TmfTraceClosedSignal(this, fTrace));\r
173 }\r
174 if (fEventsTable != null) {\r
175 fEventsTable.dispose();\r
176 }\r
177 super.dispose();\r
178 }\r
179\r
180 protected TmfEventsTable createEventsTable(Composite parent, int cacheSize) {\r
12c155f5 181 TmfEventsTable eventsTable = getEventsTable(parent, cacheSize);\r
abfad0aa
FC
182 if (eventsTable == null) {\r
183 eventsTable = new TmfEventsTable(parent, cacheSize);\r
184 }\r
185 return eventsTable;\r
186 }\r
187 \r
12c155f5
FC
188 private TmfEventsTable getEventsTable(Composite parent, int cacheSize) {\r
189 TmfEventsTable eventsTable = null;\r
12c155f5
FC
190 try {\r
191 String traceType = fResource.getPersistentProperty(TmfTraceElement.TRACETYPE);\r
4bf17f4a 192 if (traceType.startsWith(CustomTxtTrace.class.getCanonicalName())) {\r
193 return new CustomEventsTable(((CustomTxtTrace) fTrace).getDefinition(), parent, cacheSize);\r
194 }\r
195 if (traceType.startsWith(CustomXmlTrace.class.getCanonicalName())) {\r
196 return new CustomEventsTable(((CustomXmlTrace) fTrace).getDefinition(), parent, cacheSize);\r
197 }\r
198 for (IConfigurationElement ce : TmfTraceType.getTypeElements()) {\r
199 if (ce.getAttribute(TmfTraceType.ID_ATTR).equals(traceType)) {\r
200 IConfigurationElement[] eventsTableTypeCE = ce.getChildren(TmfTraceType.EVENTS_TABLE_TYPE_ELEM);\r
12c155f5
FC
201 if (eventsTableTypeCE.length != 1) {\r
202 break;\r
203 }\r
4bf17f4a 204 String eventsTableType = eventsTableTypeCE[0].getAttribute(TmfTraceType.CLASS_ATTR);\r
12c155f5
FC
205 if (eventsTableType == null || eventsTableType.length() == 0) {\r
206 break;\r
207 }\r
208 Bundle bundle = Platform.getBundle(ce.getContributor().getName());\r
209 Class<?> c = bundle.loadClass(eventsTableType);\r
210 Class<?>[] constructorArgs = new Class[] { Composite.class, int.class };\r
211 Constructor<?> constructor = c.getConstructor(constructorArgs);\r
212 Object[] args = new Object[] { parent, cacheSize };\r
213 eventsTable = (TmfEventsTable) constructor.newInstance(args);\r
214 break;\r
215 }\r
216 }\r
217 } catch (InvalidRegistryObjectException e) {\r
218 e.printStackTrace();\r
219 } catch (CoreException e) {\r
220 e.printStackTrace();\r
221 } catch (ClassNotFoundException e) {\r
222 e.printStackTrace();\r
223 } catch (SecurityException e) {\r
224 e.printStackTrace();\r
225 } catch (NoSuchMethodException e) {\r
226 e.printStackTrace();\r
227 } catch (IllegalArgumentException e) {\r
228 e.printStackTrace();\r
229 } catch (InstantiationException e) {\r
230 e.printStackTrace();\r
231 } catch (IllegalAccessException e) {\r
232 e.printStackTrace();\r
233 } catch (InvocationTargetException e) {\r
234 e.printStackTrace();\r
235 }\r
236 return eventsTable;\r
237 }\r
238\r
d4011df2 239 @Override\r
12c155f5 240 public ITmfTrace<?> getTrace() {\r
abfad0aa
FC
241 return fTrace;\r
242 }\r
243\r
e2561baf
FC
244 @Override\r
245 public IResource getResource() {\r
246 return fResource;\r
247 }\r
248\r
abfad0aa
FC
249 @Override\r
250 public void setFocus() {\r
251 fEventsTable.setFocus();\r
252 if (fTrace != null) {\r
253 broadcast(new TmfTraceSelectedSignal(this, fTrace));\r
254 }\r
255 }\r
256\r
e2561baf
FC
257 @Override\r
258 @SuppressWarnings("rawtypes")\r
259 public Object getAdapter(Class adapter) {\r
260 if (IGotoMarker.class.equals(adapter)) {\r
261 return fEventsTable;\r
262 }\r
263 return super.getAdapter(adapter);\r
264 }\r
265\r
266 @Override\r
267 public void resourceChanged(IResourceChangeEvent event) {\r
268 for (IMarkerDelta delta : event.findMarkerDeltas(IMarker.BOOKMARK, false)) {\r
269 if (delta.getResource().equals(fResource) && delta.getKind() == IResourceDelta.REMOVED) {\r
270 final IMarker bookmark = delta.getMarker();\r
271 Display.getDefault().asyncExec(new Runnable() {\r
272 @Override\r
273 public void run() {\r
274 fEventsTable.removeBookmark(bookmark);\r
275 }\r
276 });\r
277 }\r
278 }\r
279 }\r
280 \r
281 // ------------------------------------------------------------------------\r
282 // Global commands\r
283 // ------------------------------------------------------------------------\r
284\r
285 public void addBookmark() {\r
286 fEventsTable.addBookmark(fResource);\r
287 }\r
288 \r
289\r
abfad0aa
FC
290 // ------------------------------------------------------------------------\r
291 // Signal handlers\r
292 // ------------------------------------------------------------------------\r
293 \r
4bf17f4a 294 @SuppressWarnings("unchecked")\r
abfad0aa
FC
295 @TmfSignalHandler\r
296 public void traceParserUpdated(TmfTraceParserUpdatedSignal signal) {\r
297 if (signal.getTraceResource().equals(fResource)) {\r
298 broadcast(new TmfTraceClosedSignal(this, fTrace));\r
4bf17f4a 299 try {\r
300 fTrace = null;\r
301 String traceTypeId = fResource.getPersistentProperty(TmfTraceElement.TRACETYPE);\r
302 if (traceTypeId != null) {\r
303 for (IConfigurationElement ce : TmfTraceType.getTypeElements()) {\r
304 if (traceTypeId.equals(ce.getAttribute(TmfTraceType.ID_ATTR))) {\r
305 fTrace = (ITmfTrace<?>) ce.createExecutableExtension(TmfTraceType.TRACE_TYPE_ATTR);\r
306 TmfEvent event = (TmfEvent) ce.createExecutableExtension(TmfTraceType.EVENT_TYPE_ATTR);\r
307 String path = fResource.getLocation().toOSString();\r
308 fTrace.initTrace(path, event.getClass(), true);\r
309 break;\r
310 }\r
311 }\r
312 }\r
313 } catch (InvalidRegistryObjectException e) {\r
314 e.printStackTrace();\r
315 } catch (FileNotFoundException e) {\r
316 e.printStackTrace();\r
317 } catch (CoreException e) {\r
318 e.printStackTrace();\r
319 }\r
abfad0aa
FC
320 fEventsTable.dispose();\r
321 if (fTrace != null) {\r
322 fEventsTable = createEventsTable(fParent, fTrace.getCacheSize());\r
529ee6a9 323 fEventsTable.setTrace(fTrace, true);\r
e2561baf 324 broadcast(new TmfTraceOpenedSignal(this, fTrace, fResource, fEventsTable));\r
abfad0aa
FC
325 } else {\r
326 fEventsTable = new TmfEventsTable(fParent, 0);\r
327 }\r
328 fParent.layout();\r
329 }\r
330 }\r
331\r
332 @TmfSignalHandler\r
333 public void traceSelected(TmfTraceSelectedSignal signal) {\r
334 if (signal.getSource() != this && signal.getTrace().equals(fTrace)) {\r
335 getSite().getPage().bringToTop(this);\r
336 }\r
337 }\r
338\r
339}\r
This page took 0.042969 seconds and 5 git commands to generate.