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;
return CdmStore.getService(ITaxonService.class).findTaxaAndNamesForEditor(configurator);
}
-
-
+
+
/**
* <p>findReferences</p>
* @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?
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;
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;
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);
}
});
- configurator = new IdentifiableServiceConfiguratorImpl<SpecimenOrObservationBase<DerivedUnitFacadeCacheStrategy>>();
}
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)
public void reset(){
derivateSearchComposite.getResultViewer().setInput(null);
derivateSearchComposite.getSearchField().setText("");
- enumTermComboController.setSelection(SpecimenOrObservationType.Unknown);
+ comboSpecimenTypeController.setSelection(SpecimenOrObservationType.Unknown);
derivateSearchComposite.getComboDerivateType().deselectAll();
selectedTaxon = null;
}