Implement filter for assigned specimens
authorPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 7 Oct 2015 15:38:48 +0000 (17:38 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 7 Oct 2015 15:38:48 +0000 (17:38 +0200)
 - added drop down to select filter type
 - implemented filtering of specimen list

eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/searchFilter/DerivateSearchComposite.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/searchFilter/DerivateSearchCompositeController.java

index 5163886627d9394efb3eef8c459f4fb8dfc1bc93..bd940eef606de343bbccbee85b2bc1eb4776b7c8 100644 (file)
@@ -10,8 +10,6 @@
 package eu.etaxonomy.taxeditor.editor.view.derivate.searchFilter;
 
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
@@ -28,25 +26,32 @@ import org.eclipse.wb.swt.ResourceManager;
  *
  */
 public class DerivateSearchComposite extends Composite {
+
+    public static final int ALL_SPECIMENS = 0;
+    public static final int ASSIGNED_SPECIMENS = 1;
+    public static final int UNASSIGNED_SPECIMENS = 2;
+
     private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
     private final Text searchField;
     private final Combo comboDerivateType;
     private final Button buttonSearch;
-    private final Button btnFilterUndeterminedSpecimen;
     private final Text textTaxonName;
     private final Button btnBrowseTaxa;
     private final Label lblTaxon;
     private final Label lblDerivateType;
     private final Button btnClearTaxon;
+    private Label lblNewLabel;
+    private Combo comboTaxonAssignment;
 
     /**
      * Create the composite.
+     *
      * @param parent
      * @param style
      */
     public DerivateSearchComposite(Composite parent, int style) {
         super(parent, style);
-        setLayout(new GridLayout(4, false));
+        setLayout(new GridLayout(7, false));
 
         lblTaxon = new Label(this, SWT.NONE);
         lblTaxon.setText("Taxon");
@@ -57,37 +62,44 @@ public class DerivateSearchComposite extends Composite {
         textTaxonName.setText("");
 
         btnBrowseTaxa = formToolkit.createButton(this, "", SWT.NONE);
+        btnBrowseTaxa.setAlignment(SWT.RIGHT);
         btnBrowseTaxa.setImage(ResourceManager.getPluginImage("eu.etaxonomy.taxeditor.store", "icons/open.gif"));
 
         btnClearTaxon = formToolkit.createButton(this, "", SWT.NONE);
-        btnClearTaxon.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
+        btnClearTaxon.setAlignment(SWT.RIGHT);
+        btnClearTaxon.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false, false, 1, 1));
         btnClearTaxon.setImage(ResourceManager.getPluginImage("eu.etaxonomy.taxeditor.store", "icons/trash.gif"));
 
+        lblNewLabel = new Label(this, SWT.NONE);
+        lblNewLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
+        formToolkit.adapt(lblNewLabel, true, true);
+        lblNewLabel.setText("Taxon assignment");
+
+        comboTaxonAssignment = new Combo(this, SWT.NONE);
+        comboTaxonAssignment.setItems(new String[] { "Yes", "No", "All" });
+        comboTaxonAssignment.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+        formToolkit.adapt(comboTaxonAssignment);
+        formToolkit.paintBordersFor(comboTaxonAssignment);
+        comboTaxonAssignment.select(ALL_SPECIMENS);
+        new Label(this, SWT.NONE);
+
+        searchField = formToolkit.createText(this, "New Text", SWT.NONE);
+        searchField.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1));
+        searchField.setText("");
+        new Label(this, SWT.NONE);
+        new Label(this, SWT.NONE);
+
         lblDerivateType = new Label(this, SWT.NULL);
+        lblDerivateType.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
         lblDerivateType.setText("Derivative Type");
 
         comboDerivateType = new Combo(this, SWT.READ_ONLY);
         comboDerivateType.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
         formToolkit.paintBordersFor(comboDerivateType);
 
