From 63284c5d4baed7a53955546803641e51358e1307 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Mon, 19 May 2014 14:37:31 +0200 Subject: [PATCH] OO-990: fix some issue with filtering in flexi tables and pageing with very large number of entries --- .../table/AbstractFlexiTableRenderer.java | 4 ++-- .../elements/table/FlexiTableElementImpl.java | 16 ++++++++++++---- .../ui/author/AuthoringEntryDataSource.java | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) 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 211a0c4825b..a072f8fbf3c 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 @@ -501,7 +501,7 @@ public abstract class AbstractFlexiTableRenderer extends DefaultComponentRendere nearright = maxPage - page; nearleft += (nearleft - nearright); } - for (int i = 1; i <= maxPage; i++) { + for (int i = 0; i <= maxPage; i++) { // adapt stepsize if needed stepSize = adaptStepIfNeeded(page, maxStepSize, stepSize, i); @@ -511,7 +511,7 @@ public abstract class AbstractFlexiTableRenderer extends DefaultComponentRendere isStep = isStep && (stepCnt % useEveryStep == 0); } isNear = (i > (page - nearleft) && i < (page + nearright)); - if (i == 1 || i == maxPage || isStep || isNear) { + if (i == 0 || i == maxPage || isStep || isNear) { appendPagenNumberLink(sb, ftC, page, i); } } 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 61fd916fd51..74fa37c453d 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 @@ -599,10 +599,10 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle && extendedSearchButton.getFormDispatchId().equals(dispatchuri)) { expandExtendedSearch(ureq); } else if(dispatchuri != null && StringHelper.containsNonWhitespace(filter)) { - filter(filter); + doFilter(filter); } else if(exportButton != null && exportButton.getFormDispatchId().equals(dispatchuri)) { - export(ureq); + doExport(ureq); } else if(dispatchuri != null && select != null && select.equals("checkall")) { doSelectAll(); } else if(dispatchuri != null && select != null && select.equals("uncheckall")) { @@ -687,7 +687,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle } } - protected void filter(String filterKey) { + private void doFilter(String filterKey) { if(filterKey == null) { for(FlexiTableFilter filter:filters) { filter.setSelected(false); @@ -699,8 +699,16 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle } if(dataModel instanceof FilterableFlexiTableModel) { + rowCount = -1; + currentPage = 0; + currentFirstResult = 0; + ((FilterableFlexiTableModel)dataModel).filter(filterKey); } else if(dataSource != null) { + rowCount = -1; + currentPage = 0; + currentFirstResult = 0; + List<String> conditionalQueries = Collections.singletonList(filterKey); dataSource.clear(); dataSource.load(null, conditionalQueries, 0, getPageSize(), orderBy); @@ -708,7 +716,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle component.setDirty(true); } - protected void export(UserRequest ureq) { + private void doExport(UserRequest ureq) { MediaResource resource; if(dataModel instanceof ExportableFlexiTableDataModel) { resource = ((ExportableFlexiTableDataModel)dataModel).export(component); 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 66126df20fe..79a66330aa2 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataSource.java +++ b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDataSource.java @@ -108,7 +108,7 @@ public class AuthoringEntryDataSource implements FlexiTableDataSourceDelegate<Au if(condQueries != null && condQueries.size() > 0) { String filter = condQueries.get(0); if(StringHelper.containsNonWhitespace(filter)) { - searchParams.addResourceTypes(filter); + searchParams.setResourceTypes(Collections.singletonList(filter)); } else { searchParams.setResourceTypes(null); } -- GitLab