- added findOccurrences() and countOccurrences() to service layer
authorPatric Plitzner <p.plitzner@bgbm.org>
Tue, 14 Apr 2015 13:17:59 +0000 (13:17 +0000)
committerPatric Plitzner <p.plitzner@bgbm.org>
Tue, 14 Apr 2015 13:17:59 +0000 (13:17 +0000)
 - added configurator for these methods
 - optimized retrieval with HQL query
 - made use of service method in DerivateSearchView

eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientOccurenceService.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/SearchManager.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchCompositeController.java

index 4dbc7abe9921327f4ead0b1c9160812411b3b655..637b5f722a50d515483de225e1eeec0c64dff21a 100644 (file)
@@ -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<SpecimenOrObservationBase> config) {
+           return defaultService.countOccurrences(config);
+       }
+
 }
index 5aab63bc8e094599ba57b38e9a5f651e7c4686e7..1f24d45216a4716abd36730fb223f1d79b71a5f2 100644 (file)
@@ -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);
        }
 
-       
-       
+
+
 
        /**
         * <p>findReferences</p>
@@ -167,45 +167,38 @@ public class SearchManager {
         * @param showFieldUnits if <code>true</code> then also FieldUnits are searched
         * @return
         */
-       public List<SpecimenOrObservationBase> findOccurrences(IIdentifiableEntityServiceConfigurator configurator, boolean showFieldUnits){
-               if(! showFieldUnits){
-                       configurator.setClazz(DerivedUnit.class);
+       public List<SpecimenOrObservationBase> findOccurrences(IIdentifiableEntityServiceConfigurator<SpecimenOrObservationBase> 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<SpecimenOrObservationBase> records = new ArrayList<SpecimenOrObservationBase>();
+                   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<SpecimenOrObservationBase> findOccurrencesByType(IIdentifiableEntityServiceConfigurator configurator, SpecimenOrObservationType type){
-           List<SpecimenOrObservationBase> filteredOccurrences = new ArrayList<SpecimenOrObservationBase>();
-           List<SpecimenOrObservationBase> 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<User> findUsers(IIdentifiableEntityServiceConfigurator configurator){
                String userNameSearchString = sqlizeTitleSearchString(configurator);
                // TODO why are users not identifiable entities?
index 25b99f0229ddaa80f91e3c18ff1d9b93ae878fe0..c4898527561f42714bcd574eda0750a11c54ffb6 100644 (file)
@@ -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<SpecimenOrObservationBase<DerivedUnitFacadeCacheStrategy>> configurator;
-    private EnumTermComboController<SpecimenOrObservationType> enumTermComboController;
+    private EnumTermComboController<SpecimenOrObservationType> 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<SpecimenOrObservationType>(derivateSearchComposite.getComboDerivateType(), null, null, SpecimenOrObservationType.class, 0);
-        enumTermComboController.setSelection(SpecimenOrObservationType.Unknown);
+        comboSpecimenTypeController = new EnumTermComboController<SpecimenOrObservationType>(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<SpecimenOrObservationBase<DerivedUnitFacadeCacheStrategy>>();
 
     }
 
@@ -112,39 +109,28 @@ public class DerivateSearchCompositeController implements Listener{
             derivateSearchView.setFocus(); //rebind the conversation
         }
 
+        String queryString = derivateSearchComposite.getSearchField().getText();
+        SpecimenOrObservationType specimenType = comboSpecimenTypeController.getSelection();
 
-        List<SpecimenOrObservationBase<?>> 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<SpecimenOrObservationBase> filteredByType = new ArrayList<SpecimenOrObservationBase>();
-        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<SpecimenOrObservationBase> occurrences = searchManager.findOccurrences(config);
 
         //filter out assigned specimens
         if(derivateSearchComposite.getBtnFilterUndeterminedSpecimen().getSelection()){
             List<SpecimenOrObservationBase> specimensWithNoDetermination = new ArrayList<SpecimenOrObservationBase>();
-            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;
     }