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