Class DynamicOptions

java.lang.Object
com.google.gerrit.server.DynamicOptions
All Implemented Interfaces:
AutoCloseable

public class DynamicOptions extends Object implements AutoCloseable
Helper class to define and parse options from plugins on ssh and RestAPI commands.
  • Field Details

    • mergedClByCls

      protected static Map<ClassLoader,Map<ClassLoader,WeakReference<ClassLoader>>> mergedClByCls
      MergedClassloaders allow us to load classes from both plugin classloaders. Store the merged classloaders in a Map to avoid creating a new classloader for each invocation. Use a WeakHashMap to avoid leaking these MergedClassLoaders once either plugin is unloaded. Since the WeakHashMap only takes care of ensuring the Keys can get garbage collected, use WeakReferences to store the MergedClassloaders in the WeakHashMap.

      Outter keys are the bean plugin's classloaders (the plugin being extended)

      Inner keys are the dynamicBeans plugin's classloaders (the extending plugin)

      The value is the MergedClassLoader representing the merging of the outter and inner key classloaders.

    • bean

      protected Object bean
    • beansByPlugin

      protected Map<String,DynamicOptions.DynamicBean> beansByPlugin
    • injector

      protected com.google.inject.Injector injector
    • dynamicBeans

      protected DynamicMap<DynamicOptions.DynamicBean> dynamicBeans
    • lifecycleManager

      protected com.google.gerrit.lifecycle.LifecycleManager lifecycleManager
  • Constructor Details

    • DynamicOptions

      public DynamicOptions(com.google.inject.Injector injector, DynamicMap<DynamicOptions.DynamicBean> dynamicBeans)
      Internal: For Gerrit to include options from DynamicBeans, setup a DynamicMap and instantiate this class so the following methods can be called if desired:
          DynamicOptions pluginOptions = new DynamicOptions(injector, dynamicBeans);
          pluginOptions.setBean(bean);
          pluginOptions.startLifecycleListeners();
          pluginOptions.parseDynamicBeans(clp);
          pluginOptions.setDynamicBeans();
          pluginOptions.onBeanParseStart();
      
          // parse arguments here:  clp.parseArgument(argv);
      
          pluginOptions.onBeanParseEnd();
       
  • Method Details

    • setBean

      public void setBean(Object bean)
    • getDynamicBean

      public DynamicOptions.DynamicBean getDynamicBean(Object bean, DynamicOptions.DynamicBean dynamicBean)
    • getMergedClassLoader

      protected ClassLoader getMergedClassLoader(ClassLoader beanCl, ClassLoader dynamicBeanCl)
    • parseDynamicBeans

      public void parseDynamicBeans(com.google.gerrit.util.cli.CmdLineParser clp)
    • setDynamicBeans

      public void setDynamicBeans()
    • startLifecycleListeners

      public void startLifecycleListeners()
    • stopLifecycleListeners

      public void stopLifecycleListeners()
    • onBeanParseStart

      public void onBeanParseStart()
    • onBeanParseEnd

      public void onBeanParseEnd()
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable