From c0bfd1fed309bc66b67a0edd906f4f325cc576e1 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Tue, 6 Feb 2018 10:47:02 +0100
Subject: [PATCH] OO-3281: hanlde the special of the "Show all" filter

---
 .../table/TreeNodeFlexiCellRenderer.java       | 18 ++++++++++++++++--
 .../ui/TaxonomyTreeTableController.java        |  3 ++-
 .../taxonomy/ui/TaxonomyTreeTableModel.java    | 17 ++++++++++++-----
 3 files changed, 30 insertions(+), 8 deletions(-)

diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/TreeNodeFlexiCellRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/TreeNodeFlexiCellRenderer.java
index e670a5ba5fd..57e4c5c072f 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/TreeNodeFlexiCellRenderer.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/TreeNodeFlexiCellRenderer.java
@@ -19,6 +19,9 @@
  */
 package org.olat.core.gui.components.form.flexible.impl.elements.table;
 
+import java.util.List;
+
+import org.olat.core.gui.components.form.flexible.elements.FlexiTableFilter;
 import org.olat.core.gui.components.form.flexible.impl.Form;
 import org.olat.core.gui.components.form.flexible.impl.FormJSHelper;
 import org.olat.core.gui.components.form.flexible.impl.NameValuePair;
@@ -70,9 +73,20 @@ public class TreeNodeFlexiCellRenderer implements FlexiCellRenderer {
 	
 	private boolean isFlat(FlexiTableElementImpl ftE) {
 		return flatBySearchAndFilter
-				&& (StringHelper.containsNonWhitespace(ftE.getQuickSearchString()) || !ftE.getSelectedFilters().isEmpty());
+				&& (StringHelper.containsNonWhitespace(ftE.getQuickSearchString()) || isFiltered(ftE.getSelectedFilters()));
+	}
+	
+	private boolean isFiltered(List<FlexiTableFilter> filters) {
+		if(filters == null || filters.isEmpty()) return false;
+		
+		boolean filtered = true;
+		for(FlexiTableFilter filter:filters) {
+			if(filter.isShowAll()) {
+				filtered &= false;
+			}
+		}
+		return filtered;
 	}
-
 	
 	private void renderIndented(Renderer renderer, StringOutput target, Object cellValue, int row,
 			FlexiTableComponent source, URLBuilder ubu, Translator translator) {
diff --git a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableController.java b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableController.java
index 2d300e02532..90a431570c4 100644
--- a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableController.java
+++ b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableController.java
@@ -161,7 +161,8 @@ public class TaxonomyTreeTableController extends FormBasicController implements
 			resources.add(new FlexiTableFilter(type.getDisplayName(), type.getKey().toString()));
 		}
 		resources.add(new FlexiTableFilter(translate("filter.no.level.type"), "-"));
-		resources.add(new FlexiTableFilter(translate("show.all"), "-", true));
+		resources.add(FlexiTableFilter.SPACER);
+		resources.add(new FlexiTableFilter(translate("show.all"), "all", true));
 		return resources;
 	}
 	
diff --git a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableModel.java b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableModel.java
index 5beae0ab87e..6733489d1fc 100644
--- a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableModel.java
+++ b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableModel.java
@@ -61,21 +61,28 @@ implements FilterableFlexiTableModel  {
 		if(filters != null && filters.size() > 0 && filters.get(0) != null) {
 			Set<Long> typeKeys = new HashSet<>();
 			boolean noType = false;
+			boolean showAll = false;
 			for(FlexiTableFilter filter:filters) {
 				if("-".equals(filter.getFilter())) {
 					noType = true;
 				} else if(StringHelper.isLong(filter.getFilter())) {
 					typeKeys.add(new Long(filter.getFilter()));
+				} else if(filter.isShowAll()) {
+					showAll = true;
 				}
 			}
 			
-			List<TaxonomyLevelRow> filteredRows = new ArrayList<>(backupRows.size());
-			for(TaxonomyLevelRow row:backupRows) {
-				if(accept(row, typeKeys, noType)) {
-					filteredRows.add(row);
+			if(showAll) {
+				setUnfilteredObjects();
+			} else {
+				List<TaxonomyLevelRow> filteredRows = new ArrayList<>(backupRows.size());
+				for(TaxonomyLevelRow row:backupRows) {
+					if(accept(row, typeKeys, noType)) {
+						filteredRows.add(row);
+					}
 				}
+				setFilteredObjects(filteredRows);
 			}
-			setFilteredObjects(filteredRows);
 		} else {
 			setUnfilteredObjects();
 		}
-- 
GitLab