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

Reply via email to