X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/ef7d8f0af0a960dcf74f1a49589290bc32576143..0875c8c1e298c356f80d58bc8bc93a4f6f43d592:/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/SearchManager.java 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 847181732..91b014748 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 @@ -18,8 +18,10 @@ import java.util.UUID; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Display; +import eu.etaxonomy.cdm.api.conversation.ConversationHolder; import eu.etaxonomy.cdm.api.service.IAgentService; import eu.etaxonomy.cdm.api.service.IGroupService; +import eu.etaxonomy.cdm.api.service.IMediaService; import eu.etaxonomy.cdm.api.service.INameService; import eu.etaxonomy.cdm.api.service.IOccurrenceService; import eu.etaxonomy.cdm.api.service.IReferenceService; @@ -35,14 +37,14 @@ import eu.etaxonomy.cdm.model.common.ICdmBase; import eu.etaxonomy.cdm.model.common.IdentifiableEntity; import eu.etaxonomy.cdm.model.common.RelationshipBase; import eu.etaxonomy.cdm.model.common.User; +import eu.etaxonomy.cdm.model.media.Media; 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.reference.Reference; import eu.etaxonomy.cdm.model.taxon.TaxonBase; import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache; +import eu.etaxonomy.taxeditor.Messages; import eu.etaxonomy.taxeditor.preference.IPreferenceKeys; import eu.etaxonomy.taxeditor.preference.PreferencesUtil; @@ -55,14 +57,16 @@ public class SearchManager { public static final List NO_RESULTS = Arrays.asList(new Object[]{}); - public static final String WILDCARD = "*"; + public static final String WILDCARD = "*"; //$NON-NLS-1$ public static int NO_COUNT = -1; + // TODO make this configurable via preferences private static final int MAX_RESULTS_BEFORE_WARNING = 500; - public List findNames(IIdentifiableEntityServiceConfigurator configurator){ + public List findNames(IIdentifiableEntityServiceConfigurator configurator, ConversationHolder conversation){ + if(checkLargeResult(CdmStore.getService(INameService.class).countByTitle(configurator))){ List records = CdmStore.getService(INameService.class).findByTitle(configurator).getRecords(); addUuidSearchResults(records, configurator, INameService.class); @@ -121,7 +125,7 @@ public class SearchManager { String titleSearchString = configurator.getTitleSearchString(); try { UUID uuid = UUID.fromString(titleSearchString); - T foundRecord = CdmStore.getService(service).find(uuid); + T foundRecord = CdmStore.getService(service).load(uuid, configurator.getPropertyPaths()); if(foundRecord!=null){ records.add(foundRecord); } @@ -162,36 +166,30 @@ public class SearchManager { */ public List findOccurrences(IIdentifiableEntityServiceConfigurator configurator, boolean showFieldUnits){ List records = new ArrayList(); - if(configurator.getClazz()==null){ - if(showFieldUnits){ - configurator.setClazz(SpecimenOrObservationBase.class); - } - else{ - configurator.setClazz(DerivedUnit.class); - } - } - final List OCCURRENCE_INIT_STRATEGY = Arrays.asList(new String[] { - "descriptions", - "identifiers", - "derivationEvents.originals" + final List BASE_OCCURRENCE_INIT_STRATEGY = Arrays.asList(new String[] { + "collection", //$NON-NLS-1$ + "descriptions", //$NON-NLS-1$ + "identifiers", //$NON-NLS-1$ + "derivationEvents.originals", //$NON-NLS-1$ + "derivedFrom.originals", //$NON-NLS-1$ + "gatheringEvent.country.representations", //$NON-NLS-1$ + "gatheringEvent.collector", //$NON-NLS-1$ + "gatheringEvent.locality", //$NON-NLS-1$ + "descriptions.descriptionElements", //$NON-NLS-1$ + "kindOfUnit", //$NON-NLS-1$ + "amplificationResults", //$NON-NLS-1$ + "sequences.singleReadAlignments", //$NON-NLS-1$ + "mediaSpecimen" //$NON-NLS-1$ }); - configurator.setPropertyPaths(OCCURRENCE_INIT_STRATEGY); - if(configurator.getClazz().equals(SpecimenOrObservationBase.class)){ - //get FieldUnits + DerivedUnits - 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()); - } + List occurrencePropertyPaths = new ArrayList(); + occurrencePropertyPaths.addAll(BASE_OCCURRENCE_INIT_STRATEGY); + for(String propertyPath:BASE_OCCURRENCE_INIT_STRATEGY) { + occurrencePropertyPaths.add("derivationEvents.derivatives." + propertyPath); //$NON-NLS-1$ } - else if(checkLargeResult(CdmStore.getService(IOccurrenceService.class).countOccurrences(configurator))){ + configurator.setPropertyPaths(occurrencePropertyPaths); + + if(checkLargeResult(CdmStore.getService(IOccurrenceService.class).countOccurrences(configurator))){ records = CdmStore.getService(IOccurrenceService.class).findByTitle(configurator).getRecords(); } addUuidSearchResults(records, configurator, IOccurrenceService.class); @@ -217,17 +215,20 @@ public class SearchManager { private boolean checkLargeResult(int count) { - if(count > MAX_RESULTS_BEFORE_WARNING){ - return MessageDialog.openConfirm(Display.getDefault().getActiveShell(), "Large result expected", - String.format("The current search will return %s objects. This will " + - "take a long time and/or might render the editor unusable. Please consider refining your search.", count)); + return checkLargeResult(count, MAX_RESULTS_BEFORE_WARNING); + } + + private boolean checkLargeResult(int count, int maxBeforWarning) { + if(count > maxBeforWarning){ + return MessageDialog.openConfirm(Display.getDefault().getActiveShell(), Messages.SearchManager_LARGE_RESULT_EXPECTED, + String.format(Messages.SearchManager_LONG_SEARCH_WARNING, count)); }else{ return true; } } private String sqlizeTitleSearchString(IIdentifiableEntityServiceConfigurator configurator){ - return configurator.getTitleSearchString().replace(WILDCARD, "%"); + return configurator.getTitleSearchString().replace(WILDCARD, "%"); //$NON-NLS-1$ } public List findTaxa(IIdentifiableEntityServiceConfigurator configurator) { @@ -239,5 +240,14 @@ public class SearchManager { return NO_RESULTS; } + public List findMedia(IIdentifiableEntityServiceConfigurator configurator) { + if(checkLargeResult(CdmStore.getService(IMediaService.class).countByTitle(configurator))){ + List records = CdmStore.getService(IMediaService.class).findByTitle(configurator).getRecords(); + addUuidSearchResults(records, configurator, IMediaService.class); + return records; + } + return NO_RESULTS; + } + }