From 30e5346546a89bd641c24cea22493b52002664cd Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Mon, 30 Jun 2014 14:44:40 +0200
Subject: [PATCH] OO-1068: filter and search in "My course" and "Authoring
 env." works better

---
 .../de/bps/course/nodes/ll/LLEditForm.java    |  1 -
 .../impl/elements/TextElementRenderer.java    |  1 -
 .../table/AbstractFlexiTableRenderer.java     |  9 ++--
 .../elements/table/FlexiTableElementImpl.java | 43 +++++++++++++------
 .../stack/BreadcrumbedStackedPanel.java       |  1 +
 .../ui/author/AuthoringEntryDataSource.java   |  4 ++
 .../DefaultRepositoryEntryDataSource.java     |  4 ++
 7 files changed, 44 insertions(+), 19 deletions(-)

diff --git a/src/main/java/de/bps/course/nodes/ll/LLEditForm.java b/src/main/java/de/bps/course/nodes/ll/LLEditForm.java
index 1751e5dbd09..d8fc9119361 100644
--- a/src/main/java/de/bps/course/nodes/ll/LLEditForm.java
+++ b/src/main/java/de/bps/course/nodes/ll/LLEditForm.java
@@ -37,7 +37,6 @@ import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
 import org.olat.core.gui.components.form.flexible.elements.TextElement;
 import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
 import org.olat.core.gui.components.form.flexible.impl.FormEvent;
-import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
 import org.olat.core.gui.components.form.flexible.impl.elements.FormLinkImpl;
 import org.olat.core.gui.components.form.flexible.impl.elements.FormSubmit;
 import org.olat.core.gui.components.form.flexible.impl.elements.ItemValidatorProvider;
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextElementRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextElementRenderer.java
index b356fbd8d8c..708d5603326 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextElementRenderer.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextElementRenderer.java
@@ -34,7 +34,6 @@ import org.olat.core.gui.render.Renderer;
 import org.olat.core.gui.render.StringOutput;
 import org.olat.core.gui.render.URLBuilder;
 import org.olat.core.gui.translator.Translator;
