Auto register static/init.js as JavaScript plugin
When plugin does not expose Guice Modules explicitly, auto discover and register static/init.js as WebUi extension if found by the plugin content scanner. This simplify JavaScript development from now on no Java (or other scripting) code/classes are required to extend Gerrit WebUi. (based on the idea and initial patch by Dariusz: Ia5b3cb63f62) Change-Id: I8c793764ac1876dc62d740d28c0d4cf6b9409b10
This commit is contained in:
@@ -14,14 +14,18 @@
|
||||
|
||||
package com.google.gerrit.httpd.plugins;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkState;
|
||||
import static com.google.gerrit.server.plugins.AutoRegisterUtil.calculateBindAnnotation;
|
||||
|
||||
import com.google.common.collect.LinkedListMultimap;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.gerrit.extensions.annotations.Export;
|
||||
import com.google.gerrit.extensions.registration.DynamicSet;
|
||||
import com.google.gerrit.extensions.webui.JavaScriptPlugin;
|
||||
import com.google.gerrit.extensions.webui.WebUiPlugin;
|
||||
import com.google.gerrit.server.plugins.HttpModuleGenerator;
|
||||
import com.google.gerrit.server.plugins.InvalidPluginException;
|
||||
import com.google.gerrit.server.plugins.ModuleGenerator;
|
||||
import com.google.inject.Module;
|
||||
import com.google.inject.Scopes;
|
||||
import com.google.inject.TypeLiteral;
|
||||
@@ -33,9 +37,10 @@ import java.util.Map;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
|
||||
class HttpAutoRegisterModuleGenerator extends ServletModule
|
||||
implements ModuleGenerator {
|
||||
implements HttpModuleGenerator {
|
||||
private final Map<String, Class<HttpServlet>> serve = Maps.newHashMap();
|
||||
private final Multimap<TypeLiteral<?>, Class<?>> listeners = LinkedListMultimap.create();
|
||||
private String javascript;
|
||||
|
||||
@Override
|
||||
protected void configureServlets() {
|
||||
@@ -53,6 +58,10 @@ class HttpAutoRegisterModuleGenerator extends ServletModule
|
||||
Annotation n = calculateBindAnnotation(impl);
|
||||
bind(type).annotatedWith(n).to(impl);
|
||||
}
|
||||
if (javascript != null) {
|
||||
DynamicSet.bind(binder(), WebUiPlugin.class).toInstance(
|
||||
new JavaScriptPlugin(javascript));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -79,6 +88,14 @@ class HttpAutoRegisterModuleGenerator extends ServletModule
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void export(String javascript) {
|
||||
checkState(this.javascript == null,
|
||||
"Multiple JavaScript plugins detected: %s, %s", this.javascript,
|
||||
javascript);
|
||||
this.javascript = javascript;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void listen(TypeLiteral<?> tl, Class<?> clazz) {
|
||||
listeners.put(tl, clazz);
|
||||
|
@@ -15,6 +15,7 @@
|
||||
package com.google.gerrit.httpd.plugins;
|
||||
|
||||
import com.google.gerrit.server.cache.CacheModule;
|
||||
import com.google.gerrit.server.plugins.HttpModuleGenerator;
|
||||
import com.google.gerrit.server.plugins.ModuleGenerator;
|
||||
import com.google.gerrit.server.plugins.ReloadPluginListener;
|
||||
import com.google.gerrit.server.plugins.StartPluginListener;
|
||||
@@ -37,7 +38,7 @@ public class HttpPluginModule extends ServletModule {
|
||||
.annotatedWith(UniqueAnnotations.create())
|
||||
.to(HttpPluginServlet.class);
|
||||
|
||||
bind(ModuleGenerator.class)
|
||||
bind(HttpModuleGenerator.class)
|
||||
.to(HttpAutoRegisterModuleGenerator.class);
|
||||
|
||||
install(new CacheModule() {
|
||||
|
Reference in New Issue
Block a user