1 /*******************************************************************************
2 * Copyright (c) 2012, 2014 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
.tmf
.core
.TmfCommonConstants
;
19 import org
.eclipse
.tracecompass
.tmf
.core
.trace
.TmfExperiment
;
20 import org
.eclipse
.tracecompass
.tmf
.core
.trace
.TmfTrace
;
21 import org
.eclipse
.tracecompass
.tmf
.ui
.project
.model
.TmfExperimentElement
;
22 import org
.eclipse
.tracecompass
.tmf
.ui
.project
.model
.TmfProjectElement
;
23 import org
.eclipse
.tracecompass
.tmf
.ui
.project
.model
.TmfProjectRegistry
;
24 import org
.eclipse
.tracecompass
.tmf
.ui
.project
.model
.TmfTraceElement
;
25 import org
.eclipse
.ui
.IEditorInput
;
26 import org
.eclipse
.ui
.IEditorPart
;
27 import org
.eclipse
.ui
.IEditorReference
;
28 import org
.eclipse
.ui
.IWorkbenchPage
;
29 import org
.eclipse
.ui
.PartInitException
;
30 import org
.eclipse
.ui
.ide
.ResourceUtil
;
31 import org
.eclipse
.ui
.navigator
.ILinkHelper
;
32 import org
.eclipse
.ui
.part
.FileEditorInput
;
35 * Implementation of ILinkHelper interface for linking with editor extension for traces and
38 * @author Bernd Hufmann
40 public class TmfEditorLinkHelper
implements ILinkHelper
{
43 public IStructuredSelection
findSelection(IEditorInput anInput
) {
44 IFile file
= ResourceUtil
.getFile(anInput
);
48 // Get the trace type ID
49 String traceTypeId
= file
.getPersistentProperty(TmfCommonConstants
.TRACETYPE
);
50 if (traceTypeId
== null) {
51 return StructuredSelection
.EMPTY
;
54 final TmfProjectElement project
= TmfProjectRegistry
.getProject(file
.getProject(), true);
56 // Check for experiments, traces which are folders or traces which are files
57 if (traceTypeId
.equals(TmfExperiment
.class.getCanonicalName())) {
59 for (final TmfExperimentElement experimentElement
: project
.getExperimentsFolder().getExperiments()) {
60 if (experimentElement
.getResource().equals(file
.getParent())) {
61 return new StructuredSelection(experimentElement
);
64 } else if (traceTypeId
.equals(TmfTrace
.class.getCanonicalName())) {
65 // Case 2: Trace that is a folder
66 for (final TmfTraceElement traceElement
: project
.getTracesFolder().getTraces()) {
67 if (traceElement
.getResource().equals(file
.getParent())) {
68 return new StructuredSelection(traceElement
);
72 // Case 3: Trace that is a file
73 for (final TmfTraceElement traceElement
: project
.getTracesFolder().getTraces()) {
74 if (traceElement
.getResource().equals(file
)) {
75 return new StructuredSelection(traceElement
);
79 } catch (CoreException e
) {
80 return StructuredSelection
.EMPTY
;
83 return StructuredSelection
.EMPTY
;
87 public void activateEditor(IWorkbenchPage aPage
, IStructuredSelection aSelection
) {
88 if (aSelection
== null || aSelection
.isEmpty()) {
94 if ((aSelection
.getFirstElement() instanceof TmfTraceElement
)) {
95 TmfTraceElement traceElement
= ((TmfTraceElement
)aSelection
.getFirstElement());
97 // If trace is under an experiment, use the original trace from the traces folder
98 traceElement
= traceElement
.getElementUnderTraceFolder();
99 file
= traceElement
.getBookmarksFile();
100 } else if ((aSelection
.getFirstElement() instanceof TmfExperimentElement
)) {
101 TmfExperimentElement experimentElement
= (TmfExperimentElement
) aSelection
.getFirstElement();
102 file
= experimentElement
.getBookmarksFile();
106 IEditorInput tmpInput
= new FileEditorInput(file
);
107 IEditorPart localEditor
= aPage
.findEditor(tmpInput
);
108 if (localEditor
!= null) {
110 aPage
.bringToTop(localEditor
);
112 // Search in references for corresponding editor
113 IEditorReference
[] refs
= aPage
.getEditorReferences();
114 for (IEditorReference editorReference
: refs
) {
116 if (editorReference
.getEditorInput().equals(tmpInput
)) {
117 localEditor
= editorReference
.getEditor(true);
118 if (localEditor
!= null) {
119 aPage
.bringToTop(localEditor
);
122 } catch (PartInitException e
) {