Simplified plugin scanner using a base AbstractPreloaded scanner Use the new Gerrit AbstractPreloadedPluginScanner to simplify the auto-generation of Plugin manifest and auto-discover of annotated classes. Change-Id: I2f34869111be5aef5bff99298b38c1bec2f60d4a
diff --git a/src/main/java/com/googlesource/gerrit/plugins/scripting/scala/ScalaPluginScanner.java b/src/main/java/com/googlesource/gerrit/plugins/scripting/scala/ScalaPluginScanner.java index 4c7cf71..5af869b 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/scripting/scala/ScalaPluginScanner.java +++ b/src/main/java/com/googlesource/gerrit/plugins/scripting/scala/ScalaPluginScanner.java
@@ -13,45 +13,26 @@ // limitations under the License. package com.googlesource.gerrit.plugins.scripting.scala; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Sets; -import com.google.gerrit.extensions.annotations.Export; +import com.google.gerrit.server.plugins.AbstractPreloadedPluginScanner; import com.google.gerrit.server.plugins.InvalidPluginException; -import com.google.gerrit.server.plugins.PluginScanner; -import com.google.gerrit.sshd.CommandModule; -import com.google.inject.Module; -import com.google.inject.servlet.ServletModule; +import com.google.gerrit.server.plugins.Plugin; -import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.lang.annotation.Annotation; -import java.lang.reflect.Modifier; import java.util.Collections; import java.util.Enumeration; -import java.util.Map; import java.util.Set; -import java.util.jar.Manifest; -public class ScalaPluginScanner implements PluginScanner { - private final String pluginName; - private final String pluginVersion; - private final Set<Class<?>> scriptClasses; - private Class<? extends Module> sshModule; - private Class<? extends Module> httpModule; - private Class<? extends Module> sysModule; +public class ScalaPluginScanner extends AbstractPreloadedPluginScanner { public ScalaPluginScanner(String pluginName, File srcFile, ScalaPluginScriptEngine scriptEngine) throws InvalidPluginException { - this.pluginName = pluginName; - this.pluginVersion = getPluginVersion(srcFile); - this.scriptClasses = loadScriptClasses(srcFile, scriptEngine); - loadGuiceModules(this.scriptClasses); + super(pluginName, getPluginVersion(srcFile), loadScriptClasses(srcFile, scriptEngine), Plugin.ApiType.PLUGIN); } - private String getPluginVersion(File srcFile) { + private static String getPluginVersion(File srcFile) { String srcFileName = srcFile.getName(); int startPos = srcFileName.lastIndexOf('-'); if(startPos == -1) { @@ -61,7 +42,7 @@ return srcFileName.substring(startPos+1, endPos); } - private Set<Class<?>> loadScriptClasses(File srcFile, + private static Set<Class<?>> loadScriptClasses(File srcFile, ScalaPluginScriptEngine scriptEngine) throws InvalidPluginException { try { return scriptEngine.eval(srcFile); @@ -71,60 +52,6 @@ } } - @SuppressWarnings("unchecked") - private void loadGuiceModules(Set<Class<?>> scriptClasses) { - for (Class<?> scriptClass : scriptClasses) { - if (CommandModule.class.isAssignableFrom(scriptClass)) { - sshModule = ((Class<? extends Module>) scriptClass); - } else if (ServletModule.class.isAssignableFrom(scriptClass)) { - httpModule = ((Class<? extends Module>) scriptClass); - } else if (Module.class.isAssignableFrom(scriptClass)) { - sysModule = ((Class<? extends Module>) scriptClass); - } - } - } - - @Override - public Manifest getManifest() throws IOException { - String manifestString = - "PluginName: " + pluginName + "\n" + - "Implementation-Version: " + pluginVersion + "\n" + - "Gerrit-ReloadMode: restart\n" + - (sysModule == null ? "":("Gerrit-Module: " + sysModule.getName() + "\n")) + - (httpModule == null ? "":("Gerrit-HttpModule: " + httpModule.getName() + " \n")) + - (sshModule == null ? "":("Gerrit-SshModule: " + sshModule.getName() + "\n")) + - "Gerrit-ApiType: PLUGIN\n"; - return new Manifest(new ByteArrayInputStream(manifestString.getBytes())); - } - - @Override - public Map<Class<? extends Annotation>, Iterable<ExtensionMetaData>> scan( - String pluginName, Iterable<Class<? extends Annotation>> annotations) - throws InvalidPluginException { - ImmutableMap.Builder<Class<? extends Annotation>, Iterable<ExtensionMetaData>> result = - ImmutableMap.builder(); - - for (Class<? extends Annotation> annotation : annotations) { - Set<ExtensionMetaData> classMetaDataSet = Sets.newHashSet(); - result.put(annotation, classMetaDataSet); - - for (Class<?> scriptClass : scriptClasses) { - if (!Modifier.isAbstract(scriptClass.getModifiers()) - && scriptClass.getAnnotation(annotation) != null) { - classMetaDataSet.add(new ExtensionMetaData(scriptClass.getName(), - getExportAnnotationValue(scriptClass, annotation))); - } - } - } - return result.build(); - } - - private String getExportAnnotationValue(Class<?> scriptClass, - Class<? extends Annotation> annotation) { - return annotation == Export.class ? scriptClass.getAnnotation(Export.class) - .value() : ""; - } - @Override public <T> T getResource(String resourcePath, Class<? extends T> resourceClass) { return null;