Pre-select derivatives according to filter criteria - also used service method to...
authorPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 3 Feb 2016 06:50:07 +0000 (07:50 +0100)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 3 Feb 2016 13:35:28 +0000 (14:35 +0100)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/searchFilter/DerivateSearchCompositeController.java

index f591b9a14f6451889bae885cddb9827bc510d54b..053f90cc45b01d29b2c9b861ef45d1c82e82fc23 100644 (file)
@@ -276,6 +276,19 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
 
             getEditorSite().getActionBars().getStatusLineManager().setMessage(rootElements.size() +" derivative hierarchies found");
 
+            //set selection to derivatives if the filter criteria
+            //taxon assignment or or derivative type are set
+            if(derivates!=null && !derivateSearchCompositeController.isDefaultSearch()){
+                List<TreeNode> nodesToSelect = new ArrayList<TreeNode>();
+                for (SpecimenOrObservationBase specimenOrObservationBase : derivates) {
+                    nodesToSelect.add(new TreeNode(specimenOrObservationBase));
+                }
+                viewer.setSelection(new StructuredSelection(nodesToSelect));
+            }
+            else{
+                viewer.setSelection(null);
+            }
+
     }
 
     public void updateLabelCache(){
index 42d43961af54cda4ba9878609a8d44be8f9af6f1..0cf0191ca2ef4b1df1689a4a166d08cd873e6948 100644 (file)
@@ -9,8 +9,6 @@
 */
 package eu.etaxonomy.taxeditor.editor.view.derivate.searchFilter;
 
-import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
 
 import org.eclipse.swt.SWT;
@@ -21,14 +19,12 @@ import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Widget;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
-import eu.etaxonomy.cdm.api.service.IOccurrenceService;
 import eu.etaxonomy.cdm.api.service.config.FindOccurrencesConfigurator;
+import eu.etaxonomy.cdm.api.service.config.FindOccurrencesConfigurator.AssignmentStatus;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
-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;
@@ -78,42 +74,22 @@ public class DerivateSearchCompositeController implements Listener{
         if(selectedTaxon!=null){
             config.setSpecimenType(null);
         }
+        switch (derivateSearchComposite.getComboTaxonAssignment().getSelectionIndex()) {
+        case DerivateSearchComposite.ALL_SPECIMENS:
+            config.setAssignmentStatus(AssignmentStatus.ALL_SPECIMENS);
+            break;
+        case DerivateSearchComposite.ASSIGNED_SPECIMENS:
+            config.setAssignmentStatus(AssignmentStatus.ASSIGNED_SPECIMENS);
+            break;
+        case DerivateSearchComposite.UNASSIGNED_SPECIMENS:
+            config.setAssignmentStatus(AssignmentStatus.UNASSIGNED_SPECIMENS);
+            break;
+        default:
+            break;
+        }
 
         SearchManager searchManager = new SearchManager();
         List<SpecimenOrObservationBase> occurrences = searchManager.findOccurrences(config, true);
-
-        //filter out specimens of wrong type (only if an associated taxon was selected)
-        if(selectedTaxon!=null && !specimenType.equals(SpecimenOrObservationType.Unknown)){
-            List<SpecimenOrObservationBase> specimensOfCorrectType = new ArrayList<SpecimenOrObservationBase>();
-            for(SpecimenOrObservationBase<?> occurrence:occurrences){
-                if(occurrence.getRecordBasis().equals(specimenType)
-                        || occurrence.getRecordBasis().isKindOf(specimenType)){
-                    specimensOfCorrectType.add(occurrence);
-                }
-            }
-            occurrences = specimensOfCorrectType;
-        }
-
-        //filter out (un-)assigned specimens
-        if(selectedTaxon==null){
-            int selectionIndex = derivateSearchComposite.getComboTaxonAssignment().getSelectionIndex();
-            List<SpecimenOrObservationBase<?>> specimenWithAssociations = new ArrayList<SpecimenOrObservationBase<?>>();
-            if(selectionIndex!=DerivateSearchComposite.ALL_SPECIMENS){
-                for (SpecimenOrObservationBase specimenOrObservationBase : occurrences) {
-                    Collection<TaxonBase<?>> associatedTaxa = CdmStore.getService(IOccurrenceService.class).listAssociatedTaxa(specimenOrObservationBase, null, null, null, null);
-                    if(!associatedTaxa.isEmpty()){
-                        specimenWithAssociations.add(specimenOrObservationBase);
-                        specimenWithAssociations.addAll(CdmStore.getService(IOccurrenceService.class).getFieldUnits(specimenOrObservationBase.getUuid()));
-                    }
-                }
-            }
-            if(selectionIndex==DerivateSearchComposite.UNASSIGNED_SPECIMENS){
-                occurrences.removeAll(specimenWithAssociations);
-            }
-            else if(selectionIndex==DerivateSearchComposite.ASSIGNED_SPECIMENS){
-                occurrences = new ArrayList<SpecimenOrObservationBase>(specimenWithAssociations);
-            }
-        }
         derivativeEditor.updateRootEntities(occurrences);
     }
 
@@ -159,6 +135,18 @@ public class DerivateSearchCompositeController implements Listener{
         derivateSearchComposite.setLayoutData(layoutData);
     }
 
+    /**
+     * Checks whether or not the search criteria are set to their default value.<br>
+     * This does not consider the title search field. 
+     * @return <code>true</code> if search criteria are set to default.
+     */
+    public boolean isDefaultSearch(){
+        boolean isDefault = true;
+        isDefault &= comboSpecimenTypeController.getSelection()==SpecimenOrObservationType.Unknown;
+        isDefault &= derivateSearchComposite.getComboTaxonAssignment().getSelectionIndex()==DerivateSearchComposite.ALL_SPECIMENS;
+        isDefault &= selectedTaxon==null;
+        return isDefault;
+    }
     /**
      * Resets all input fields
      */