From: Patric Plitzner Date: Tue, 14 Apr 2015 13:17:59 +0000 (+0000) Subject: - added findOccurrences() and countOccurrences() to service layer X-Git-Tag: 3.6.0~117 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/87cd03a1cd438c4e4ca72af4b963f2a96dde0ba2?ds=sidebyside - added findOccurrences() and countOccurrences() to service layer - added configurator for these methods - optimized retrieval with HQL query - made use of service method in DerivateSearchView --- 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; }