Fix project links to be query links

Instead of using the older "#project,merged,name" anchor for a
project link and rewriting it in the dispatcher, use the search
query link directly.

Change-Id: I27c3cfe54bbb35f5b6197fd504a22a53c21adf4b
Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/gerrit-common/src/main/java/com/google/gerrit/common/PageLinks.java b/gerrit-common/src/main/java/com/google/gerrit/common/PageLinks.java
index 358f656..43541b7 100644
--- a/gerrit-common/src/main/java/com/google/gerrit/common/PageLinks.java
+++ b/gerrit-common/src/main/java/com/google/gerrit/common/PageLinks.java
@@ -69,21 +69,28 @@
     return "q," + KeyUtil.encode(query) + "," + TOP;
   }
 
-  public static String toProject(final Project.NameKey proj, Status status) {
+  public static String projectQuery(Project.NameKey proj, Status status) {
     switch (status) {
       case ABANDONED:
-        return "project,abandoned," + proj.toString() + ",n,z";
+        return "status:abandoned " + op("project", proj.get());
 
       case MERGED:
-        return "project,merged," + proj.toString() + ",n,z";
+        return "status:merged " + op("project", proj.get());
 
       case NEW:
       case SUBMITTED:
       default:
-        return "project,open," + proj.toString() + ",n,z";
+        return "status:open " + op("project", proj.get());
     }
   }
 
+  public static String op(String name, String value) {
+    if (value.indexOf(' ') >= 0) {
+      return name + ":\"" + value + "\"";
+    }
+    return name + ":" + value;
+  }
+
   protected PageLinks() {
   }
 }
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java
index 5c07a80..f93fd5e 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Dispatcher.java
@@ -30,6 +30,7 @@
 import static com.google.gerrit.common.PageLinks.SETTINGS_PROJECTS;
 import static com.google.gerrit.common.PageLinks.SETTINGS_SSHKEYS;
 import static com.google.gerrit.common.PageLinks.SETTINGS_WEBIDENT;
+import static com.google.gerrit.common.PageLinks.op;
 
 import com.google.gerrit.client.account.MyAgreementsScreen;
 import com.google.gerrit.client.account.MyContactInformationScreen;
@@ -202,7 +203,7 @@
       final int c = s.indexOf(',');
       Project.NameKey proj = Project.NameKey.parse(s.substring(0, c));
       return QueryScreen.forQuery( //
-          "status:open " + QueryScreen.op("project", proj.get()), //
+          "status:open " + op("project", proj.get()), //
           s.substring(c + 1));
     }
 
@@ -212,7 +213,7 @@
       final int c = s.indexOf(',');
       Project.NameKey proj = Project.NameKey.parse(s.substring(0, c));
       return QueryScreen.forQuery( //
-          "status:merged " + QueryScreen.op("project", proj.get()), //
+          "status:merged " + op("project", proj.get()), //
           s.substring(c + 1));
     }
 
@@ -222,7 +223,7 @@
       final int c = s.indexOf(',');
       Project.NameKey proj = Project.NameKey.parse(s.substring(0, c));
       return QueryScreen.forQuery( //
-          "status:abandoned " + QueryScreen.op("project", proj.get()), //
+          "status:abandoned " + op("project", proj.get()), //
           s.substring(c + 1));
     }
 
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/QueryScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/QueryScreen.java
index 3ddfeff..c600569 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/QueryScreen.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/QueryScreen.java
@@ -24,13 +24,6 @@
 
 
 public class QueryScreen extends PagedSingleListScreen {
-  public static String op(String name, String value) {
-    if (value.indexOf(' ') >= 0) {
-      return name + ":\"" + value + "\"";
-    }
-    return name + ":" + value;
-  }
-
   public static QueryScreen forQuery(String query) {
     return forQuery(query, PageLinks.TOP);
   }
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/ui/ProjectLink.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/ui/ProjectLink.java
index 2c18448..b2c4c3e 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/ui/ProjectLink.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/ui/ProjectLink.java
@@ -32,7 +32,7 @@
 
   public ProjectLink(final String text, final Project.NameKey proj,
       Change.Status stat) {
-    super(text, PageLinks.toProject(proj, stat));
+    super(text, PageLinks.toChangeQuery(PageLinks.projectQuery(proj, stat)));
     status = stat;
     project = proj;
   }
@@ -43,20 +43,6 @@
   }
 
   private Screen createScreen() {
-    switch (status) {
-      case ABANDONED:
-        return QueryScreen.forQuery("status:abandoned "
-            + QueryScreen.op("project", project.get()));
-
-      case MERGED:
-        return QueryScreen.forQuery("status:merged "
-            + QueryScreen.op("project", project.get()));
-
-      case NEW:
-      case SUBMITTED:
-      default:
-        return QueryScreen.forQuery("status:open "
-            + QueryScreen.op("project", project.get()));
-    }
+    return QueryScreen.forQuery(PageLinks.projectQuery(project, status));
   }
 }
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/ProjectServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/ProjectServlet.java
index 336d2fe..3f7f68d 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/ProjectServlet.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/ProjectServlet.java
@@ -115,7 +115,8 @@
         StringBuilder r = new StringBuilder();
         r.append(urlProvider.get());
         r.append('#');
-        r.append(PageLinks.toProject(dst, Change.Status.NEW));
+        r.append(PageLinks.toChangeQuery(PageLinks.projectQuery(dst,
+            Change.Status.NEW)));
         rsp.sendRedirect(r.toString());
       }
     });