summaryrefslogtreecommitdiffstats
path: root/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectListScreen.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectListScreen.java')
-rw-r--r--gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/ProjectListScreen.java99
1 files changed, 87 insertions, 12 deletions
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 91256220bd..ee58420282 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
@@ -14,38 +14,82 @@
package com.google.gerrit.client.admin;
+import static com.google.gerrit.common.PageLinks.ADMIN_PROJECTS;
+
import com.google.gerrit.client.Dispatcher;
import com.google.gerrit.client.Gerrit;
import com.google.gerrit.client.GitwebLink;
import com.google.gerrit.client.projects.ProjectInfo;
import com.google.gerrit.client.projects.ProjectMap;
-import com.google.gerrit.client.rpc.ScreenLoadCallback;
-import com.google.gerrit.client.ui.Hyperlink;
+import com.google.gerrit.client.rpc.GerritCallback;
+import com.google.gerrit.client.ui.FilteredUserInterface;
+import com.google.gerrit.client.ui.HighlightingInlineHyperlink;
+import com.google.gerrit.client.ui.IgnoreOutdatedFilterResultsCallbackWrapper;
+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.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;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwtexpui.globalkey.client.NpTextBox;
-public class ProjectListScreen extends Screen {
+public class ProjectListScreen extends Screen implements FilteredUserInterface {
private ProjectsTable projects;
+ private NpTextBox filterTxt;
+ private String subname;
+
+ public ProjectListScreen() {
+ }
+
+ public ProjectListScreen(String params) {
+ for (String kvPair : params.split("[,;&]")) {
+ String[] kv = kvPair.split("=", 2);
+ if (kv.length != 2 || kv[0].isEmpty()) {
+ continue;
+ }
+
+ if ("filter".equals(kv[0])) {
+ subname = URL.decodeQueryString(kv[1]);
+ }
+ }
+ }
@Override
protected void onLoad() {
super.onLoad();
- ProjectMap.all(new ScreenLoadCallback<ProjectMap>(this) {
- @Override
- protected void preDisplay(final ProjectMap result) {
- projects.display(result);
- projects.finishDisplay();
- }
- });
+ display();
+ refresh();
+ }
+
+ private void refresh() {
+ setToken(subname == null || "".equals(subname) ? ADMIN_PROJECTS
+ : ADMIN_PROJECTS + "?filter=" + URL.encodeQueryString(subname));
+ ProjectMap.match(subname,
+ new IgnoreOutdatedFilterResultsCallbackWrapper<ProjectMap>(this,
+ new GerritCallback<ProjectMap>() {
+ @Override
+ public void onSuccess(ProjectMap result) {
+ projects.display(result);
+ }
+ }));
+ }
+
+ @Override
+ public String getCurrentFilter() {
+ return subname;
}
@Override
protected void onInitUI() {
super.onInitUI();
setPageTitle(Util.C.projectListTitle());
+ initPageHeader();
projects = new ProjectsTable() {
@Override
@@ -64,7 +108,7 @@ public class ProjectListScreen extends Screen {
}
private String link(final ProjectInfo item) {
- return Dispatcher.toProjectAdmin(item.name_key(), ProjectScreen.INFO);
+ return Dispatcher.toProject(item.name_key());
}
@Override
@@ -78,7 +122,10 @@ public class ProjectListScreen extends Screen {
@Override
protected void populate(final int row, final ProjectInfo k) {
- table.setWidget(row, 1, new Hyperlink(k.name(), link(k)));
+ FlowPanel fp = new FlowPanel();
+ fp.add(new ProjectSearchLink(k.name_key()));
+ fp.add(new HighlightingInlineHyperlink(k.name(), link(k), subname));
+ table.setWidget(row, 1, fp);
table.setText(row, 2, k.description());
GitwebLink l = Gerrit.getGitwebLink();
if (l != null) {
@@ -94,6 +141,34 @@ public class ProjectListScreen extends Screen {
add(projects);
}
+ private void initPageHeader() {
+ final HorizontalPanel hp = new HorizontalPanel();
+ hp.setStyleName(Gerrit.RESOURCES.css().projectFilterPanel());
+ final Label filterLabel = new Label(Util.C.projectFilter());
+ filterLabel.setStyleName(Gerrit.RESOURCES.css().projectFilterLabel());
+ hp.add(filterLabel);
+ filterTxt = new NpTextBox();
+ filterTxt.setValue(subname);
+ filterTxt.addKeyUpHandler(new KeyUpHandler() {
+ @Override
+ public void onKeyUp(KeyUpEvent event) {
+ subname = filterTxt.getValue();
+ refresh();
+ }
+ });
+ hp.add(filterTxt);
+ add(hp);
+ }
+
+ @Override
+ public void onShowView() {
+ super.onShowView();
+ if (subname != null) {
+ filterTxt.setCursorPos(subname.length());
+ }
+ filterTxt.setFocus(true);
+ }
+
@Override
public void registerKeys() {
super.registerKeys();