From 6bfd2385d593a49cad67e26c42d18b374d158643 Mon Sep 17 00:00:00 2001 From: Cherian Mathew Date: Wed, 25 Nov 2015 18:33:41 +0100 Subject: [PATCH] #5250 Refactor code for improving derivate search performance --- .../editor/view/derivate/DerivateView.java | 25 ++++++++++++++----- .../DerivateSearchCompositeController.java | 2 +- .../taxeditor/store/SearchManager.java | 22 ++++++++++++---- 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java index 95d3b9392..c526da1f8 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java @@ -210,7 +210,7 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa } public void updateRootEntities() { - updateRootEntities(null); + updateRootEntities((Collection)null); } public void updateRootEntities(Collection derivativeUuids) { @@ -234,8 +234,23 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa if(derivativeUuids!=null){ this.derivateToRootEntityMap = new HashMap, SpecimenOrObservationBase>(); this.rootElements = new HashSet>(); - for (UUID uuid : derivativeUuids) { - SpecimenOrObservationBase derivate = CdmStore.getService(IOccurrenceService.class).load(uuid, SPECIMEN_INIT_STRATEGY); + List derivates = + CdmStore.getService(IOccurrenceService.class).load(new ArrayList(derivativeUuids), SPECIMEN_INIT_STRATEGY); + updateRootEntities(derivates); + } + refreshTree(false); + previousCdmEntitySession.bind(); + } + } + + + public void updateRootEntities(List derivates) { + + if(derivates!=null){ + this.derivateToRootEntityMap = new HashMap, SpecimenOrObservationBase>(); + this.rootElements = new HashSet>(); + for (SpecimenOrObservationBase derivate : derivates) { + if(derivate instanceof FieldUnit){ derivateToRootEntityMap.put(derivate, derivate); } @@ -254,9 +269,7 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa } } viewer.setInput(rootElements); - refreshTree(false); - previousCdmEntitySession.bind(); - } + } @Override diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/searchFilter/DerivateSearchCompositeController.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/searchFilter/DerivateSearchCompositeController.java index e87fcc5aa..73ac22836 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/searchFilter/DerivateSearchCompositeController.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/searchFilter/DerivateSearchCompositeController.java @@ -119,7 +119,7 @@ public class DerivateSearchCompositeController implements Listener{ for (SpecimenOrObservationBase specimenOrObservationBase : occurrences) { derivateUuids.add(specimenOrObservationBase.getUuid()); } - derivativeEditor.updateRootEntities(derivateUuids); + derivativeEditor.updateRootEntities(occurrences); } @Override 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 2103ba8e8..395550a7b 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 @@ -37,8 +37,6 @@ import eu.etaxonomy.cdm.model.common.RelationshipBase; import eu.etaxonomy.cdm.model.common.User; 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; @@ -162,14 +160,28 @@ public class SearchManager { */ public List findOccurrences(IIdentifiableEntityServiceConfigurator configurator, boolean showFieldUnits){ List records = new ArrayList(); - final List OCCURRENCE_INIT_STRATEGY = Arrays.asList(new String[] { + final List BASE_OCCURRENCE_INIT_STRATEGY = Arrays.asList(new String[] { "collection", "descriptions", "identifiers", "derivationEvents.originals", - "derivedFrom.originals" + "derivedFrom.originals", + "gatheringEvent.country.representations", + "gatheringEvent.collector", + "gatheringEvent.locality", + "descriptions.descriptionElements", + "kindOfUnit", + "amplificationResults", + "sequences.singleReadAlignments", + "mediaSpecimen" }); - configurator.setPropertyPaths(OCCURRENCE_INIT_STRATEGY); + + List occurrencePropertyPaths = new ArrayList(); + occurrencePropertyPaths.addAll(BASE_OCCURRENCE_INIT_STRATEGY); + for(String propertyPath:BASE_OCCURRENCE_INIT_STRATEGY) { + occurrencePropertyPaths.add("derivationEvents.derivatives." + propertyPath); + } + configurator.setPropertyPaths(occurrencePropertyPaths); if(checkLargeResult(CdmStore.getService(IOccurrenceService.class).countOccurrences(configurator))){ records = CdmStore.getService(IOccurrenceService.class).findByTitle(configurator).getRecords(); -- 2.34.1