diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/DefaultFlexiTableDataSourceModel.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/DefaultFlexiTableDataSourceModel.java index 1b3352798326279fef6aa508f9f6d7115fe814fd..54976b4bf62d29f879b4be21e94ecc3e23ec12cb 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/DefaultFlexiTableDataSourceModel.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/DefaultFlexiTableDataSourceModel.java @@ -137,11 +137,6 @@ public abstract class DefaultFlexiTableDataSourceModel<U> implements FlexiTableD } } - @Override - public ResultInfos<U> load(final int firstResult, final int maxResults, SortKey... orderBy) { - return loadDatas(null, null, false, firstResult, maxResults, orderBy); - } - @Override public void reload(List<Integer> rowIndex) { if(rowIndex == null || rowIndex.isEmpty()) return; @@ -171,7 +166,7 @@ public abstract class DefaultFlexiTableDataSourceModel<U> implements FlexiTableD } @Override - public ResultInfos<U> search(String query, List<String> addQueries, int firstResult, int maxResults, SortKey... orderBy) { + public ResultInfos<U> load(String query, List<String> addQueries, int firstResult, int maxResults, SortKey... orderBy) { return loadDatas(query, addQueries, false, firstResult, maxResults, orderBy); } diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableDataSource.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableDataSource.java index f7d129fbe00d1039f2c03c3e913f7f2cfdb600d6..d72b758a5ba5d523ff37251e38585cc9eca1a765 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableDataSource.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableDataSource.java @@ -37,13 +37,6 @@ public interface FlexiTableDataSource<U> extends FlexiTableDataModel<U> { */ public void clear(); - /** - * Load the rows needed for paging - * @param firstResult - * @param maxResults - */ - public ResultInfos<U> load(int firstResult, int maxResults, SortKey... orderBy); - /** * Reload the rows needed for paging * @param firstResult @@ -57,6 +50,6 @@ public interface FlexiTableDataSource<U> extends FlexiTableDataModel<U> { * @param maxResults * @param orderBy */ - public ResultInfos<U> search(String query, List<String> addQueries, int firstResult, int maxResults, SortKey... orderBy); + public ResultInfos<U> load(String query, List<String> addQueries, int firstResult, int maxResults, SortKey... orderBy); } 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 e1244189002416707b44af1af93ec6468a387374..671c18c18b7d7fe6472f2468a58f4c371e82f078 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 @@ -25,6 +25,8 @@ */ package org.olat.core.gui.components.form.flexible.impl.elements.table; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -33,6 +35,8 @@ import java.util.Map; import java.util.Set; import org.olat.core.CoreSpringFactory; +import org.olat.core.commons.persistence.ResultInfos; +import org.olat.core.commons.persistence.SortKey; import org.olat.core.dispatcher.mapper.MapperService; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; @@ -88,11 +92,14 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle private CloseableCalloutWindowController callout; private final WindowControl wControl; private final String mapperUrl; - + + private SortKey[] orderBy; private Object selectedObj; private boolean allSelectedIndex; private Set<Integer> multiSelectedIndex; + private List<String> conditionalQueries; private Set<Integer> enabledColumnIndex = new HashSet<Integer>(); + private Map<String,FormItem> components = new HashMap<String,FormItem>(); public FlexiTableElementImpl(UserRequest ureq, WindowControl wControl, String name, FlexiTableDataModel<?> tableModel) { @@ -134,7 +141,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle if(dataSource != null) { //preload it - dataSource.load(0, pageSize); + dataSource.load(null, null, 0, pageSize); } } @@ -214,6 +221,14 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle public String getSearchText() { return searchFieldEl == null ? null : searchFieldEl.getValue(); } + + public List<String> getConditionalQueries() { + return conditionalQueries; + } + + public SortKey[] getOrderBy() { + return orderBy; + } public TextElement getSearchElement() { return searchFieldEl; @@ -415,7 +430,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle search = searchFieldEl.getValue(); } List<String> condQueries = extendedSearchCtrl.getConditionalQueries(); - doSearch(ureq, search, condQueries); + doSearch(search, condQueries); } protected void evalSearchRequest(UserRequest ureq) { @@ -423,7 +438,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle searchFieldEl.evalFormRequest(ureq); String search = searchFieldEl.getValue(); if(StringHelper.containsNonWhitespace(search)) { - doSearch(ureq, search, null); + doSearch(search, null); } else { doResetSearch(ureq); } @@ -450,20 +465,39 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle protected void doSelect(UserRequest ureq, String action, int index) { getRootForm().fireFormEvent(ureq, new SelectionEvent(action, index, this, FormEvent.ONCLICK)); } + - protected void doSearch(UserRequest ureq, String search, List<String> condQueries) { + protected void doSearch(String search, List<String> condQueries) { + if(condQueries == null || condQueries.isEmpty()) { + conditionalQueries = null; + } else { + conditionalQueries = new ArrayList<String>(condQueries); + } + if(dataSource != null) { resetInternComponents(); dataSource.clear(); - dataSource.search(search, condQueries, 0, getPageSize()); + ResultInfos<?> infos = dataSource.load(search, conditionalQueries, 0, getPageSize(), orderBy); + System.out.println("Found: " + infos.getObjects().size()); + } + } + + protected ResultInfos<?> doScroll(int firstResult, int maxResults, SortKey... sortKeys) { + boolean same = Arrays.equals(orderBy , sortKeys); + if(!same) { + //clear data source + dataSource.clear(); + orderBy = sortKeys; } + + return dataSource.load(getSearchText(), getConditionalQueries(), firstResult, maxResults, sortKeys); } protected void doResetSearch(UserRequest ureq) { if(dataSource != null) { resetInternComponents(); dataSource.clear(); - dataSource.load(0, getPageSize()); + dataSource.load(null, null, 0, getPageSize()); } } @@ -480,7 +514,7 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle public Set<Integer> getMultiSelectedIndex() { if(allSelectedIndex && dataSource != null) { //ensure the whole data model is loaded - dataSource.load(0, -1); + dataSource.load(getSearchText(), getConditionalQueries(), 0, -1); Set<Integer> allIndex = new HashSet<Integer>(); for(int i=dataModel.getRowCount(); i-->0; ) { allIndex.add(new Integer(i)); @@ -539,7 +573,8 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle @Override public void reloadData() { if(dataSource != null) { - dataSource.load(0, getPageSize());//reload needed rows + dataSource.clear(); + dataSource.load(getSearchText(), getConditionalQueries(), 0, getPageSize());//reload needed rows } } diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableModelMapper.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableModelMapper.java index 7ecbfe991ce346cd0b0ecc01f268ed9e4d15539a..888752ffc74662e7beb6f4802aca304c0e4a4c52 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableModelMapper.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableModelMapper.java @@ -80,7 +80,6 @@ public class FlexiTableModelMapper implements Mapper { if(StringHelper.isLong(firstRowStr) && StringHelper.isLong(maxRowStr)) { FlexiTableDataModel<?> dataModel = ftE.getTableDataModel(); - FlexiTableDataSource<?> dataSource = ftE.getTableDataSource(); FlexiTableColumnModel columnsModel = dataModel.getTableColumnModel(); SortKey orderBy = null; @@ -115,12 +114,7 @@ public class FlexiTableModelMapper implements Mapper { int maxRows = Integer.parseInt(maxRowStr); int lastRow = Math.min(rows, firstRow + maxRows); //paged loading - ResultInfos<?> results; - if(StringHelper.containsNonWhitespace(ftE.getSearchText())) { - results = dataSource.search(ftE.getSearchText(), null, firstRow, maxRows, orderBy); - } else { - results = dataSource.load(firstRow, maxRows, orderBy); - } + ResultInfos<?> results = ftE.doScroll(firstRow, maxRows, orderBy); ftE.setCurrentFirstResult(results.getNextFirstResult()); for (int i = firstRow; i < lastRow; i++) { diff --git a/src/main/java/org/olat/modules/qpool/ui/ItemRow.java b/src/main/java/org/olat/modules/qpool/ui/ItemRow.java index 6302f22066e8da271a67760667cac9142c53418a..86a47b57722487eeeacac002eae1a36afba2d7c2 100644 --- a/src/main/java/org/olat/modules/qpool/ui/ItemRow.java +++ b/src/main/java/org/olat/modules/qpool/ui/ItemRow.java @@ -195,4 +195,12 @@ public class ItemRow implements QuestionItemView { } return false; } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("itemRow[key=").append(delegate.getKey()).append(":") + .append("name=").append(delegate.getTitle()).append("]"); + return sb.toString(); + } } \ No newline at end of file diff --git a/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java b/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java index e46ab8b222388d814b3d31c07758191a231be34a..249ad692831356fc04c5b1b01843cf92650cf265 100644 --- a/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java +++ b/src/main/java/org/olat/modules/qpool/ui/admin/QLicensesAdminController.java @@ -100,7 +100,6 @@ public class QLicensesAdminController extends FormBasicController { model = new QItemTypeDataModel(columnsModel); tableEl = uifactory.addTableElement(ureq, getWindowControl(), "licenses", model, getTranslator(), formLayout); - uifactory.addTableElement(ureq, getWindowControl(), "licenses", model, getTranslator(), formLayout); tableEl.setRendererType(FlexiTableRendererType.classic); createType = uifactory.addFormLink("create.license", formLayout, Link.BUTTON);