From 87cd03a1cd438c4e4ca72af4b963f2a96dde0ba2 Mon Sep 17 00:00:00 2001
From: Patric Plitzner
Date: Tue, 14 Apr 2015 13:17:59 +0000
Subject: [PATCH] - added findOccurrences() and countOccurrences() to service
layer - added configurator for these methods - optimized retrieval with HQL
query - made use of service method in DerivateSearchView
---
.../TransientOccurenceService.java | 8 +++
.../taxeditor/store/SearchManager.java | 65 +++++++++----------
.../DerivateSearchCompositeController.java | 48 +++++---------
3 files changed, 54 insertions(+), 67 deletions(-)
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientOccurenceService.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientOccurenceService.java
index 4dbc7abe9..637b5f722 100644
--- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientOccurenceService.java
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientOccurenceService.java
@@ -1032,4 +1032,12 @@ public class TransientOccurenceService implements IOccurrenceService {
return defaultService.getMostSignificantIdentifier(derivedUnit);
}
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#countOccurrences(eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator)
+ */
+ @Override
+ public int countOccurrences(IIdentifiableEntityServiceConfigurator config) {
+ return defaultService.countOccurrences(config);
+ }
+
}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/SearchManager.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/SearchManager.java
index 5aab63bc8..1f24d4521 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/SearchManager.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/SearchManager.java
@@ -36,8 +36,8 @@ import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;
import eu.etaxonomy.cdm.model.name.NameRelationship;
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
-import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
import eu.etaxonomy.cdm.model.reference.Reference;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
@@ -102,8 +102,8 @@ public class SearchManager {
return CdmStore.getService(ITaxonService.class).findTaxaAndNamesForEditor(configurator);
}
-
-
+
+
/**
* findReferences
@@ -167,45 +167,38 @@ public class SearchManager {
* @param showFieldUnits if true
then also FieldUnits are searched
* @return
*/
- public List findOccurrences(IIdentifiableEntityServiceConfigurator configurator, boolean showFieldUnits){
- if(! showFieldUnits){
- configurator.setClazz(DerivedUnit.class);
+ public List findOccurrences(IIdentifiableEntityServiceConfigurator configurator, boolean showFieldUnits){
+ if(configurator.getClazz()==null){
+ if(showFieldUnits){
+ configurator.setClazz(SpecimenOrObservationBase.class);
+ }
+ else{
+ configurator.setClazz(DerivedUnit.class);
+ }
+ }
+ if(configurator.getClazz().equals(SpecimenOrObservationBase.class)){
+ //get FieldUnits + DerivedUnits
+ List records = new ArrayList();
+ configurator.setClazz(DerivedUnit.class);
+ int derivedUnitCount = CdmStore.getService(IOccurrenceService.class).countOccurrences(configurator);
+ configurator.setClazz(FieldUnit.class);
+ int fieldUnitCount = CdmStore.getService(IOccurrenceService.class).countOccurrences(configurator);
+
+ if(checkLargeResult(derivedUnitCount+fieldUnitCount)){
+ configurator.setClazz(DerivedUnit.class);
+ records.addAll(CdmStore.getService(IOccurrenceService.class).findByTitle(configurator).getRecords());
+ configurator.setClazz(FieldUnit.class);
+ records.addAll(CdmStore.getService(IOccurrenceService.class).findByTitle(configurator).getRecords());
+ }
+ return records;
+
}
- if(checkLargeResult(CdmStore.getService(IOccurrenceService.class).countByTitle(configurator))){
+ if(checkLargeResult(CdmStore.getService(IOccurrenceService.class).countOccurrences(configurator))){
return CdmStore.getService(IOccurrenceService.class).findByTitle(configurator).getRecords();
}
return NO_RESULTS;
}
- /**
- * Searches for {@link SpecimenOrObservationBase} with the parameters specified in the {@link IIdentifiableEntityServiceConfigurator}
- * which match the given {@link SpecimenOrObservationType}
- * @param configurator the configurator to use for the search
- * @param type the type/record basis the specimens must have
- * @return a list of the SpecimenOrObservationBases matching the search parameters found
-
- * @deprecated method needs to be optimized with a direct SQL query instead of iterating over all specimens
- */
- @Deprecated
- //TODO: method needs to be optimized with a direct SQL query instead of iterating over all specimens
- public List findOccurrencesByType(IIdentifiableEntityServiceConfigurator configurator, SpecimenOrObservationType type){
- List filteredOccurrences = new ArrayList();
- List occurrences = findOccurrences(configurator, true);
- if(type!=null){
- for(SpecimenOrObservationBase occurrence:occurrences){
- if(occurrence.getRecordBasis().equals(type)
- || occurrence.getRecordBasis().isKindOf(type)
- || type == SpecimenOrObservationType.Unknown){
- filteredOccurrences.add(occurrence);
- }
- }
- }
- else{
- filteredOccurrences = occurrences;
- }
- return filteredOccurrences;
- }
-
public List findUsers(IIdentifiableEntityServiceConfigurator configurator){
String userNameSearchString = sqlizeTitleSearchString(configurator);
// TODO why are users not identifiable entities?
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchCompositeController.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchCompositeController.java
index 25b99f022..c48985275 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchCompositeController.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchCompositeController.java
@@ -28,16 +28,15 @@ import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.handlers.IHandlerService;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
-import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeCacheStrategy;
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
-import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
-import eu.etaxonomy.cdm.api.service.config.IdentifiableServiceConfiguratorImpl;
+import eu.etaxonomy.cdm.api.service.config.FindOccurrencesConfigurator;
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.taxeditor.model.AbstractUtility;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.store.SearchManager;
import eu.etaxonomy.taxeditor.ui.dialog.selection.SelectionDialogFactory;
import eu.etaxonomy.taxeditor.ui.mvc.combo.EnumTermComboController;
@@ -50,8 +49,7 @@ import eu.etaxonomy.taxeditor.ui.mvc.combo.EnumTermComboController;
public class DerivateSearchCompositeController implements Listener{
private final DerivateSearchComposite derivateSearchComposite;
- private IIdentifiableEntityServiceConfigurator> configurator;
- private EnumTermComboController enumTermComboController;
+ private EnumTermComboController comboSpecimenTypeController;
private final DerivateSearchView derivateSearchView;
private DerivateLabelProvider labelProvider;
private Taxon selectedTaxon;
@@ -68,8 +66,8 @@ public class DerivateSearchCompositeController implements Listener{
private void init(){
//derivate type combo
- enumTermComboController = new EnumTermComboController(derivateSearchComposite.getComboDerivateType(), null, null, SpecimenOrObservationType.class, 0);
- enumTermComboController.setSelection(SpecimenOrObservationType.Unknown);
+ comboSpecimenTypeController = new EnumTermComboController(derivateSearchComposite.getComboDerivateType(), null, null, SpecimenOrObservationType.class, 0);
+ comboSpecimenTypeController.setSelection(SpecimenOrObservationType.Unknown);
//add listeners
derivateSearchComposite.getSearchField().addListener(SWT.KeyDown, this);
@@ -103,7 +101,6 @@ public class DerivateSearchCompositeController implements Listener{
}
});
- configurator = new IdentifiableServiceConfiguratorImpl>();
}
@@ -112,39 +109,28 @@ public class DerivateSearchCompositeController implements Listener{
derivateSearchView.setFocus(); //rebind the conversation
}
+ String queryString = derivateSearchComposite.getSearchField().getText();
+ SpecimenOrObservationType specimenType = comboSpecimenTypeController.getSelection();
- List> filteredByAssociatedTaxon = null;
- //filter by taxon
- if(selectedTaxon!=null){
- filteredByAssociatedTaxon = CdmStore.getService(IOccurrenceService.class).listByAssociatedTaxon(null, null, selectedTaxon, null, null, null, null, null);
- }
+ FindOccurrencesConfigurator config = new FindOccurrencesConfigurator();
+ config.setAssociatedTaxonUuid(selectedTaxon!=null?selectedTaxon.getUuid():null);
+ config.setSpecimenType(specimenType==SpecimenOrObservationType.Unknown?null:specimenType);//unknown := all types
+ config.setTitleSearchString(queryString);
- //filter by specimen type
- configurator.setTitleSearchString(derivateSearchComposite.getSearchField().getText());
- SpecimenOrObservationType type = enumTermComboController.getSelection();
- List filteredByType = new ArrayList();
- if(filteredByAssociatedTaxon!=null){
- for (SpecimenOrObservationBase specimenOrObservationBase : filteredByAssociatedTaxon) {
- if(type.equals(SpecimenOrObservationType.Unknown) || specimenOrObservationBase.getRecordBasis().equals(type)){
- filteredByType.add(specimenOrObservationBase);
- }
- }
- }
- else{
- filteredByType = CdmStore.getSearchManager().findOccurrencesByType(configurator, type);
- }
+ SearchManager searchManager = new SearchManager();
+ List occurrences = searchManager.findOccurrences(config);
//filter out assigned specimens
if(derivateSearchComposite.getBtnFilterUndeterminedSpecimen().getSelection()){
List specimensWithNoDetermination = new ArrayList();
- for(SpecimenOrObservationBase> result:filteredByType){
+ for(SpecimenOrObservationBase> result:occurrences){
if(CdmStore.getService(IOccurrenceService.class).countDeterminations(result, null)==0){
specimensWithNoDetermination.add(result);
}
}
- filteredByType = specimensWithNoDetermination;
+ occurrences = specimensWithNoDetermination;
}
- derivateSearchComposite.getResultViewer().setInput(filteredByType);
+ derivateSearchComposite.getResultViewer().setInput(occurrences);
}
/* (non-Javadoc)
@@ -185,7 +171,7 @@ public class DerivateSearchCompositeController implements Listener{
public void reset(){
derivateSearchComposite.getResultViewer().setInput(null);
derivateSearchComposite.getSearchField().setText("");
- enumTermComboController.setSelection(SpecimenOrObservationType.Unknown);
+ comboSpecimenTypeController.setSelection(SpecimenOrObservationType.Unknown);
derivateSearchComposite.getComboDerivateType().deselectAll();
selectedTaxon = null;
}
--
2.34.1