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