Disable taxon filter + enable text filter on taxon names hotfix/5.9.3
authorPatrick Plitzner <p.plitzner@bgbm.org>
Fri, 6 Sep 2019 12:25:28 +0000 (14:25 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Fri, 6 Sep 2019 12:29:13 +0000 (14:29 +0200)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/descriptiveDataSet/matrix/SpecimenSelectionDialog.java

index ea34dc09675fa43ac6701cf540f81db220b72783..2a6ce84ff727e92ba725c49092cdb9558cda7d00 100644 (file)
@@ -10,6 +10,8 @@ package eu.etaxonomy.taxeditor.editor.descriptiveDataSet.matrix;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -45,7 +47,6 @@ import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.ImageResources;
 import eu.etaxonomy.taxeditor.preference.Resources;
 import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.ui.combo.taxon.TaxonNodeCombo;
 
 /**
  * Dialog to choose specimens for the character matrix.<br>
@@ -64,7 +65,7 @@ public class SpecimenSelectionDialog extends Dialog {
     private CharacterMatrix matrix;
     private Text txtTextFilter;
 
-    private TaxonNodeCombo comboTaxon;
+//    private TaxonNodeCombo comboTaxon;
 
     protected SpecimenSelectionDialog(Shell parentShell, CharacterMatrix matrix) {
         super(parentShell);
@@ -79,14 +80,15 @@ public class SpecimenSelectionDialog extends Dialog {
 
         Composite composite_1 = new Composite(composite, SWT.NONE);
         composite_1.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
-        composite_1.setLayout(new GridLayout(4, false));
+        composite_1.setLayout(new GridLayout(2, false));
 
         Label lblNewLabel = new Label(composite_1, SWT.NONE);
-        lblNewLabel.setText("Taxon");
+        lblNewLabel.setText("Refresh");
 
-        comboTaxon = new TaxonNodeCombo(composite_1, SWT.NONE);
-        comboTaxon.setInput(matrix.getDescriptiveDataSet().getTaxonSubtreeFilter());
-        comboTaxon.addSelectionChangedListener(e->applyFilter());
+        // FIXME temporary disabled taxon filter because of performance issues
+//        comboTaxon = new TaxonNodeCombo(composite_1, SWT.NONE);
+//        comboTaxon.setInput(matrix.getDescriptiveDataSet().getTaxonSubtreeFilter());
+//        comboTaxon.addSelectionChangedListener(e->applyFilter());
 
         txtTextFilter = new Text(composite_1, SWT.BORDER);
         txtTextFilter.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
@@ -162,25 +164,54 @@ public class SpecimenSelectionDialog extends Dialog {
     }
 
     private void applyFilter(){
-        Collection<SpecimenNodeWrapper> specimenCache = matrix.getSpecimenCache();
         List<SpecimenNodeWrapper> result = new ArrayList<>();
-        if(comboTaxon.getSelection()!=null){
-            result.addAll(specimenCache.stream()
-                    .filter(wrapper->wrapper.getTaxonNode().equals(comboTaxon.getSelection()))
-                    .collect(Collectors.toList()));
+        Collection<SpecimenNodeWrapper> specimenCache = matrix.getSpecimenCache();
+        if(CdmUtils.isBlank(txtTextFilter.getText())){
+            result = new ArrayList<>(specimenCache);
         }
-        if(!txtTextFilter.getForeground().equals(AbstractUtility.getColor(Resources.SEARCH_VIEW_FOREGROUND))
-                &&!CdmUtils.isBlank(txtTextFilter.getText())){
-            result.addAll(specimenCache.stream()
-                    .filter(wrapper->wrapper.getUuidAndTitleCache().getTitleCache().toLowerCase().contains(txtTextFilter.getText().toLowerCase()))
-                    .collect(Collectors.toList()));
+        else{
+            //        if(comboTaxon.getSelection()!=null){
+            //            result.addAll(specimenCache.stream()
+            //                    .filter(wrapper->wrapper.getTaxonNode().equals(comboTaxon.getSelection()))
+            //                    .collect(Collectors.toList()));
+            //        }
+            if(!txtTextFilter.getForeground().equals(AbstractUtility.getColor(Resources.SEARCH_VIEW_FOREGROUND))
+                    &&!CdmUtils.isBlank(txtTextFilter.getText())){
+                result.addAll(specimenCache.stream()
+                        .filter(wrapper->wrapper.getUuidAndTitleCache().getTitleCache().toLowerCase().contains(txtTextFilter.getText().toLowerCase()))
+                        .collect(Collectors.toList()));
+                result.addAll(specimenCache.stream()
+                        .filter(wrapper->wrapper.getTaxonNode().getTaxon().getTitleCache().toLowerCase().contains(txtTextFilter.getText().toLowerCase()))
+                        .collect(Collectors.toList()));
+            }
         }
         list.setInput(result);
     }
 
     private void loadSpecimens(){
-        Collection<SpecimenNodeWrapper> specimenCache = CdmStore.getService(IDescriptiveDataSetService.class).loadSpecimens(matrix.getDescriptiveDataSet());
-        matrix.setSpecimenCache(specimenCache);
+        ArrayList<SpecimenNodeWrapper> specimenList = new ArrayList<>(CdmStore.getService(IDescriptiveDataSetService.class).loadSpecimens(matrix.getDescriptiveDataSet()));
+        Collections.sort(specimenList, new Comparator<SpecimenNodeWrapper>() {
+
+            @Override
+            public int compare(SpecimenNodeWrapper o1, SpecimenNodeWrapper o2) {
+                if(o1 == null){
+                    if(o2 == null){
+                        return 0;
+                    }
+                    return -1;
+                }
+                if(o2==null){
+                    return 1;
+                }
+                try{
+                    return o1.getTaxonNode().getTaxon().getTitleCache().compareTo(o2.getTaxonNode().getTaxon().getTitleCache());
+                }
+                catch(NullPointerException e){
+                    return 0;
+                }
+            }
+        });
+        matrix.setSpecimenCache(specimenList);
     }
 
     @Override