-        btnFilterUndeterminedSpecimen = new Button(this, SWT.CHECK);
-        btnFilterUndeterminedSpecimen.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
-        btnFilterUndeterminedSpecimen.addSelectionListener(new SelectionAdapter() {
-            @Override
-            public void widgetSelected(SelectionEvent e) {
-            }
-        });
-        btnFilterUndeterminedSpecimen.setText("Determined");
-
-                buttonSearch = new Button(this, SWT.NONE);
-                formToolkit.adapt(buttonSearch, true, true);
-                buttonSearch.setText("Search");
-
-                searchField = formToolkit.createText(this, "New Text", SWT.NONE);
-                searchField.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
-                searchField.setText("");
-                new Label(this, SWT.NONE);
-                new Label(this, SWT.NONE);
+        buttonSearch = new Button(this, SWT.NONE);
+        formToolkit.adapt(buttonSearch, true, true);
+        buttonSearch.setText("Search");
 
     }
 
@@ -95,37 +107,43 @@ public class DerivateSearchComposite extends Composite {
     protected void checkSubclass() {
         // Disable the check that prevents subclassing of SWT components
     }
+
     public Text getSearchField() {
         return searchField;
     }
+
     public Combo getComboDerivateType() {
         return comboDerivateType;
     }
+
     public Button getButtonSearch() {
         return buttonSearch;
     }
 
     @Override
-    public void setEnabled(boolean enabled){
+    public void setEnabled(boolean enabled) {
         super.setEnabled(enabled);
         searchField.setEnabled(enabled);
         comboDerivateType.setEnabled(enabled);
         buttonSearch.setEnabled(enabled);
-        btnFilterUndeterminedSpecimen.setEnabled(enabled);
         btnBrowseTaxa.setEnabled(enabled);
         lblTaxon.setEnabled(enabled);
         lblDerivateType.setEnabled(enabled);
     }
-    public Button getBtnFilterUndeterminedSpecimen() {
-        return btnFilterUndeterminedSpecimen;
-    }
+
+
     public Button getBtnBrowseTaxa() {
         return btnBrowseTaxa;
     }
+
     public Text getTextTaxonName() {
         return textTaxonName;
     }
+
     public Button getBtnClearTaxon() {
         return btnClearTaxon;
     }
+    public Combo getComboTaxonAssignment() {
+        return comboTaxonAssignment;
+    }
 }
index cad5f04e4149107a1623f3c02aec1fa532d0ce33..6eb5444b6c78a99e04e71983f350cb8ad9d2a95d 100644 (file)
@@ -10,6 +10,7 @@
 package eu.etaxonomy.taxeditor.editor.view.derivate.searchFilter;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 import java.util.UUID;
 
@@ -25,6 +26,7 @@ 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.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
 import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateViewEditorInput;
 import eu.etaxonomy.taxeditor.store.CdmStore;
@@ -98,16 +100,24 @@ public class DerivateSearchCompositeController implements Listener{
             occurrences = specimensOfCorrectType;
         }
 
-        //filter out assigned specimens
-        if(derivateSearchComposite.getBtnFilterUndeterminedSpecimen().getSelection()){
-            List<SpecimenOrObservationBase> specimensWithNoDetermination = new ArrayList<SpecimenOrObservationBase>();
-            for(SpecimenOrObservationBase<?> result:occurrences){
-                if(CdmStore.getService(IOccurrenceService.class).countDeterminations(result, null)==0){
-                    specimensWithNoDetermination.add(result);
+        //filter out (un-)assigned specimens
+        int selectionIndex = derivateSearchComposite.getComboTaxonAssignment().getSelectionIndex();
+        List<SpecimenOrObservationBase> specimensWithAssociations = 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()){
+                    specimensWithAssociations.add(specimenOrObservationBase);
                 }
             }
-            occurrences = specimensWithNoDetermination;
         }
+        if(selectionIndex==DerivateSearchComposite.ASSIGNED_SPECIMENS){
+            occurrences = specimensWithAssociations;
+        }
+        else if(selectionIndex==DerivateSearchComposite.UNASSIGNED_SPECIMENS){
+            occurrences.retainAll(specimensWithAssociations);
+        }
+
         List<UUID> derivateUuids = new ArrayList<UUID>();
         for (SpecimenOrObservationBase specimenOrObservationBase : occurrences) {
             derivateUuids.add(specimenOrObservationBase.getUuid());