1 /*******************************************************************************
2 * Copyright (c) 2010 Ericsson
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
10 * Patrick Tasse - Initial API and implementation
11 *******************************************************************************/
13 package org
.eclipse
.linuxtools
.tmf
.ui
.editors
;
15 import org
.eclipse
.core
.resources
.IMarker
;
16 import org
.eclipse
.core
.resources
.IMarkerDelta
;
17 import org
.eclipse
.core
.resources
.IResource
;
18 import org
.eclipse
.core
.resources
.IResourceChangeEvent
;
19 import org
.eclipse
.core
.resources
.IResourceChangeListener
;
20 import org
.eclipse
.core
.resources
.IResourceDelta
;
21 import org
.eclipse
.core
.resources
.ResourcesPlugin
;
22 import org
.eclipse
.core
.runtime
.CoreException
;
23 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
24 import org
.eclipse
.linuxtools
.tmf
.signal
.TmfSignalHandler
;
25 import org
.eclipse
.linuxtools
.tmf
.signal
.TmfTraceSelectedSignal
;
26 import org
.eclipse
.linuxtools
.tmf
.trace
.ITmfTrace
;
27 import org
.eclipse
.linuxtools
.tmf
.ui
.parsers
.ParserProviderManager
;
28 import org
.eclipse
.linuxtools
.tmf
.ui
.signal
.TmfTraceClosedSignal
;
29 import org
.eclipse
.linuxtools
.tmf
.ui
.signal
.TmfTraceOpenedSignal
;
30 import org
.eclipse
.linuxtools
.tmf
.ui
.signal
.TmfTraceParserUpdatedSignal
;
31 import org
.eclipse
.linuxtools
.tmf
.ui
.viewers
.events
.TmfEventsTable
;
32 import org
.eclipse
.linuxtools
.tmf
.ui
.views
.project
.ProjectView
;
33 import org
.eclipse
.swt
.widgets
.Composite
;
34 import org
.eclipse
.swt
.widgets
.Display
;
35 import org
.eclipse
.ui
.IEditorInput
;
36 import org
.eclipse
.ui
.IEditorPart
;
37 import org
.eclipse
.ui
.IEditorSite
;
38 import org
.eclipse
.ui
.IFileEditorInput
;
39 import org
.eclipse
.ui
.IPropertyListener
;
40 import org
.eclipse
.ui
.IReusableEditor
;
41 import org
.eclipse
.ui
.PartInitException
;
42 import org
.eclipse
.ui
.ide
.FileStoreEditorInput
;
43 import org
.eclipse
.ui
.ide
.IGotoMarker
;
46 * <b><u>TmfEventsEditor</u></b>
48 public class TmfEventsEditor
extends TmfEditor
implements ITmfTraceEditor
, IReusableEditor
, IPropertyListener
, IResourceChangeListener
{
50 public static final String ID
= "org.eclipse.linuxtools.tmf.ui.editors.events"; //$NON-NLS-1$
52 private TmfEventsTable fEventsTable
;
53 private IResource fResource
;
54 private ITmfTrace fTrace
;
55 private Composite fParent
;
58 public void doSave(IProgressMonitor monitor
) {
62 public void doSaveAs() {
66 public void init(IEditorSite site
, IEditorInput input
) throws PartInitException
{
67 if (input
instanceof TmfEditorInput
) {
68 fResource
= ((TmfEditorInput
) input
).getResource();
69 fTrace
= ((TmfEditorInput
) input
).getTrace();
70 } else if (input
instanceof IFileEditorInput
) {
71 fResource
= ((IFileEditorInput
) input
).getFile();
72 fTrace
= ParserProviderManager
.getTrace(fResource
);
73 input
= new TmfEditorInput(fResource
, fTrace
);
74 } else if (input
instanceof FileStoreEditorInput
) {
76 FileStoreEditorInput fileStoreEditorInput
= (FileStoreEditorInput
) input
;
77 fResource
= ProjectView
.createLink(fileStoreEditorInput
.getURI());
78 fTrace
= ParserProviderManager
.getTrace(fResource
);
79 input
= new TmfEditorInput(fResource
, fTrace
);
80 } catch (CoreException e
) {
81 throw new PartInitException(e
.getMessage());
84 throw new PartInitException("Invalid IEditorInput: " + input
.getClass()); //$NON-NLS-1$
87 throw new PartInitException("Invalid IEditorInput: " + fResource
.getName()); //$NON-NLS-1$
90 super.setInput(input
);
94 public boolean isDirty() {
99 public boolean isSaveAsAllowed() {
104 public void setInput(IEditorInput input
) {
105 super.setInput(input
);
106 firePropertyChange(IEditorPart
.PROP_INPUT
);
110 public void propertyChanged(Object source
, int propId
) {
111 if (propId
== IEditorPart
.PROP_INPUT
) {
112 broadcast(new TmfTraceClosedSignal(this, fTrace
));
113 fResource
= ((TmfEditorInput
) getEditorInput()).getResource();
114 fTrace
= ((TmfEditorInput
) getEditorInput()).getTrace();
115 fEventsTable
.dispose();
116 if (fTrace
!= null) {
117 fEventsTable
= createEventsTable(fParent
, fTrace
.getCacheSize());
118 fEventsTable
.setTrace(fTrace
, true);
119 fEventsTable
.refreshBookmarks(fResource
);
120 broadcast(new TmfTraceOpenedSignal(this, fTrace
, fResource
, fEventsTable
));
122 fEventsTable
= new TmfEventsTable(fParent
, 0);
129 public void createPartControl(Composite parent
) {
131 setPartName(getEditorInput().getName());
132 if (fTrace
!= null) {
133 fEventsTable
= createEventsTable(parent
, fTrace
.getCacheSize());
134 fEventsTable
.setTrace(fTrace
, true);
135 fEventsTable
.refreshBookmarks(fResource
);
136 broadcast(new TmfTraceOpenedSignal(this, fTrace
, fResource
, fEventsTable
));
138 fEventsTable
= new TmfEventsTable(parent
, 0);
140 addPropertyListener(this);
141 ResourcesPlugin
.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent
.POST_CHANGE
);
145 public void dispose() {
146 ResourcesPlugin
.getWorkspace().removeResourceChangeListener(this);
147 removePropertyListener(this);
148 if (fTrace
!= null) {
149 broadcast(new TmfTraceClosedSignal(this, fTrace
));
151 if (fEventsTable
!= null) {
152 fEventsTable
.dispose();
157 protected TmfEventsTable
createEventsTable(Composite parent
, int cacheSize
) {
158 TmfEventsTable eventsTable
= ParserProviderManager
.getEventsTable(fTrace
, parent
, cacheSize
);
159 if (eventsTable
== null) {
160 eventsTable
= new TmfEventsTable(parent
, cacheSize
);
166 public ITmfTrace
getTrace() {
171 public IResource
getResource() {
176 public void setFocus() {
177 fEventsTable
.setFocus();
178 if (fTrace
!= null) {
179 broadcast(new TmfTraceSelectedSignal(this, fTrace
));
184 @SuppressWarnings("rawtypes")
185 public Object
getAdapter(Class adapter
) {
186 if (IGotoMarker
.class.equals(adapter
)) {
189 return super.getAdapter(adapter
);
193 public void resourceChanged(IResourceChangeEvent event
) {
194 for (IMarkerDelta delta
: event
.findMarkerDeltas(IMarker
.BOOKMARK
, false)) {
195 if (delta
.getResource().equals(fResource
) && delta
.getKind() == IResourceDelta
.REMOVED
) {
196 final IMarker bookmark
= delta
.getMarker();
197 Display
.getDefault().asyncExec(new Runnable() {
200 fEventsTable
.removeBookmark(bookmark
);
207 // ------------------------------------------------------------------------
209 // ------------------------------------------------------------------------
211 public void addBookmark() {
212 fEventsTable
.addBookmark(fResource
);
216 // ------------------------------------------------------------------------
218 // ------------------------------------------------------------------------
221 public void traceParserUpdated(TmfTraceParserUpdatedSignal signal
) {
222 if (signal
.getTraceResource().equals(fResource
)) {
223 broadcast(new TmfTraceClosedSignal(this, fTrace
));
224 fTrace
= ParserProviderManager
.getTrace(fResource
);
225 fEventsTable
.dispose();
226 if (fTrace
!= null) {
227 fEventsTable
= createEventsTable(fParent
, fTrace
.getCacheSize());
228 fEventsTable
.setTrace(fTrace
, true);
229 broadcast(new TmfTraceOpenedSignal(this, fTrace
, fResource
, fEventsTable
));
231 fEventsTable
= new TmfEventsTable(fParent
, 0);
238 public void traceSelected(TmfTraceSelectedSignal signal
) {
239 if (signal
.getSource() != this && signal
.getTrace().equals(fTrace
)) {
240 getSite().getPage().bringToTop(this);