/**
* Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy
+* European Distributed Institute of Taxonomy
* http://www.e-taxonomy.eu
-*
+*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* See LICENSE.TXT at the top of this package for the full license terms.
*/
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
-import eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator;
-import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;
+import eu.etaxonomy.cdm.api.service.config.IFindTaxaAndNamesConfigurator;
+import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
+import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.cdm.persistence.query.MatchMode;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
import eu.etaxonomy.taxeditor.model.ContextListenerAdapter;
import eu.etaxonomy.taxeditor.model.IContextListener;
import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
* @version 1.0
*/
public class SearchResultView extends ViewPart implements IConversationEnabled{
-
+
+ private static Object[] EMPTY = new Object[0];
+
private class ContextListener extends ContextListenerAdapter{
/* (non-Javadoc)
* @see eu.etaxonomy.taxeditor.model.IContextListener#contextStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
@Override
public void contextStop(IMemento memento, IProgressMonitor monitor) {
monitor.subTask("Getting rid of search results");
- NavigationUtil.hideView(SearchResultView.this);
+ AbstractUtility.hideView(SearchResultView.this);
}
}
-
+
/** Constant <code>ID="eu.etaxonomy.taxeditor.navigation.searc"{trunked}</code> */
- public static final String ID =
+ public static final String ID =
"eu.etaxonomy.taxeditor.navigation.search.searchResultView"; //$NON-NLS-1$
private TableViewer resultViewer;
private Text status;
private SearchJob searchJob;
-
+
private IContextListener contextListener;
-
+
/* (non-Javadoc)
* @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
*/
/** {@inheritDoc} */
@Override
public void createPartControl(Composite parent) {
-
+
conversation = CdmStore.createConversation();
contextListener = new ContextListener();
CdmStore.getContextManager().addContextListener(contextListener);
-
+
GridLayout layout = new GridLayout();
layout.marginWidth = 0;
layout.marginHeight = 0;
-
+
parent.setLayout(layout);
-
+
Composite infoComposite = createInfoComposite(parent);
infoComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-
+
resultViewer = new TableViewer(parent, SWT.NONE);
resultViewer.setContentProvider(new ArrayContentProvider());
resultViewer.setLabelProvider(new SearchResultLabelProvider());
resultViewer.addDoubleClickListener(new IDoubleClickListener() {
- public void doubleClick(DoubleClickEvent event) {
- NavigationUtil.executeEditHandler();
+ @Override
+ public void doubleClick(DoubleClickEvent event) {
+ ISelection selection = event.getSelection();
+ if(selection instanceof IStructuredSelection){
+ Object firstElement = ((IStructuredSelection) selection).getFirstElement();
+ if(firstElement instanceof UuidAndTitleCache){
+ NavigationUtil.openEditor((UuidAndTitleCache) firstElement);
+ }
+ }
}
});
-
+
resultViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-
+
getSite().setSelectionProvider(resultViewer);
-
+
// register context menu
MenuManager menuMgr = new MenuManager();
menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
Control control = resultViewer.getControl();
Menu menu = menuMgr.createContextMenu(control);
- control.setMenu(menu);
+ control.setMenu(menu);
}
-
+
private Composite createInfoComposite(Composite parent){
Composite composite = new Composite(parent, SWT.NULL);
-
+
composite.setLayout(new GridLayout(2, false));
-
+
Label searchStringLabel = new Label(composite, SWT.NULL);
searchStringLabel.setText("Search String:");
-
+
searchString = new Text(composite, SWT.NULL);
searchString.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
searchString.setEditable(false);
// searchString.setText(" ");
-
+
Label configurationDescriptionLabel = new Label(composite, SWT.NULL);
configurationDescriptionLabel.setText("Search for:");
-
+
configurationLabel = new Text(composite, SWT.WRAP);
configurationLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
configurationLabel.setEditable(false);
-
+
Label statusLabel = new Label(composite, SWT.NULL);
statusLabel.setText("Status:");
-
+
status = new Text(composite, SWT.NULL);
status.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
status.setEditable(false);
-
+
return composite;
}
-
+
/**
* <p>performSearch</p>
*
* @param configurator a {@link eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator} object.
*/
- public void performSearch(ITaxonServiceConfigurator configurator){
+ public void performSearch(IFindTaxaAndNamesConfigurator configurator){
setPartName("Search: '" + configurator.getTitleSearchString() + "'");
-
+
searchString.setText(configurator.getTitleSearchString());
-
+
List<String> includedEntities = new ArrayList<String>();
- if(configurator.isDoTaxa())
- includedEntities.add(SearchOption.TAXON.getLabel());
- if(configurator.isDoSynonyms())
- includedEntities.add(SearchOption.SYNONYM.getLabel());
- if(configurator.isDoNamesWithoutTaxa())
- includedEntities.add(SearchOption.NAME.getLabel());
+ if(configurator.isDoTaxa()) {
+ includedEntities.add(SearchOption.TAXON.getLabel());
+ }
+ if(configurator.isDoSynonyms()) {
+ includedEntities.add(SearchOption.SYNONYM.getLabel());
+ }
+ if(configurator.isDoNamesWithoutTaxa()) {
+ includedEntities.add(SearchOption.NAME.getLabel());
+ }
if(configurator.isDoTaxaByCommonNames()){
includedEntities.add(SearchOption.COMMON_NAME.getLabel());
}
-
+ configurator.setMatchMode(MatchMode.LIKE);
+
String includedEntitiesString = "";
for (int i = 0; i < includedEntities.size(); i++){
includedEntitiesString += includedEntities.get(i);
includedEntitiesString += ", ";
}
}
-
+
configurationLabel.setText(includedEntitiesString);
-
+
status.setText("Searching...");
-
+
searchJob = new SearchJob(Display.getCurrent(), configurator);
searchJob.schedule();
-
+
}
-
+
/**
* <p>displaySearchResult</p>
*
* @param result a {@link java.util.List} object.
*/
- protected void displaySearchResult(List<UuidAndTitleCache<TaxonBase>> result) {
+ protected void displaySearchResult(List<UuidAndTitleCache<IdentifiableEntity>> result) {
if(result.size() > 0){
- resultViewer.setInput(result);
+ resultViewer.setInput(result);
status.setText(result.size() + " entities found");
}else{
+ resultViewer.setInput(EMPTY);
status.setText("Search returned no results");
}
}
*
* @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
*/
- public ConversationHolder getConversationHolder() {
+ @Override
+ public ConversationHolder getConversationHolder() {
return this.conversation;
}
* @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
*/
/** {@inheritDoc} */
- public void update(CdmDataChangeMap changeEvents) {
+ @Override
+ public void update(CdmDataChangeMap changeEvents) {
// TODO Auto-generated method stub
-
+
}
-
+
/* (non-Javadoc)
* @see org.eclipse.ui.part.WorkbenchPart#dispose()
*/
public void dispose() {
super.dispose();
conversation.close();
- if(searchJob != null)
- searchJob.cancel();
+ if(searchJob != null) {
+ searchJob.cancel();
+ }
CdmStore.getContextManager().removeContextListener(contextListener);
}
-
+
/**
- *
+ *
* @author n.hoffmann
* @created Feb 2, 2010
* @version 1.0
*/
class SearchJob extends Job{
- private ITaxonServiceConfigurator configurator;
-
- private Display display;
-
+ private final IFindTaxaAndNamesConfigurator configurator;
+
+ private final Display display;
+
/**
* @param name
*/
- public SearchJob(Display display, ITaxonServiceConfigurator configurator) {
+ public SearchJob(Display display, IFindTaxaAndNamesConfigurator configurator) {
super("Performing Search");
this.display = display;
this.configurator = configurator;
protected IStatus run(IProgressMonitor monitor) {
monitor.beginTask("", 100);
monitor.worked(20);
-
- final List<UuidAndTitleCache<TaxonBase>> searchResult = CdmStore.getSearchManager().findTaxaAndNames(configurator);
+
+ final List<UuidAndTitleCache<IdentifiableEntity>> searchResult = CdmStore.getSearchManager().findTaxaAndNames(configurator);
monitor.worked(40);
-
+
if(! monitor.isCanceled()){
display.asyncExec(new Runnable() {
- public void run() {
+ @Override
+ public void run() {
displaySearchResult(searchResult);
}
});
}else{
display.asyncExec(new Runnable() {
- public void run() {
+ @Override
+ public void run() {
status.setText("Cancelled");
}
});
monitor.done();
return Status.OK_STATUS;
}
-
- }
+
+ }
}