Fix change id double encoded issue

RestApi#id will url encode id, so we should pass in a decoded one,
otherwise for project names with special url character will be encoded
twice and cause a 404. I.e. "xx/yy" will become "xx%252F/yy" while we
want "xx%2Fyy".

Change-Id: Ia0c39522d5631e4631f06b0b0cdf7d03c0767f9f
diff --git a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsDropDownPanel.java b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsDropDownPanel.java
index 23017f0..787d757 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsDropDownPanel.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsDropDownPanel.java
@@ -22,6 +22,7 @@
 import com.google.gerrit.plugin.client.Plugin;
 import com.google.gerrit.plugin.client.extension.Panel;
 import com.google.gerrit.plugin.client.rpc.RestApi;
+import com.google.gwt.http.client.URL;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.Grid;
@@ -44,9 +45,10 @@
   JobsDropDownPanel(Panel panel) {
     ChangeInfo change =
         panel.getObject(GerritUiExtensionPoint.Key.CHANGE_INFO).cast();
+    String decodedChangeId = URL.decodePathSegment(change.id());
     RevisionInfo rev =
         panel.getObject(GerritUiExtensionPoint.Key.REVISION_INFO).cast();
-    new RestApi("changes").id(change.id()).view("revisions").id(rev.id())
+    new RestApi("changes").id(decodedChangeId).view("revisions").id(rev.id())
         .view(Plugin.get().getPluginName(), "verifications")
         .addParameter("sort", "REPORTER")
         .addParameter("filter", "CURRENT")
diff --git a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsPanel.java b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsPanel.java
index 7ace329..f9d3603 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsPanel.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsPanel.java
@@ -21,6 +21,7 @@
 import com.google.gerrit.plugin.client.Plugin;
 import com.google.gerrit.plugin.client.extension.Panel;
 import com.google.gerrit.plugin.client.rpc.RestApi;
+import com.google.gwt.http.client.URL;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.Grid;
@@ -41,18 +42,19 @@
   }
 
   JobsPanel(Panel panel) {
-    ChangeInfo change =
+    final ChangeInfo change =
         panel.getObject(GerritUiExtensionPoint.Key.CHANGE_INFO).cast();
-    RevisionInfo rev =
+    String decodedChangeId = URL.decodePathSegment(change.id());
+    final RevisionInfo rev =
         panel.getObject(GerritUiExtensionPoint.Key.REVISION_INFO).cast();
-    final String patchsetId = change.id() + "," + rev.id();
-    new RestApi("changes").id(change.id()).view("revisions").id(rev.id())
+    new RestApi("changes").id(decodedChangeId).view("revisions").id(rev.id())
         .view(Plugin.get().getPluginName(), "verifications")
         .addParameter("sort", "REPORTER").addParameter("filter", "CURRENT")
         .get(new AsyncCallback<NativeMap<VerificationInfo>>() {
           @Override
           public void onSuccess(NativeMap<VerificationInfo> result) {
             if (!result.isEmpty()) {
+              final String patchsetId = change.id() + "," + rev.id();
               display(patchsetId, result);
             }
           }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsScreen.java b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsScreen.java
index abaeab0..8e482ab 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsScreen.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/client/JobsScreen.java
@@ -19,6 +19,7 @@
 import com.google.gerrit.plugin.client.Plugin;
 import com.google.gerrit.plugin.client.rpc.RestApi;
 import com.google.gerrit.plugin.client.screen.Screen;
+import com.google.gwt.http.client.URL;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.ui.FlexTable;
 import com.google.gwt.user.client.ui.Image;
@@ -38,10 +39,10 @@
   JobsScreen(final String patchsetId) {
     setStyleName("verifystatus-panel");
     String[] id = patchsetId.split(",");
-    String chagneId = id[0];
+    String decodedChagneId = URL.decodePathSegment(id[0]);
     String revId = id[1];
 
-    new RestApi("changes").id(chagneId).view("revisions").id(revId)
+    new RestApi("changes").id(decodedChagneId).view("revisions").id(revId)
         .view(Plugin.get().getPluginName(), "verifications")
         .addParameter("sort", "REPORTER")
         .get(new AsyncCallback<NativeMap<VerificationInfo>>() {