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
.linuxtools
.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
.linuxtools
.tmf
.core
.TmfCommonConstants
;
19 import org
.eclipse
.linuxtools
.tmf
.core
.trace
.TmfExperiment
;
20 import org
.eclipse
.linuxtools
.tmf
.core
.trace
.TmfTrace
;
21 import org
.eclipse
.linuxtools
.tmf
.ui
.project
.model
.ITmfProjectModelElement
;
22 import org
.eclipse
.linuxtools
.tmf
.ui
.project
.model
.TmfExperimentElement
;
23 import org
.eclipse
.linuxtools
.tmf
.ui
.project
.model
.TmfProjectElement
;
24 import org
.eclipse
.linuxtools
.tmf
.ui
.project
.model
.TmfProjectRegistry
;
25 import org
.eclipse
.linuxtools
.tmf
.ui
.project
.model
.TmfTraceElement
;
26 import org
.eclipse
.ui
.IEditorInput
;
27 import org
.eclipse
.ui
.IEditorPart
;
28 import org
.eclipse
.ui
.IEditorReference
;
29 import org
.eclipse
.ui
.IWorkbenchPage
;
30 import org
.eclipse
.ui
.PartInitException
;
31 import org
.eclipse
.ui
.ide
.ResourceUtil
;
32 import org
.eclipse
.ui
.navigator
.ILinkHelper
;
33 import org
.eclipse
.ui
.part
.FileEditorInput
;
36 * Implementation of ILinkHelper interface for linking with editor extension for traces and
39 * @author Bernd Hufmann
41 public class TmfEditorLinkHelper
implements ILinkHelper
{
44 public IStructuredSelection
findSelection(IEditorInput anInput
) {
45 IFile file
= ResourceUtil
.getFile(anInput
);
49 // Get the trace type ID
50 String traceTypeId
= file
.getPersistentProperty(TmfCommonConstants
.TRACETYPE
);
51 if (traceTypeId
== null) {
52 return StructuredSelection
.EMPTY
;
55 final TmfProjectElement project
= TmfProjectRegistry
.getProject(file
.getProject(), true);
57 // Check for experiments, traces which are folders or traces which are files
58 if (traceTypeId
.equals(TmfExperiment
.class.getCanonicalName())) {
60 for (final ITmfProjectModelElement projectElement
: project
.getExperimentsFolder().getChildren()) {
61 if (projectElement
.getName().equals(file
.getParent().getName())) {
62 return new StructuredSelection(projectElement
);
65 } else if (traceTypeId
.equals(TmfTrace
.class.getCanonicalName())) {
66 // Case 2: Trace that is a folder
67 for (final ITmfProjectModelElement projectElement
: project
.getTracesFolder().getChildren()) {
68 if (projectElement
.getName().equals(file
.getParent().getName())) {
69 return new StructuredSelection(projectElement
);
73 // Case 3: Trace that is a file
74 for (final ITmfProjectModelElement projectElement
: project
.getTracesFolder().getChildren()) {
75 if (projectElement
.getResource().equals(file
)) {
76 return new StructuredSelection(projectElement
);
80 } catch (CoreException e
) {
81 return StructuredSelection
.EMPTY
;
84 return StructuredSelection
.EMPTY
;
88 public void activateEditor(IWorkbenchPage aPage
, IStructuredSelection aSelection
) {
89 if (aSelection
== null || aSelection
.isEmpty()) {
95 if ((aSelection
.getFirstElement() instanceof TmfTraceElement
)) {
96 TmfTraceElement traceElement
= ((TmfTraceElement
)aSelection
.getFirstElement());
98 // If trace is under an experiment, use the original trace from the traces folder
99 traceElement
= traceElement
.getElementUnderTraceFolder();
100 file
= traceElement
.getBookmarksFile();
101 } else if ((aSelection
.getFirstElement() instanceof TmfExperimentElement
)) {
102 TmfExperimentElement experimentElement
= (TmfExperimentElement
) aSelection
.getFirstElement();
103 file
= experimentElement
.getBookmarksFile();
107 IEditorInput tmpInput
= new FileEditorInput(file
);
108 IEditorPart localEditor
= aPage
.findEditor(tmpInput
);
109 if (localEditor
!= null) {
111 aPage
.bringToTop(localEditor
);
113 // Search in references for corresponding editor
114 IEditorReference
[] refs
= aPage
.getEditorReferences();
115 for (IEditorReference editorReference
: refs
) {
117 if (editorReference
.getEditorInput().equals(tmpInput
)) {
118 localEditor
= editorReference
.getEditor(true);
119 if (localEditor
!= null) {
120 aPage
.bringToTop(localEditor
);
123 } catch (PartInitException e
) {