ref #7095 Filter by rank when adding descriptions
authorPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 10 Jan 2018 11:43:04 +0000 (12:43 +0100)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 10 Jan 2018 11:43:04 +0000 (12:43 +0100)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/workingSet/matrix/SpecimenSelectionDialog.java

index 64c53b51f4ed9ca67824d196a58a049dfd46d260..220a83b3aec625931bc2b099cce4711a412ce991 100644 (file)
@@ -25,8 +25,11 @@ import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Shell;
 
 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
+import eu.etaxonomy.cdm.api.service.ITaxonService;
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.model.description.WorkingSet;
+import eu.etaxonomy.cdm.model.name.Rank;
+import eu.etaxonomy.cdm.model.name.TaxonName;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
@@ -62,21 +65,35 @@ public class SpecimenSelectionDialog extends Dialog {
         Set<TaxonNode> taxonNodes = workingSet.getTaxonSubtreeFilter();
         Set<SpecimenOrObservationBase> specimens = new HashSet<>();
         for (TaxonNode node : taxonNodes) {
-            specimens.addAll(addDescriptionsRecursively(node));
+            specimens.addAll(addSpecimensRecursively(node));
         }
         list.setInput(specimens);
         return composite;
     }
 
-    private Collection<SpecimenOrObservationBase> addDescriptionsRecursively(TaxonNode node){
+    private Collection<SpecimenOrObservationBase> addSpecimensRecursively(TaxonNode node){
         Collection<SpecimenOrObservationBase> specimens = new HashSet<>();
         if(node.getTaxon()!=null){
             Taxon taxon = HibernateProxyHelper.deproxy(node.getTaxon(), Taxon.class);
-            specimens = CdmStore.getService(IOccurrenceService.class).listByAssociatedTaxon(SpecimenOrObservationBase.class, null, taxon, null, null, null, null, null);
+            TaxonName name = taxon.getName();
+            //filter by Rank
+            if(name!=null &&
+                    (name.getRank().equals(workingSet.getMinRank())
+                    || name.getRank().isHigher(workingSet.getMinRank())
+                    || name.getRank().equals(workingSet.getMaxRank())
+                    || name.getRank().isLower(workingSet.getMaxRank()))){
+                IOccurrenceService service = CdmStore.getService(IOccurrenceService.class);
+                //TODO extend FindOccurrencesConfigurator to support area and rank filter
+                //            FindOccurrencesConfigurator config = new FindOccurrencesConfigurator();
+                //            config.setAssociatedTaxonNameUuid(taxon.getUuid());
+                //            service.findByTitle(config);
+
+                specimens = service.listByAssociatedTaxon(SpecimenOrObservationBase.class, null, taxon, null, null, null, null, null);
+            }
         }
         List<TaxonNode> childNodes = node.getChildNodes();
         for (TaxonNode childNode : childNodes) {
-            specimens.addAll(addDescriptionsRecursively(childNode));
+            specimens.addAll(addSpecimensRecursively(childNode));
         }
         return specimens;
     }