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;