tmf/lttng: Update 2014 copyrights
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / internal / tmf / ui / project / model / TmfEditorLinkHelper.java
1 /*******************************************************************************
2 * Copyright (c) 2012, 2014 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.linuxtools.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.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;
34
35 /**
36 * Implementation of ILinkHelper interface for linking with editor extension for traces and
37 * experiments.
38 *
39 * @author Bernd Hufmann
40 */
41 public class TmfEditorLinkHelper implements ILinkHelper {
42
43 @Override
44 public IStructuredSelection findSelection(IEditorInput anInput) {
45 IFile file = ResourceUtil.getFile(anInput);
46 if (file != null) {
47
48 try {
49 // Get the trace type ID
50 String traceTypeId = file.getPersistentProperty(TmfCommonConstants.TRACETYPE);
51 if (traceTypeId == null) {
52 return StructuredSelection.EMPTY;
53 }
54
55 final TmfProjectElement project = TmfProjectRegistry.getProject(file.getProject(), true);
56
57 // Check for experiments, traces which are folders or traces which are files
58 if (traceTypeId.equals(TmfExperiment.class.getCanonicalName())) {
59 // Case 1: Experiment
60 for (final ITmfProjectModelElement projectElement : project.getExperimentsFolder().getChildren()) {
61 if (projectElement.getName().equals(file.getParent().getName())) {
62 return new StructuredSelection(projectElement);
63 }
64 }
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);
70 }
71 }
72 } else {
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);
77 }
78 }
79 }
80 } catch (CoreException e) {
81 return StructuredSelection.EMPTY;
82 }
83 }
84 return StructuredSelection.EMPTY;
85 }
86
87 @Override
88 public void activateEditor(IWorkbenchPage aPage, IStructuredSelection aSelection) {
89 if (aSelection == null || aSelection.isEmpty()) {
90 return;
91 }
92
93 IFile file = null;
94
95 if ((aSelection.getFirstElement() instanceof TmfTraceElement)) {
96 TmfTraceElement traceElement = ((TmfTraceElement)aSelection.getFirstElement());
97
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();
104 }
105
106 if (file != null) {
107 IEditorInput tmpInput = new FileEditorInput(file);
108 IEditorPart localEditor = aPage.findEditor(tmpInput);
109 if (localEditor != null) {
110 // Editor found.
111 aPage.bringToTop(localEditor);
112 } else {
113 // Search in references for corresponding editor
114 IEditorReference[] refs = aPage.getEditorReferences();
115 for (IEditorReference editorReference : refs) {
116 try {
117 if (editorReference.getEditorInput().equals(tmpInput)) {
118 localEditor = editorReference.getEditor(true);
119 if (localEditor != null) {
120 aPage.bringToTop(localEditor);
121 }
122 }
123 } catch (PartInitException e) {
124 // Ignore
125 }
126 }
127 }
128 }
129 }
130 }
131
This page took 0.034476 seconds and 5 git commands to generate.