/* * Carrot2 project. * * Copyright (C) 2002-2016, Dawid Weiss, Stanisław Osiński. * All rights reserved. * * Refer to the full license file "carrot2.LICENSE" * in the root folder of the repository checkout or at: * http://www.carrot2.org/carrot2.LICENSE */ package org.carrot2.workbench.core.ui; import org.carrot2.workbench.core.ui.SearchEditorSelectionProvider.ClusterSelection; import org.eclipse.jface.viewers.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Adapt and propagate selection on the {@link ClusterTree} to a selection on the * {@link SearchEditorSelectionProvider}. */ public final class ClusterTreeSelectionAdapter { private final Logger logger = LoggerFactory.getLogger(ClusterTreeSelectionAdapter.class); private final SearchEditorSelectionProvider target; private final IPostSelectionProvider provider; private final ISelectionChangedListener targetToEditorListener = new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { logger.debug("tree->editor: " + event.getSelection()); target.setSelection(event.getSelection(), editorToTargetListener); } }; private final ISelectionChangedListener editorToTargetListener = new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { logger.debug("editor->tree: " + event.getSelection()); if (event.getSelection() instanceof ClusterSelection) { unlinkTargetFromEditor(); provider.setSelection( ((ClusterSelection) event.getSelection()).treeSelection); linkTargetToEditor(); } } }; /** * */ public ClusterTreeSelectionAdapter(SearchEditorSelectionProvider target, IPostSelectionProvider provider) { this.target = target; this.provider = provider; linkEditorToTarget(); linkTargetToEditor(); } /** */ private void linkTargetToEditor() { provider.addPostSelectionChangedListener(targetToEditorListener); } /** */ private void unlinkTargetFromEditor() { provider.removePostSelectionChangedListener(targetToEditorListener); } /** */ private void linkEditorToTarget() { target.addSelectionChangedListener(editorToTargetListener); } }