Internalize some classes and fix a pile of warnings
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / editors / EventsViewEditor.java
1 /*******************************************************************************
2 * Copyright (c) 2012 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 java.util.List;
16
17 import org.eclipse.core.resources.IFile;
18 import org.eclipse.core.resources.IMarker;
19 import org.eclipse.core.runtime.CoreException;
20 import org.eclipse.core.runtime.IProgressMonitor;
21 import org.eclipse.core.runtime.InvalidRegistryObjectException;
22 import org.eclipse.linuxtools.internal.tmf.ui.Activator;
23 import org.eclipse.linuxtools.internal.tmf.ui.project.handlers.Messages;
24 import org.eclipse.linuxtools.tmf.core.TmfCommonConstants;
25 import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;
26 import org.eclipse.linuxtools.tmf.core.exceptions.TmfTraceException;
27 import org.eclipse.linuxtools.tmf.core.signal.TmfExperimentSelectedSignal;
28 import org.eclipse.linuxtools.tmf.core.signal.TmfSignalManager;
29 import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
30 import org.eclipse.linuxtools.tmf.core.trace.TmfExperiment;
31 import org.eclipse.linuxtools.tmf.core.trace.TmfTrace;
32 import org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement;
33 import org.eclipse.linuxtools.tmf.ui.project.model.TmfExperimentElement;
34 import org.eclipse.linuxtools.tmf.ui.project.model.TmfNavigatorContentProvider;
35 import org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectElement;
36 import org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectRegistry;
37 import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceElement;
38 import org.eclipse.linuxtools.tmf.ui.views.events.TmfEventsView;
39 import org.eclipse.swt.widgets.Composite;
40 import org.eclipse.swt.widgets.Display;
41 import org.eclipse.ui.IEditorInput;
42 import org.eclipse.ui.IEditorSite;
43 import org.eclipse.ui.IFileEditorInput;
44 import org.eclipse.ui.IViewPart;
45 import org.eclipse.ui.IWorkbenchPage;
46 import org.eclipse.ui.PartInitException;
47 import org.eclipse.ui.ide.IGotoMarker;
48 import org.eclipse.ui.part.EditorPart;
49
50 /**
51 *
52 * This editor is used to open a trace in the Events view
53 * and set the trace as the current experiment.
54 * It intercepts the IGotoMarker adapter and dispatches
55 * the handling to the Events view' events table.
56 * The editor then closes itself and hides the
57 * editor area if no other editor is open.
58 *
59 */
60 public class EventsViewEditor extends TmfEditor {
61
62 /**
63 * The editor ID
64 */
65 public static final String ID = "org.eclipse.linuxtools.tmf.ui.editors.eventsView"; //$NON-NLS-1$
66
67 private IFile fFile;
68 @SuppressWarnings("rawtypes")
69 private ITmfTrace fTrace;
70 private IMarker fGotoMarker;
71 private boolean fEditorAreaVisible;
72
73 /*
74 * (non-Javadoc)
75 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
76 */
77 @Override
78 public void doSave(final IProgressMonitor monitor) {
79 }
80
81 @Override
82 public void doSaveAs() {
83 }
84
85 /*
86 * (non-Javadoc)
87 * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
88 */
89 @SuppressWarnings({ "unchecked", "rawtypes" })
90 @Override
91 public void init(final IEditorSite site, IEditorInput input) throws PartInitException {
92 fEditorAreaVisible = site.getPage().isEditorAreaVisible();
93 if (input instanceof TmfEditorInput) {
94 fFile = ((TmfEditorInput) input).getFile();
95 fTrace = ((TmfEditorInput) input).getTrace();
96 } else if (input instanceof IFileEditorInput) {
97 fFile = ((IFileEditorInput) input).getFile();
98 if (fFile == null)
99 throw new PartInitException("Invalid IFileEditorInput: " + input); //$NON-NLS-1$
100 final TmfExperiment currentExperiment = TmfExperiment.getCurrentExperiment();
101 if ((currentExperiment != null) && fFile.equals(currentExperiment.getBookmarksFile())) {
102 fTrace = currentExperiment;
103 super.setSite(site);
104 super.setInput(input);
105 return;
106 }
107 try {
108 final String traceTypeId = fFile.getPersistentProperty(TmfCommonConstants.TRACETYPE);
109 if (traceTypeId == null)
110 throw new PartInitException(Messages.OpenTraceHandler_NoTraceType);
111 if (traceTypeId.equals(TmfExperiment.class.getCanonicalName())) {
112 // Special case: experiment bookmark resource
113 final TmfNavigatorContentProvider ncp = new TmfNavigatorContentProvider();
114 ncp.getChildren(fFile.getProject()); // force the model to be populated
115 final TmfProjectElement project = TmfProjectRegistry.getProject(fFile.getProject());
116 if (project == null)
117 throw new PartInitException(Messages.OpenExperimentHandler_NoTraceType);
118 for (final ITmfProjectModelElement projectElement : project.getExperimentsFolder().getChildren()) {
119 final String traceName = fFile.getParent().getName();
120 if (projectElement.getName().equals(traceName)) {
121 final TmfExperimentElement experimentElement = (TmfExperimentElement) projectElement;
122 // Instantiate the experiment's traces
123 final List<TmfTraceElement> traceEntries = experimentElement.getTraces();
124 final int nbTraces = traceEntries.size();
125 int cacheSize = Integer.MAX_VALUE;
126 final ITmfTrace<?>[] traces = new ITmfTrace[nbTraces];
127 for (int i = 0; i < nbTraces; i++) {
128 final TmfTraceElement traceElement = traceEntries.get(i);
129 final ITmfTrace trace = traceElement.instantiateTrace();
130 final ITmfEvent traceEvent = traceElement.instantiateEvent();
131 if ((trace == null) || (traceEvent == null)) {
132 for (int j = 0; j < i; j++)
133 traces[j].dispose();
134 throw new PartInitException(Messages.OpenExperimentHandler_NoTraceType);
135 }
136 try {
137 trace.initTrace(traceElement.getResource(), traceElement.getLocation().getPath(), traceEvent.getClass());
138 } catch (final TmfTraceException e) {
139 }
140 cacheSize = Math.min(cacheSize, trace.getCacheSize());
141 traces[i] = trace;
142 }
143 final TmfExperiment experiment = new TmfExperiment(ITmfEvent.class, experimentElement.getName(), traces, cacheSize);
144 experiment.setBookmarksFile(fFile);
145 fTrace = experiment;
146 TmfExperiment.setCurrentExperiment(experiment);
147 TmfSignalManager.dispatchSignal(new TmfExperimentSelectedSignal(this, experiment));
148 break;
149 }
150 }
151 } else if (traceTypeId.equals(TmfTrace.class.getCanonicalName())) {
152 // Special case: trace bookmark resource
153 final TmfNavigatorContentProvider ncp = new TmfNavigatorContentProvider();
154 ncp.getChildren(fFile.getProject()); // force the model to be populated
155 final TmfProjectElement project = TmfProjectRegistry.getProject(fFile.getProject());
156 for (final ITmfProjectModelElement projectElement : project.getTracesFolder().getChildren()) {
157 final String traceName = fFile.getParent().getName();
158 if (projectElement.getName().equals(traceName)) {
159 final TmfTraceElement traceElement = (TmfTraceElement) projectElement;
160 // Instantiate the experiment trace
161 final ITmfTrace trace = traceElement.instantiateTrace();
162 final ITmfEvent traceEvent = traceElement.instantiateEvent();
163 if ((trace == null) || (traceEvent == null))
164 throw new PartInitException(Messages.OpenTraceHandler_NoTraceType);
165 try {
166 trace.initTrace(traceElement.getResource(), traceElement.getLocation().getPath(), traceEvent.getClass());
167 } catch (final TmfTraceException e) {
168 }
169 final ITmfTrace[] traces = new ITmfTrace[] { trace };
170 final TmfExperiment experiment = new TmfExperiment(traceEvent.getClass(), traceElement.getName(), traces, trace.getCacheSize());
171 experiment.setBookmarksFile(fFile);
172 fTrace = experiment;
173 TmfExperiment.setCurrentExperiment(experiment);
174 TmfSignalManager.dispatchSignal(new TmfExperimentSelectedSignal(this, experiment));
175 break;
176 }
177 }
178 } else {
179 final TmfNavigatorContentProvider ncp = new TmfNavigatorContentProvider();
180 ncp.getChildren(fFile.getProject()); // force the model to be populated
181 final TmfProjectElement project = TmfProjectRegistry.getProject(fFile.getProject());
182 for (final ITmfProjectModelElement projectElement : project.getTracesFolder().getChildren())
183 if (projectElement.getResource().equals(fFile)) {
184 final TmfTraceElement traceElement = (TmfTraceElement) projectElement;
185 // Instantiate the experiment trace
186 final ITmfTrace trace = traceElement.instantiateTrace();
187 final ITmfEvent traceEvent = traceElement.instantiateEvent();
188 if ((trace == null) || (traceEvent == null))
189 throw new PartInitException(Messages.OpenTraceHandler_NoTraceType);
190 try {
191 trace.initTrace(traceElement.getResource(), traceElement.getLocation().getPath(), traceEvent.getClass());
192 } catch (final TmfTraceException e) {
193 }
194 final ITmfTrace[] traces = new ITmfTrace[] { trace };
195 final TmfExperiment experiment = new TmfExperiment(traceEvent.getClass(), traceElement.getName(), traces, trace.getCacheSize());
196 experiment.setBookmarksFile(fFile);
197 fTrace = experiment;
198 TmfExperiment.setCurrentExperiment(experiment);
199 TmfSignalManager.dispatchSignal(new TmfExperimentSelectedSignal(this, experiment));
200 break;
201 }
202 }
203 } catch (final InvalidRegistryObjectException e) {
204 Activator.getDefault().logError("Error initializing EventsViewEditor", e); //$NON-NLS-1$
205 } catch (final CoreException e) {
206 Activator.getDefault().logError("Error initializing EventsViewEditor", e); //$NON-NLS-1$
207 }
208 input = new TmfEditorInput(fFile, fTrace);
209 } else
210 throw new PartInitException("Invalid IEditorInput: " + input.getClass()); //$NON-NLS-1$
211 if (fTrace == null)
212 throw new PartInitException("Invalid IEditorInput: " + fFile.getName()); //$NON-NLS-1$
213 super.setSite(site);
214 super.setInput(input);
215 }
216
217 /*
218 * (non-Javadoc)
219 * @see org.eclipse.ui.part.EditorPart#isDirty()
220 */
221 @Override
222 public boolean isDirty() {
223 return false;
224 }
225
226 /*
227 * (non-Javadoc)
228 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
229 */
230 @Override
231 public boolean isSaveAsAllowed() {
232 return false;
233 }
234
235 /*
236 * (non-Javadoc)
237 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
238 */
239 @Override
240 public void createPartControl(final Composite parent) {
241 setPartName(getEditorInput().getName());
242 }
243
244 /*
245 * (non-Javadoc)
246 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
247 */
248 @Override
249 public void setFocus() {
250 Display.getDefault().asyncExec(new Runnable() {
251 @Override
252 public void run() {
253 final EditorPart editorPart = EventsViewEditor.this;
254 final IWorkbenchPage page = editorPart.getEditorSite().getPage();
255 page.closeEditor(editorPart, false);
256 if (page.getEditorReferences().length == 0)
257 page.setEditorAreaVisible(fEditorAreaVisible);
258 try {
259 final IViewPart viewPart = page.showView(TmfEventsView.ID);
260 if (fGotoMarker != null) {
261 final IGotoMarker adapter = (IGotoMarker) viewPart.getAdapter(IGotoMarker.class);
262 if (adapter != null)
263 adapter.gotoMarker(fGotoMarker);
264 }
265 } catch (final PartInitException e) {
266 Activator.getDefault().logError("Error setting focus", e); //$NON-NLS-1$
267 }
268 }
269 });
270 }
271
272 /* (non-Javadoc)
273 * @see org.eclipse.ui.part.WorkbenchPart#getAdapter(java.lang.Class)
274 */
275 @SuppressWarnings("rawtypes")
276 @Override
277 public Object getAdapter(final Class adapter) {
278 if (IGotoMarker.class.equals(adapter))
279 return new IGotoMarker() {
280 @Override
281 public void gotoMarker(final IMarker marker) {
282 fGotoMarker = marker;
283 }
284 };
285 return super.getAdapter(adapter);
286 }
287
288 }
This page took 0.037268 seconds and 5 git commands to generate.