Merge "Extend Gerrit's top menu with plugin-owned entry"
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloWorldAction.java b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloProjectAction.java
similarity index 77%
copy from src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloWorldAction.java
copy to src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloProjectAction.java
index 29bc4de..e977113 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloWorldAction.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloProjectAction.java
@@ -20,12 +20,12 @@
 import com.google.gerrit.extensions.webui.UiAction;
 import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.IdentifiedUser;
-import com.google.gerrit.server.change.RevisionResource;
+import com.google.gerrit.server.project.ProjectResource;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 
-class HelloWorldAction implements UiAction<RevisionResource>,
-    RestModifyView<RevisionResource, HelloWorldAction.Input> {
+class HelloProjectAction implements UiAction<ProjectResource>,
+    RestModifyView<ProjectResource, HelloProjectAction.Input> {
 
   private Provider<CurrentUser> user;
 
@@ -35,27 +35,26 @@
   }
 
   @Inject
-  HelloWorldAction(Provider<CurrentUser> user) {
+  HelloProjectAction(Provider<CurrentUser> user) {
     this.user = user;
   }
 
   @Override
-  public String apply(RevisionResource rev, Input input) {
+  public String apply(ProjectResource rsrc, Input input) {
     final String greeting = input.french
         ? "Bonjour"
         : "Hello";
-    return String.format("%s %s from change %s, patch set %d!",
+    return String.format("%s %s from project %s!",
         greeting,
         Strings.isNullOrEmpty(input.message)
             ? Objects.firstNonNull(user.get().getUserName(), "world")
             : input.message,
-        rev.getChange().getId().toString(),
-        rev.getPatchSet().getPatchSetId());
+        rsrc.getName());
   }
 
   @Override
   public Description getDescription(
-      RevisionResource resource) {
+      ProjectResource resource) {
     return new Description()
         .setLabel("Say hello")
         .setTitle("Say hello in different languages")
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloWorldAction.java b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloRevisionAction.java
similarity index 91%
rename from src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloWorldAction.java
rename to src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloRevisionAction.java
index 29bc4de..21182ed 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloWorldAction.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HelloRevisionAction.java
@@ -24,8 +24,8 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 
-class HelloWorldAction implements UiAction<RevisionResource>,
-    RestModifyView<RevisionResource, HelloWorldAction.Input> {
+class HelloRevisionAction implements UiAction<RevisionResource>,
+    RestModifyView<RevisionResource, HelloRevisionAction.Input> {
 
   private Provider<CurrentUser> user;
 
@@ -35,7 +35,7 @@
   }
 
   @Inject
-  HelloWorldAction(Provider<CurrentUser> user) {
+  HelloRevisionAction(Provider<CurrentUser> user) {
     this.user = user;
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HttpModule.java b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HttpModule.java
index 4a43732..6504563 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cookbook/HttpModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/HttpModule.java
@@ -24,6 +24,8 @@
   protected void configureServlets() {
     serve("/say-hello/*").with(HelloWorldServlet.class);
     DynamicSet.bind(binder(), WebUiPlugin.class)
-        .toInstance(new JavaScriptPlugin("hello.js"));
+        .toInstance(new JavaScriptPlugin("hello-project.js"));
+    DynamicSet.bind(binder(), WebUiPlugin.class)
+        .toInstance(new JavaScriptPlugin("hello-revision.js"));
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cookbook/Module.java b/src/main/java/com/googlesource/gerrit/plugins/cookbook/Module.java
index 211850c..8591acf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cookbook/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/cookbook/Module.java
@@ -15,6 +15,7 @@
 package com.googlesource.gerrit.plugins.cookbook;
 
 import static com.google.gerrit.server.change.RevisionResource.REVISION_KIND;
+import static com.google.gerrit.server.project.ProjectResource.PROJECT_KIND;
 
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.extensions.restapi.RestApiModule;
@@ -30,7 +31,8 @@
     install(new RestApiModule() {
       @Override
       protected void configure() {
-        post(REVISION_KIND, "say-hello").to(HelloWorldAction.class);
+        post(REVISION_KIND, "hello-revision").to(HelloRevisionAction.class);
+        post(PROJECT_KIND, "hello-project").to(HelloProjectAction.class);
       }
     });
   }
diff --git a/src/main/resources/Documentation/rest-api-hello.md b/src/main/resources/Documentation/rest-api-hello-project.md
similarity index 66%
copy from src/main/resources/Documentation/rest-api-hello.md
copy to src/main/resources/Documentation/rest-api-hello-project.md
index a31f4ce..baff966 100644
--- a/src/main/resources/Documentation/rest-api-hello.md
+++ b/src/main/resources/Documentation/rest-api-hello-project.md
@@ -1,13 +1,13 @@
-cookbook-plugin hello
-=====================
+cookbook-plugin hello-project
+=============================
 
 NAME
 ----
-say-hello - Print our "Hello <user>!" message
+hello-project - Print our "Hello <user>!" message
 
 SYNOPSIS
 --------
->     POST /changes/{change-id}/revisions/{revision-id}/cookbook-plugin~say-hello
+>     POST /projects/{project-name}/cookbook-plugin~hello-project
 
 DESCRIPTION
 -----------
@@ -31,16 +31,16 @@
 
 Have the server say Hello to the user
 
->     curl -X POST --digest --user joe:secret http://host:port/a/changes/1/revisions/1/cookbook~say-hello
-> "Hello joe from change 1, patch set 1!"
+>     curl -X POST --digest --user joe:secret http://host:port/a/projects/foo/cookbook~hello-project
+> "Hello joe from project foo!"
 
 Have the server say Bonjour to François
 
 >     curl -X POST -H "Content-Type: application/json" \
 >       -d '{message: "François", french: true}' \
 >       --digest --user joe:secret \
->       http://host:port/a/changes/1/revisions/1/cookbook~say-hello
-> "Bonjour François from change 1, patch set 1!"
+>       http://host:port/a/projects/foo/cookbook~hello-project
+> "Bonjour François from project foo!"
 
 SEE ALSO
 --------
diff --git a/src/main/resources/Documentation/rest-api-hello.md b/src/main/resources/Documentation/rest-api-hello-revision.md
similarity index 77%
rename from src/main/resources/Documentation/rest-api-hello.md
rename to src/main/resources/Documentation/rest-api-hello-revision.md
index a31f4ce..e0228d8 100644
--- a/src/main/resources/Documentation/rest-api-hello.md
+++ b/src/main/resources/Documentation/rest-api-hello-revision.md
@@ -1,13 +1,13 @@
-cookbook-plugin hello
-=====================
+cookbook-plugin hello-revision
+==============================
 
 NAME
 ----
-say-hello - Print our "Hello <user>!" message
+hello-revision - Print our "Hello <user>!" message
 
 SYNOPSIS
 --------
->     POST /changes/{change-id}/revisions/{revision-id}/cookbook-plugin~say-hello
+>     POST /changes/{change-id}/revisions/{revision-id}/cookbook-plugin~hello-revision
 
 DESCRIPTION
 -----------
@@ -31,7 +31,7 @@
 
 Have the server say Hello to the user
 
->     curl -X POST --digest --user joe:secret http://host:port/a/changes/1/revisions/1/cookbook~say-hello
+>     curl -X POST --digest --user joe:secret http://host:port/a/changes/1/revisions/1/cookbook~hello-revision
 > "Hello joe from change 1, patch set 1!"
 
 Have the server say Bonjour to François
@@ -39,7 +39,7 @@
 >     curl -X POST -H "Content-Type: application/json" \
 >       -d '{message: "François", french: true}' \
 >       --digest --user joe:secret \
->       http://host:port/a/changes/1/revisions/1/cookbook~say-hello
+>       http://host:port/a/changes/1/revisions/1/cookbook~hello-revision
 > "Bonjour François from change 1, patch set 1!"
 
 SEE ALSO
diff --git a/src/main/resources/static/hello.js b/src/main/resources/static/hello-project.js
similarity index 91%
rename from src/main/resources/static/hello.js
rename to src/main/resources/static/hello-project.js
index 91b082c..6a2f67d 100644
--- a/src/main/resources/static/hello.js
+++ b/src/main/resources/static/hello-project.js
@@ -13,7 +13,7 @@
 // limitations under the License.
 
 Gerrit.install(function(self) {
-    function onSayHello(c) {
+    function onSayHelloProject(c) {
       var f = c.textfield();
       var t = c.checkbox();
       var b = c.button('Say hello', {onclick: function(){
@@ -33,5 +33,5 @@
         b));
       f.focus();
     }
-    self.onAction('revision', 'say-hello', onSayHello);
+    self.onAction('project', 'hello-project', onSayHelloProject);
   });
diff --git a/src/main/resources/static/hello.js b/src/main/resources/static/hello-revision.js
similarity index 90%
copy from src/main/resources/static/hello.js
copy to src/main/resources/static/hello-revision.js
index 91b082c..22ae6cf 100644
--- a/src/main/resources/static/hello.js
+++ b/src/main/resources/static/hello-revision.js
@@ -13,7 +13,7 @@
 // limitations under the License.
 
 Gerrit.install(function(self) {
-    function onSayHello(c) {
+    function onSayHelloRevision(c) {
       var f = c.textfield();
       var t = c.checkbox();
       var b = c.button('Say hello', {onclick: function(){
@@ -33,5 +33,5 @@
         b));
       f.focus();
     }
-    self.onAction('revision', 'say-hello', onSayHello);
+    self.onAction('revision', 'hello-revision', onSayHelloRevision);
   });