Class 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 Detail

      • 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.

      • injector

        protected com.google.inject.Injector injector
      • lifecycleManager

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

      • 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 Detail

      • setBean

        public void setBean​(Object bean)
      • 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()