summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnthony Chin <anthony.a.chin@ericsson.com>2014-04-11 12:38:31 -0400
committerDavid Pursehouse <david.pursehouse@sonymobile.com>2014-04-16 21:21:00 +0900
commitd5edded54ddc2db50dd06130b79c839782873a65 (patch)
tree186dcf8c866e5b6eeaafa505ff804322c6ee5374
parentdc78329e347abed59247dd7e3846d5996bc5a1ee (diff)
Implement pagination in group list screen
Group list screen now uses pagination similar to project list screen. The number of groups displayed is determined by the 'Maximum Page Size' in user preferences. Change-Id: Id4649fda4b06ef62bf9d630460aeefc1c5f65989
-rw-r--r--gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.java3
-rw-r--r--gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.properties3
-rw-r--r--gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupListScreen.java88
-rw-r--r--gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupTable.java10
-rw-r--r--gerrit-gwtui/src/main/java/com/google/gerrit/client/groups/GroupMap.java16
5 files changed, 106 insertions, 14 deletions
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.java
index 530c0a77bc..cb96e38631 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.java
@@ -133,4 +133,7 @@ public interface AdminConstants extends Constants {
String pagedProjectListPrev();
String pagedProjectListNext();
+
+ String pagedGroupListPrev();
+ String pagedGroupListNext();
}
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.properties b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.properties
index c54adb51fd..6a25a09ad7 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.properties
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/AdminConstants.properties
@@ -98,6 +98,9 @@ errorNoGitRepository = No Git Repository
pagedProjectListPrev = &#x21e6;Prev
pagedProjectListNext = Next&#x21e8;
+pagedGroupListPrev = &#x21e6;Prev
+pagedGroupListNext = Next&#x21e8;
+
addPermission = Add Permission ...
# Permission Names
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupListScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupListScreen.java
index cf9fb041f7..6579f83e96 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupListScreen.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupListScreen.java
@@ -21,8 +21,10 @@ import com.google.gerrit.client.groups.GroupMap;
import com.google.gerrit.client.rpc.GerritCallback;
import com.google.gerrit.client.ui.AccountScreen;
import com.google.gerrit.client.ui.FilteredUserInterface;
+import com.google.gerrit.client.ui.Hyperlink;
import com.google.gerrit.client.ui.IgnoreOutdatedFilterResultsCallbackWrapper;
import com.google.gerrit.common.PageLinks;
+import com.google.gerrit.reviewdb.client.AccountGeneralPreferences;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
@@ -32,11 +34,16 @@ import com.google.gwt.user.client.ui.Label;
import com.google.gwtexpui.globalkey.client.NpTextBox;
public class GroupListScreen extends AccountScreen implements FilteredUserInterface {
+ private Hyperlink prev;
+ private Hyperlink next;
private GroupTable groups;
private NpTextBox filterTxt;
private String subname = "";
+ private int startPosition;
+ private int pageSize;
public GroupListScreen() {
+ configurePageSize();
}
public GroupListScreen(String params) {
@@ -49,6 +56,22 @@ public class GroupListScreen extends AccountScreen implements FilteredUserInterf
if ("filter".equals(kv[0])) {
subname = URL.decodeQueryString(kv[1]);
}
+
+ if ("skip".equals(kv[0]) && URL.decodeQueryString(kv[1]).matches("^[\\d]+")) {
+ startPosition = Integer.parseInt(URL.decodeQueryString(kv[1]));
+ }
+ }
+ configurePageSize();
+ }
+
+ private void configurePageSize() {
+ if (Gerrit.isSignedIn()) {
+ final AccountGeneralPreferences p =
+ Gerrit.getUserAccount().getGeneralPreferences();
+ final short m = p.getMaximumPageSize();
+ pageSize = 0 < m ? m : AccountGeneralPreferences.DEFAULT_PAGESIZE;
+ } else {
+ pageSize = AccountGeneralPreferences.DEFAULT_PAGESIZE;
}
}
@@ -56,13 +79,17 @@ public class GroupListScreen extends AccountScreen implements FilteredUserInterf
protected void onLoad() {
super.onLoad();
display();
- refresh(false);
+ refresh(false, false);
}
- private void refresh(final boolean open) {
- setToken(subname == null || "".equals(subname) ? ADMIN_GROUPS
- : ADMIN_GROUPS + "?filter=" + URL.encodeQueryString(subname));
- GroupMap.match(subname,
+ private void refresh(final boolean open, final boolean filterModified) {
+ if (filterModified){
+ startPosition = 0;
+ }
+ setToken(getTokenForScreen(subname, startPosition));
+ // Retrieve one more group than page size to determine if there are more
+ // groups to display
+ GroupMap.match(subname, pageSize + 1, startPosition,
new IgnoreOutdatedFilterResultsCallbackWrapper<GroupMap>(this,
new GerritCallback<GroupMap>() {
@Override
@@ -71,13 +98,45 @@ public class GroupListScreen extends AccountScreen implements FilteredUserInterf
Gerrit.display(PageLinks.toGroup(
result.values().get(0).getGroupUUID()));
} else {
- groups.display(result, subname);
+ if (result.size() <= pageSize) {
+ groups.display(result, subname);
+ next.setVisible(false);
+ } else {
+ groups.displaySubset(result, 0, result.size() - 1, subname);
+ setupNavigationLink(next, subname, startPosition + pageSize);
+ }
+ if (startPosition > 0) {
+ setupNavigationLink(prev, subname, startPosition - pageSize);
+ } else {
+ prev.setVisible(false);
+ }
groups.finishDisplay();
}
}
}));
}
+ private void setupNavigationLink(Hyperlink link, String filter, int skip) {
+ link.setTargetHistoryToken(getTokenForScreen(filter, skip));
+ link.setVisible(true);
+ }
+
+ private String getTokenForScreen(String filter, int skip) {
+ String token = ADMIN_GROUPS;
+ if (filter != null && !filter.isEmpty()) {
+ token += "?filter=" + URL.encodeQueryString(filter);
+ }
+ if (skip > 0) {
+ if (token.contains("?filter=")) {
+ token += ",";
+ } else {
+ token += "?";
+ }
+ token += "skip=" + skip;
+ }
+ return token;
+ }
+
@Override
public String getCurrentFilter() {
return subname;
@@ -89,8 +148,20 @@ public class GroupListScreen extends AccountScreen implements FilteredUserInterf
setPageTitle(Util.C.groupListTitle());
initPageHeader();
+ prev = new Hyperlink(Util.C.pagedGroupListPrev(), true, "");
+ prev.setVisible(false);
+
+ next = new Hyperlink(Util.C.pagedGroupListNext(), true, "");
+ next.setVisible(false);
+
groups = new GroupTable(PageLinks.ADMIN_GROUPS);
add(groups);
+
+ final HorizontalPanel buttons = new HorizontalPanel();
+ buttons.setStyleName(Gerrit.RESOURCES.css().changeTablePrevNextLinks());
+ buttons.add(prev);
+ buttons.add(next);
+ add(buttons);
}
private void initPageHeader() {
@@ -106,9 +177,10 @@ public class GroupListScreen extends AccountScreen implements FilteredUserInterf
public void onKeyUp(KeyUpEvent event) {
boolean enterPressed =
event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER;
- if (enterPressed || !filterTxt.getValue().equals(subname)) {
+ boolean filterModified = !filterTxt.getValue().equals(subname);
+ if (enterPressed || filterModified) {
subname = filterTxt.getValue();
- refresh(enterPressed);
+ refresh(enterPressed, filterModified);
}
}
});
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupTable.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupTable.java
index de840813b6..1b420b4e51 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupTable.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupTable.java
@@ -95,6 +95,14 @@ public class GroupTable extends NavigationTable<GroupInfo> {
}
public void display(List<GroupInfo> list, String toHighlight) {
+ displaySubset(list, toHighlight, 0, list.size());
+ }
+
+ public void displaySubset(GroupMap groups, int fromIndex, int toIndex, String toHighlight) {
+ displaySubset(Natives.asList(groups.values()), toHighlight, fromIndex, toIndex);
+ }
+
+ public void displaySubset(List<GroupInfo> list, String toHighlight, int fromIndex, int toIndex) {
while (1 < table.getRowCount())
table.removeRow(table.getRowCount() - 1);
@@ -104,7 +112,7 @@ public class GroupTable extends NavigationTable<GroupInfo> {
return a.name().compareTo(b.name());
}
});
- for(GroupInfo group : list) {
+ for(GroupInfo group : list.subList(fromIndex, toIndex)) {
final int row = table.getRowCount();
table.insertRow(row);
applyDataRowStyle(row);
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/groups/GroupMap.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/groups/GroupMap.java
index 6ba00ae643..f28fb8649a 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/groups/GroupMap.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/groups/GroupMap.java
@@ -24,12 +24,18 @@ public class GroupMap extends NativeMap<GroupInfo> {
groups().get(NativeMap.copyKeysIntoChildren(callback));
}
- public static void match(String match, AsyncCallback<GroupMap> cb) {
- if (match == null || "".equals(match)) {
- all(cb);
- } else {
- groups().addParameter("m", match).get(NativeMap.copyKeysIntoChildren(cb));
+ public static void match(String match, int limit, int start, AsyncCallback<GroupMap> cb) {
+ RestApi call = groups();
+ if (match != null) {
+ call.addParameter("m", match);
}
+ if (limit > 0) {
+ call.addParameter("n", limit);
+ }
+ if (start > 0) {
+ call.addParameter("S", start);
+ }
+ call.get(NativeMap.copyKeysIntoChildren(cb));
}
public static void myOwned(AsyncCallback<GroupMap> cb) {