Eli Mesika has uploaded a new change for review. Change subject: reset page to 1 on sort ......................................................................
reset page to 1 on sort webadmin: reset page to 1 on sort - In the scenario where you have multiple pages and you select and item, it is possible for a sort operation to make the selected item unavailable on the current page. This leaves the user on a page that is no longer of interest to them. So to not confuse the user too much we will reset the page to the first page when sorting. Change-Id: I0b0a974c65c261081f1c942b2b35e75e806a86a6 Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1223770 Signed-off-by: Eli Mesika <emes...@redhat.com> --- M backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SearchableListModel.java 2 files changed, 26 insertions(+), 53 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/67/42367/1 diff --git a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java index b3b7325..ed22cb5 100644 --- a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java +++ b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/SyntaxChecker.java @@ -27,21 +27,22 @@ public static final String SORTBY = "SORTBY"; public static final String SORTDIR_ASC = "ASC"; public static final String SORTDIR_DESC = "DESC"; + public static final String PAGE = "PAGE"; - private SearchObjectAutoCompleter mSearchObjectAC; - private BaseAutoCompleter mColonAC; - private BaseAutoCompleter mPluralAC; - private BaseAutoCompleter mSortbyAC; - private BaseAutoCompleter mPageAC; - private BaseAutoCompleter mAndAC; - private BaseAutoCompleter mOrAC; - private BaseAutoCompleter mDotAC; - private BaseAutoCompleter mSortDirectionAC; - private Map<SyntaxObjectType, SyntaxObjectType[]> mStateMap; + private final SearchObjectAutoCompleter mSearchObjectAC; + private final BaseAutoCompleter mColonAC; + private final BaseAutoCompleter mPluralAC; + private final BaseAutoCompleter mSortbyAC; + private final BaseAutoCompleter mPageAC; + private final BaseAutoCompleter mAndAC; + private final BaseAutoCompleter mOrAC; + private final BaseAutoCompleter mDotAC; + private final BaseAutoCompleter mSortDirectionAC; + private final Map<SyntaxObjectType, SyntaxObjectType[]> mStateMap; - private Regex mFirstDQRegexp; - private Regex mNonSpaceRegexp; - private List<Character> mDisAllowedChars; + private final Regex mFirstDQRegexp; + private final Regex mNonSpaceRegexp; + private final List<Character> mDisAllowedChars; private SqlInjectionChecker sqlInjectionChecker; public SyntaxChecker(int searchReasultsLimit) { @@ -50,7 +51,7 @@ mColonAC = new BaseAutoCompleter(":"); mPluralAC = new BaseAutoCompleter("S"); mSortbyAC = new BaseAutoCompleter(SORTBY); - mPageAC = new BaseAutoCompleter("PAGE"); + mPageAC = new BaseAutoCompleter(PAGE); mSortDirectionAC = new BaseAutoCompleter(SORTDIR_ASC, SORTDIR_DESC); mAndAC = new BaseAutoCompleter("AND"); mOrAC = new BaseAutoCompleter("OR"); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SearchableListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SearchableListModel.java index a47233f..c4c777c 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SearchableListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SearchableListModel.java @@ -18,11 +18,6 @@ import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.common.utils.ObjectUtils; -import org.ovirt.engine.core.compat.IntegerCompat; -import org.ovirt.engine.core.compat.Match; -import org.ovirt.engine.core.compat.Regex; -import org.ovirt.engine.core.compat.RegexOptions; -import org.ovirt.engine.core.compat.StringHelper; import org.ovirt.engine.core.searchbackend.ISyntaxChecker; import org.ovirt.engine.core.searchbackend.SyntaxChecker; import org.ovirt.engine.core.searchbackend.SyntaxContainer; @@ -197,11 +192,7 @@ public String getSearchString() { - // pagingSearchString is relevant only for non-null searchString - if (searchString == null) { - return null; - } - return searchString + (pagingSearchString == null ? "" : pagingSearchString); + return searchString; } public void setSearchString(String value) @@ -227,34 +218,8 @@ private String pagingSearchString; - public int getSearchPageNumber() - { - if (StringHelper.isNullOrEmpty(getSearchString())) - { - return 1; - } - - // try getting the end of SearchString in the form of "page <n>" - String pageStringRegex = PAGE_STRING_REGEX; - - Match match = Regex.Match(getSearchString(), pageStringRegex, RegexOptions.IgnoreCase); - if (match.success()) - { - // retrieve the page number itself: - String pageString = match.getValue(); // == "page <n>" - String pageNumberRegex = PAGE_NUMBER_REGEX; - match = Regex.Match(pageString, pageNumberRegex); - if (match.success()) - { - final Integer retValue = IntegerCompat.tryParse(match.getValue()); - if (retValue != null) - { - return retValue; - } - } - } - - return 1; + public int getSearchPageNumber() { + return this.currentPageNumber; } public String getItemsCountString() { @@ -312,6 +277,7 @@ * Grid refresh timer associated with this list model. */ private GridTimer timer; + private int currentPageNumber = 1; //Default to 1 /** * Setter for the grid timer. @@ -660,6 +626,7 @@ private void setSearchStringPage(int newSearchPageNumber) { this.pagingSearchString = " page " + newSearchPageNumber; //$NON-NLS-1$ + this.currentPageNumber = newSearchPageNumber; } protected void searchNextPage() @@ -683,6 +650,7 @@ } return str.substring(0, index); } + protected boolean getNextSearchPageAllowed() { if (!getSearchNextPageCommand().getIsAvailable() || getItems() == null @@ -744,6 +712,8 @@ this.sortAscending = sortAscending; if (shouldRefresh) { + searchString = stripPageKeyword(searchString); + setSearchStringPage(1); refresh(); } } @@ -769,7 +739,9 @@ result += " " + SyntaxChecker.SORTBY + " " + sortBy //$NON-NLS-1$ //$NON-NLS-2$ + " " + (sortAscending ? SyntaxChecker.SORTDIR_ASC : SyntaxChecker.SORTDIR_DESC); //$NON-NLS-1$ } - + if (result != null && pagingSearchString != null) { + result += " " + pagingSearchString; //$NON-NLS-1$ + } return result; } -- To view, visit https://gerrit.ovirt.org/42367 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I0b0a974c65c261081f1c942b2b35e75e806a86a6 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Eli Mesika <emes...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches