1 /*******************************************************************************
2 * Copyright (c) 2012, 2015 Ericsson
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
10 * Bernd Hufmann - Initial API and implementation
11 *******************************************************************************/
12 package org
.eclipse
.tracecompass
.internal
.tmf
.ui
.project
.model
;
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
;
34 * Implementation of ILinkHelper interface for linking with editor extension for traces and
37 * @author Bernd Hufmann
39 public class TmfEditorLinkHelper
implements ILinkHelper
{
42 public IStructuredSelection
findSelection(IEditorInput anInput
) {
43 IFile file
= ResourceUtil
.getFile(anInput
);
47 // Get the trace type ID
48 String traceTypeId
= file
.getPersistentProperty(TmfCommonConstants
.TRACETYPE
);
49 if (traceTypeId
== null) {
50 return StructuredSelection
.EMPTY
;
53 final TmfProjectElement project
= TmfProjectRegistry
.getProject(file
.getProject(), true);
55 // Check for experiments, traces which are folders or traces which are files
56 if (ITmfEventsEditorConstants
.EXPERIMENT_INPUT_TYPE_CONSTANTS
.contains(traceTypeId
)) {
58 for (final TmfExperimentElement experimentElement
: project
.getExperimentsFolder().getExperiments()) {
59 if (experimentElement
.getResource().equals(file
.getParent())) {
60 return new StructuredSelection(experimentElement
);
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
);
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
);
78 } catch (CoreException e
) {
79 return StructuredSelection
.EMPTY
;
82 return StructuredSelection
.EMPTY
;
86 public void activateEditor(IWorkbenchPage aPage
, IStructuredSelection aSelection
) {
87 if (aSelection
== null || aSelection
.isEmpty()) {
93 if ((aSelection
.getFirstElement() instanceof TmfTraceElement
)) {
94 TmfTraceElement traceElement
= ((TmfTraceElement
)aSelection
.getFirstElement());
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();
105 IEditorInput tmpInput
= new FileEditorInput(file
);
106 IEditorPart localEditor
= aPage
.findEditor(tmpInput
);
107 if (localEditor
!= null) {
109 aPage
.bringToTop(localEditor
);
111 // Search in references for corresponding editor
112 IEditorReference
[] refs
= aPage
.getEditorReferences();
113 for (IEditorReference editorReference
: refs
) {
115 if (editorReference
.getEditorInput().equals(tmpInput
)) {
116 localEditor
= editorReference
.getEditor(true);
117 if (localEditor
!= null) {
118 aPage
.bringToTop(localEditor
);
121 } catch (PartInitException e
) {