Support for TopMenu GitBlit item in Gerrit.
Allows to access GitBlit main links
(repositories, activities, search) directly
from Gerrit top-menu bar.
Change-Id: Iec48cacfc897af5fdf9f67aac2d2cfcd62e6905c
diff --git a/pom.xml b/pom.xml
index 899f374..cd18d7c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,8 @@
<Gerrit-ApiVersion>${project.version}</Gerrit-ApiVersion>
<Gerrit-ReloadMode>restart</Gerrit-ReloadMode>
<Gerrit-InitStep>com.googlesource.gerrit.plugins.gitblit.GitBlitInitStep</Gerrit-InitStep>
- <Gerrit-HttpModule>com.googlesource.gerrit.plugins.gitblit.GitBlitModule</Gerrit-HttpModule>
+ <Gerrit-Module>com.googlesource.gerrit.plugins.gitblit.GitBlitModule</Gerrit-Module>
+ <Gerrit-HttpModule>com.googlesource.gerrit.plugins.gitblit.GitBlitServletModule</Gerrit-HttpModule>
</properties>
<dependencies>
<dependency>
@@ -161,6 +162,7 @@
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
+ <Gerrit-Module>${Gerrit-Module}</Gerrit-Module>
<Gerrit-HttpModule>${Gerrit-HttpModule}</Gerrit-HttpModule>
<Gerrit-InitStep>${Gerrit-InitStep}</Gerrit-InitStep>
<Implementation-Vendor>Gerrit Code Review</Implementation-Vendor>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitModule.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitModule.java
index 0590bb3..3f4f9cf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitModule.java
@@ -1,4 +1,4 @@
-// Copyright (C) 2012 The Android Open Source Project
+// 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.
@@ -13,42 +13,15 @@
// limitations under the License.
package com.googlesource.gerrit.plugins.gitblit;
-import org.eclipse.jgit.lib.Config;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import com.google.gerrit.extensions.registration.DynamicSet;
+import com.google.gerrit.extensions.webui.TopMenu;
+import com.google.inject.AbstractModule;
-import com.gitblit.IUserService;
-import com.google.gerrit.extensions.annotations.PluginName;
-import com.google.gerrit.server.config.GerritServerConfig;
-import com.google.gerrit.server.config.SitePaths;
-import com.google.inject.Inject;
-import com.google.inject.servlet.ServletModule;
-import com.googlesource.gerrit.plugins.gitblit.app.GerritGitBlit;
-import com.googlesource.gerrit.plugins.gitblit.auth.GerritToGitBlitUserService;
-
-public class GitBlitModule extends ServletModule {
- private static final Logger log = LoggerFactory.getLogger(GitBlitModule.class);
-
- @Inject
- public GitBlitModule(@PluginName final String name,
- @GerritServerConfig final Config gerritConfig, final SitePaths sitePaths) {
- log.info("Create GitBlitModule with name='" + name);
- }
+public class GitBlitModule extends AbstractModule {
@Override
- protected void configureServlets() {
- log.info("Configuring servlet and filters");
- bind(IUserService.class).to(GerritToGitBlitUserService.class);
- bind(GerritGitBlit.class);
-
- serve("/pages/*").with(WrappedPagesServlet.class);
- serve("/feed/*").with(WrappedSyndicationServlet.class);
- serve("/zip/*").with(WrappedDownloadZipServlet.class);
- serve("/logo.png").with(WrappedLogoServlet.class);
- serve("/static/logo.png").with(WrappedLogoServlet.class);
-
- filter("/*").through(GerritWicketFilter.class);
- filter("/pages/*").through(WrappedPagesFilter.class);
- filter("/feed/*").through(WrappedSyndicationFilter.class);
+ protected void configure() {
+ DynamicSet.bind(binder(), TopMenu.class).to(GitBlitTopMenu.class);
}
+
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitServletModule.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitServletModule.java
new file mode 100644
index 0000000..4ecdf54
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitServletModule.java
@@ -0,0 +1,54 @@
+// Copyright (C) 2012 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.gitblit;
+
+import org.eclipse.jgit.lib.Config;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.gitblit.IUserService;
+import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.gerrit.server.config.GerritServerConfig;
+import com.google.gerrit.server.config.SitePaths;
+import com.google.inject.Inject;
+import com.google.inject.servlet.ServletModule;
+import com.googlesource.gerrit.plugins.gitblit.app.GerritGitBlit;
+import com.googlesource.gerrit.plugins.gitblit.auth.GerritToGitBlitUserService;
+
+public class GitBlitServletModule extends ServletModule {
+ private static final Logger log = LoggerFactory.getLogger(GitBlitServletModule.class);
+
+ @Inject
+ public GitBlitServletModule(@PluginName final String name,
+ @GerritServerConfig final Config gerritConfig, final SitePaths sitePaths) {
+ log.info("Create GitBlitModule with name='" + name);
+ }
+
+ @Override
+ protected void configureServlets() {
+ log.info("Configuring servlet and filters");
+ bind(IUserService.class).to(GerritToGitBlitUserService.class);
+ bind(GerritGitBlit.class);
+
+ serve("/pages/*").with(WrappedPagesServlet.class);
+ serve("/feed/*").with(WrappedSyndicationServlet.class);
+ serve("/zip/*").with(WrappedDownloadZipServlet.class);
+ serve("/logo.png").with(WrappedLogoServlet.class);
+ serve("/static/logo.png").with(WrappedLogoServlet.class);
+
+ filter("/*").through(GerritWicketFilter.class);
+ filter("/pages/*").through(WrappedPagesFilter.class);
+ filter("/feed/*").through(WrappedSyndicationFilter.class);
+ }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitTopMenu.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitTopMenu.java
new file mode 100644
index 0000000..83204ae
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitTopMenu.java
@@ -0,0 +1,47 @@
+package com.googlesource.gerrit.plugins.gitblit;
+
+import java.util.Arrays;
+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.AnonymousUser;
+import com.google.gerrit.server.CurrentUser;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+@Listen
+public class GitBlitTopMenu implements TopMenu {
+ private final MenuEntry fullMenuEntries;
+ private final MenuEntry restrictedMenuEntries;
+ private final Provider<CurrentUser> userProvider;
+
+ @Inject
+ public GitBlitTopMenu(final @PluginName String pluginName,
+ final Provider<CurrentUser> userProvider) {
+ this.userProvider = userProvider;
+
+ String gitBlitBaseUrl = "/plugins/" + pluginName + "/";
+ this.restrictedMenuEntries =
+ menu("Gitblit", item("Repositories", gitBlitBaseUrl + "repositories/"));
+ this.fullMenuEntries =
+ menu("GitBlit", item("Repositories", gitBlitBaseUrl + "repositories/"),
+ item("Activity", gitBlitBaseUrl + "activity/"),
+ item("Search", gitBlitBaseUrl + "lucene/"));
+ }
+
+ private MenuEntry menu(String name, MenuItem... items) {
+ return new MenuEntry(name, Arrays.asList(items));
+ }
+
+ private MenuItem item(String name, String url) {
+ return new MenuItem(name, url, "");
+ }
+
+ @Override
+ public List<MenuEntry> getEntries() {
+ return Arrays.asList(userProvider.get() instanceof AnonymousUser
+ ? restrictedMenuEntries : fullMenuEntries);
+ }
+}