Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/model/TmfEditorLinkHelper.java')
-rw-r--r--tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/model/TmfEditorLinkHelper.java129
1 files changed, 129 insertions, 0 deletions
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/model/TmfEditorLinkHelper.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/model/TmfEditorLinkHelper.java
new file mode 100644
index 0000000000..d9af95a61b
--- /dev/null
+++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/model/TmfEditorLinkHelper.java
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * Copyright (c) 2012, 2015 Ericsson
+ *
+ * All rights reserved. This program and the accompanying materials are
+ * made available under the terms of the Eclipse Public License v1.0 which
+ * accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Bernd Hufmann - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tracecompass.internal.tmf.ui.project.model;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.tracecompass.internal.tmf.ui.editors.ITmfEventsEditorConstants;
+import org.eclipse.tracecompass.tmf.core.TmfCommonConstants;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.ide.ResourceUtil;
+import org.eclipse.ui.navigator.ILinkHelper;
+import org.eclipse.ui.part.FileEditorInput;
+
+/**
+ * Implementation of ILinkHelper interface for linking with editor extension for traces and
+ * experiments.
+ *
+ * @author Bernd Hufmann
+ */
+public class TmfEditorLinkHelper implements ILinkHelper {
+
+ @Override
+ public IStructuredSelection findSelection(IEditorInput anInput) {
+ IFile file = ResourceUtil.getFile(anInput);
+ if (file != null) {
+
+ try {
+ // Get the trace type ID
+ String traceTypeId = file.getPersistentProperty(TmfCommonConstants.TRACETYPE);
+ if (traceTypeId == null) {
+ return StructuredSelection.EMPTY;
+ }
+
+ final TmfProjectElement project = TmfProjectRegistry.getProject(file.getProject(), true);
+
+ // Check for experiments, traces which are folders or traces which are files
+ if (ITmfEventsEditorConstants.EXPERIMENT_INPUT_TYPE_CONSTANTS.contains(traceTypeId)) {
+ // Case 1: Experiment
+ for (final TmfExperimentElement experimentElement : project.getExperimentsFolder().getExperiments()) {
+ if (experimentElement.getResource().equals(file.getParent())) {
+ return new StructuredSelection(experimentElement);
+ }
+ }
+ } else if (ITmfEventsEditorConstants.TRACE_INPUT_TYPE_CONSTANTS.contains(traceTypeId)) {
+ // Case 2: Trace that is a folder
+ for (final TmfTraceElement traceElement : project.getTracesFolder().getTraces()) {
+ if (traceElement.getResource().equals(file.getParent())) {
+ return new StructuredSelection(traceElement);
+ }
+ }
+ } else {
+ // Case 3: Trace that is a file
+ for (final TmfTraceElement traceElement : project.getTracesFolder().getTraces()) {
+ if (traceElement.getResource().equals(file)) {
+ return new StructuredSelection(traceElement);
+ }
+ }
+ }
+ } catch (CoreException e) {
+ return StructuredSelection.EMPTY;
+ }
+ }
+ return StructuredSelection.EMPTY;
+ }
+
+ @Override
+ public void activateEditor(IWorkbenchPage aPage, IStructuredSelection aSelection) {
+ if (aSelection == null || aSelection.isEmpty()) {
+ return;
+ }
+
+ IFile file = null;
+
+ if ((aSelection.getFirstElement() instanceof TmfTraceElement)) {
+ TmfTraceElement traceElement = ((TmfTraceElement)aSelection.getFirstElement());
+
+ // If trace is under an experiment, use the original trace from the traces folder
+ traceElement = traceElement.getElementUnderTraceFolder();
+ file = traceElement.getBookmarksFile();
+ } else if ((aSelection.getFirstElement() instanceof TmfExperimentElement)) {
+ TmfExperimentElement experimentElement = (TmfExperimentElement) aSelection.getFirstElement();
+ file = experimentElement.getBookmarksFile();
+ }
+
+ if (file != null) {
+ IEditorInput tmpInput = new FileEditorInput(file);
+ IEditorPart localEditor = aPage.findEditor(tmpInput);
+ if (localEditor != null) {
+ // Editor found.
+ aPage.bringToTop(localEditor);
+ } else {
+ // Search in references for corresponding editor
+ IEditorReference[] refs = aPage.getEditorReferences();
+ for (IEditorReference editorReference : refs) {
+ try {
+ if (editorReference.getEditorInput().equals(tmpInput)) {
+ localEditor = editorReference.getEditor(true);
+ if (localEditor != null) {
+ aPage.bringToTop(localEditor);
+ }
+ }
+ } catch (PartInitException e) {
+ // Ignore
+ }
+ }
+ }
+ }
+ }
+}
+

Back to the top