/* * 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.core.Cluster; import org.carrot2.core.ProcessingResult; import org.carrot2.workbench.core.ui.SearchEditorSelectionProvider.ClusterSelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Adapt and propagate selection from {@link SearchEditorSelectionProvider} * to a {@link DocumentList}. */ final class DocumentListSelectionAdapter { private final Logger logger = LoggerFactory.getLogger(DocumentListSelectionAdapter.class); private final DocumentList target; private final SearchEditorSelectionProvider provider; private final SearchEditor editor; /* */ private final ISelectionChangedListener editorToTargetListener = new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { logger.debug("editor->doclist: " + event.getSelection()); if (event.getSelection() instanceof ClusterSelection) { final ClusterSelection sel = (ClusterSelection) event.getSelection(); if (sel.isEmpty()) { emptySelection(); } else { target.show((Cluster []) sel.toArray()); } } } }; /* */ public DocumentListSelectionAdapter(SearchEditorSelectionProvider provider, DocumentList target, SearchEditor editor) { this.target = target; this.provider = provider; this.editor = editor; linkEditorToTarget(); editorToTargetListener.selectionChanged( new SelectionChangedEvent(provider, provider.getSelection())); } /* * */ private void emptySelection() { final ProcessingResult processingResult = this.editor.getSearchResult().getProcessingResult(); if (processingResult == null) { target.clear(); } else { target.show(processingResult); } } /* */ public void linkEditorToTarget() { provider.addSelectionChangedListener(editorToTargetListener); } /* */ public void unlinkEditorFromTarget() { provider.removeSelectionChangedListener(editorToTargetListener); } }