* @created 15.04.2009
* @version 1.0
*/
-public class SearchBar extends WorkbenchWindowControlContribution {
+public class SearchBar extends WorkbenchWindowControlContribution{
private static final Logger logger = Logger.getLogger(SearchBar.class);
private Text text_search;
private String srv;
DropdownSelectionListener dropdownListener = new DropdownSelectionListener(
toolItem);
- dropdownListener.add(SearchOption.TAXON);
- dropdownListener.add(SearchOption.SYNONYM);
- dropdownListener.add(SearchOption.NAME);
- dropdownListener.add(SearchOption.COMMON_NAME);
- dropdownListener.add(SearchOption.ORPHANED_TAXON);
+ for(SearchOption searchOption : SearchOption.values()){
+ dropdownListener.add(searchOption);
+ }
toolItem.addSelectionListener(dropdownListener);
}
@Override
public void keyReleased(KeyEvent e) {
if (e.keyCode == SWT.CR) {
- openSearchResultsView();
+ search();
}
}
});
composite.setLayout(layout);
}
- /*
- * Shows the results of the search.
- */
- private void openSearchResultsView() {
- if (!text_search.getText().trim().equals(defaultText) && text_search.getText().trim().length() > 0) {
-
+ private void search(){
+ final String searchString = getSearchString();
+ if(searchString != null){
ITaxonServiceConfigurator configurator = configurationListener.getConfigurator();
- configurator.setSearchString(text_search.getText().trim());
-
- srv += "1";
- logger.info("Opening search results window " + srv);
- try {
- IViewPart resultsView = TaxeditorNavigationPlugin.getDefault()
- .getWorkbench().getActiveWorkbenchWindow()
- .getActivePage().showView(SearchResultView.ID, srv,
- IWorkbenchPage.VIEW_ACTIVATE);
- ((SearchResultView) resultsView).performSearch(configurator);
- } catch (PartInitException e) {
- logger.error("Error opening search result.", e);
- }
+ configurator.setSearchString(searchString);
+ openSearchResultsView(configurator);
+ }
+
+ }
+
+ private String getSearchString(){
+ String searchString = text_search.getText().trim();
+ if (searchString.equals(defaultText) || searchString.length() == 0)
+ return null;
+ return searchString;
+ }
+
+ /**
+ * Opens a new instance of the search result view to display the result to the user.
+ *
+ * @param searchResult
+ */
+ private void openSearchResultsView(ITaxonServiceConfigurator configurator) {
+ // This variable is needed to address new instances of the view.
+ srv += "1";
+ logger.info("Opening search results window " + srv);
+ try {
+ IViewPart resultsView = TaxeditorNavigationPlugin.getDefault()
+ .getWorkbench().getActiveWorkbenchWindow()
+ .getActivePage().showView(SearchResultView.ID, srv,
+ IWorkbenchPage.VIEW_ACTIVATE);
+ ((SearchResultView) resultsView).performSearch(configurator);
+ } catch (PartInitException e) {
+ logger.error("Error opening search result.", e);
+ throw new RuntimeException(e);
}
}
- /*
+ /**
* Handles drop down menu selection. Available items are defined in the enumeration SearchOption.
+ *
+ * @author n.hoffmann
+ * @created Feb 2, 2010
+ * @version 1.0
*/
class DropdownSelectionListener extends SelectionAdapter {
menu.setLocation(pt.x, pt.y + rect.height);
menu.setVisible(true);
} else {
- openSearchResultsView();
+ search();
}
}
}
- /*
- * Handles search configuration selection. Available items are hardcoded.
+ /**
+ * Handles search configuration selection.
+ *
+ * @author n.hoffmann
+ * @created Feb 2, 2010
+ * @version 1.0
*/
class ConfigurationSelectionListener extends SelectionAdapter {
- private ITaxonServiceConfigurator configurator;
-
+ private ITaxonServiceConfigurator configurator = PreferencesUtil.getSearchConfigurator();
+
/*
* (non-Javadoc)
*
logger.warn("configuration menu clicked");
SearchOption option = (SearchOption) e.widget.getData();
- if (option == SearchOption.TAXON) {
- getConfigurator().setDoTaxa(getConfigurator().isDoTaxa() ? false : true);
- } else if (option == SearchOption.SYNONYM) {
- getConfigurator().setDoSynonyms(getConfigurator().isDoSynonyms() ? false : true);
- } else if (option == SearchOption.NAME) {
- getConfigurator().setDoNamesWithoutTaxa(getConfigurator().isDoNamesWithoutTaxa() ? false : true);
- } else if (option == SearchOption.COMMON_NAME) {
- getConfigurator().setDoTaxaByCommonNames(getConfigurator().isDoTaxaByCommonNames() ? false : true);
- } else if (option == SearchOption.ORPHANED_TAXON) {
- getConfigurator().setDoTaxaByOrphanedTaxa(getConfigurator().isDoTaxaByOrphanedTaxa() ? false : true);
+ switch (option){
+ case TAXON:
+ configurator.setDoTaxa(configurator.isDoTaxa() ? false : true);
+ break;
+ case SYNONYM:
+ configurator.setDoSynonyms(configurator.isDoSynonyms() ? false : true);
+ break;
+ case NAME:
+ configurator.setDoNamesWithoutTaxa(configurator.isDoNamesWithoutTaxa() ? false : true);
+ break;
+ case COMMON_NAME:
+ configurator.setDoTaxaByCommonNames(getConfigurator().isDoTaxaByCommonNames() ? false : true);
+ break;
}
+
saveConfigurator();
}
public ITaxonServiceConfigurator getConfigurator() {
- if (configurator == null) {
- configurator = PreferencesUtil.getSearchConfigurator();
- }
return configurator;
}
}
}
- /*
- * Enumerations
+ /**
+ * Available search options.
+ *
+ * @author n.hoffmann
+ * @created Feb 2, 2010
+ * @version 1.0
*/
enum SearchOption {
TAXON("Taxa"), SYNONYM("Synonyms"), NAME("Names (without taxa)"),
- COMMON_NAME("Common Names"), ORPHANED_TAXON("Orphaned Taxa");
+ COMMON_NAME("Common Names");
private String label;
case COMMON_NAME:
return PreferencesUtil.getPreferenceStore().getBoolean(
PreferencesUtil.TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES);
- case ORPHANED_TAXON:
- return PreferencesUtil.getPreferenceStore().getBoolean(
- PreferencesUtil.TAXON_SERVICE_CONFIGURATOR_ORPHANED_TAXA);
}
return true;
\r
package eu.etaxonomy.taxeditor.navigation.search;\r
\r
+import java.util.ArrayList;\r
import java.util.List;\r
\r
import org.apache.log4j.Logger;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Status;\r
+import org.eclipse.core.runtime.jobs.Job;\r
import org.eclipse.jface.action.GroupMarker;\r
import org.eclipse.jface.action.MenuManager;\r
import org.eclipse.jface.viewers.ArrayContentProvider;\r
import org.eclipse.jface.viewers.StructuredSelection;\r
import org.eclipse.jface.viewers.TableViewer;\r
import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
import org.eclipse.swt.widgets.Composite;\r
import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.Label;\r
import org.eclipse.swt.widgets.Menu;\r
+import org.eclipse.swt.widgets.Text;\r
import org.eclipse.ui.IWorkbenchActionConstants;\r
import org.eclipse.ui.part.ViewPart;\r
\r
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;\r
import eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator;\r
+import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;\r
import eu.etaxonomy.taxeditor.navigation.NavigationUtil;\r
+import eu.etaxonomy.taxeditor.navigation.search.SearchBar.SearchOption;\r
import eu.etaxonomy.taxeditor.store.CdmStore;\r
\r
/**\r
private ConversationHolder conversation;\r
\r
private ITaxonServiceConfigurator configurator;\r
+\r
+ private Text searchString;\r
+\r
+ private Text configurationLabel;\r
+\r
+ private Text status;\r
+\r
+ private SearchJob searchJob;\r
\r
\r
/* (non-Javadoc)\r
public void createPartControl(Composite parent) {\r
conversation = CdmStore.NewTransactionalConversation();\r
\r
- resultViewer = new TableViewer(parent, SWT.BORDER);\r
+ GridLayout layout = new GridLayout();\r
+ layout.marginWidth = 0;\r
+ layout.marginHeight = 0;\r
+ \r
+ parent.setLayout(layout);\r
+ \r
+ Composite infoComposite = createInfoComposite(parent);\r
+ infoComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));\r
+// infoComposite.setBackground(Resources.getColor(Resources.PROP_SHEET_RED));\r
+ \r
+ resultViewer = new TableViewer(parent, SWT.NONE);\r
resultViewer.setContentProvider(new ArrayContentProvider());\r
resultViewer.setLabelProvider(new SearchResultLabelProvider());\r
resultViewer.addDoubleClickListener(new IDoubleClickListener() {\r
}\r
});\r
\r
+ resultViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
+ \r
// register context menu\r
MenuManager menuMgr = new MenuManager();\r
menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));\r
control.setMenu(menu); \r
}\r
\r
- protected void performSearch(ITaxonServiceConfigurator configurator) {\r
- List searchResult = CdmStore.findTaxaAndNames(configurator);\r
+ private Composite createInfoComposite(Composite parent){\r
+ Composite composite = new Composite(parent, SWT.NULL);\r
\r
- resultViewer.setInput(searchResult); \r
- setPartName("Search: '" + configurator.getSearchString() + "'");\r
-\r
+ composite.setLayout(new GridLayout(2, false));\r
+ \r
+ Label searchStringLabel = new Label(composite, SWT.NULL);\r
+ searchStringLabel.setText("Search String:");\r
+ \r
+ searchString = new Text(composite, SWT.NULL);\r
+ searchString.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
+ searchString.setEditable(false);\r
+// searchString.setText(" ");\r
+ \r
+ Label configurationDescriptionLabel = new Label(composite, SWT.NULL);\r
+ configurationDescriptionLabel.setText("Search for:");\r
+ \r
+ configurationLabel = new Text(composite, SWT.WRAP);\r
+ configurationLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
+ configurationLabel.setEditable(false);\r
+ \r
+ Label statusLabel = new Label(composite, SWT.NULL);\r
+ statusLabel.setText("Status:");\r
+ \r
+ status = new Text(composite, SWT.NULL);\r
+ status.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
+ status.setEditable(false);\r
+ \r
+ return composite;\r
+ }\r
+ \r
+ public void performSearch(ITaxonServiceConfigurator configurator){\r
this.configurator = configurator;\r
+ setPartName("Search: '" + configurator.getSearchString() + "'");\r
+ \r
+ searchString.setText(configurator.getSearchString());\r
+ \r
+ List<String> includedEntities = new ArrayList<String>();\r
+ if(configurator.isDoTaxa())\r
+ includedEntities.add(SearchOption.TAXON.getLabel());\r
+ if(configurator.isDoSynonyms())\r
+ includedEntities.add(SearchOption.SYNONYM.getLabel());\r
+ if(configurator.isDoNamesWithoutTaxa())\r
+ includedEntities.add(SearchOption.NAME.getLabel());\r
+ if(configurator.isDoTaxaByCommonNames()){\r
+ includedEntities.add(SearchOption.COMMON_NAME.getLabel());\r
+ }\r
+ \r
+ String includedEntitiesString = "";\r
+ for (int i = 0; i < includedEntities.size(); i++){\r
+ includedEntitiesString += includedEntities.get(i);\r
+ if(i < includedEntities.size() -1){\r
+ includedEntitiesString += ", ";\r
+ }\r
+ }\r
+ \r
+ configurationLabel.setText(includedEntitiesString);\r
+ \r
+ status.setText("Searching...");\r
+ \r
+ searchJob = new SearchJob(Display.getCurrent(), configurator);\r
+ searchJob.schedule();\r
+ }\r
+ \r
+ protected void displaySearchResult(List<IdentifiableEntity> result) {\r
+ if(result.size() > 0){\r
+ resultViewer.setInput(result); \r
+ status.setText(result.size() + " entities found");\r
+ }else{\r
+ status.setText("Search returned no results");\r
+ }\r
}\r
\r
/* (non-Javadoc)\r
public void dispose() {\r
super.dispose();\r
conversation.close();\r
+ if(searchJob != null)\r
+ searchJob.cancel();\r
+ }\r
+ \r
+ /**\r
+ * \r
+ * @author n.hoffmann\r
+ * @created Feb 2, 2010\r
+ * @version 1.0\r
+ */\r
+ class SearchJob extends Job{\r
+\r
+ private ITaxonServiceConfigurator configurator;\r
+ \r
+ private Display display;\r
+ \r
+ /**\r
+ * @param name\r
+ */\r
+ public SearchJob(Display display, ITaxonServiceConfigurator configurator) {\r
+ super("searchJob");\r
+ this.display = display;\r
+ this.configurator = configurator;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)\r
+ */\r
+ @Override\r
+ protected IStatus run(IProgressMonitor monitor) {\r
+// monitor.beginTask("Performing Search", 100);\r
+// monitor.worked(20);\r
+ \r
+ final List<IdentifiableEntity> searchResult = CdmStore.findTaxaAndNames(configurator);\r
+// monitor.worked(40);\r
+ display.asyncExec(new Runnable() {\r
+ \r
+ public void run() {\r
+ displaySearchResult(searchResult);\r
+ }\r
+ });\r
+// monitor.done();\r
+ return Status.OK_STATUS;\r
+ }\r
+ \r
}\r
\r
}\r
package eu.etaxonomy.taxeditor.preference;\r
\r
import java.util.ArrayList;\r
+import java.util.Arrays;\r
import java.util.List;\r
import java.util.Set;\r
\r
public static final String TAXON_SERVICE_CONFIGURATOR_SYNONYMS = "taxonServiceConfigurator.doSynonyms";\r
public static final String TAXON_SERVICE_CONFIGURATOR_NAMES = "taxonServiceConfigurator.doNamesWithoutTaxa";\r
public static final String TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES = "taxonServiceConfigurator.doTaxaByCommonNames";\r
- public static final String TAXON_SERVICE_CONFIGURATOR_ORPHANED_TAXA = "taxonServiceConfigurator.doTaxaByOrphanedTaxa";\r
\r
public static final String SHOW_DATASOURCE_CHOOSER = "dataSourceChooser.show";\r
\r
. concat(".")\r
. concat(definedTerm.getUuid().toString());\r
if (key.contains("javassist")) {\r
- logger.info("proxy");\r
+ logger.warn("Trying to persist a preference based on a proxy class.");\r
}\r
return key;\r
}\r
configurator.setDoTaxa(getPreferenceStore().getBoolean(TAXON_SERVICE_CONFIGURATOR_TAXA));\r
configurator.setDoSynonyms(getPreferenceStore().getBoolean(TAXON_SERVICE_CONFIGURATOR_SYNONYMS));\r
configurator.setDoNamesWithoutTaxa(getPreferenceStore().getBoolean(TAXON_SERVICE_CONFIGURATOR_NAMES));\r
- configurator.setDoTaxaByCommonNames(getPreferenceStore().getBoolean(TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES)); \r
- configurator.setDoTaxaByOrphanedTaxa(getPreferenceStore().getBoolean(TAXON_SERVICE_CONFIGURATOR_ORPHANED_TAXA));\r
+ configurator.setDoTaxaByCommonNames(getPreferenceStore().getBoolean(TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES));\r
\r
return configurator;\r
}\r
configurator.setDoSynonyms(true);\r
configurator.setDoNamesWithoutTaxa(true);\r
configurator.setDoTaxaByCommonNames(true);\r
- configurator.setDoTaxaByOrphanedTaxa(true);\r
+ \r
+ configurator.setTaxonPropertyPath(Arrays.asList("$", \r
+ "titleCache", "name", "name.$"));\r
\r
// DEFAULT VALUES \r
// match mode default only\r
getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_SYNONYMS, configurator.isDoSynonyms());\r
getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_NAMES, configurator.isDoNamesWithoutTaxa());\r
getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES, configurator.isDoTaxaByCommonNames());\r
- getPreferenceStore().setValue(TAXON_SERVICE_CONFIGURATOR_ORPHANED_TAXA, configurator.isDoTaxaByOrphanedTaxa());\r
}\r
\r
/**\r