-import org.olat.core.util.StringHelper;
 
 /**
  * Description:<br>
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java
index 732971802c8..562511e542d 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/AbstractFlexiTableRenderer.java
@@ -169,7 +169,7 @@ public abstract class AbstractFlexiTableRenderer extends DefaultComponentRendere
 		boolean empty = ftE.getTableDataModel().getRowCount() == 0;
 		
 		//filter
-		if(ftE.isFilterEnabled() && !empty) {
+		if(ftE.isFilterEnabled()) {
 			List<FlexiTableFilter> filters = ftE.getFilters();
 			if(filters != null && filters.size() > 0) {
 				renderFilterDropdown(sb, ftE, filters);
@@ -177,19 +177,20 @@ public abstract class AbstractFlexiTableRenderer extends DefaultComponentRendere
 		}
 		
 		//sort
-		if(ftE.isSortEnabled() && !empty) {
+		if(ftE.isSortEnabled()) {
 			List<FlexiTableSort> sorts = ftE.getSorts();
 			if(sorts != null && sorts.size() > 0) {
 				renderSortDropdown(sb, ftE, sorts);
 			}
 		}
 		
-		if(ftE.getExportButton() != null && ftE.isExportEnabled() && !empty) {
+		if(ftE.getExportButton() != null && ftE.isExportEnabled()) {
 			sb.append("<div class='btn-group'>");
+			ftE.getExportButton().setEnabled(!empty);
 			renderFormItem(renderer, sb, ftE.getExportButton(), ubu, translator, renderResult, args);
 			sb.append("</div> ");
 		}
-		if(ftE.getCustomButton() != null && ftE.isCustomizeColumns() && !empty) {
+		if(ftE.getCustomButton() != null && ftE.isCustomizeColumns()) {
 			sb.append("<div class='btn-group'>");
 			renderFormItem(renderer, sb, ftE.getCustomButton(), ubu, translator, renderResult, args);
 			sb.append("</div> ");
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java
index 2044ae19241..749371868bc 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java
@@ -652,18 +652,25 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 				&& classicTypeButton.getFormDispatchId().equals(dispatchuri)) {
 			setRendererType(FlexiTableRendererType.classic);
 			saveCustomSettings(ureq);
-		} else {
-			FlexiTableColumnModel colModel = dataModel.getTableColumnModel();
-			for(int i=colModel.getColumnCount(); i-->0; ) {
-				FlexiColumnModel col = colModel.getColumnModel(i);
-				if(col.getAction() != null) {
-					String selectedRowIndex = getRootForm().getRequestParameter(col.getAction());
-					if(StringHelper.containsNonWhitespace(selectedRowIndex)) {
-						doSelect(ureq, col.getAction(), Integer.parseInt(selectedRowIndex));
-					}
+		} else if(doSelect(ureq)) {
+			//do select
+		}
+	}
+	
+	private boolean doSelect(UserRequest ureq) {
+		boolean select = false;
+		FlexiTableColumnModel colModel = dataModel.getTableColumnModel();
+		for(int i=colModel.getColumnCount(); i-->0; ) {
+			FlexiColumnModel col = colModel.getColumnModel(i);
+			if(col.getAction() != null) {
+				String selectedRowIndex = getRootForm().getRequestParameter(col.getAction());
+				if(StringHelper.containsNonWhitespace(selectedRowIndex)) {
+					doSelect(ureq, col.getAction(), Integer.parseInt(selectedRowIndex));
+					select = true;
 				}
 			}
 		}
+		return select;
 	}
 	
 	@Override
@@ -723,13 +730,24 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 	}
 	
 	private void doFilter(String filterKey) {
+		String selectedFilterKey = null;
 		if(filterKey == null) {
 			for(FlexiTableFilter filter:filters) {
 				filter.setSelected(false);
 			}
 		} else {
 			for(FlexiTableFilter filter:filters) {
-				filter.setSelected(filter.getFilter().equals(filterKey));
+				boolean selected = filter.getFilter().equals(filterKey);
+				if(selected) {
+					if(filter.isSelected()) {
+						filter.setSelected(false);
+					} else {
+						filter.setSelected(true);
+						selectedFilterKey = filterKey;
+					}
+				} else {
+					filter.setSelected(false);
+				}
 			}
 		}
 		
@@ -737,14 +755,13 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 			rowCount = -1;
 			currentPage = 0;
 			currentFirstResult = 0;
-			
-			((FilterableFlexiTableModel)dataModel).filter(filterKey);
+			((FilterableFlexiTableModel)dataModel).filter(selectedFilterKey);
 		} else if(dataSource != null) {
 			rowCount = -1;
 			currentPage = 0;
 			currentFirstResult = 0;
 
-			List<String> addQueries = Collections.singletonList(filterKey);
+			List<String> addQueries = Collections.singletonList(selectedFilterKey);
 			dataSource.clear();
 			dataSource.load(null, addQueries, 0, getPageSize(), orderBy);
 		}
diff --git a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java
index b75151b3412..05ca9042b13 100644
--- a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java
+++ b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java
@@ -214,6 +214,7 @@ public class BreadcrumbedStackedPanel extends Panel implements StackedPanel, Bre
 		return null;
 	}
 
+	@Override
 	public void popUpToRootController(UserRequest ureq) {
 		if(stack.size() > 1) {
 			for(int i=stack.size(); i-->1; ) {
diff --git a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataSource.java b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataSource.java
index db24ae9be16..e0c2762f468 100644
--- a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataSource.java
+++ b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataSource.java
@@ -124,6 +124,10 @@ public class AuthoringEntryDataSource implements FlexiTableDataSourceDelegate<Au
 		if(StringHelper.containsNonWhitespace(query)) {
 			try {
 				List<Long> fullTextResults = searchClient.doSearch(query, null, searchParams.getIdentity(), searchParams.getRoles(), 0, 100);
+				if(fullTextResults.isEmpty()) {
+					count = new Integer(0);
+					return new DefaultResultInfos<AuthoringEntryRow>();
+				}
 				searchParams.setRepoEntryKeys(fullTextResults);
 			} catch (ServiceNotAvailableException | ParseException | QueryException e) {
 				log.error("", e);
diff --git a/src/main/java/org/olat/repository/ui/list/DefaultRepositoryEntryDataSource.java b/src/main/java/org/olat/repository/ui/list/DefaultRepositoryEntryDataSource.java
index 0bda663e21d..5a436e3fd73 100644
--- a/src/main/java/org/olat/repository/ui/list/DefaultRepositoryEntryDataSource.java
+++ b/src/main/java/org/olat/repository/ui/list/DefaultRepositoryEntryDataSource.java
@@ -130,6 +130,10 @@ public class DefaultRepositoryEntryDataSource implements FlexiTableDataSourceDel
 		if(StringHelper.containsNonWhitespace(query)) {
 			try {
 				List<Long> fullTextResults = searchClient.doSearch(query, null, searchParams.getIdentity(), searchParams.getRoles(), 0, 100);
+				if(fullTextResults.isEmpty()) {
+					count = new Integer(0);
+					return new DefaultResultInfos<RepositoryEntryRow>();
+				}
 				searchParams.setRepoEntryKeys(fullTextResults);
 			} catch (ServiceNotAvailableException | ParseException | QueryException e) {
 				log.error("", e);
-- 
GitLab