Merge in Tycho-ification work
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / editors / TmfEventsEditor.java
1 /*******************************************************************************
2 * Copyright (c) 2010 Ericsson
3 *
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
8 *
9 * Contributors:
10 * Patrick Tasse - Initial API and implementation
11 *******************************************************************************/
12
13 package org.eclipse.linuxtools.tmf.ui.editors;
14
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;
44
45 /**
46 * <b><u>TmfEventsEditor</u></b>
47 */
48 public class TmfEventsEditor extends TmfEditor implements ITmfTraceEditor, IReusableEditor, IPropertyListener, IResourceChangeListener {
49
50 public static final String ID = "org.eclipse.linuxtools.tmf.ui.editors.events"; //$NON-NLS-1$
51
52 private TmfEventsTable fEventsTable;
53 private IResource fResource;
54 private ITmfTrace fTrace;
55 private Composite fParent;
56
57 @Override
58 public void doSave(IProgressMonitor monitor) {
59 }
60
61 @Override
62 public void doSaveAs() {
63 }
64
65 @Override
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) {
75 try {
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());
82 }
83 } else {
84 throw new PartInitException("Invalid IEditorInput: " + input.getClass()); //$NON-NLS-1$
85 }
86 if (fTrace == null) {
87 throw new PartInitException("Invalid IEditorInput: " + fResource.getName()); //$NON-NLS-1$
88 }
89 super.setSite(site);
90 super.setInput(input);
91 }
92
93 @Override
94 public boolean isDirty() {
95 return false;
96 }
97
98 @Override
99 public boolean isSaveAsAllowed() {
100 return false;
101 }
102
103 @Override
104 public void setInput(IEditorInput input) {
105 super.setInput(input);
106 firePropertyChange(IEditorPart.PROP_INPUT);
107 }
108
109 @Override
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));
121 } else {
122 fEventsTable = new TmfEventsTable(fParent, 0);
123 }
124 fParent.layout();
125 }
126 }
127
128 @Override
129 public void createPartControl(Composite parent) {
130 fParent = 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));
137 } else {
138 fEventsTable = new TmfEventsTable(parent, 0);
139 }
140 addPropertyListener(this);
141 ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
142 }
143
144 @Override
145 public void dispose() {
146 ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
147 removePropertyListener(this);
148 if (fTrace != null) {
149 broadcast(new TmfTraceClosedSignal(this, fTrace));
150 }
151 if (fEventsTable != null) {
152 fEventsTable.dispose();
153 }
154 super.dispose();
155 }
156
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);
161 }
162 return eventsTable;
163 }
164
165 @Override
166 public ITmfTrace getTrace() {
167 return fTrace;
168 }
169
170 @Override
171 public IResource getResource() {
172 return fResource;
173 }
174
175 @Override
176 public void setFocus() {
177 fEventsTable.setFocus();
178 if (fTrace != null) {
179 broadcast(new TmfTraceSelectedSignal(this, fTrace));
180 }
181 }
182
183 @Override
184 @SuppressWarnings("rawtypes")
185 public Object getAdapter(Class adapter) {
186 if (IGotoMarker.class.equals(adapter)) {
187 return fEventsTable;
188 }
189 return super.getAdapter(adapter);
190 }
191
192 @Override
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() {
198 @Override
199 public void run() {
200 fEventsTable.removeBookmark(bookmark);
201 }
202 });
203 }
204 }
205 }
206
207 // ------------------------------------------------------------------------
208 // Global commands
209 // ------------------------------------------------------------------------
210
211 public void addBookmark() {
212 fEventsTable.addBookmark(fResource);
213 }
214
215
216 // ------------------------------------------------------------------------
217 // Signal handlers
218 // ------------------------------------------------------------------------
219
220 @TmfSignalHandler
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));
230 } else {
231 fEventsTable = new TmfEventsTable(fParent, 0);
232 }
233 fParent.layout();
234 }
235 }
236
237 @TmfSignalHandler
238 public void traceSelected(TmfTraceSelectedSignal signal) {
239 if (signal.getSource() != this && signal.getTrace().equals(fTrace)) {
240 getSite().getPage().bringToTop(this);
241 }
242 }
243
244 }
This page took 0.036815 seconds and 6 git commands to generate.