diff options
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.java | 99 |
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(); |