diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/PaginatedProjectScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/PaginatedProjectScreen.java new file mode 100644 index 0000000000..63498038ad --- /dev/null +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/PaginatedProjectScreen.java @@ -0,0 +1,76 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.client.admin; + +import com.google.gerrit.client.Gerrit; +import com.google.gerrit.client.ui.Hyperlink; +import com.google.gerrit.reviewdb.client.Project; +import com.google.gwt.http.client.URL; + +abstract class PaginatedProjectScreen extends ProjectScreen { + protected int pageSize; + protected String match; + protected int start; + + PaginatedProjectScreen(Project.NameKey toShow) { + super(toShow); + pageSize = Gerrit.getUserPreferences().changesPerPage(); + } + + protected void parseToken(String token) { + for (String kvPair : token.split("[,;&/?]")) { + String[] kv = kvPair.split("=", 2); + if (kv.length != 2 || kv[0].isEmpty()) { + continue; + } + + if ("filter".equals(kv[0])) { + match = URL.decodeQueryString(kv[1]); + } + + if ("skip".equals(kv[0]) + && URL.decodeQueryString(kv[1]).matches("^[\\d]+")) { + start = Integer.parseInt(URL.decodeQueryString(kv[1])); + } + } + } + + protected void parseToken() { + parseToken(getToken()); + } + + protected String getTokenForScreen(String filter, int skip) { + String token = getScreenToken(); + 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; + } + + protected abstract String getScreenToken(); + + protected void setupNavigationLink(Hyperlink link, String filter, int skip) { + link.setTargetHistoryToken(getTokenForScreen(filter, skip)); + link.setVisible(true); + } +} diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectBranchesScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectBranchesScreen.java index 8ecf650b49..c6d4f42f63 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectBranchesScreen.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectBranchesScreen.java @@ -53,7 +53,6 @@ import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.event.dom.client.KeyUpHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; -import com.google.gwt.http.client.URL; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.CheckBox; @@ -74,7 +73,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -public class ProjectBranchesScreen extends ProjectScreen { +public class ProjectBranchesScreen extends PaginatedProjectScreen { private Hyperlink prev; private Hyperlink next; private BranchesTable branchTable; @@ -83,56 +82,16 @@ public class ProjectBranchesScreen extends ProjectScreen { private HintTextBox nameTxtBox; private HintTextBox irevTxtBox; private FlowPanel addPanel; - private int pageSize; - private int start; private NpTextBox filterTxt; - private String match; private Query query; public ProjectBranchesScreen(final Project.NameKey toShow) { super(toShow); - pageSize = Gerrit.getUserPreferences().changesPerPage(); } - private void parseToken() { - String token = getToken(); - - for (String kvPair : token.split("[,;&/?]")) { - String[] kv = kvPair.split("=", 2); - if (kv.length != 2 || kv[0].isEmpty()) { - continue; - } - - if ("filter".equals(kv[0])) { - match = URL.decodeQueryString(kv[1]); - } - - if ("skip".equals(kv[0]) - && URL.decodeQueryString(kv[1]).matches("^[\\d]+")) { - start = Integer.parseInt(URL.decodeQueryString(kv[1])); - } - } - } - - 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 = PageLinks.toProjectBranches(getProjectKey()); - 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 getScreenToken() { + return PageLinks.toProjectBranches(getProjectKey()); } @Override diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectListScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectListScreen.java index f9904cd5b2..7cac8ecdf8 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectListScreen.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectListScreen.java @@ -28,12 +28,10 @@ import com.google.gerrit.client.ui.HighlightingInlineHyperlink; import com.google.gerrit.client.ui.Hyperlink; import com.google.gerrit.client.ui.ProjectSearchLink; import com.google.gerrit.client.ui.ProjectsTable; -import com.google.gerrit.client.ui.Screen; import com.google.gerrit.common.PageLinks; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.event.dom.client.KeyUpHandler; -import com.google.gwt.http.client.URL; import com.google.gwt.user.client.History; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.FlowPanel; @@ -44,37 +42,21 @@ import com.google.gwtexpui.globalkey.client.NpTextBox; import java.util.List; -public class ProjectListScreen extends Screen { +public class ProjectListScreen extends PaginatedProjectScreen { private Hyperlink prev; private Hyperlink next; private ProjectsTable projects; private NpTextBox filterTxt; - private int pageSize; - private String match = ""; - private int start; private Query query; public ProjectListScreen() { - pageSize = Gerrit.getUserPreferences().changesPerPage(); + super(null); } public ProjectListScreen(String params) { this(); - for (String kvPair : params.split("[,;&]")) { - String[] kv = kvPair.split("=", 2); - if (kv.length != 2 || kv[0].isEmpty()) { - continue; - } - - if ("filter".equals(kv[0])) { - match = URL.decodeQueryString(kv[1]); - } - - if ("skip".equals(kv[0]) && URL.decodeQueryString(kv[1]).matches("^[\\d]+")) { - start = Integer.parseInt(URL.decodeQueryString(kv[1])); - } - } + parseToken(params); } @Override @@ -83,25 +65,9 @@ public class ProjectListScreen extends Screen { query = new Query(match).start(start).run(); } - 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_PROJECTS; - 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 getScreenToken() { + return ADMIN_PROJECTS; } @Override diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectScreen.java index 45334db004..2927f8d87d 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectScreen.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectScreen.java @@ -47,7 +47,9 @@ public abstract class ProjectScreen extends Screen { @Override protected void onInitUI() { super.onInitUI(); - setPageTitle(Util.M.project(name.get())); + if (name != null) { + setPageTitle(Util.M.project(name.get())); + } } @Override