Add GitHub wizard to Gerrit Top-Menu. Allows a user to come back to the GitHub import wizard steps (Profile, Repositories, Pull Requests) using the Gerrit Top-Menu under the Entry "GitHub". GitHub wizard can be run multiple times and always works in differential way, there is no harm then in allowing the user to come back for updating its keys or importing extra repositories or pull requests. Change-Id: I0e39b18922e181b574d3c153b495117d7fb2ed34
diff --git a/github-plugin/pom.xml b/github-plugin/pom.xml index 9448f64..a40b2fc 100644 --- a/github-plugin/pom.xml +++ b/github-plugin/pom.xml
@@ -59,6 +59,7 @@ <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <manifestEntries> + <Gerrit-Module>com.googlesource.gerrit.plugins.github.GuiceModule</Gerrit-Module> <Gerrit-HttpModule>com.googlesource.gerrit.plugins.github.GuiceHttpModule</Gerrit-HttpModule> <Gerrit-InitStep>com.googlesource.gerrit.plugins.github.InitGitHub</Gerrit-InitStep>
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GitHubTopMenu.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GitHubTopMenu.java new file mode 100644 index 0000000..34c4d73 --- /dev/null +++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GitHubTopMenu.java
@@ -0,0 +1,59 @@ +// Copyright (C) 2013 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.googlesource.gerrit.plugins.github; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import com.google.gerrit.extensions.annotations.Listen; +import com.google.gerrit.extensions.annotations.PluginName; +import com.google.gerrit.extensions.webui.TopMenu; +import com.google.gerrit.server.CurrentUser; +import com.google.gerrit.server.IdentifiedUser; +import com.google.inject.Inject; +import com.google.inject.Provider; +import com.google.inject.Singleton; + +@Listen +@Singleton +public class GitHubTopMenu implements TopMenu { + private List<MenuEntry> menuEntries; + private Provider<CurrentUser> userProvider; + + @Inject + public GitHubTopMenu(final @PluginName String pluginName, + final Provider<CurrentUser> userProvider) { + String baseUrl = "/plugins/" + pluginName; + this.menuEntries = + Arrays.asList(new MenuEntry("GitHub", Arrays.asList( + getItem("Profile", baseUrl + "/static/account.html"), + getItem("Repositories", baseUrl + "/static/repositories.html"), + getItem("Pull Requests", baseUrl + "/static/pullrequests.html")))); + this.userProvider = userProvider; + } + + private MenuItem getItem(String anchorName, String urlPath) { + return new MenuItem(anchorName, urlPath, ""); + } + + @Override + public List<MenuEntry> getEntries() { + if (userProvider.get() instanceof IdentifiedUser) { + return menuEntries; + } else { + return Collections.emptyList(); + } + } +}
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GuiceHttpModule.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GuiceHttpModule.java index 38ae784..ac51ce1 100644 --- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GuiceHttpModule.java +++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GuiceHttpModule.java
@@ -14,15 +14,22 @@ package com.googlesource.gerrit.plugins.github; import org.apache.http.client.HttpClient; +import org.apache.velocity.runtime.RuntimeInstance; import com.google.inject.assistedinject.FactoryModuleBuilder; +import com.google.inject.name.Names; import com.google.inject.servlet.ServletModule; import com.googlesource.gerrit.plugins.github.filters.GitHubOAuthFilter; import com.googlesource.gerrit.plugins.github.oauth.GitHubHttpProvider; import com.googlesource.gerrit.plugins.github.replication.RemoteSiteUser; +import com.googlesource.gerrit.plugins.github.velocity.PluginVelocityRuntimeProvider; import com.googlesource.gerrit.plugins.github.velocity.VelocityStaticServlet; import com.googlesource.gerrit.plugins.github.velocity.VelocityViewServlet; import com.googlesource.gerrit.plugins.github.wizard.VelocityControllerServlet; +import com.googlesrouce.gerrit.plugins.github.git.CreateProjectStep; +import com.googlesrouce.gerrit.plugins.github.git.GitCloneStep; +import com.googlesrouce.gerrit.plugins.github.git.PullRequestImportJob; +import com.googlesrouce.gerrit.plugins.github.git.ReplicateProjectStep; public class GuiceHttpModule extends ServletModule { @@ -31,8 +38,24 @@ bind(HttpClient.class).toProvider(GitHubHttpProvider.class); install(new FactoryModuleBuilder().build(RemoteSiteUser.Factory.class)); - install(new GuiceModule()); - serve("*.css","*.js","*.png","*.jpg","*.woff","*.gif","*.ttf").with(VelocityStaticServlet.class); + install(new FactoryModuleBuilder().implement(GitCloneStep.class, + GitCloneStep.class).build(GitCloneStep.Factory.class)); + install(new FactoryModuleBuilder().implement(CreateProjectStep.class, + CreateProjectStep.class).build(CreateProjectStep.Factory.class)); + install(new FactoryModuleBuilder().implement(ReplicateProjectStep.class, + ReplicateProjectStep.class).build(ReplicateProjectStep.Factory.class)); + install(new FactoryModuleBuilder().implement(PullRequestImportJob.class, + PullRequestImportJob.class).build(PullRequestImportJob.Factory.class)); + + bind(RuntimeInstance.class).annotatedWith( + Names.named("PluginRuntimeInstance")).toProvider( + PluginVelocityRuntimeProvider.class); + + bind(String.class).annotatedWith(GitHubURL.class).toProvider( + GitHubURLProvider.class); + + serve("*.css", "*.js", "*.png", "*.jpg", "*.woff", "*.gif", "*.ttf").with( + VelocityStaticServlet.class); serve("*.html").with(VelocityViewServlet.class); serve("*.gh").with(VelocityControllerServlet.class);
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GuiceModule.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GuiceModule.java index 1199698..d4c0b27 100644 --- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GuiceModule.java +++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GuiceModule.java
@@ -14,35 +14,13 @@ package com.googlesource.gerrit.plugins.github; -import org.apache.velocity.runtime.RuntimeInstance; - +import com.google.gerrit.extensions.registration.DynamicSet; +import com.google.gerrit.extensions.webui.TopMenu; import com.google.inject.AbstractModule; -import com.google.inject.assistedinject.FactoryModuleBuilder; -import com.google.inject.name.Names; -import com.googlesource.gerrit.plugins.github.replication.RemoteSiteUser; -import com.googlesource.gerrit.plugins.github.velocity.PluginVelocityRuntimeProvider; -import com.googlesrouce.gerrit.plugins.github.git.CreateProjectStep; -import com.googlesrouce.gerrit.plugins.github.git.GitCloneStep; -import com.googlesrouce.gerrit.plugins.github.git.PullRequestImportJob; -import com.googlesrouce.gerrit.plugins.github.git.PullRequestImporter; -import com.googlesrouce.gerrit.plugins.github.git.ReplicateProjectStep; public class GuiceModule extends AbstractModule { @Override protected void configure() { - install(new FactoryModuleBuilder().implement(GitCloneStep.class, - GitCloneStep.class).build(GitCloneStep.Factory.class)); - install(new FactoryModuleBuilder().implement(CreateProjectStep.class, - CreateProjectStep.class).build(CreateProjectStep.Factory.class)); - install(new FactoryModuleBuilder().implement(ReplicateProjectStep.class, - ReplicateProjectStep.class).build(ReplicateProjectStep.Factory.class)); - install(new FactoryModuleBuilder().implement(PullRequestImportJob.class, - PullRequestImportJob.class).build(PullRequestImportJob.Factory.class)); - - bind(RuntimeInstance.class).annotatedWith( - Names.named("PluginRuntimeInstance")).toProvider( - PluginVelocityRuntimeProvider.class); - - bind(String.class).annotatedWith(GitHubURL.class).toProvider(GitHubURLProvider.class); + DynamicSet.bind(binder(), TopMenu.class).to(GitHubTopMenu.class); } }