analysis: Move plugins to their own sub-directory
[deliverable/tracecompass.git] / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / internal / tmf / ui / project / model / TmfEditorLinkHelper.java
1 /*******************************************************************************
2 * Copyright (c) 2012, 2015 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 * Bernd Hufmann - Initial API and implementation
11 *******************************************************************************/
12 package org.eclipse.tracecompass.internal.tmf.ui.project.model;
13
14 import org.eclipse.core.resources.IFile;
15 import org.eclipse.core.runtime.CoreException;
16 import org.eclipse.jface.viewers.IStructuredSelection;
17 import org.eclipse.jface.viewers.StructuredSelection;
18 import org.eclipse.tracecompass.internal.tmf.ui.editors.ITmfEventsEditorConstants;
19 import org.eclipse.tracecompass.tmf.core.TmfCommonConstants;
20 import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentElement;
21 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
22 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry;
23 import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
24 import org.eclipse.ui.IEditorInput;
25 import org.eclipse.ui.IEditorPart;
26 import org.eclipse.ui.IEditorReference;
27 import org.eclipse.ui.IWorkbenchPage;
28 import org.eclipse.ui.PartInitException;
29 import org.eclipse.ui.ide.ResourceUtil;
30 import org.eclipse.ui.navigator.ILinkHelper;
31 import org.eclipse.ui.part.FileEditorInput;
32
33 /**
34 * Implementation of ILinkHelper interface for linking with editor extension for traces and
35 * experiments.
36 *
37 * @author Bernd Hufmann
38 */
39 public class TmfEditorLinkHelper implements ILinkHelper {
40
41 @Override
42 public IStructuredSelection findSelection(IEditorInput anInput) {
43 IFile file = ResourceUtil.getFile(anInput);
44 if (file != null) {
45
46 try {
47 // Get the trace type ID
48 String traceTypeId = file.getPersistentProperty(TmfCommonConstants.TRACETYPE);
49 if (traceTypeId == null) {
50 return StructuredSelection.EMPTY;
51 }
52
53 final TmfProjectElement project = TmfProjectRegistry.getProject(file.getProject(), true);
54
55 // Check for experiments, traces which are folders or traces which are files
56 if (ITmfEventsEditorConstants.EXPERIMENT_INPUT_TYPE_CONSTANTS.contains(traceTypeId)) {
57 // Case 1: Experiment
58 for (final TmfExperimentElement experimentElement : project.getExperimentsFolder().getExperiments()) {
59 if (experimentElement.getResource().equals(file.getParent())) {
60 return new StructuredSelection(experimentElement);
61 }
62 }
63 } else if (ITmfEventsEditorConstants.TRACE_INPUT_TYPE_CONSTANTS.contains(traceTypeId)) {
64 // Case 2: Trace that is a folder
65 for (final TmfTraceElement traceElement : project.getTracesFolder().getTraces()) {
66 if (traceElement.getResource().equals(file.getParent())) {
67 return new StructuredSelection(traceElement);
68 }
69 }
70 } else {
71 // Case 3: Trace that is a file
72 for (final TmfTraceElement traceElement : project.getTracesFolder().getTraces()) {
73 if (traceElement.getResource().equals(file)) {
74 return new StructuredSelection(traceElement);
75 }
76 }
77 }
78 } catch (CoreException e) {
79 return StructuredSelection.EMPTY;
80 }
81 }
82 return StructuredSelection.EMPTY;
83 }
84
85 @Override
86 public void activateEditor(IWorkbenchPage aPage, IStructuredSelection aSelection) {
87 if (aSelection == null || aSelection.isEmpty()) {
88 return;
89 }
90
91 IFile file = null;
92
93 if ((aSelection.getFirstElement() instanceof TmfTraceElement)) {
94 TmfTraceElement traceElement = ((TmfTraceElement)aSelection.getFirstElement());
95
96 // If trace is under an experiment, use the original trace from the traces folder
97 traceElement = traceElement.getElementUnderTraceFolder();
98 file = traceElement.getBookmarksFile();
99 } else if ((aSelection.getFirstElement() instanceof TmfExperimentElement)) {
100 TmfExperimentElement experimentElement = (TmfExperimentElement) aSelection.getFirstElement();
101 file = experimentElement.getBookmarksFile();
102 }
103
104 if (file != null) {
105 IEditorInput tmpInput = new FileEditorInput(file);
106 IEditorPart localEditor = aPage.findEditor(tmpInput);
107 if (localEditor != null) {
108 // Editor found.
109 aPage.bringToTop(localEditor);
110 } else {
111 // Search in references for corresponding editor
112 IEditorReference[] refs = aPage.getEditorReferences();
113 for (IEditorReference editorReference : refs) {
114 try {
115 if (editorReference.getEditorInput().equals(tmpInput)) {
116 localEditor = editorReference.getEditor(true);
117 if (localEditor != null) {
118 aPage.bringToTop(localEditor);
119 }
120 }
121 } catch (PartInitException e) {
122 // Ignore
123 }
124 }
125 }
126 }
127 }
128 }
129
This page took 0.038148 seconds and 5 git commands to generate.